Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/load-cargo/src/lib.rs')
-rw-r--r--crates/load-cargo/src/lib.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/crates/load-cargo/src/lib.rs b/crates/load-cargo/src/lib.rs
index 5122051fb3..e01ce0b129 100644
--- a/crates/load-cargo/src/lib.rs
+++ b/crates/load-cargo/src/lib.rs
@@ -540,12 +540,37 @@ impl ProcMacroExpander for Expander {
current_dir: String,
) -> Result<tt::TopSubtree, ProcMacroExpansionError> {
let mut cb = |req| match req {
+ SubRequest::LocalFilePath { file_id } => {
+ let file = FileId::from_raw(file_id);
+ let source_root_id = db.file_source_root(file).source_root_id(db);
+ let source_root = db.source_root(source_root_id).source_root(db);
+
+ let name = source_root
+ .path_for_file(&file)
+ .and_then(|path| path.as_path())
+ .map(|path| path.to_string());
+
+ Ok(SubResponse::LocalFilePathResult { name })
+ }
SubRequest::SourceText { file_id, start, end } => {
let file = FileId::from_raw(file_id);
let text = db.file_text(file).text(db);
let slice = text.get(start as usize..end as usize).map(ToOwned::to_owned);
Ok(SubResponse::SourceTextResult { text: slice })
}
+ SubRequest::FilePath { file_id } => {
+ let file = FileId::from_raw(file_id);
+ let source_root_id = db.file_source_root(file).source_root_id(db);
+ let source_root = db.source_root(source_root_id).source_root(db);
+
+ let name = source_root
+ .path_for_file(&file)
+ .and_then(|path| path.as_path())
+ .map(|path| path.to_string())
+ .unwrap_or_default();
+
+ Ok(SubResponse::FilePathResult { name })
+ }
};
match self.0.expand(
subtree.view(),