Add Semantics::original_ast_node for upmapping nodes out of macro files

This commit is contained in:
Lukas Wirth 2021-11-03 21:12:36 +01:00
parent b9fa37f5b4
commit 96db0d8bdd
14 changed files with 182 additions and 48 deletions

View file

@ -208,6 +208,10 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
self.imp.original_range_opt(node)
}
pub fn original_ast_node<N: AstNode>(&self, node: N) -> Option<N> {
self.imp.original_ast_node(node)
}
pub fn diagnostics_display_range(&self, diagnostics: InFile<SyntaxNodePtr>) -> FileRange {
self.imp.diagnostics_display_range(diagnostics)
}
@ -660,6 +664,11 @@ impl<'db> SemanticsImpl<'db> {
node.as_ref().original_file_range_opt(self.db.upcast())
}
fn original_ast_node<N: AstNode>(&self, node: N) -> Option<N> {
let file = self.find_file(node.syntax().clone());
file.with_value(node).original_ast_node(self.db.upcast()).map(|it| it.value)
}
fn diagnostics_display_range(&self, src: InFile<SyntaxNodePtr>) -> FileRange {
let root = self.db.parse_or_expand(src.file_id).unwrap();
let node = src.value.to_node(&root);