diff options
-rw-r--r-- | crates/rust-analyzer/src/config.rs | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index b6a015790..4734df16a 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs | |||
@@ -131,37 +131,47 @@ impl Config { | |||
131 | set(value, "/cargo/allFeatures", &mut self.cargo.all_features); | 131 | set(value, "/cargo/allFeatures", &mut self.cargo.all_features); |
132 | set(value, "/cargo/features", &mut self.cargo.features); | 132 | set(value, "/cargo/features", &mut self.cargo.features); |
133 | set(value, "/cargo/loadOutDirsFromCheck", &mut self.cargo.load_out_dirs_from_check); | 133 | set(value, "/cargo/loadOutDirsFromCheck", &mut self.cargo.load_out_dirs_from_check); |
134 | if let Some(mut args) = get::<Vec<String>>(value, "/rustfmt/overrideCommand") { | 134 | match get::<Vec<String>>(value, "/rustfmt/overrideCommand") { |
135 | if !args.is_empty() { | 135 | Some(mut args) if !args.is_empty() => { |
136 | let command = args.remove(0); | 136 | let command = args.remove(0); |
137 | self.rustfmt = RustfmtConfig::CustomCommand { | 137 | self.rustfmt = RustfmtConfig::CustomCommand { |
138 | command, | 138 | command, |
139 | args, | 139 | args, |
140 | } | 140 | } |
141 | } | 141 | } |
142 | } else if let RustfmtConfig::Rustfmt { extra_args } = &mut self.rustfmt { | 142 | _ => { |
143 | set(value, "/rustfmt/extraArgs", extra_args); | 143 | if let RustfmtConfig::Rustfmt { extra_args } = &mut self.rustfmt { |
144 | } | 144 | set(value, "/rustfmt/extraArgs", extra_args); |
145 | } | ||
146 | } | ||
147 | }; | ||
145 | 148 | ||
146 | if let Some(false) = get(value, "/checkOnSave/enable") { | 149 | if let Some(false) = get(value, "/checkOnSave/enable") { |
150 | // check is disabled | ||
147 | self.check = None; | 151 | self.check = None; |
148 | } else { | 152 | } else { |
149 | if let Some(mut args) = get::<Vec<String>>(value, "/checkOnSave/overrideCommand") { | 153 | // check is enabled |
150 | if !args.is_empty() { | 154 | match get::<Vec<String>>(value, "/checkOnSave/overrideCommand") { |
155 | // first see if the user has completely overridden the command | ||
156 | Some(mut args) if !args.is_empty() => { | ||
151 | let command = args.remove(0); | 157 | let command = args.remove(0); |
152 | self.check = Some(FlycheckConfig::CustomCommand { | 158 | self.check = Some(FlycheckConfig::CustomCommand { |
153 | command, | 159 | command, |
154 | args, | 160 | args, |
155 | }); | 161 | }); |
156 | } | 162 | } |
157 | 163 | // otherwise configure command customizations | |
158 | } else if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets }) = &mut self.check | 164 | _ => { |
159 | { | 165 | if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets }) |
160 | set(value, "/checkOnSave/extraArgs", extra_args); | 166 | = &mut self.check |
161 | set(value, "/checkOnSave/command", command); | 167 | { |
162 | set(value, "/checkOnSave/allTargets", all_targets); | 168 | set(value, "/checkOnSave/extraArgs", extra_args); |
163 | } | 169 | set(value, "/checkOnSave/command", command); |
164 | }; | 170 | set(value, "/checkOnSave/allTargets", all_targets); |
171 | } | ||
172 | } | ||
173 | }; | ||
174 | } | ||
165 | 175 | ||
166 | set(value, "/inlayHints/typeHints", &mut self.inlay_hints.type_hints); | 176 | set(value, "/inlayHints/typeHints", &mut self.inlay_hints.type_hints); |
167 | set(value, "/inlayHints/parameterHints", &mut self.inlay_hints.parameter_hints); | 177 | set(value, "/inlayHints/parameterHints", &mut self.inlay_hints.parameter_hints); |