aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src/cargo_target_spec.rs
diff options
context:
space:
mode:
authorDavid Wood <[email protected]>2019-03-05 21:29:23 +0000
committerDavid Wood <[email protected]>2019-03-07 00:05:03 +0000
commit00d927a1885ec2938d3365a8e136993445b437f5 (patch)
treee60f63e68def477d5b7ceb39dcc965ff128d6e19 /crates/ra_lsp_server/src/cargo_target_spec.rs
parentb1a1d20e067c25fb80fbab43b2956b6747a8dd3c (diff)
Initial implementation of project-lock.json.
This commit adds a initial implementation of project-lock.json, a build system agnostic method of specifying the crate graph and roots.
Diffstat (limited to 'crates/ra_lsp_server/src/cargo_target_spec.rs')
-rw-r--r--crates/ra_lsp_server/src/cargo_target_spec.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/crates/ra_lsp_server/src/cargo_target_spec.rs b/crates/ra_lsp_server/src/cargo_target_spec.rs
index e011eab7c..cdf2ec10b 100644
--- a/crates/ra_lsp_server/src/cargo_target_spec.rs
+++ b/crates/ra_lsp_server/src/cargo_target_spec.rs
@@ -1,5 +1,5 @@
1use crate::{ 1use crate::{
2 project_model::TargetKind, 2 project_model::{self, TargetKind},
3 server_world::ServerWorld, 3 server_world::ServerWorld,
4 Result 4 Result
5}; 5};
@@ -65,14 +65,16 @@ impl CargoTargetSpec {
65 }; 65 };
66 let file_id = world.analysis().crate_root(crate_id)?; 66 let file_id = world.analysis().crate_root(crate_id)?;
67 let path = world.vfs.read().file2path(ra_vfs::VfsFile(file_id.0.into())); 67 let path = world.vfs.read().file2path(ra_vfs::VfsFile(file_id.0.into()));
68 let res = world.workspaces.iter().find_map(|ws| { 68 let res = world.workspaces.iter().find_map(|ws| match ws {
69 let tgt = ws.cargo.target_by_root(&path)?; 69 project_model::ProjectWorkspace::Cargo { cargo, .. } => {
70 let res = CargoTargetSpec { 70 let tgt = cargo.target_by_root(&path)?;
71 package: tgt.package(&ws.cargo).name(&ws.cargo).to_string(), 71 Some(CargoTargetSpec {
72 target: tgt.name(&ws.cargo).to_string(), 72 package: tgt.package(&cargo).name(&cargo).to_string(),
73 target_kind: tgt.kind(&ws.cargo), 73 target: tgt.name(&cargo).to_string(),
74 }; 74 target_kind: tgt.kind(&cargo),
75 Some(res) 75 })
76 }
77 project_model::ProjectWorkspace::Json { .. } => None,
76 }); 78 });
77 Ok(res) 79 Ok(res)
78 } 80 }