diff options
-rw-r--r-- | crates/ra_ide/src/lib.rs | 16 | ||||
-rw-r--r-- | crates/ra_ide_db/src/lib.rs | 10 | ||||
-rw-r--r-- | crates/rust-analyzer/src/cli/load_cargo.rs | 4 | ||||
-rw-r--r-- | crates/rust-analyzer/src/feature_flags.rs (renamed from crates/ra_ide_db/src/feature_flags.rs) | 0 | ||||
-rw-r--r-- | crates/rust-analyzer/src/lib.rs | 1 | ||||
-rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 7 | ||||
-rw-r--r-- | crates/rust-analyzer/src/main_loop/handlers.rs | 10 | ||||
-rw-r--r-- | crates/rust-analyzer/src/world.rs | 18 |
8 files changed, 24 insertions, 42 deletions
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index d888bb745..9f45003d3 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs | |||
@@ -84,7 +84,6 @@ pub use ra_db::{ | |||
84 | }; | 84 | }; |
85 | pub use ra_ide_db::{ | 85 | pub use ra_ide_db::{ |
86 | change::{AnalysisChange, LibraryData}, | 86 | change::{AnalysisChange, LibraryData}, |
87 | feature_flags::FeatureFlags, | ||
88 | line_index::{LineCol, LineIndex}, | 87 | line_index::{LineCol, LineIndex}, |
89 | line_index_utils::translate_offset_with_edit, | 88 | line_index_utils::translate_offset_with_edit, |
90 | search::SearchScope, | 89 | search::SearchScope, |
@@ -131,13 +130,13 @@ pub struct AnalysisHost { | |||
131 | 130 | ||
132 | impl Default for AnalysisHost { | 131 | impl Default for AnalysisHost { |
133 | fn default() -> AnalysisHost { | 132 | fn default() -> AnalysisHost { |
134 | AnalysisHost::new(None, FeatureFlags::default()) | 133 | AnalysisHost::new(None) |
135 | } | 134 | } |
136 | } | 135 | } |
137 | 136 | ||
138 | impl AnalysisHost { | 137 | impl AnalysisHost { |
139 | pub fn new(lru_capcity: Option<usize>, feature_flags: FeatureFlags) -> AnalysisHost { | 138 | pub fn new(lru_capacity: Option<usize>) -> AnalysisHost { |
140 | AnalysisHost { db: RootDatabase::new(lru_capcity, feature_flags) } | 139 | AnalysisHost { db: RootDatabase::new(lru_capacity) } |
141 | } | 140 | } |
142 | /// Returns a snapshot of the current state, which you can query for | 141 | /// Returns a snapshot of the current state, which you can query for |
143 | /// semantic information. | 142 | /// semantic information. |
@@ -145,10 +144,6 @@ impl AnalysisHost { | |||
145 | Analysis { db: self.db.snapshot() } | 144 | Analysis { db: self.db.snapshot() } |
146 | } | 145 | } |
147 | 146 | ||
148 | pub fn feature_flags(&self) -> &FeatureFlags { | ||
149 | &self.db.feature_flags | ||
150 | } | ||
151 | |||
152 | /// Applies changes to the current state of the world. If there are | 147 | /// Applies changes to the current state of the world. If there are |
153 | /// outstanding snapshots, they will be canceled. | 148 | /// outstanding snapshots, they will be canceled. |
154 | pub fn apply_change(&mut self, change: AnalysisChange) { | 149 | pub fn apply_change(&mut self, change: AnalysisChange) { |
@@ -224,11 +219,6 @@ impl Analysis { | |||
224 | (host.analysis(), file_id) | 219 | (host.analysis(), file_id) |
225 | } | 220 | } |
226 | 221 | ||
227 | /// Features for Analysis. | ||
228 | pub fn feature_flags(&self) -> &FeatureFlags { | ||
229 | &self.db.feature_flags | ||
230 | } | ||
231 | |||
232 | /// Debug info about the current state of the analysis. | 222 | /// Debug info about the current state of the analysis. |
233 | pub fn status(&self) -> Cancelable<String> { | 223 | pub fn status(&self) -> Cancelable<String> { |
234 | self.with_db(|db| status::status(&*db)) | 224 | self.with_db(|db| status::status(&*db)) |
diff --git a/crates/ra_ide_db/src/lib.rs b/crates/ra_ide_db/src/lib.rs index a105c7556..6bcccc848 100644 --- a/crates/ra_ide_db/src/lib.rs +++ b/crates/ra_ide_db/src/lib.rs | |||
@@ -5,7 +5,6 @@ | |||
5 | pub mod marks; | 5 | pub mod marks; |
6 | pub mod line_index; | 6 | pub mod line_index; |
7 | pub mod line_index_utils; | 7 | pub mod line_index_utils; |
8 | pub mod feature_flags; | ||
9 | pub mod symbol_index; | 8 | pub mod symbol_index; |
10 | pub mod change; | 9 | pub mod change; |
11 | pub mod defs; | 10 | pub mod defs; |
@@ -22,7 +21,7 @@ use ra_db::{ | |||
22 | }; | 21 | }; |
23 | use rustc_hash::FxHashMap; | 22 | use rustc_hash::FxHashMap; |
24 | 23 | ||
25 | use crate::{feature_flags::FeatureFlags, line_index::LineIndex, symbol_index::SymbolsDatabase}; | 24 | use crate::{line_index::LineIndex, symbol_index::SymbolsDatabase}; |
26 | 25 | ||
27 | #[salsa::database( | 26 | #[salsa::database( |
28 | ra_db::SourceDatabaseStorage, | 27 | ra_db::SourceDatabaseStorage, |
@@ -37,7 +36,6 @@ use crate::{feature_flags::FeatureFlags, line_index::LineIndex, symbol_index::Sy | |||
37 | #[derive(Debug)] | 36 | #[derive(Debug)] |
38 | pub struct RootDatabase { | 37 | pub struct RootDatabase { |
39 | runtime: salsa::Runtime<RootDatabase>, | 38 | runtime: salsa::Runtime<RootDatabase>, |
40 | pub feature_flags: Arc<FeatureFlags>, | ||
41 | pub(crate) debug_data: Arc<DebugData>, | 39 | pub(crate) debug_data: Arc<DebugData>, |
42 | pub last_gc: crate::wasm_shims::Instant, | 40 | pub last_gc: crate::wasm_shims::Instant, |
43 | pub last_gc_check: crate::wasm_shims::Instant, | 41 | pub last_gc_check: crate::wasm_shims::Instant, |
@@ -82,17 +80,16 @@ impl salsa::Database for RootDatabase { | |||
82 | 80 | ||
83 | impl Default for RootDatabase { | 81 | impl Default for RootDatabase { |
84 | fn default() -> RootDatabase { | 82 | fn default() -> RootDatabase { |
85 | RootDatabase::new(None, FeatureFlags::default()) | 83 | RootDatabase::new(None) |
86 | } | 84 | } |
87 | } | 85 | } |
88 | 86 | ||
89 | impl RootDatabase { | 87 | impl RootDatabase { |
90 | pub fn new(lru_capacity: Option<usize>, feature_flags: FeatureFlags) -> RootDatabase { | 88 | pub fn new(lru_capacity: Option<usize>) -> RootDatabase { |
91 | let mut db = RootDatabase { | 89 | let mut db = RootDatabase { |
92 | runtime: salsa::Runtime::default(), | 90 | runtime: salsa::Runtime::default(), |
93 | last_gc: crate::wasm_shims::Instant::now(), | 91 | last_gc: crate::wasm_shims::Instant::now(), |
94 | last_gc_check: crate::wasm_shims::Instant::now(), | 92 | last_gc_check: crate::wasm_shims::Instant::now(), |
95 | feature_flags: Arc::new(feature_flags), | ||
96 | debug_data: Default::default(), | 93 | debug_data: Default::default(), |
97 | }; | 94 | }; |
98 | db.set_crate_graph_with_durability(Default::default(), Durability::HIGH); | 95 | db.set_crate_graph_with_durability(Default::default(), Durability::HIGH); |
@@ -112,7 +109,6 @@ impl salsa::ParallelDatabase for RootDatabase { | |||
112 | runtime: self.runtime.snapshot(self), | 109 | runtime: self.runtime.snapshot(self), |
113 | last_gc: self.last_gc, | 110 | last_gc: self.last_gc, |
114 | last_gc_check: self.last_gc_check, | 111 | last_gc_check: self.last_gc_check, |
115 | feature_flags: Arc::clone(&self.feature_flags), | ||
116 | debug_data: Arc::clone(&self.debug_data), | 112 | debug_data: Arc::clone(&self.debug_data), |
117 | }) | 113 | }) |
118 | } | 114 | } |
diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index 4be987860..5df29a383 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs | |||
@@ -6,7 +6,7 @@ use std::path::Path; | |||
6 | use anyhow::Result; | 6 | use anyhow::Result; |
7 | use crossbeam_channel::{unbounded, Receiver}; | 7 | use crossbeam_channel::{unbounded, Receiver}; |
8 | use ra_db::{CrateGraph, FileId, SourceRootId}; | 8 | use ra_db::{CrateGraph, FileId, SourceRootId}; |
9 | use ra_ide::{AnalysisChange, AnalysisHost, FeatureFlags}; | 9 | use ra_ide::{AnalysisChange, AnalysisHost}; |
10 | use ra_project_model::{get_rustc_cfg_options, PackageRoot, ProjectWorkspace}; | 10 | use ra_project_model::{get_rustc_cfg_options, PackageRoot, ProjectWorkspace}; |
11 | use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch}; | 11 | use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch}; |
12 | use rustc_hash::{FxHashMap, FxHashSet}; | 12 | use rustc_hash::{FxHashMap, FxHashSet}; |
@@ -82,7 +82,7 @@ pub(crate) fn load( | |||
82 | receiver: Receiver<VfsTask>, | 82 | receiver: Receiver<VfsTask>, |
83 | ) -> AnalysisHost { | 83 | ) -> AnalysisHost { |
84 | let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<usize>().ok()); | 84 | let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<usize>().ok()); |
85 | let mut host = AnalysisHost::new(lru_cap, FeatureFlags::default()); | 85 | let mut host = AnalysisHost::new(lru_cap); |
86 | let mut analysis_change = AnalysisChange::new(); | 86 | let mut analysis_change = AnalysisChange::new(); |
87 | analysis_change.set_crate_graph(crate_graph); | 87 | analysis_change.set_crate_graph(crate_graph); |
88 | 88 | ||
diff --git a/crates/ra_ide_db/src/feature_flags.rs b/crates/rust-analyzer/src/feature_flags.rs index dbb3f50a0..dbb3f50a0 100644 --- a/crates/ra_ide_db/src/feature_flags.rs +++ b/crates/rust-analyzer/src/feature_flags.rs | |||
diff --git a/crates/rust-analyzer/src/lib.rs b/crates/rust-analyzer/src/lib.rs index a0f968823..e50e47b19 100644 --- a/crates/rust-analyzer/src/lib.rs +++ b/crates/rust-analyzer/src/lib.rs | |||
@@ -37,6 +37,7 @@ mod config; | |||
37 | mod world; | 37 | mod world; |
38 | mod diagnostics; | 38 | mod diagnostics; |
39 | mod semantic_tokens; | 39 | mod semantic_tokens; |
40 | mod feature_flags; | ||
40 | 41 | ||
41 | use serde::de::DeserializeOwned; | 42 | use serde::de::DeserializeOwned; |
42 | 43 | ||
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 221f464b6..f9de712a0 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs | |||
@@ -18,7 +18,7 @@ use crossbeam_channel::{select, unbounded, RecvError, Sender}; | |||
18 | use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response}; | 18 | use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response}; |
19 | use lsp_types::{ClientCapabilities, NumberOrString}; | 19 | use lsp_types::{ClientCapabilities, NumberOrString}; |
20 | use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckTask}; | 20 | use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckTask}; |
21 | use ra_ide::{Canceled, FeatureFlags, FileId, LibraryData, SourceRootId}; | 21 | use ra_ide::{Canceled, FileId, LibraryData, SourceRootId}; |
22 | use ra_prof::profile; | 22 | use ra_prof::profile; |
23 | use ra_vfs::{VfsFile, VfsTask, Watch}; | 23 | use ra_vfs::{VfsFile, VfsTask, Watch}; |
24 | use relative_path::RelativePathBuf; | 24 | use relative_path::RelativePathBuf; |
@@ -28,6 +28,7 @@ use threadpool::ThreadPool; | |||
28 | 28 | ||
29 | use crate::{ | 29 | use crate::{ |
30 | diagnostics::DiagnosticTask, | 30 | diagnostics::DiagnosticTask, |
31 | feature_flags::FeatureFlags, | ||
31 | main_loop::{ | 32 | main_loop::{ |
32 | pending_requests::{PendingRequest, PendingRequests}, | 33 | pending_requests::{PendingRequest, PendingRequests}, |
33 | subscriptions::Subscriptions, | 34 | subscriptions::Subscriptions, |
@@ -423,7 +424,7 @@ fn loop_turn( | |||
423 | { | 424 | { |
424 | loop_state.workspace_loaded = true; | 425 | loop_state.workspace_loaded = true; |
425 | let n_packages: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum(); | 426 | let n_packages: usize = world_state.workspaces.iter().map(|it| it.n_packages()).sum(); |
426 | if world_state.feature_flags().get("notifications.workspace-loaded") { | 427 | if world_state.feature_flags.get("notifications.workspace-loaded") { |
427 | let msg = format!("workspace loaded, {} rust packages", n_packages); | 428 | let msg = format!("workspace loaded, {} rust packages", n_packages); |
428 | show_message(req::MessageType::Info, msg, &connection.sender); | 429 | show_message(req::MessageType::Info, msg, &connection.sender); |
429 | } | 430 | } |
@@ -839,7 +840,7 @@ fn update_file_notifications_on_threadpool( | |||
839 | subscriptions: Vec<FileId>, | 840 | subscriptions: Vec<FileId>, |
840 | ) { | 841 | ) { |
841 | log::trace!("updating notifications for {:?}", subscriptions); | 842 | log::trace!("updating notifications for {:?}", subscriptions); |
842 | let publish_diagnostics = world.feature_flags().get("lsp.diagnostics"); | 843 | let publish_diagnostics = world.feature_flags.get("lsp.diagnostics"); |
843 | pool.execute(move || { | 844 | pool.execute(move || { |
844 | for file_id in subscriptions { | 845 | for file_id in subscriptions { |
845 | if publish_diagnostics { | 846 | if publish_diagnostics { |
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs index 155f677a6..fcb40432d 100644 --- a/crates/rust-analyzer/src/main_loop/handlers.rs +++ b/crates/rust-analyzer/src/main_loop/handlers.rs | |||
@@ -425,12 +425,10 @@ pub fn handle_completion( | |||
425 | } | 425 | } |
426 | 426 | ||
427 | let options = CompletionOptions { | 427 | let options = CompletionOptions { |
428 | enable_postfix_completions: world.feature_flags().get("completion.enable-postfix"), | 428 | enable_postfix_completions: world.feature_flags.get("completion.enable-postfix"), |
429 | add_call_parenthesis: world | 429 | add_call_parenthesis: world.feature_flags.get("completion.insertion.add-call-parenthesis"), |
430 | .feature_flags() | ||
431 | .get("completion.insertion.add-call-parenthesis"), | ||
432 | add_call_argument_snippets: world | 430 | add_call_argument_snippets: world |
433 | .feature_flags() | 431 | .feature_flags |
434 | .get("completion.insertion.add-argument-snippets"), | 432 | .get("completion.insertion.add-argument-snippets"), |
435 | }; | 433 | }; |
436 | 434 | ||
@@ -471,7 +469,7 @@ pub fn handle_signature_help( | |||
471 | let _p = profile("handle_signature_help"); | 469 | let _p = profile("handle_signature_help"); |
472 | let position = params.try_conv_with(&world)?; | 470 | let position = params.try_conv_with(&world)?; |
473 | if let Some(call_info) = world.analysis().call_info(position)? { | 471 | if let Some(call_info) = world.analysis().call_info(position)? { |
474 | let concise = !world.analysis().feature_flags().get("call-info.full"); | 472 | let concise = !world.feature_flags.get("call-info.full"); |
475 | let mut active_parameter = call_info.active_parameter.map(|it| it as i64); | 473 | let mut active_parameter = call_info.active_parameter.map(|it| it as i64); |
476 | if concise && call_info.signature.has_self_param { | 474 | if concise && call_info.signature.has_self_param { |
477 | active_parameter = active_parameter.map(|it| it.saturating_sub(1)); | 475 | active_parameter = active_parameter.map(|it| it.saturating_sub(1)); |
diff --git a/crates/rust-analyzer/src/world.rs b/crates/rust-analyzer/src/world.rs index 6f394055a..1ddc3c1a5 100644 --- a/crates/rust-analyzer/src/world.rs +++ b/crates/rust-analyzer/src/world.rs | |||
@@ -13,8 +13,7 @@ use lsp_types::Url; | |||
13 | use parking_lot::RwLock; | 13 | use parking_lot::RwLock; |
14 | use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher}; | 14 | use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher}; |
15 | use ra_ide::{ | 15 | use ra_ide::{ |
16 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FeatureFlags, FileId, LibraryData, | 16 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, LibraryData, SourceRootId, |
17 | SourceRootId, | ||
18 | }; | 17 | }; |
19 | use ra_project_model::{get_rustc_cfg_options, ProjectWorkspace}; | 18 | use ra_project_model::{get_rustc_cfg_options, ProjectWorkspace}; |
20 | use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask, Watch}; | 19 | use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask, Watch}; |
@@ -22,6 +21,7 @@ use relative_path::RelativePathBuf; | |||
22 | 21 | ||
23 | use crate::{ | 22 | use crate::{ |
24 | diagnostics::{CheckFixes, DiagnosticCollection}, | 23 | diagnostics::{CheckFixes, DiagnosticCollection}, |
24 | feature_flags::FeatureFlags, | ||
25 | main_loop::pending_requests::{CompletedRequest, LatestRequests}, | 25 | main_loop::pending_requests::{CompletedRequest, LatestRequests}, |
26 | vfs_glob::{Glob, RustPackageFilterBuilder}, | 26 | vfs_glob::{Glob, RustPackageFilterBuilder}, |
27 | LspError, Result, | 27 | LspError, Result, |
@@ -45,6 +45,7 @@ pub struct Options { | |||
45 | #[derive(Debug)] | 45 | #[derive(Debug)] |
46 | pub struct WorldState { | 46 | pub struct WorldState { |
47 | pub options: Options, | 47 | pub options: Options, |
48 | pub feature_flags: Arc<FeatureFlags>, | ||
48 | //FIXME: this belongs to `LoopState` rather than to `WorldState` | 49 | //FIXME: this belongs to `LoopState` rather than to `WorldState` |
49 | pub roots_to_scan: usize, | 50 | pub roots_to_scan: usize, |
50 | pub roots: Vec<PathBuf>, | 51 | pub roots: Vec<PathBuf>, |
@@ -60,6 +61,7 @@ pub struct WorldState { | |||
60 | /// An immutable snapshot of the world's state at a point in time. | 61 | /// An immutable snapshot of the world's state at a point in time. |
61 | pub struct WorldSnapshot { | 62 | pub struct WorldSnapshot { |
62 | pub options: Options, | 63 | pub options: Options, |
64 | pub feature_flags: Arc<FeatureFlags>, | ||
63 | pub workspaces: Arc<Vec<ProjectWorkspace>>, | 65 | pub workspaces: Arc<Vec<ProjectWorkspace>>, |
64 | pub analysis: Analysis, | 66 | pub analysis: Analysis, |
65 | pub latest_requests: Arc<RwLock<LatestRequests>>, | 67 | pub latest_requests: Arc<RwLock<LatestRequests>>, |
@@ -146,10 +148,11 @@ impl WorldState { | |||
146 | CheckWatcher::dummy() | 148 | CheckWatcher::dummy() |
147 | }); | 149 | }); |
148 | 150 | ||
149 | let mut analysis_host = AnalysisHost::new(lru_capacity, feature_flags); | 151 | let mut analysis_host = AnalysisHost::new(lru_capacity); |
150 | analysis_host.apply_change(change); | 152 | analysis_host.apply_change(change); |
151 | WorldState { | 153 | WorldState { |
152 | options, | 154 | options, |
155 | feature_flags: Arc::new(feature_flags), | ||
153 | roots_to_scan, | 156 | roots_to_scan, |
154 | roots: folder_roots, | 157 | roots: folder_roots, |
155 | workspaces: Arc::new(workspaces), | 158 | workspaces: Arc::new(workspaces), |
@@ -216,6 +219,7 @@ impl WorldState { | |||
216 | pub fn snapshot(&self) -> WorldSnapshot { | 219 | pub fn snapshot(&self) -> WorldSnapshot { |
217 | WorldSnapshot { | 220 | WorldSnapshot { |
218 | options: self.options.clone(), | 221 | options: self.options.clone(), |
222 | feature_flags: Arc::clone(&self.feature_flags), | ||
219 | workspaces: Arc::clone(&self.workspaces), | 223 | workspaces: Arc::clone(&self.workspaces), |
220 | analysis: self.analysis_host.analysis(), | 224 | analysis: self.analysis_host.analysis(), |
221 | vfs: Arc::clone(&self.vfs), | 225 | vfs: Arc::clone(&self.vfs), |
@@ -235,10 +239,6 @@ impl WorldState { | |||
235 | pub fn complete_request(&mut self, request: CompletedRequest) { | 239 | pub fn complete_request(&mut self, request: CompletedRequest) { |
236 | self.latest_requests.write().record(request) | 240 | self.latest_requests.write().record(request) |
237 | } | 241 | } |
238 | |||
239 | pub fn feature_flags(&self) -> &FeatureFlags { | ||
240 | self.analysis_host.feature_flags() | ||
241 | } | ||
242 | } | 242 | } |
243 | 243 | ||
244 | impl WorldSnapshot { | 244 | impl WorldSnapshot { |
@@ -306,8 +306,4 @@ impl WorldSnapshot { | |||
306 | let path = self.vfs.read().file2path(VfsFile(file_id.0)); | 306 | let path = self.vfs.read().file2path(VfsFile(file_id.0)); |
307 | self.workspaces.iter().find_map(|ws| ws.workspace_root_for(&path)) | 307 | self.workspaces.iter().find_map(|ws| ws.workspace_root_for(&path)) |
308 | } | 308 | } |
309 | |||
310 | pub fn feature_flags(&self) -> &FeatureFlags { | ||
311 | self.analysis.feature_flags() | ||
312 | } | ||
313 | } | 309 | } |