diff options
Diffstat (limited to 'crates/ra_lsp_server')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index 047c86a3b..7a49cad86 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -62,6 +62,22 @@ pub fn main_loop( | |||
62 | 62 | ||
63 | let mut loop_state = LoopState::default(); | 63 | let mut loop_state = LoopState::default(); |
64 | let mut world_state = { | 64 | let mut world_state = { |
65 | let feature_flags = { | ||
66 | let mut ff = FeatureFlags::default(); | ||
67 | for (flag, value) in config.feature_flags { | ||
68 | if ff.set(flag.as_str(), value).is_err() { | ||
69 | log::error!("unknown feature flag: {:?}", flag); | ||
70 | show_message( | ||
71 | req::MessageType::Error, | ||
72 | format!("unknown feature flag: {:?}", flag), | ||
73 | &connection.sender, | ||
74 | ); | ||
75 | } | ||
76 | } | ||
77 | ff | ||
78 | }; | ||
79 | log::info!("feature_flags: {:#?}", feature_flags); | ||
80 | |||
65 | // FIXME: support dynamic workspace loading. | 81 | // FIXME: support dynamic workspace loading. |
66 | let workspaces = { | 82 | let workspaces = { |
67 | let mut loaded_workspaces = Vec::new(); | 83 | let mut loaded_workspaces = Vec::new(); |
@@ -75,7 +91,12 @@ pub fn main_loop( | |||
75 | Ok(workspace) => loaded_workspaces.push(workspace), | 91 | Ok(workspace) => loaded_workspaces.push(workspace), |
76 | Err(e) => { | 92 | Err(e) => { |
77 | log::error!("loading workspace failed: {}", e); | 93 | log::error!("loading workspace failed: {}", e); |
78 | 94 | if let Some(ra_project_model::CargoTomlNotFoundError(_)) = e.downcast_ref() | |
95 | { | ||
96 | if !feature_flags.get("notifications.cargo-toml-not-found") { | ||
97 | continue; | ||
98 | } | ||
99 | } | ||
79 | show_message( | 100 | show_message( |
80 | req::MessageType::Error, | 101 | req::MessageType::Error, |
81 | format!("rust-analyzer failed to load workspace: {}", e), | 102 | format!("rust-analyzer failed to load workspace: {}", e), |
@@ -136,22 +157,6 @@ pub fn main_loop( | |||
136 | } | 157 | } |
137 | }; | 158 | }; |
138 | 159 | ||
139 | let feature_flags = { | ||
140 | let mut ff = FeatureFlags::default(); | ||
141 | for (flag, value) in config.feature_flags { | ||
142 | if ff.set(flag.as_str(), value).is_err() { | ||
143 | log::error!("unknown feature flag: {:?}", flag); | ||
144 | show_message( | ||
145 | req::MessageType::Error, | ||
146 | format!("unknown feature flag: {:?}", flag), | ||
147 | &connection.sender, | ||
148 | ); | ||
149 | } | ||
150 | } | ||
151 | ff | ||
152 | }; | ||
153 | log::info!("feature_flags: {:#?}", feature_flags); | ||
154 | |||
155 | WorldState::new( | 160 | WorldState::new( |
156 | ws_roots, | 161 | ws_roots, |
157 | workspaces, | 162 | workspaces, |