diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/rust-analyzer/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/rust-analyzer/src/bin/args.rs | 23 |
2 files changed, 16 insertions, 9 deletions
diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 3cb45b030..268c00942 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml | |||
@@ -24,7 +24,7 @@ jod-thread = "0.1.0" | |||
24 | log = "0.4.8" | 24 | log = "0.4.8" |
25 | lsp-types = { version = "0.86.0", features = ["proposed"] } | 25 | lsp-types = { version = "0.86.0", features = ["proposed"] } |
26 | parking_lot = "0.11.0" | 26 | parking_lot = "0.11.0" |
27 | pico-args = "0.3.1" | 27 | pico-args = "0.4.0" |
28 | oorandom = "11.1.2" | 28 | oorandom = "11.1.2" |
29 | rustc-hash = "1.1.0" | 29 | rustc-hash = "1.1.0" |
30 | serde = { version = "1.0.106", features = ["derive"] } | 30 | serde = { version = "1.0.106", features = ["derive"] } |
diff --git a/crates/rust-analyzer/src/bin/args.rs b/crates/rust-analyzer/src/bin/args.rs index 0a471154e..7d917946e 100644 --- a/crates/rust-analyzer/src/bin/args.rs +++ b/crates/rust-analyzer/src/bin/args.rs | |||
@@ -109,7 +109,7 @@ impl Args { | |||
109 | let mut matches = Arguments::from_env(); | 109 | let mut matches = Arguments::from_env(); |
110 | 110 | ||
111 | if matches.contains("--version") { | 111 | if matches.contains("--version") { |
112 | matches.finish()?; | 112 | finish_args(matches)?; |
113 | return Ok(Args { | 113 | return Ok(Args { |
114 | verbosity: Verbosity::Normal, | 114 | verbosity: Verbosity::Normal, |
115 | log_file: None, | 115 | log_file: None, |
@@ -143,7 +143,7 @@ impl Args { | |||
143 | let subcommand = match matches.subcommand()? { | 143 | let subcommand = match matches.subcommand()? { |
144 | Some(it) => it, | 144 | Some(it) => it, |
145 | None => { | 145 | None => { |
146 | matches.finish()?; | 146 | finish_args(matches)?; |
147 | return Ok(Args { verbosity, log_file, command: Command::RunServer }); | 147 | return Ok(Args { verbosity, log_file, command: Command::RunServer }); |
148 | } | 148 | } |
149 | }; | 149 | }; |
@@ -160,7 +160,7 @@ impl Args { | |||
160 | load_output_dirs: matches.contains("--load-output-dirs"), | 160 | load_output_dirs: matches.contains("--load-output-dirs"), |
161 | with_proc_macro: matches.contains("--with-proc-macro"), | 161 | with_proc_macro: matches.contains("--with-proc-macro"), |
162 | path: matches | 162 | path: matches |
163 | .free_from_str()? | 163 | .opt_free_from_str()? |
164 | .ok_or_else(|| format_err!("expected positional argument"))?, | 164 | .ok_or_else(|| format_err!("expected positional argument"))?, |
165 | }), | 165 | }), |
166 | "analysis-bench" => Command::Bench(BenchCmd { | 166 | "analysis-bench" => Command::Bench(BenchCmd { |
@@ -187,21 +187,21 @@ impl Args { | |||
187 | load_output_dirs: matches.contains("--load-output-dirs"), | 187 | load_output_dirs: matches.contains("--load-output-dirs"), |
188 | with_proc_macro: matches.contains("--with-proc-macro"), | 188 | with_proc_macro: matches.contains("--with-proc-macro"), |
189 | path: matches | 189 | path: matches |
190 | .free_from_str()? | 190 | .opt_free_from_str()? |
191 | .ok_or_else(|| format_err!("expected positional argument"))?, | 191 | .ok_or_else(|| format_err!("expected positional argument"))?, |
192 | }), | 192 | }), |
193 | "diagnostics" => Command::Diagnostics { | 193 | "diagnostics" => Command::Diagnostics { |
194 | load_output_dirs: matches.contains("--load-output-dirs"), | 194 | load_output_dirs: matches.contains("--load-output-dirs"), |
195 | with_proc_macro: matches.contains("--with-proc-macro"), | 195 | with_proc_macro: matches.contains("--with-proc-macro"), |
196 | path: matches | 196 | path: matches |
197 | .free_from_str()? | 197 | .opt_free_from_str()? |
198 | .ok_or_else(|| format_err!("expected positional argument"))?, | 198 | .ok_or_else(|| format_err!("expected positional argument"))?, |
199 | }, | 199 | }, |
200 | "proc-macro" => Command::ProcMacro, | 200 | "proc-macro" => Command::ProcMacro, |
201 | "ssr" => Command::Ssr { | 201 | "ssr" => Command::Ssr { |
202 | rules: { | 202 | rules: { |
203 | let mut acc = Vec::new(); | 203 | let mut acc = Vec::new(); |
204 | while let Some(rule) = matches.free_from_str()? { | 204 | while let Some(rule) = matches.opt_free_from_str()? { |
205 | acc.push(rule); | 205 | acc.push(rule); |
206 | } | 206 | } |
207 | acc | 207 | acc |
@@ -211,7 +211,7 @@ impl Args { | |||
211 | debug_snippet: matches.opt_value_from_str("--debug")?, | 211 | debug_snippet: matches.opt_value_from_str("--debug")?, |
212 | patterns: { | 212 | patterns: { |
213 | let mut acc = Vec::new(); | 213 | let mut acc = Vec::new(); |
214 | while let Some(rule) = matches.free_from_str()? { | 214 | while let Some(rule) = matches.opt_free_from_str()? { |
215 | acc.push(rule); | 215 | acc.push(rule); |
216 | } | 216 | } |
217 | acc | 217 | acc |
@@ -222,7 +222,14 @@ impl Args { | |||
222 | return Ok(Args { verbosity, log_file: None, command: Command::Help }); | 222 | return Ok(Args { verbosity, log_file: None, command: Command::Help }); |
223 | } | 223 | } |
224 | }; | 224 | }; |
225 | matches.finish()?; | 225 | finish_args(matches)?; |
226 | Ok(Args { verbosity, log_file, command }) | 226 | Ok(Args { verbosity, log_file, command }) |
227 | } | 227 | } |
228 | } | 228 | } |
229 | |||
230 | fn finish_args(args: Arguments) -> Result<()> { | ||
231 | if !args.finish().is_empty() { | ||
232 | bail!("Unused arguments."); | ||
233 | } | ||
234 | Ok(()) | ||
235 | } | ||