aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_db')
-rw-r--r--crates/ra_ide_db/Cargo.toml2
-rw-r--r--crates/ra_ide_db/src/feature_flags.rs73
-rw-r--r--crates/ra_ide_db/src/lib.rs10
-rw-r--r--crates/ra_ide_db/src/symbol_index.rs4
4 files changed, 6 insertions, 83 deletions
diff --git a/crates/ra_ide_db/Cargo.toml b/crates/ra_ide_db/Cargo.toml
index 52f0f23df..de4f5bce0 100644
--- a/crates/ra_ide_db/Cargo.toml
+++ b/crates/ra_ide_db/Cargo.toml
@@ -13,7 +13,7 @@ wasm = []
13[dependencies] 13[dependencies]
14log = "0.4.8" 14log = "0.4.8"
15rayon = "1.3.0" 15rayon = "1.3.0"
16fst = { version = "0.3.5", default-features = false } 16fst = { version = "0.4", default-features = false }
17rustc-hash = "1.1.0" 17rustc-hash = "1.1.0"
18superslice = "1.0.0" 18superslice = "1.0.0"
19once_cell = "1.3.1" 19once_cell = "1.3.1"
diff --git a/crates/ra_ide_db/src/feature_flags.rs b/crates/ra_ide_db/src/feature_flags.rs
deleted file mode 100644
index 968415072..000000000
--- a/crates/ra_ide_db/src/feature_flags.rs
+++ /dev/null
@@ -1,73 +0,0 @@
1//! See docs for `FeatureFlags`.
2
3use rustc_hash::FxHashMap;
4
5/// Feature flags hold fine-grained toggles for all *user-visible* features of
6/// rust-analyzer.
7///
8/// The exists such that users are able to disable any annoying feature (and,
9/// with many users and many features, some features are bound to be annoying
10/// for some users)
11///
12/// Note that we purposefully use run-time checked strings, and not something
13/// checked at compile time, to keep things simple and flexible.
14///
15/// Also note that, at the moment, `FeatureFlags` also store features for
16/// `rust-analyzer`. This should be benign layering violation.
17#[derive(Debug)]
18pub struct FeatureFlags {
19 flags: FxHashMap<String, bool>,
20}
21
22impl FeatureFlags {
23 fn new(flags: &[(&str, bool)]) -> FeatureFlags {
24 let flags = flags
25 .iter()
26 .map(|&(name, value)| {
27 check_flag_name(name);
28 (name.to_string(), value)
29 })
30 .collect();
31 FeatureFlags { flags }
32 }
33
34 pub fn set(&mut self, flag: &str, value: bool) -> Result<(), ()> {
35 match self.flags.get_mut(flag) {
36 None => Err(()),
37 Some(slot) => {
38 *slot = value;
39 Ok(())
40 }
41 }
42 }
43
44 pub fn get(&self, flag: &str) -> bool {
45 match self.flags.get(flag) {
46 None => panic!("unknown flag: {:?}", flag),
47 Some(value) => *value,
48 }
49 }
50}
51
52impl Default for FeatureFlags {
53 fn default() -> FeatureFlags {
54 FeatureFlags::new(&[
55 ("lsp.diagnostics", true),
56 ("completion.insertion.add-call-parenthesis", true),
57 ("completion.insertion.add-argument-snippets", true),
58 ("completion.enable-postfix", true),
59 ("call-info.full", true),
60 ("notifications.workspace-loaded", true),
61 ("notifications.cargo-toml-not-found", true),
62 ])
63 }
64}
65
66fn check_flag_name(flag: &str) {
67 for c in flag.bytes() {
68 match c {
69 b'a'..=b'z' | b'-' | b'.' => (),
70 _ => panic!("flag name does not match conventions: {:?}", flag),
71 }
72 }
73}
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 @@
5pub mod marks; 5pub mod marks;
6pub mod line_index; 6pub mod line_index;
7pub mod line_index_utils; 7pub mod line_index_utils;
8pub mod feature_flags;
9pub mod symbol_index; 8pub mod symbol_index;
10pub mod change; 9pub mod change;
11pub mod defs; 10pub mod defs;
@@ -22,7 +21,7 @@ use ra_db::{
22}; 21};
23use rustc_hash::FxHashMap; 22use rustc_hash::FxHashMap;
24 23
25use crate::{feature_flags::FeatureFlags, line_index::LineIndex, symbol_index::SymbolsDatabase}; 24use 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)]
38pub struct RootDatabase { 37pub 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
83impl Default for RootDatabase { 81impl 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
89impl RootDatabase { 87impl 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/ra_ide_db/src/symbol_index.rs b/crates/ra_ide_db/src/symbol_index.rs
index e6b3126b6..884359ee3 100644
--- a/crates/ra_ide_db/src/symbol_index.rs
+++ b/crates/ra_ide_db/src/symbol_index.rs
@@ -163,7 +163,7 @@ pub fn index_resolve(db: &RootDatabase, name_ref: &ast::NameRef) -> Vec<FileSymb
163#[derive(Default)] 163#[derive(Default)]
164pub struct SymbolIndex { 164pub struct SymbolIndex {
165 symbols: Vec<FileSymbol>, 165 symbols: Vec<FileSymbol>,
166 map: fst::Map, 166 map: fst::Map<Vec<u8>>,
167} 167}
168 168
169impl fmt::Debug for SymbolIndex { 169impl fmt::Debug for SymbolIndex {
@@ -221,7 +221,7 @@ impl SymbolIndex {
221 builder.insert(key, value).unwrap(); 221 builder.insert(key, value).unwrap();
222 } 222 }
223 223
224 let map = fst::Map::from_bytes(builder.into_inner().unwrap()).unwrap(); 224 let map = fst::Map::new(builder.into_inner().unwrap()).unwrap();
225 SymbolIndex { symbols, map } 225 SymbolIndex { symbols, map }
226 } 226 }
227 227