diff options
author | JasperDeSutter <[email protected]> | 2019-11-24 10:33:12 +0000 |
---|---|---|
committer | JasperDeSutter <[email protected]> | 2019-11-24 15:55:56 +0000 |
commit | 6a8b4f873aa42f3522d3a92384019272b6ccefd2 (patch) | |
tree | 23235e959e23796bb05c811742375aeaf8143953 /crates/ra_project_model/src/cargo_workspace.rs | |
parent | ea3124c12a52f28163a6375b6a5e3c79fc14312d (diff) |
add proc-macro crate type handling
Diffstat (limited to 'crates/ra_project_model/src/cargo_workspace.rs')
-rw-r--r-- | crates/ra_project_model/src/cargo_workspace.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index c128e608d..351997dcd 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs | |||
@@ -54,11 +54,13 @@ struct TargetData { | |||
54 | name: String, | 54 | name: String, |
55 | root: PathBuf, | 55 | root: PathBuf, |
56 | kind: TargetKind, | 56 | kind: TargetKind, |
57 | is_proc_macro: bool, | ||
57 | } | 58 | } |
58 | 59 | ||
59 | #[derive(Debug, Clone, Copy, PartialEq, Eq)] | 60 | #[derive(Debug, Clone, Copy, PartialEq, Eq)] |
60 | pub enum TargetKind { | 61 | pub enum TargetKind { |
61 | Bin, | 62 | Bin, |
63 | /// Any kind of Cargo lib crate-type (dylib, rlib, proc-macro, ...). | ||
62 | Lib, | 64 | Lib, |
63 | Example, | 65 | Example, |
64 | Test, | 66 | Test, |
@@ -74,6 +76,7 @@ impl TargetKind { | |||
74 | "test" => TargetKind::Test, | 76 | "test" => TargetKind::Test, |
75 | "bench" => TargetKind::Bench, | 77 | "bench" => TargetKind::Bench, |
76 | "example" => TargetKind::Example, | 78 | "example" => TargetKind::Example, |
79 | "proc-macro" => TargetKind::Lib, | ||
77 | _ if kind.contains("lib") => TargetKind::Lib, | 80 | _ if kind.contains("lib") => TargetKind::Lib, |
78 | _ => continue, | 81 | _ => continue, |
79 | }; | 82 | }; |
@@ -123,6 +126,9 @@ impl Target { | |||
123 | pub fn kind(self, ws: &CargoWorkspace) -> TargetKind { | 126 | pub fn kind(self, ws: &CargoWorkspace) -> TargetKind { |
124 | ws.targets[self].kind | 127 | ws.targets[self].kind |
125 | } | 128 | } |
129 | pub fn is_proc_macro(self, ws: &CargoWorkspace) -> bool { | ||
130 | ws.targets[self].is_proc_macro | ||
131 | } | ||
126 | } | 132 | } |
127 | 133 | ||
128 | impl CargoWorkspace { | 134 | impl CargoWorkspace { |
@@ -155,11 +161,13 @@ impl CargoWorkspace { | |||
155 | let pkg_data = &mut packages[pkg]; | 161 | let pkg_data = &mut packages[pkg]; |
156 | pkg_by_id.insert(id, pkg); | 162 | pkg_by_id.insert(id, pkg); |
157 | for meta_tgt in meta_pkg.targets { | 163 | for meta_tgt in meta_pkg.targets { |
164 | let is_proc_macro = meta_tgt.kind.as_slice() == &["proc-macro"]; | ||
158 | let tgt = targets.alloc(TargetData { | 165 | let tgt = targets.alloc(TargetData { |
159 | pkg, | 166 | pkg, |
160 | name: meta_tgt.name, | 167 | name: meta_tgt.name, |
161 | root: meta_tgt.src_path.clone(), | 168 | root: meta_tgt.src_path.clone(), |
162 | kind: TargetKind::new(meta_tgt.kind.as_slice()), | 169 | kind: TargetKind::new(meta_tgt.kind.as_slice()), |
170 | is_proc_macro, | ||
163 | }); | 171 | }); |
164 | pkg_data.targets.push(tgt); | 172 | pkg_data.targets.push(tgt); |
165 | } | 173 | } |