From 9fdb8f90376c02ec2a267cf9eb3bdb7b6027e1e6 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 3 Jun 2021 16:11:20 +0200 Subject: Make it opt-in --- crates/rust-analyzer/src/config.rs | 6 ++++++ crates/rust-analyzer/src/global_state.rs | 9 ++++++--- crates/rust-analyzer/src/reload.rs | 6 ++++++ 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'crates/rust-analyzer') diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index c33cdb740..d1f3c1b06 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -126,6 +126,9 @@ config_data! { /// and a blue icon in the `Problems Panel`. diagnostics_warningsAsInfo: Vec = "[]", + /// Expand attribute macros. + experimental_procAttrMacros: bool = "false", + /// Controls file watching implementation. files_watcher: String = "\"client\"", /// These directories will be ignored by rust-analyzer. @@ -546,6 +549,9 @@ impl Config { let path = self.data.procMacro_server.clone().or_else(|| std::env::current_exe().ok())?; Some((path, vec!["proc-macro".into()])) } + pub fn expand_proc_attr_macros(&self) -> bool { + self.data.experimental_procAttrMacros + } pub fn files(&self) -> FilesConfig { FilesConfig { watcher: match self.data.files_watcher.as_str() { diff --git a/crates/rust-analyzer/src/global_state.rs b/crates/rust-analyzer/src/global_state.rs index ea9dbf7fc..582a89667 100644 --- a/crates/rust-analyzer/src/global_state.rs +++ b/crates/rust-analyzer/src/global_state.rs @@ -119,12 +119,12 @@ impl GlobalState { let analysis_host = AnalysisHost::new(config.lru_capacity()); let (flycheck_sender, flycheck_receiver) = unbounded(); - GlobalState { + let mut this = GlobalState { sender, req_queue: ReqQueue::default(), task_pool, loader, - config: Arc::new(config), + config: Arc::new(config.clone()), analysis_host, diagnostics: Default::default(), mem_docs: FxHashMap::default(), @@ -151,7 +151,10 @@ impl GlobalState { fetch_build_data_queue: OpQueue::default(), latest_requests: Default::default(), - } + }; + // Apply any required database inputs from the config. + this.update_configuration(config); + this } pub(crate) fn process_changes(&mut self) -> bool { diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index 93b5ff55f..bd31d1d13 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -2,6 +2,7 @@ use std::{mem, sync::Arc}; use flycheck::{FlycheckConfig, FlycheckHandle}; +use hir::db::DefDatabase; use ide::Change; use ide_db::base_db::{CrateGraph, SourceRoot, VfsPath}; use project_model::{BuildDataCollector, BuildDataResult, ProcMacroClient, ProjectWorkspace}; @@ -47,6 +48,11 @@ impl GlobalState { } else if self.config.flycheck() != old_config.flycheck() { self.reload_flycheck(); } + + // Apply experimental feature flags. + self.analysis_host + .raw_database_mut() + .set_enable_proc_attr_macros(self.config.expand_proc_attr_macros()); } pub(crate) fn maybe_refresh(&mut self, changes: &[(AbsPathBuf, ChangeKind)]) { if !changes.iter().any(|(path, kind)| is_interesting(path, *kind)) { -- cgit v1.2.3