Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/inject.rs')
| -rw-r--r-- | crates/ide/src/syntax_highlighting/inject.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/crates/ide/src/syntax_highlighting/inject.rs b/crates/ide/src/syntax_highlighting/inject.rs index 6afe5681a9..76bb06328b 100644 --- a/crates/ide/src/syntax_highlighting/inject.rs +++ b/crates/ide/src/syntax_highlighting/inject.rs @@ -9,6 +9,7 @@ use syntax::{ SyntaxNode, TextRange, TextSize, ast::{self, IsString}, }; +use triomphe::Arc; use crate::{ Analysis, HlMod, HlRange, HlTag, RootDatabase, @@ -92,6 +93,7 @@ pub(super) fn doc_comment( Some(it) => it, None => return, }; + let vfs_file_id = src_file_id.file_id(sema.db); let src_file_id: HirFileId = src_file_id.into(); let Some(docs) = attributes.hir_docs(sema.db) else { return }; @@ -171,7 +173,16 @@ pub(super) fn doc_comment( inj.add_unmapped("\n}"); - let (analysis, tmp_file_id) = Analysis::from_single_file(inj.take_text()); + let proc_macro_cwd = { + match sema.first_crate(vfs_file_id) { + Some(krate) => krate.base().data(sema.db).proc_macro_cwd.clone(), + None => { + // Arbitrarily pick /, since from_single_file treats this file as as /main.rs anyway. + Arc::new(ide_db::base_db::AbsPathBuf::try_from("/").unwrap()) + } + } + }; + let (analysis, tmp_file_id) = Analysis::from_single_file(inj.take_text(), proc_macro_cwd); if let Ok(ranges) = analysis.with_db(|db| { super::highlight( |