From a4b0ce07f80773146c72004befc77be4e576c677 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Mon, 13 Apr 2020 00:05:33 +0800 Subject: Add config for proc_macro --- crates/rust-analyzer/src/cli/load_cargo.rs | 2 +- crates/rust-analyzer/src/config.rs | 8 ++++++++ crates/rust-analyzer/src/world.rs | 2 ++ editors/code/package.json | 10 ++++++++++ editors/code/src/config.ts | 1 + 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index f70d92c7f..dfda488fb 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 4734df16a..46a89b37e 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 6c42e1d76..b7142e83b 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 5f73c8d83..d39a9b6d8 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 35a05131c..3b2eec8ba 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", -- cgit v1.2.3