feat: add Solargraph as the built-in Ruby LSP preset

This commit is contained in:
2026-10-09 20:08:15 +02:00
parent 788638f34e
commit 099c15771f
6 changed files with 32 additions and 15 deletions
+19 -8
View File
@@ -969,19 +969,21 @@ end"#,
r#"Vamp.configure do |config|
config.lsp["rust"] = true
config.lsp["python"] = true
config.lsp["ruby"] = true
end"#,
);
let config = load_config(&path).unwrap();
assert_eq!(config.lsp.len(), 2);
for (language, command, extension) in
[("rust", "rust-analyzer", "rs"), ("python", "pylsp", "py")]
{
for (language, command, extension) in [
("rust", &["rust-analyzer"][..], "rs"),
("python", &["pylsp"][..], "py"),
("ruby", &["solargraph", "stdio"][..], "rb"),
] {
let server = config
.lsp
.iter()
.find(|server| server.language_id == language)
.unwrap();
assert_eq!(server.command, [command]);
assert_eq!(server.command, command);
assert_eq!(server.extensions, [extension]);
assert_eq!(server.initialization_options, serde_json::json!({}));
assert_eq!(server.settings, serde_json::json!({}));
@@ -996,6 +998,7 @@ end"#,
settings: {"rust-analyzer" => {check: {command: "clippy"}}}
}
config.lsp["python"] = {command: ["custom pylsp", "--stdio"]}
config.lsp["ruby"] = {command: ["bundle", "exec", "solargraph", "stdio"]}
config.lsp["my-language.c++"] = {
command: ["custom server", "--flag", ""],
extensions: ["custom", "لغة"],
@@ -1004,7 +1007,6 @@ end"#,
end"#,
);
let config = load_config(&path).unwrap();
assert_eq!(config.lsp.len(), 3);
let rust = config
.lsp
.iter()
@@ -1029,6 +1031,13 @@ end"#,
assert_eq!(python.extensions, ["py"]);
assert_eq!(python.initialization_options, serde_json::json!({}));
assert_eq!(python.settings, serde_json::json!({}));
let ruby = config
.lsp
.iter()
.find(|server| server.language_id == "ruby")
.unwrap();
assert_eq!(ruby.command, ["bundle", "exec", "solargraph", "stdio"]);
assert_eq!(ruby.extensions, ["rb"]);
let custom = config
.lsp
.iter()
@@ -1087,12 +1096,14 @@ end"#,
}
let path = fixture.file(
"invalid.rb",
r#"Vamp.configure { |config| config.lsp["ruby"] = true }"#,
r#"Vamp.configure { |config| config.lsp["unsupported-language"] = true }"#,
);
let error = load_config(&path).unwrap_err();
assert!(!error.contains("Malformed Ruby protocol frame"), "{error}");
assert!(
error.contains("\"ruby\"") && error.contains("command") && error.contains("extensions"),
error.contains("\"unsupported-language\"")
&& error.contains("command")
&& error.contains("extensions"),
"{error}"
);
}