diff options
author | veetaha <[email protected]> | 2020-05-31 03:13:08 +0100 |
---|---|---|
committer | veetaha <[email protected]> | 2020-05-31 03:21:45 +0100 |
commit | d605ec9c321392d9c7ee4b440c560e1e405d92e6 (patch) | |
tree | 58d16996d1d1a05733dcc85ae4efddc563b3d3b1 /crates | |
parent | a419cedb1cc661349a022262c8b03993e063252f (diff) |
Change Runnable.bin -> Runnable.kind
As per matklad, we now pass the responsibility for finding the binary to the frontend.
Also, added caching for finding the binary path to reduce
the amount of filesystem interactions.
Diffstat (limited to 'crates')
-rw-r--r-- | crates/rust-analyzer/Cargo.toml | 1 | ||||
-rw-r--r-- | crates/rust-analyzer/src/lsp_ext.rs | 11 | ||||
-rw-r--r-- | crates/rust-analyzer/src/main_loop/handlers.rs | 14 | ||||
-rw-r--r-- | crates/rust-analyzer/tests/heavy_tests/main.rs | 14 |
4 files changed, 18 insertions, 22 deletions
diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 2e49448cc..65b487db3 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml | |||
@@ -48,7 +48,6 @@ hir = { path = "../ra_hir", package = "ra_hir" } | |||
48 | hir_def = { path = "../ra_hir_def", package = "ra_hir_def" } | 48 | hir_def = { path = "../ra_hir_def", package = "ra_hir_def" } |
49 | hir_ty = { path = "../ra_hir_ty", package = "ra_hir_ty" } | 49 | hir_ty = { path = "../ra_hir_ty", package = "ra_hir_ty" } |
50 | ra_proc_macro_srv = { path = "../ra_proc_macro_srv" } | 50 | ra_proc_macro_srv = { path = "../ra_proc_macro_srv" } |
51 | ra_toolchain = { path = "../ra_toolchain" } | ||
52 | 51 | ||
53 | [target.'cfg(windows)'.dependencies] | 52 | [target.'cfg(windows)'.dependencies] |
54 | winapi = "0.3.8" | 53 | winapi = "0.3.8" |
diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index acb1dacb6..173c23b9e 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs | |||
@@ -121,12 +121,21 @@ pub struct RunnablesParams { | |||
121 | pub position: Option<Position>, | 121 | pub position: Option<Position>, |
122 | } | 122 | } |
123 | 123 | ||
124 | // Must strictly correspond to the executable name | ||
125 | #[derive(Serialize, Deserialize, Debug)] | ||
126 | #[serde(rename_all = "lowercase")] | ||
127 | pub enum RunnableKind { | ||
128 | Cargo, | ||
129 | Rustc, | ||
130 | Rustup, | ||
131 | } | ||
132 | |||
124 | #[derive(Deserialize, Serialize, Debug)] | 133 | #[derive(Deserialize, Serialize, Debug)] |
125 | #[serde(rename_all = "camelCase")] | 134 | #[serde(rename_all = "camelCase")] |
126 | pub struct Runnable { | 135 | pub struct Runnable { |
127 | pub range: Range, | 136 | pub range: Range, |
128 | pub label: String, | 137 | pub label: String, |
129 | pub bin: String, | 138 | pub kind: RunnableKind, |
130 | pub args: Vec<String>, | 139 | pub args: Vec<String>, |
131 | pub extra_args: Vec<String>, | 140 | pub extra_args: Vec<String>, |
132 | pub env: FxHashMap<String, String>, | 141 | pub env: FxHashMap<String, String>, |
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs index d42cfa300..bc7c7f1ef 100644 --- a/crates/rust-analyzer/src/main_loop/handlers.rs +++ b/crates/rust-analyzer/src/main_loop/handlers.rs | |||
@@ -40,7 +40,6 @@ use crate::{ | |||
40 | world::WorldSnapshot, | 40 | world::WorldSnapshot, |
41 | LspError, Result, | 41 | LspError, Result, |
42 | }; | 42 | }; |
43 | use anyhow::Context; | ||
44 | 43 | ||
45 | pub fn handle_analyzer_status(world: WorldSnapshot, _: ()) -> Result<String> { | 44 | pub fn handle_analyzer_status(world: WorldSnapshot, _: ()) -> Result<String> { |
46 | let _p = profile("handle_analyzer_status"); | 45 | let _p = profile("handle_analyzer_status"); |
@@ -427,7 +426,7 @@ pub fn handle_runnables( | |||
427 | res.push(lsp_ext::Runnable { | 426 | res.push(lsp_ext::Runnable { |
428 | range: Default::default(), | 427 | range: Default::default(), |
429 | label: format!("cargo {} -p {}", cmd, spec.package), | 428 | label: format!("cargo {} -p {}", cmd, spec.package), |
430 | bin: cargo_path()?, | 429 | kind: lsp_ext::RunnableKind::Cargo, |
431 | args: vec![cmd.to_string(), "--package".to_string(), spec.package.clone()], | 430 | args: vec![cmd.to_string(), "--package".to_string(), spec.package.clone()], |
432 | extra_args: Vec::new(), | 431 | extra_args: Vec::new(), |
433 | env: FxHashMap::default(), | 432 | env: FxHashMap::default(), |
@@ -439,7 +438,7 @@ pub fn handle_runnables( | |||
439 | res.push(lsp_ext::Runnable { | 438 | res.push(lsp_ext::Runnable { |
440 | range: Default::default(), | 439 | range: Default::default(), |
441 | label: "cargo check --workspace".to_string(), | 440 | label: "cargo check --workspace".to_string(), |
442 | bin: cargo_path()?, | 441 | kind: lsp_ext::RunnableKind::Cargo, |
443 | args: vec!["check".to_string(), "--workspace".to_string()], | 442 | args: vec!["check".to_string(), "--workspace".to_string()], |
444 | extra_args: Vec::new(), | 443 | extra_args: Vec::new(), |
445 | env: FxHashMap::default(), | 444 | env: FxHashMap::default(), |
@@ -450,13 +449,6 @@ pub fn handle_runnables( | |||
450 | Ok(res) | 449 | Ok(res) |
451 | } | 450 | } |
452 | 451 | ||
453 | fn cargo_path() -> Result<String> { | ||
454 | Ok(ra_toolchain::cargo() | ||
455 | .to_str() | ||
456 | .context("Path to `cargo` executable contains invalid UTF8 characters")? | ||
457 | .to_owned()) | ||
458 | } | ||
459 | |||
460 | pub fn handle_completion( | 452 | pub fn handle_completion( |
461 | world: WorldSnapshot, | 453 | world: WorldSnapshot, |
462 | params: lsp_types::CompletionParams, | 454 | params: lsp_types::CompletionParams, |
@@ -994,7 +986,7 @@ fn to_lsp_runnable( | |||
994 | Ok(lsp_ext::Runnable { | 986 | Ok(lsp_ext::Runnable { |
995 | range: to_proto::range(&line_index, runnable.range), | 987 | range: to_proto::range(&line_index, runnable.range), |
996 | label, | 988 | label, |
997 | bin: cargo_path()?, | 989 | kind: lsp_ext::RunnableKind::Cargo, |
998 | args, | 990 | args, |
999 | extra_args, | 991 | extra_args, |
1000 | env: { | 992 | env: { |
diff --git a/crates/rust-analyzer/tests/heavy_tests/main.rs b/crates/rust-analyzer/tests/heavy_tests/main.rs index a31580c86..8b473ff74 100644 --- a/crates/rust-analyzer/tests/heavy_tests/main.rs +++ b/crates/rust-analyzer/tests/heavy_tests/main.rs | |||
@@ -58,10 +58,6 @@ use std::collections::Spam; | |||
58 | eprintln!("completion took {:?}", completion_start.elapsed()); | 58 | eprintln!("completion took {:?}", completion_start.elapsed()); |
59 | } | 59 | } |
60 | 60 | ||
61 | fn cargo_path() -> String { | ||
62 | ra_toolchain::cargo().to_str().unwrap().to_owned() | ||
63 | } | ||
64 | |||
65 | #[test] | 61 | #[test] |
66 | fn test_runnables_no_project() { | 62 | fn test_runnables_no_project() { |
67 | if skip_slow_tests() { | 63 | if skip_slow_tests() { |
@@ -83,7 +79,7 @@ fn foo() { | |||
83 | { | 79 | { |
84 | "args": [ "test" ], | 80 | "args": [ "test" ], |
85 | "extraArgs": [ "foo", "--nocapture" ], | 81 | "extraArgs": [ "foo", "--nocapture" ], |
86 | "bin": cargo_path(), | 82 | "kind": "cargo", |
87 | "env": { "RUST_BACKTRACE": "short" }, | 83 | "env": { "RUST_BACKTRACE": "short" }, |
88 | "cwd": null, | 84 | "cwd": null, |
89 | "label": "test foo", | 85 | "label": "test foo", |
@@ -95,7 +91,7 @@ fn foo() { | |||
95 | { | 91 | { |
96 | "args": ["check", "--workspace"], | 92 | "args": ["check", "--workspace"], |
97 | "extraArgs": [], | 93 | "extraArgs": [], |
98 | "bin": cargo_path(), | 94 | "kind": "cargo", |
99 | "env": {}, | 95 | "env": {}, |
100 | "cwd": null, | 96 | "cwd": null, |
101 | "label": "cargo check --workspace", | 97 | "label": "cargo check --workspace", |
@@ -145,7 +141,7 @@ fn main() {} | |||
145 | { | 141 | { |
146 | "args": [ "test", "--package", "foo", "--test", "spam" ], | 142 | "args": [ "test", "--package", "foo", "--test", "spam" ], |
147 | "extraArgs": [ "test_eggs", "--exact", "--nocapture" ], | 143 | "extraArgs": [ "test_eggs", "--exact", "--nocapture" ], |
148 | "bin": cargo_path(), | 144 | "kind": "cargo", |
149 | "env": { "RUST_BACKTRACE": "short" }, | 145 | "env": { "RUST_BACKTRACE": "short" }, |
150 | "label": "test test_eggs", | 146 | "label": "test test_eggs", |
151 | "range": { | 147 | "range": { |
@@ -157,7 +153,7 @@ fn main() {} | |||
157 | { | 153 | { |
158 | "args": [ "check", "--package", "foo" ], | 154 | "args": [ "check", "--package", "foo" ], |
159 | "extraArgs": [], | 155 | "extraArgs": [], |
160 | "bin": cargo_path(), | 156 | "kind": "cargo", |
161 | "env": {}, | 157 | "env": {}, |
162 | "label": "cargo check -p foo", | 158 | "label": "cargo check -p foo", |
163 | "range": { | 159 | "range": { |
@@ -169,7 +165,7 @@ fn main() {} | |||
169 | { | 165 | { |
170 | "args": [ "test", "--package", "foo" ], | 166 | "args": [ "test", "--package", "foo" ], |
171 | "extraArgs": [], | 167 | "extraArgs": [], |
172 | "bin": cargo_path(), | 168 | "kind": "cargo", |
173 | "env": {}, | 169 | "env": {}, |
174 | "label": "cargo test -p foo", | 170 | "label": "cargo test -p foo", |
175 | "range": { | 171 | "range": { |