From 503cbd3f4b54f3be224d7a4221fa023f0e35d228 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 27 Mar 2020 04:26:34 +0800 Subject: Implement ra_proc_macro client logic --- crates/ra_project_model/src/cargo_workspace.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'crates/ra_project_model/src') diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index 738fd6f61..32592e660 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs @@ -1,6 +1,7 @@ //! FIXME: write short doc here use std::{ + ffi::OsStr, ops, path::{Path, PathBuf}, }; @@ -299,7 +300,10 @@ pub fn load_extern_resources(cargo_toml: &Path, cargo_features: &CargoFeatures) Message::CompilerArtifact(message) => { if message.target.kind.contains(&"proc-macro".to_string()) { let package_id = message.package_id; - if let Some(filename) = message.filenames.get(0) { + // Skip rmeta file + if let Some(filename) = + message.filenames.iter().filter(|name| is_dylib(name)).next() + { acc.proc_dylib_paths.insert(package_id, filename.clone()); } } @@ -316,3 +320,19 @@ pub fn load_extern_resources(cargo_toml: &Path, cargo_features: &CargoFeatures) acc } + +// FIXME: File a better way to know if it is a dylib +fn is_dylib(path: &Path) -> bool { + let ext = match path.extension().and_then(OsStr::to_str).map(|it| it.to_string().to_lowercase()) + { + None => return false, + Some(ext) => ext, + }; + + match ext.as_str() { + "dll" => true, + "dylib" => true, + "so" => true, + _ => false, + } +} -- cgit v1.2.3 From 1b8a26653f9d8734767a40af576223e267d51d6d Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Fri, 27 Mar 2020 12:15:38 +0800 Subject: Use matches in is_dylib --- crates/ra_project_model/src/cargo_workspace.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'crates/ra_project_model/src') diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index 32592e660..0aea01d83 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs @@ -323,16 +323,8 @@ pub fn load_extern_resources(cargo_toml: &Path, cargo_features: &CargoFeatures) // FIXME: File a better way to know if it is a dylib fn is_dylib(path: &Path) -> bool { - let ext = match path.extension().and_then(OsStr::to_str).map(|it| it.to_string().to_lowercase()) - { - None => return false, - Some(ext) => ext, - }; - - match ext.as_str() { - "dll" => true, - "dylib" => true, - "so" => true, - _ => false, + match path.extension().and_then(OsStr::to_str).map(|it| it.to_string().to_lowercase()) { + None => false, + Some(ext) => matches!(ext.as_str(), "dll" | "dylib" | "so"), } } -- cgit v1.2.3