aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2021-06-03 15:11:20 +0100
committerJonas Schievink <[email protected]>2021-06-03 17:09:21 +0100
commit9fdb8f90376c02ec2a267cf9eb3bdb7b6027e1e6 (patch)
treeb816f97fd66df5bb827d7e2456b6a492a7199d34 /crates/rust-analyzer
parente5a2c6596ddd11b0d57042224ac7c1d7691ec33b (diff)
Make it opt-in
Diffstat (limited to 'crates/rust-analyzer')
-rw-r--r--crates/rust-analyzer/src/config.rs6
-rw-r--r--crates/rust-analyzer/src/global_state.rs9
-rw-r--r--crates/rust-analyzer/src/reload.rs6
3 files changed, 18 insertions, 3 deletions
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! {
126 /// and a blue icon in the `Problems Panel`. 126 /// and a blue icon in the `Problems Panel`.
127 diagnostics_warningsAsInfo: Vec<String> = "[]", 127 diagnostics_warningsAsInfo: Vec<String> = "[]",
128 128
129 /// Expand attribute macros.
130 experimental_procAttrMacros: bool = "false",
131
129 /// Controls file watching implementation. 132 /// Controls file watching implementation.
130 files_watcher: String = "\"client\"", 133 files_watcher: String = "\"client\"",
131 /// These directories will be ignored by rust-analyzer. 134 /// These directories will be ignored by rust-analyzer.
@@ -546,6 +549,9 @@ impl Config {
546 let path = self.data.procMacro_server.clone().or_else(|| std::env::current_exe().ok())?; 549 let path = self.data.procMacro_server.clone().or_else(|| std::env::current_exe().ok())?;
547 Some((path, vec!["proc-macro".into()])) 550 Some((path, vec!["proc-macro".into()]))
548 } 551 }
552 pub fn expand_proc_attr_macros(&self) -> bool {
553 self.data.experimental_procAttrMacros
554 }
549 pub fn files(&self) -> FilesConfig { 555 pub fn files(&self) -> FilesConfig {
550 FilesConfig { 556 FilesConfig {
551 watcher: match self.data.files_watcher.as_str() { 557 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 {
119 119
120 let analysis_host = AnalysisHost::new(config.lru_capacity()); 120 let analysis_host = AnalysisHost::new(config.lru_capacity());
121 let (flycheck_sender, flycheck_receiver) = unbounded(); 121 let (flycheck_sender, flycheck_receiver) = unbounded();
122 GlobalState { 122 let mut this = GlobalState {
123 sender, 123 sender,
124 req_queue: ReqQueue::default(), 124 req_queue: ReqQueue::default(),
125 task_pool, 125 task_pool,
126 loader, 126 loader,
127 config: Arc::new(config), 127 config: Arc::new(config.clone()),
128 analysis_host, 128 analysis_host,
129 diagnostics: Default::default(), 129 diagnostics: Default::default(),
130 mem_docs: FxHashMap::default(), 130 mem_docs: FxHashMap::default(),
@@ -151,7 +151,10 @@ impl GlobalState {
151 151
152 fetch_build_data_queue: OpQueue::default(), 152 fetch_build_data_queue: OpQueue::default(),
153 latest_requests: Default::default(), 153 latest_requests: Default::default(),
154 } 154 };
155 // Apply any required database inputs from the config.
156 this.update_configuration(config);
157 this
155 } 158 }
156 159
157 pub(crate) fn process_changes(&mut self) -> bool { 160 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 @@
2use std::{mem, sync::Arc}; 2use std::{mem, sync::Arc};
3 3
4use flycheck::{FlycheckConfig, FlycheckHandle}; 4use flycheck::{FlycheckConfig, FlycheckHandle};
5use hir::db::DefDatabase;
5use ide::Change; 6use ide::Change;
6use ide_db::base_db::{CrateGraph, SourceRoot, VfsPath}; 7use ide_db::base_db::{CrateGraph, SourceRoot, VfsPath};
7use project_model::{BuildDataCollector, BuildDataResult, ProcMacroClient, ProjectWorkspace}; 8use project_model::{BuildDataCollector, BuildDataResult, ProcMacroClient, ProjectWorkspace};
@@ -47,6 +48,11 @@ impl GlobalState {
47 } else if self.config.flycheck() != old_config.flycheck() { 48 } else if self.config.flycheck() != old_config.flycheck() {
48 self.reload_flycheck(); 49 self.reload_flycheck();
49 } 50 }
51
52 // Apply experimental feature flags.
53 self.analysis_host
54 .raw_database_mut()
55 .set_enable_proc_attr_macros(self.config.expand_proc_attr_macros());
50 } 56 }
51 pub(crate) fn maybe_refresh(&mut self, changes: &[(AbsPathBuf, ChangeKind)]) { 57 pub(crate) fn maybe_refresh(&mut self, changes: &[(AbsPathBuf, ChangeKind)]) {
52 if !changes.iter().any(|(path, kind)| is_interesting(path, *kind)) { 58 if !changes.iter().any(|(path, kind)| is_interesting(path, *kind)) {