Skip to content

Commit df6f7c2

Browse files
committed
feat: add sorbet Ruby LSP server option
1 parent 9d649a4 commit df6f7c2

4 files changed

Lines changed: 65 additions & 1 deletion

File tree

extension.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ languages = ["Ruby", "ERB"]
1818
name = "Rubocop"
1919
languages = ["Ruby"]
2020

21+
[language_servers.sorbet]
22+
name = "Sorbet"
23+
languages = ["Ruby"]
24+
2125
[grammars.ruby]
2226
repository = "https://github.com/tree-sitter/tree-sitter-ruby"
2327
commit = "71bd32fb7607035768799732addba884a37a6210"

src/language_servers/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ mod language_server;
22
mod rubocop;
33
mod ruby_lsp;
44
mod solargraph;
5+
mod sorbet;
56

67
pub use language_server::LanguageServer;
78
pub use rubocop::*;
89
pub use ruby_lsp::*;
910
pub use solargraph::*;
11+
pub use sorbet::*;

src/language_servers/sorbet.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use super::LanguageServer;
2+
3+
pub struct Sorbet {}
4+
5+
impl LanguageServer for Sorbet {
6+
const SERVER_ID: &str = "sorbet";
7+
const EXECUTABLE_NAME: &str = "srb";
8+
const GEM_NAME: &str = "sorbet";
9+
10+
fn get_executable_args() -> Vec<String> {
11+
[
12+
"tc",
13+
"--lsp",
14+
"--enable-experimental-lsp-document-highlight",
15+
]
16+
.iter()
17+
.map(|s| s.to_string())
18+
.collect()
19+
}
20+
}
21+
22+
impl Sorbet {
23+
pub fn new() -> Self {
24+
Self {}
25+
}
26+
}
27+
28+
#[cfg(test)]
29+
mod tests {
30+
use crate::language_servers::{LanguageServer, Sorbet};
31+
32+
#[test]
33+
fn test_server_id() {
34+
assert_eq!(Sorbet::SERVER_ID, "sorbet");
35+
}
36+
37+
#[test]
38+
fn test_executable_name() {
39+
assert_eq!(Sorbet::EXECUTABLE_NAME, "srb");
40+
}
41+
42+
#[test]
43+
fn test_executable_args() {
44+
assert_eq!(
45+
Sorbet::get_executable_args(),
46+
vec![
47+
"tc",
48+
"--lsp",
49+
"--enable-experimental-lsp-document-highlight"
50+
]
51+
);
52+
}
53+
}

src/ruby.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ mod bundler;
22
mod command_executor;
33
mod gemset;
44
mod language_servers;
5-
use language_servers::{LanguageServer, Rubocop, RubyLsp, Solargraph};
5+
use language_servers::{LanguageServer, Rubocop, RubyLsp, Solargraph, Sorbet};
66

77
use zed::lsp::{Completion, Symbol};
88
use zed::settings::LspSettings;
@@ -14,6 +14,7 @@ struct RubyExtension {
1414
solargraph: Option<Solargraph>,
1515
ruby_lsp: Option<RubyLsp>,
1616
rubocop: Option<Rubocop>,
17+
sorbet: Option<Sorbet>,
1718
}
1819

1920
impl zed::Extension for RubyExtension {
@@ -39,6 +40,10 @@ impl zed::Extension for RubyExtension {
3940
let rubocop = self.rubocop.get_or_insert_with(Rubocop::new);
4041
rubocop.language_server_command(language_server_id, worktree)
4142
}
43+
Sorbet::SERVER_ID => {
44+
let sorbet = self.sorbet.get_or_insert_with(Sorbet::new);
45+
sorbet.language_server_command(language_server_id, worktree)
46+
}
4247
language_server_id => Err(format!("unknown language server: {language_server_id}")),
4348
}
4449
}

0 commit comments

Comments
 (0)