diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index f70d92c7f4..dfda488fb8 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs @@ -70,7 +70,7 @@ pub(crate) fn load_cargo( }) .collect::>(); - let proc_macro_client = if with_proc_macro { + let proc_macro_client = if !with_proc_macro { ProcMacroClient::dummy() } else { ProcMacroClient::extern_process(Path::new("ra_proc_macro_srv")).unwrap() diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 4734df16ac..46a89b37ed 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -131,6 +131,14 @@ impl Config { set(value, "/cargo/allFeatures", &mut self.cargo.all_features); set(value, "/cargo/features", &mut self.cargo.features); set(value, "/cargo/loadOutDirsFromCheck", &mut self.cargo.load_out_dirs_from_check); + + match get::(value, "/procMacro/enabled") { + Some(true) => { + set(value, "/procMacro/serverPath", &mut self.proc_macro_srv); + } + _ => self.proc_macro_srv = None, + } + match get::>(value, "/rustfmt/overrideCommand") { Some(mut args) if !args.is_empty() => { let command = args.remove(0); diff --git a/crates/rust-analyzer/src/world.rs b/crates/rust-analyzer/src/world.rs index 6c42e1d760..b7142e83ba 100644 --- a/crates/rust-analyzer/src/world.rs +++ b/crates/rust-analyzer/src/world.rs @@ -64,6 +64,7 @@ pub struct WorldState { pub latest_requests: Arc>, pub flycheck: Option, pub diagnostics: DiagnosticCollection, + pub proc_macro_client: ProcMacroClient, } /// An immutable snapshot of the world's state at a point in time. @@ -192,6 +193,7 @@ impl WorldState { latest_requests: Default::default(), flycheck, diagnostics: Default::default(), + proc_macro_client, } } diff --git a/editors/code/package.json b/editors/code/package.json index 5f73c8d838..d39a9b6d88 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -388,6 +388,16 @@ "description": "Enable logging of VS Code extensions itself", "type": "boolean", "default": false + }, + "rust-analyzer.procMacro.enabled": { + "description": "Enable Proc macro support, cargo.loadOutDirsFromCheck must be enabled.", + "type": "boolean", + "default": false + }, + "rust-analyzer.procMacro.serverPath": { + "description": "Proc macro server path", + "type": "string", + "default": "ra_proc_macro_srv" } } }, diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index 35a05131c8..3b2eec8baa 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -12,6 +12,7 @@ export class Config { private readonly requiresReloadOpts = [ "serverPath", "cargo", + "procMacro", "files", "highlighting", "updates.channel",