diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 1e1c13d9ab383d2c7b7a6546a1b49eaf47107a74..f910ba69630fe7687bc1c8317274f14d2cfaacb1 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -8320,6 +8320,7 @@ async fn test_language_server_restart_due_to_settings_change(cx: &mut gpui::Test project_settings.lsp.insert( "Some other server name".into(), LspSettings { + binary: None, settings: None, initialization_options: Some(json!({ "some other init value": false @@ -8338,6 +8339,7 @@ async fn test_language_server_restart_due_to_settings_change(cx: &mut gpui::Test project_settings.lsp.insert( language_server_name.into(), LspSettings { + binary: None, settings: None, initialization_options: Some(json!({ "anotherInitValue": false @@ -8356,6 +8358,7 @@ async fn test_language_server_restart_due_to_settings_change(cx: &mut gpui::Test project_settings.lsp.insert( language_server_name.into(), LspSettings { + binary: None, settings: None, initialization_options: Some(json!({ "anotherInitValue": false @@ -8374,6 +8377,7 @@ async fn test_language_server_restart_due_to_settings_change(cx: &mut gpui::Test project_settings.lsp.insert( language_server_name.into(), LspSettings { + binary: None, settings: None, initialization_options: None, }, diff --git a/crates/extension/src/extension_lsp_adapter.rs b/crates/extension/src/extension_lsp_adapter.rs index 41bfa9b29e9392d4f7c1b36b865b387a75864f8f..4f6206683d768d4a60ce537758f3d8757f3caf28 100644 --- a/crates/extension/src/extension_lsp_adapter.rs +++ b/crates/extension/src/extension_lsp_adapter.rs @@ -19,7 +19,7 @@ pub struct ExtensionLspAdapter { pub(crate) host: Arc, } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for ExtensionLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName(self.config.name.clone().into()) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 37e28d5cd679e238e3d0a91c4643118e20b1a200..b44bf830172446d6910b3415da5e12281696940d 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -282,7 +282,7 @@ pub trait LspAdapterDelegate: Send + Sync { async fn read_text_file(&self, path: PathBuf) -> Result; } -#[async_trait] +#[async_trait(?Send)] pub trait LspAdapter: 'static + Send + Sync { fn name(&self) -> LanguageServerName; @@ -306,7 +306,7 @@ pub trait LspAdapter: 'static + Send + Sync { // We only want to cache when we fall back to the global one, // because we don't want to download and overwrite our global one // for each worktree we might have open. - if let Some(binary) = self.check_if_user_installed(delegate.as_ref()).await { + if let Some(binary) = self.check_if_user_installed(delegate.as_ref(), cx).await { log::info!( "found user-installed language server for {}. path: {:?}, arguments: {:?}", language.name(), @@ -380,6 +380,7 @@ pub trait LspAdapter: 'static + Send + Sync { async fn check_if_user_installed( &self, _: &dyn LspAdapterDelegate, + _: &AsyncAppContext, ) -> Option { None } @@ -1457,7 +1458,7 @@ impl Default for FakeLspAdapter { } #[cfg(any(test, feature = "test-support"))] -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for FakeLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName(self.name.into()) diff --git a/crates/languages/src/astro.rs b/crates/languages/src/astro.rs index 2ed3853e075d56b30693c589e19d0c28b71a50b8..95aa150d61648154fa7295b28407b13c79d205b5 100644 --- a/crates/languages/src/astro.rs +++ b/crates/languages/src/astro.rs @@ -30,7 +30,7 @@ impl AstroLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for AstroLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("astro-language-server".into()) diff --git a/crates/languages/src/c.rs b/crates/languages/src/c.rs index 28ceedf7ad181f6f897fc605b4d1884366fb7d70..7c4d992c236810bcc5df13facc264878101bbdf6 100644 --- a/crates/languages/src/c.rs +++ b/crates/languages/src/c.rs @@ -14,7 +14,7 @@ use util::{ pub struct CLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for CLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("clangd".into()) diff --git a/crates/languages/src/clojure.rs b/crates/languages/src/clojure.rs index 139d741db28decb32c61a06a6b2d17940f36d222..6fae33636c9000f2c4ab04df2e005cc34f016a5e 100644 --- a/crates/languages/src/clojure.rs +++ b/crates/languages/src/clojure.rs @@ -12,7 +12,7 @@ use util::{ #[derive(Copy, Clone)] pub struct ClojureLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for ClojureLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("clojure-lsp".into()) diff --git a/crates/languages/src/csharp.rs b/crates/languages/src/csharp.rs index 297e397cdd57a3abed9e537497c0a570f82a8d62..4d9f26328ce4d48cf2ea98e96bee87461ff0b46e 100644 --- a/crates/languages/src/csharp.rs +++ b/crates/languages/src/csharp.rs @@ -15,7 +15,7 @@ use util::{github::GitHubLspBinaryVersion, ResultExt}; pub struct OmniSharpAdapter; -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for OmniSharpAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("OmniSharp".into()) diff --git a/crates/languages/src/css.rs b/crates/languages/src/css.rs index 8baae447035c34ba035f245ca3cf3896aee54db5..fbc856efbd27dd0d160e4045c00a5282d5cb1277 100644 --- a/crates/languages/src/css.rs +++ b/crates/languages/src/css.rs @@ -31,7 +31,7 @@ impl CssLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for CssLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("vscode-css-language-server".into()) diff --git a/crates/languages/src/dart.rs b/crates/languages/src/dart.rs index 5c0d0c21a19017e2c7e3d81349c37db258c89aa2..12ac699ee0ecbb2175cbf4c548e8a5a7f20b7a09 100644 --- a/crates/languages/src/dart.rs +++ b/crates/languages/src/dart.rs @@ -13,7 +13,7 @@ use std::{ pub struct DartLanguageServer; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for DartLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("dart".into()) diff --git a/crates/languages/src/deno.rs b/crates/languages/src/deno.rs index abb9dccbfb3779afa96f2543b5b2756260e9f072..1aed3930fba138886be07c013929e8a2b5b95a3b 100644 --- a/crates/languages/src/deno.rs +++ b/crates/languages/src/deno.rs @@ -56,7 +56,7 @@ impl DenoLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for DenoLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("deno-language-server".into()) diff --git a/crates/languages/src/dockerfile.rs b/crates/languages/src/dockerfile.rs index c3cd4411e925aad865055f37f5a50eb1ef61fe33..35ee844d89f3b4a4f2f696494799512a0b595df0 100644 --- a/crates/languages/src/dockerfile.rs +++ b/crates/languages/src/dockerfile.rs @@ -29,7 +29,7 @@ impl DockerfileLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for DockerfileLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("docker-langserver".into()) diff --git a/crates/languages/src/elixir.rs b/crates/languages/src/elixir.rs index 471f466c84645ba1afd4fa3aeafff16e0cbef580..b4479c0fd8a2ce69726d9c4603660365130fc037 100644 --- a/crates/languages/src/elixir.rs +++ b/crates/languages/src/elixir.rs @@ -65,7 +65,7 @@ impl Settings for ElixirSettings { pub struct ElixirLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for ElixirLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("elixir-ls".into()) @@ -292,7 +292,7 @@ async fn get_cached_server_binary_elixir_ls( pub struct NextLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for NextLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("next-ls".into()) @@ -446,7 +446,7 @@ pub struct LocalLspAdapter { pub arguments: Vec, } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for LocalLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("local-ls".into()) diff --git a/crates/languages/src/elm.rs b/crates/languages/src/elm.rs index 37b156db9179da1eb73037dbc09a827abac4340b..5f99649ee937422066ad6de925f1730d16de0cb2 100644 --- a/crates/languages/src/elm.rs +++ b/crates/languages/src/elm.rs @@ -34,7 +34,7 @@ impl ElmLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for ElmLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName(SERVER_NAME.into()) diff --git a/crates/languages/src/erlang.rs b/crates/languages/src/erlang.rs index 2b6d33ed41e884224f8886406c588db85276e7da..a868055703bbc5dbfd20994c272951d4371fe846 100644 --- a/crates/languages/src/erlang.rs +++ b/crates/languages/src/erlang.rs @@ -6,7 +6,7 @@ use std::{any::Any, path::PathBuf}; pub struct ErlangLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for ErlangLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("erlang_ls".into()) diff --git a/crates/languages/src/gleam.rs b/crates/languages/src/gleam.rs index 9eb22c179e9d50189d46ac20f6af6fcc945248d5..e9a5b6a48a6d82f23b6fc6260dae09458d7d4a07 100644 --- a/crates/languages/src/gleam.rs +++ b/crates/languages/src/gleam.rs @@ -21,7 +21,7 @@ fn server_binary_arguments() -> Vec { pub struct GleamLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for GleamLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("gleam".into()) diff --git a/crates/languages/src/go.rs b/crates/languages/src/go.rs index 4710facc4bdcef46362b5ac65666ec0af6c1d657..505ba7bd0461263b7e9f8ae0259354862643f883 100644 --- a/crates/languages/src/go.rs +++ b/crates/languages/src/go.rs @@ -32,7 +32,7 @@ lazy_static! { static ref GOPLS_VERSION_REGEX: Regex = Regex::new(r"\d+\.\d+\.\d+").unwrap(); } -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for GoLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("gopls".into()) @@ -57,6 +57,7 @@ impl super::LspAdapter for GoLspAdapter { async fn check_if_user_installed( &self, delegate: &dyn LspAdapterDelegate, + _: &AsyncAppContext, ) -> Option { let env = delegate.shell_env().await; let path = delegate.which("gopls".as_ref()).await?; diff --git a/crates/languages/src/haskell.rs b/crates/languages/src/haskell.rs index 0e8c59d623cb9f7d7b37028720883877c266f6c6..224910a04da559c75e9c7749d28ea284c54531c7 100644 --- a/crates/languages/src/haskell.rs +++ b/crates/languages/src/haskell.rs @@ -6,7 +6,7 @@ use std::{any::Any, path::PathBuf}; pub struct HaskellLanguageServer; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for HaskellLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("hls".into()) diff --git a/crates/languages/src/html.rs b/crates/languages/src/html.rs index 713a432de312388720c632baa89498f0a64ef2d3..3935d20456bb733573bbfcfb78c6b7a58a81a345 100644 --- a/crates/languages/src/html.rs +++ b/crates/languages/src/html.rs @@ -31,7 +31,7 @@ impl HtmlLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for HtmlLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("vscode-html-language-server".into()) diff --git a/crates/languages/src/json.rs b/crates/languages/src/json.rs index 1813f4c270536678b82aa9ffd7914f225ea231f2..1b32876155f3aebdf29c1b4e881ef05e9c33cdbf 100644 --- a/crates/languages/src/json.rs +++ b/crates/languages/src/json.rs @@ -83,7 +83,7 @@ impl JsonLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for JsonLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("json-language-server".into()) diff --git a/crates/languages/src/lua.rs b/crates/languages/src/lua.rs index cad9004480bb5c2fafc04e054f23292b24106ee1..d0f60378ff7639e19c28aee71bfa5a18aa3b81d1 100644 --- a/crates/languages/src/lua.rs +++ b/crates/languages/src/lua.rs @@ -16,7 +16,7 @@ use util::{ #[derive(Copy, Clone)] pub struct LuaLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for LuaLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("lua-language-server".into()) diff --git a/crates/languages/src/nu.rs b/crates/languages/src/nu.rs index 691ecfd52fa82fa00b7ccf24903460d43b48530a..58c8e30dc3e6f3256ef116a4cb8e463456fad60b 100644 --- a/crates/languages/src/nu.rs +++ b/crates/languages/src/nu.rs @@ -6,7 +6,7 @@ use std::{any::Any, path::PathBuf}; pub struct NuLanguageServer; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for NuLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("nu".into()) diff --git a/crates/languages/src/ocaml.rs b/crates/languages/src/ocaml.rs index 0dc4bfcd2b94613dfe6dec159a1362ea51547d6d..74f5f602998efcc34ef36e15e5584090a5d5d7f7 100644 --- a/crates/languages/src/ocaml.rs +++ b/crates/languages/src/ocaml.rs @@ -12,7 +12,7 @@ const OPERATOR_CHAR: [char; 17] = [ pub struct OCamlLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for OCamlLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("ocamllsp".into()) diff --git a/crates/languages/src/php.rs b/crates/languages/src/php.rs index 14056142106fe9df1bdebb093fb16f0f8121c175..0fcb2b3b23dab742787ebadd641792ba06d095e1 100644 --- a/crates/languages/src/php.rs +++ b/crates/languages/src/php.rs @@ -34,7 +34,7 @@ impl IntelephenseLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for IntelephenseLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("intelephense".into()) diff --git a/crates/languages/src/prisma.rs b/crates/languages/src/prisma.rs index 0731cc8d11a5c6ddab1e0715b157cc6fd9e80325..17fcb5fd3f26f7c9fb70c669cca748966a5e2136 100644 --- a/crates/languages/src/prisma.rs +++ b/crates/languages/src/prisma.rs @@ -29,7 +29,7 @@ impl PrismaLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for PrismaLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("prisma-language-server".into()) diff --git a/crates/languages/src/purescript.rs b/crates/languages/src/purescript.rs index df3cb5b5a9b753d3213f60ed6749a34235f4be79..8787826a188830bd07a5246b8dd3c8c4ecdff35b 100644 --- a/crates/languages/src/purescript.rs +++ b/crates/languages/src/purescript.rs @@ -33,7 +33,7 @@ impl PurescriptLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for PurescriptLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("purescript-language-server".into()) diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index bf1cae7d9df5fa07713b726c68750aaa20bf6a95..bd9eab3ced4f290fd6577afcfecc1060c1018836 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -28,7 +28,7 @@ impl PythonLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for PythonLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("pyright".into()) diff --git a/crates/languages/src/ruby.rs b/crates/languages/src/ruby.rs index ced781bfbf2dbf13f6a57b5a6da05e58040f5a52..8a634b6bc48bd50b3fbb4bb2c2a66dfee2170361 100644 --- a/crates/languages/src/ruby.rs +++ b/crates/languages/src/ruby.rs @@ -6,7 +6,7 @@ use std::{any::Any, path::PathBuf, sync::Arc}; pub struct RubyLanguageServer; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for RubyLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("solargraph".into()) diff --git a/crates/languages/src/rust.rs b/crates/languages/src/rust.rs index 2d3925e7d61554d9f3d44803c4302f9f0e562a8d..2a58bc601559d5b4811708e01300d52310050428 100644 --- a/crates/languages/src/rust.rs +++ b/crates/languages/src/rust.rs @@ -2,12 +2,15 @@ use anyhow::{anyhow, bail, Result}; use async_compression::futures::bufread::GzipDecoder; use async_trait::async_trait; use futures::{io::BufReader, StreamExt}; +use gpui::AsyncAppContext; pub use language::*; use lazy_static::lazy_static; use lsp::LanguageServerBinary; +use project::project_settings::ProjectSettings; use regex::Regex; +use settings::Settings; use smol::fs::{self, File}; -use std::{any::Any, borrow::Cow, env::consts, path::PathBuf, str, sync::Arc}; +use std::{any::Any, borrow::Cow, env::consts, path::PathBuf, sync::Arc}; use util::{ async_maybe, fs::remove_matching, @@ -17,10 +20,41 @@ use util::{ pub struct RustLspAdapter; -#[async_trait] +impl RustLspAdapter { + const SERVER_NAME: &'static str = "rust-analyzer"; +} + +#[async_trait(?Send)] impl LspAdapter for RustLspAdapter { fn name(&self) -> LanguageServerName { - LanguageServerName("rust-analyzer".into()) + LanguageServerName(Self::SERVER_NAME.into()) + } + + async fn check_if_user_installed( + &self, + _delegate: &dyn LspAdapterDelegate, + cx: &AsyncAppContext, + ) -> Option { + let binary = cx + .update(|cx| { + ProjectSettings::get_global(cx) + .lsp + .get(Self::SERVER_NAME) + .and_then(|s| s.binary.clone()) + }) + .ok()??; + + let path = binary.path?; + Some(LanguageServerBinary { + path: path.into(), + arguments: binary + .arguments + .unwrap_or_default() + .iter() + .map(|arg| arg.into()) + .collect(), + env: None, + }) } async fn fetch_latest_server_version( diff --git a/crates/languages/src/svelte.rs b/crates/languages/src/svelte.rs index aff9a6db7d3a3a25d8dc08a6b005df469f7e5a33..721c2e6640d9892ccbcf32c8d7b09d7f047a9fdd 100644 --- a/crates/languages/src/svelte.rs +++ b/crates/languages/src/svelte.rs @@ -30,7 +30,7 @@ impl SvelteLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for SvelteLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("svelte-language-server".into()) diff --git a/crates/languages/src/tailwind.rs b/crates/languages/src/tailwind.rs index 69ac629c7cd86a07778199261c6ef749a015e301..c49f5d859036103e9f10a8b531f3a3d8a8d2ea69 100644 --- a/crates/languages/src/tailwind.rs +++ b/crates/languages/src/tailwind.rs @@ -32,7 +32,7 @@ impl TailwindLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for TailwindLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("tailwindcss-language-server".into()) diff --git a/crates/languages/src/terraform.rs b/crates/languages/src/terraform.rs index d201b8aeffe5b4628c2b12f8147bf967d169a9b0..d5973cc5daaae190d16d0a5420c150f80d1f04f3 100644 --- a/crates/languages/src/terraform.rs +++ b/crates/languages/src/terraform.rs @@ -19,7 +19,7 @@ fn terraform_ls_binary_arguments() -> Vec { pub struct TerraformLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for TerraformLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("terraform-ls".into()) diff --git a/crates/languages/src/toml.rs b/crates/languages/src/toml.rs index 1ca6bb8d1d2e59e06569d34da8410ede05c09e05..dee6a19aa7ccffffe66e9882549b465e219c7ace 100644 --- a/crates/languages/src/toml.rs +++ b/crates/languages/src/toml.rs @@ -12,7 +12,7 @@ use util::{github::GitHubLspBinaryVersion, ResultExt}; pub struct TaploLspAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for TaploLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("taplo-ls".into()) diff --git a/crates/languages/src/typescript.rs b/crates/languages/src/typescript.rs index b05a370a6cff8093f556c7c32c174a47a96e8c25..bf220130a9679ca3eb83c1c3d61f0499738e066f 100644 --- a/crates/languages/src/typescript.rs +++ b/crates/languages/src/typescript.rs @@ -50,7 +50,7 @@ struct TypeScriptVersions { server_version: String, } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for TypeScriptLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("typescript-language-server".into()) @@ -224,7 +224,7 @@ impl EsLintLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for EsLintLspAdapter { fn workspace_configuration(&self, workspace_root: &Path, cx: &mut AppContext) -> Value { let eslint_user_settings = ProjectSettings::get_global(cx) diff --git a/crates/languages/src/uiua.rs b/crates/languages/src/uiua.rs index 229c0804f51f22d718a1f23a12086c60ae2784b7..8833673a2725177370e2bb5a20ce1182f0b700c5 100644 --- a/crates/languages/src/uiua.rs +++ b/crates/languages/src/uiua.rs @@ -6,7 +6,7 @@ use std::{any::Any, path::PathBuf}; pub struct UiuaLanguageServer; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for UiuaLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("uiua".into()) diff --git a/crates/languages/src/vue.rs b/crates/languages/src/vue.rs index f90364c66b3e37c03a0fb41ee7951eef4d729420..e29516a5df2e5067908ca9ef2272caac2863b334 100644 --- a/crates/languages/src/vue.rs +++ b/crates/languages/src/vue.rs @@ -38,7 +38,7 @@ impl VueLspAdapter { } } } -#[async_trait] +#[async_trait(?Send)] impl super::LspAdapter for VueLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("vue-language-server".into()) diff --git a/crates/languages/src/yaml.rs b/crates/languages/src/yaml.rs index fe115b09b3cb81d9213b30e9407fa22f3d34b8a6..5c288c22b6111149babd246874c233464b2f49e3 100644 --- a/crates/languages/src/yaml.rs +++ b/crates/languages/src/yaml.rs @@ -33,7 +33,7 @@ impl YamlLspAdapter { } } -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for YamlLspAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("yaml-language-server".into()) diff --git a/crates/languages/src/zig.rs b/crates/languages/src/zig.rs index 3e6f3b8824469873a25196807dfdbedb68f2283c..8d6c836f22c3f3f116bc0e0ed888da683956135f 100644 --- a/crates/languages/src/zig.rs +++ b/crates/languages/src/zig.rs @@ -3,6 +3,7 @@ use async_compression::futures::bufread::GzipDecoder; use async_tar::Archive; use async_trait::async_trait; use futures::{io::BufReader, StreamExt}; +use gpui::AsyncAppContext; use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use smol::fs; @@ -14,7 +15,7 @@ use util::{github::GitHubLspBinaryVersion, ResultExt}; pub struct ZlsAdapter; -#[async_trait] +#[async_trait(?Send)] impl LspAdapter for ZlsAdapter { fn name(&self) -> LanguageServerName { LanguageServerName("zls".into()) @@ -43,6 +44,7 @@ impl LspAdapter for ZlsAdapter { async fn check_if_user_installed( &self, delegate: &dyn LspAdapterDelegate, + _cx: &AsyncAppContext, ) -> Option { let env = delegate.shell_env().await; let path = delegate.which("zls".as_ref()).await?; diff --git a/crates/project/src/project_settings.rs b/crates/project/src/project_settings.rs index 2d659725a7d1db64e4a01eafa38bebc9ec369af9..9e0c595ee64ff6c47f192246bdc42e86a0c21fc5 100644 --- a/crates/project/src/project_settings.rs +++ b/crates/project/src/project_settings.rs @@ -41,9 +41,16 @@ pub enum GitGutterSetting { Hide, } +#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] +pub struct BinarySettings { + pub path: Option, + pub arguments: Option>, +} + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct LspSettings { + pub binary: Option, pub initialization_options: Option, pub settings: Option, }