Skip to content

Commit 9578daa

Browse files
committed
Add StandardRB LSP
1 parent 9fbf632 commit 9578daa

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

extension.toml

+4
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.standardrb]
22+
name = "Standardrb"
23+
languages = ["Ruby"]
24+
2125
[grammars.ruby]
2226
repository = "https://github.com/tree-sitter/tree-sitter-ruby"
2327
commit = "7dbc1e2d0e2d752577655881f73b4573f3fe85d4"

src/language_servers.rs

+2
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 standard;
56

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

src/language_servers/standard.rs

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use super::language_server::LanguageServer;
2+
use zed_extension_api::{self as zed, LanguageServerId, Result};
3+
4+
pub struct Standard {}
5+
6+
impl LanguageServer for Standard {
7+
const SERVER_ID: &str = "standardrb";
8+
const EXECUTABLE_NAME: &str = "standardrb";
9+
10+
fn get_executable_args() -> Vec<String> {
11+
vec!["--lsp".into()]
12+
}
13+
}
14+
15+
impl Standard {
16+
pub fn new() -> Self {
17+
Self {}
18+
}
19+
20+
pub fn language_server_command(
21+
&mut self,
22+
language_server_id: &LanguageServerId,
23+
worktree: &zed::Worktree,
24+
) -> Result<zed::Command> {
25+
let binary = self.language_server_binary(language_server_id, worktree)?;
26+
27+
Ok(zed::Command {
28+
command: binary.path,
29+
args: binary.args.unwrap_or(Self::get_executable_args()),
30+
env: Default::default(),
31+
})
32+
}
33+
}
34+
35+
#[cfg(test)]
36+
mod tests {
37+
use crate::language_servers::{LanguageServer, Standard};
38+
39+
#[test]
40+
fn test_server_id() {
41+
assert_eq!(Standard::SERVER_ID, "standardrb");
42+
}
43+
44+
#[test]
45+
fn test_executable_name() {
46+
assert_eq!(Standard::EXECUTABLE_NAME, "standardrb");
47+
}
48+
49+
#[test]
50+
fn test_executable_args() {
51+
assert_eq!(Standard::get_executable_args(), vec!["--lsp"]);
52+
}
53+
54+
#[test]
55+
fn test_default_use_bundler() {
56+
assert!(Standard::default_use_bundler());
57+
}
58+
}

src/ruby.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod language_servers;
2-
use language_servers::{LanguageServer, Rubocop, RubyLsp, Solargraph};
2+
use language_servers::{LanguageServer, Rubocop, RubyLsp, Solargraph, Standard};
33

44
use zed::lsp::{Completion, Symbol};
55
use zed::settings::LspSettings;
@@ -11,6 +11,7 @@ struct RubyExtension {
1111
solargraph: Option<Solargraph>,
1212
ruby_lsp: Option<RubyLsp>,
1313
rubocop: Option<Rubocop>,
14+
standard: Option<Standard>,
1415
}
1516

1617
impl zed::Extension for RubyExtension {
@@ -36,6 +37,10 @@ impl zed::Extension for RubyExtension {
3637
let rubocop = self.rubocop.get_or_insert_with(Rubocop::new);
3738
rubocop.language_server_command(language_server_id, worktree)
3839
}
40+
Standard::SERVER_ID => {
41+
let standard = self.standard.get_or_insert_with(Standard::new);
42+
standard.language_server_command(language_server_id, worktree)
43+
}
3944
language_server_id => Err(format!("unknown language server: {language_server_id}")),
4045
}
4146
}

0 commit comments

Comments
 (0)