Unnamed repository; edit this file 'description' to name the repository.
turn queries into methods on `HirFileId`
Ada Alakbarova 9 days ago
parent 492420d · commit 307571a
-rw-r--r--crates/hir-def/src/attrs/docs.rs4
-rw-r--r--crates/hir-def/src/expr_store/expander.rs4
-rw-r--r--crates/hir-def/src/item_tree.rs2
-rw-r--r--crates/hir-def/src/item_tree/lower.rs2
-rw-r--r--crates/hir-def/src/macro_expansion_tests/mod.rs6
-rw-r--r--crates/hir-def/src/nameres/assoc.rs6
-rw-r--r--crates/hir-def/src/nameres/tests/incremental.rs68
-rw-r--r--crates/hir-def/src/signatures.rs2
-rw-r--r--crates/hir-def/src/src.rs4
-rw-r--r--crates/hir-expand/src/db.rs45
-rw-r--r--crates/hir-expand/src/declarative.rs3
-rw-r--r--crates/hir-expand/src/eager.rs2
-rw-r--r--crates/hir-expand/src/files.rs10
-rw-r--r--crates/hir-expand/src/lib.rs49
-rw-r--r--crates/hir-expand/src/span_map.rs2
-rw-r--r--crates/hir-ty/src/tests.rs14
-rw-r--r--crates/hir-ty/src/tests/incremental.rs28
-rw-r--r--crates/hir/src/diagnostics.rs4
-rw-r--r--crates/hir/src/has_source.rs2
-rw-r--r--crates/hir/src/lib.rs8
-rw-r--r--crates/hir/src/semantics.rs8
-rw-r--r--crates/hir/src/semantics/child_by_source.rs2
-rw-r--r--crates/hir/src/source_analyzer.rs2
-rw-r--r--crates/ide-diagnostics/src/handlers/incorrect_case.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/missing_fields.rs6
-rw-r--r--crates/ide-diagnostics/src/handlers/missing_unsafe.rs3
-rw-r--r--crates/ide-diagnostics/src/handlers/mutability_errors.rs3
-rw-r--r--crates/ide-diagnostics/src/handlers/no_such_field.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/remove_trailing_return.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/replace_filter_map_next_with_find_map.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/trait_impl_redundant_assoc_item.rs4
-rw-r--r--crates/ide-diagnostics/src/handlers/type_mismatch.rs12
-rw-r--r--crates/ide-diagnostics/src/handlers/typed_hole.rs3
-rw-r--r--crates/ide-diagnostics/src/handlers/unresolved_field.rs6
-rw-r--r--crates/ide-diagnostics/src/handlers/unresolved_method.rs6
-rw-r--r--crates/ide-diagnostics/src/handlers/unresolved_module.rs3
-rw-r--r--crates/load-cargo/src/lib.rs4
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs10
39 files changed, 175 insertions, 182 deletions
diff --git a/crates/hir-def/src/attrs/docs.rs b/crates/hir-def/src/attrs/docs.rs
index cb91f08af3..69eac7b3c9 100644
--- a/crates/hir-def/src/attrs/docs.rs
+++ b/crates/hir-def/src/attrs/docs.rs
@@ -401,7 +401,7 @@ fn expand_doc_macro_call<'db>(
let new_source_ctx = DocExprSourceCtx {
resolver: source_ctx.resolver.clone(),
file_id: expansion_file_id,
- ast_id_map: expander.db.ast_id_map(expansion_file_id),
+ ast_id_map: expansion_file_id.ast_id_map(expander.db),
span_map: expander.db.span_map(expansion_file_id),
};
Some((expr, new_source_ctx))
@@ -456,7 +456,7 @@ fn extend_with_attrs<'a, 'db>(
DocExprSourceCtx {
resolver,
file_id,
- ast_id_map: db.ast_id_map(file_id),
+ ast_id_map: file_id.ast_id_map(db),
span_map: db.span_map(file_id),
},
)
diff --git a/crates/hir-def/src/expr_store/expander.rs b/crates/hir-def/src/expr_store/expander.rs
index 35cf1c9681..fbe7bab457 100644
--- a/crates/hir-def/src/expr_store/expander.rs
+++ b/crates/hir-def/src/expr_store/expander.rs
@@ -47,7 +47,7 @@ impl<'db> Expander<'db> {
recursion_depth: 0,
recursion_limit,
span_map: db.span_map(current_file_id),
- ast_id_map: db.ast_id_map(current_file_id),
+ ast_id_map: current_file_id.ast_id_map(db),
}
}
@@ -201,7 +201,7 @@ impl<'db> Expander<'db> {
let old_span_map =
std::mem::replace(&mut self.span_map, SpanMap::ExpansionSpanMap(&res.value.1));
let prev_ast_id_map =
- mem::replace(&mut self.ast_id_map, db.ast_id_map(self.current_file_id));
+ mem::replace(&mut self.ast_id_map, self.current_file_id.ast_id_map(db));
let mark = Mark {
file_id: old_file_id,
span_map: old_span_map,
diff --git a/crates/hir-def/src/item_tree.rs b/crates/hir-def/src/item_tree.rs
index 4b50161c04..ffd89e41ff 100644
--- a/crates/hir-def/src/item_tree.rs
+++ b/crates/hir-def/src/item_tree.rs
@@ -146,7 +146,7 @@ fn file_item_tree_query(
let _p = tracing::info_span!("file_item_tree_query", ?file_id).entered();
let ctx = lower::Ctx::new(db, file_id, krate);
- let syntax = db.parse_or_expand(file_id);
+ let syntax = file_id.parse_or_expand(db);
let mut item_tree = match_ast! {
match syntax {
ast::SourceFile(file) => {
diff --git a/crates/hir-def/src/item_tree/lower.rs b/crates/hir-def/src/item_tree/lower.rs
index 91c2e60fd7..b0d9d960d8 100644
--- a/crates/hir-def/src/item_tree/lower.rs
+++ b/crates/hir-def/src/item_tree/lower.rs
@@ -40,7 +40,7 @@ impl<'db> Ctx<'db> {
Self {
db,
tree: ItemTree::default(),
- source_ast_id_map: db.ast_id_map(file),
+ source_ast_id_map: file.ast_id_map(db),
file,
cfg_options: OnceCell::new(),
span_map: OnceCell::new(),
diff --git a/crates/hir-def/src/macro_expansion_tests/mod.rs b/crates/hir-def/src/macro_expansion_tests/mod.rs
index 88f41274e4..c53a7321e8 100644
--- a/crates/hir-def/src/macro_expansion_tests/mod.rs
+++ b/crates/hir-def/src/macro_expansion_tests/mod.rs
@@ -75,7 +75,7 @@ fn check_errors(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect)
ast_id.file_id.file_id().expect("macros inside macros are not supported");
let ast = editioned_file_id.parse(&db).syntax_node();
- let ast_id_map = db.ast_id_map(ast_id.file_id);
+ let ast_id_map = ast_id.file_id.ast_id_map(&db);
let node = ast_id_map.get_erased(ast_id.value).to_node(&ast);
Some((node.text_range(), errors))
})
@@ -120,7 +120,7 @@ pub fn identity_when_valid(_attr: TokenStream, item: TokenStream) -> TokenStream
let mut expansions = Vec::new();
for macro_call_node in source_file.syntax().descendants().filter_map(ast::MacroCall::cast) {
- let ast_id = db.ast_id_map(source.file_id).ast_id(&macro_call_node);
+ let ast_id = source.file_id.ast_id_map(&db).ast_id(&macro_call_node);
let ast_id = InFile::new(source.file_id, ast_id);
let ptr = InFile::new(source.file_id, AstPtr::new(&macro_call_node));
let macro_call_id = resolve_macro_call_id(&db, def_map, ast_id, ptr)
@@ -476,7 +476,7 @@ m!(g);
.collect();
for macro_call_node in source_file.syntax().descendants().filter_map(ast::MacroCall::cast) {
- let ast_id = db.ast_id_map(source.file_id).ast_id(&macro_call_node);
+ let ast_id = source.file_id.ast_id_map(&db).ast_id(&macro_call_node);
let ast_id = InFile::new(source.file_id, ast_id);
let ptr = InFile::new(source.file_id, AstPtr::new(&macro_call_node));
let macro_call_id = resolve_macro_call_id(&db, def_map, ast_id, ptr)
diff --git a/crates/hir-def/src/nameres/assoc.rs b/crates/hir-def/src/nameres/assoc.rs
index cc88d21fbf..8bac83c369 100644
--- a/crates/hir-def/src/nameres/assoc.rs
+++ b/crates/hir-def/src/nameres/assoc.rs
@@ -51,7 +51,7 @@ impl TraitItems {
tr: TraitId,
) -> (TraitItems, DefDiagnostics) {
let ItemLoc { container: module_id, id: ast_id } = *tr.lookup(db);
- let ast_id_map = db.ast_id_map(ast_id.file_id);
+ let ast_id_map = ast_id.file_id.ast_id_map(db);
let source = ast_id.with_value(ast_id_map.get(ast_id.value)).to_node(db);
if source.eq_token().is_some() {
// FIXME(trait-alias) probably needs special handling here
@@ -162,7 +162,7 @@ impl<'db> AssocItemCollector<'db> {
module_id,
def_map,
local_def_map,
- ast_id_map: db.ast_id_map(file_id),
+ ast_id_map: file_id.ast_id_map(db),
span_map: db.span_map(file_id),
cfg_options: module_id.krate(db).cfg_options(db),
file_id,
@@ -358,7 +358,7 @@ impl<'db> AssocItemCollector<'db> {
let (syntax, span_map) = &macro_call_id.parse_macro_expansion(self.db).value;
let old_file_id = mem::replace(&mut self.file_id, macro_call_id.into());
- let old_ast_id_map = mem::replace(&mut self.ast_id_map, self.db.ast_id_map(self.file_id));
+ let old_ast_id_map = mem::replace(&mut self.ast_id_map, self.file_id.ast_id_map(self.db));
let old_span_map = mem::replace(&mut self.span_map, SpanMap::ExpansionSpanMap(span_map));
self.depth += 1;
diff --git a/crates/hir-def/src/nameres/tests/incremental.rs b/crates/hir-def/src/nameres/tests/incremental.rs
index e7aa994c07..8e339fa973 100644
--- a/crates/hir-def/src/nameres/tests/incremental.rs
+++ b/crates/hir-def/src/nameres/tests/incremental.rs
@@ -166,15 +166,15 @@ fn no() {}
[
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"EnumVariants::of_",
@@ -183,7 +183,7 @@ fn no() {}
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"EnumVariants::of_",
@@ -224,21 +224,21 @@ pub struct S {}
[
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"DeclarativeMacroExpander::expander_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
]
@@ -246,12 +246,12 @@ pub struct S {}
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"MacroCallId::macro_arg_",
"MacroCallId::parse_macro_expansion_",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
]
"#]],
@@ -282,26 +282,26 @@ fn f() { foo }
[
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"crate_local_def_map",
"ProcMacros::get_for_crate_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::expand_proc_macro_",
"MacroCallId::macro_arg_",
@@ -311,13 +311,13 @@ fn f() { foo }
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"MacroCallId::macro_arg_",
"MacroCallId::expand_proc_macro_",
"MacroCallId::parse_macro_expansion_",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
]
"#]],
@@ -406,38 +406,38 @@ pub struct S {}
[
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"crate_local_def_map",
"ProcMacros::get_for_crate_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"DeclarativeMacroExpander::expander_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
"DeclarativeMacroExpander::expander_",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::expand_proc_macro_",
"MacroCallId::macro_arg_",
@@ -447,7 +447,7 @@ pub struct S {}
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"MacroCallId::macro_arg_",
@@ -523,29 +523,29 @@ m!(Z);
[
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"DeclarativeMacroExpander::expander_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"macro_def_shim",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"MacroCallId::parse_macro_expansion_",
"MacroCallId::macro_arg_",
]
@@ -572,7 +572,7 @@ m!(Z);
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"MacroCallId::macro_arg_",
@@ -610,7 +610,7 @@ pub type Ty = ();
expect![[r#"
[
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
]
@@ -630,7 +630,7 @@ pub type Ty = ();
expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
]
diff --git a/crates/hir-def/src/signatures.rs b/crates/hir-def/src/signatures.rs
index e9307a1255..5a4f78cfbc 100644
--- a/crates/hir-def/src/signatures.rs
+++ b/crates/hir-def/src/signatures.rs
@@ -1068,7 +1068,7 @@ impl EnumVariants {
) -> (EnumVariants, ThinVec<InactiveEnumVariantCode>) {
let loc = e.lookup(db);
let source = loc.source(db);
- let ast_id_map = db.ast_id_map(source.file_id);
+ let ast_id_map = source.file_id.ast_id_map(db);
let mut diagnostics = ThinVec::new();
let cfg_options = loc.container.krate(db).cfg_options(db);
diff --git a/crates/hir-def/src/src.rs b/crates/hir-def/src/src.rs
index e33fd95908..6d60030798 100644
--- a/crates/hir-def/src/src.rs
+++ b/crates/hir-def/src/src.rs
@@ -14,7 +14,7 @@ pub trait HasSource {
type Value: AstNode;
fn source(&self, db: &dyn DefDatabase) -> InFile<Self::Value> {
let InFile { file_id, value } = self.ast_ptr(db);
- InFile::new(file_id, value.to_node(&db.parse_or_expand(file_id)))
+ InFile::new(file_id, value.to_node(&file_id.parse_or_expand(db)))
}
fn ast_ptr(&self, db: &dyn DefDatabase) -> InFile<AstPtr<Self::Value>>;
}
@@ -26,7 +26,7 @@ where
type Value = T::Ast;
fn ast_ptr(&self, db: &dyn DefDatabase) -> InFile<AstPtr<Self::Value>> {
let id = self.ast_id();
- let ast_id_map = db.ast_id_map(id.file_id);
+ let ast_id_map = id.file_id.ast_id_map(db);
InFile::new(id.file_id, ast_id_map.get(id.value))
}
}
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index c8a8be4311..69c8ffe609 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -1,8 +1,8 @@
//! Defines database & queries for macro expansion.
use base_db::{Crate, SourceDatabase};
-use span::{AstIdMap, Span};
-use syntax::{AstNode, Parse, SyntaxNode, SyntaxToken, ast};
+use span::Span;
+use syntax::{AstNode, SyntaxNode, SyntaxToken, ast};
use syntax_bridge::{DocCommentDesugarMode, syntax_node_to_token_tree};
use crate::{
@@ -37,23 +37,17 @@ pub enum TokenExpander<'db> {
#[query_group::query_group]
pub trait ExpandDatabase: SourceDatabase {
- #[salsa::invoke(ast_id_map)]
- #[salsa::transparent]
- fn ast_id_map(&self, file_id: HirFileId) -> &AstIdMap;
-
#[salsa::transparent]
fn resolve_span(&self, span: Span) -> FileRange;
#[salsa::transparent]
- fn parse_or_expand(&self, file_id: HirFileId) -> SyntaxNode;
-
- #[salsa::transparent]
#[salsa::invoke(SpanMap::new)]
fn span_map(&self, file_id: HirFileId) -> SpanMap<'_>;
#[salsa::transparent]
#[salsa::invoke(crate::span_map::expansion_span_map)]
fn expansion_span_map(&self, file_id: MacroCallId) -> &ExpansionSpanMap;
+
#[salsa::invoke(crate::span_map::real_span_map)]
#[salsa::transparent]
fn real_span_map(&self, file_id: EditionedFileId) -> &RealSpanMap;
@@ -76,7 +70,7 @@ pub trait ExpandDatabase: SourceDatabase {
fn resolve_span(db: &dyn ExpandDatabase, Span { range, anchor, ctx: _ }: Span) -> FileRange {
let file_id = EditionedFileId::from_span_file_id(db, anchor.file_id);
let anchor_offset =
- db.ast_id_map(file_id.into()).get_erased(anchor.ast_id).text_range().start();
+ HirFileId::from(file_id).ast_id_map(db).get_erased(anchor.ast_id).text_range().start();
FileRange { file_id, range: range + anchor_offset }
}
@@ -255,37 +249,6 @@ pub fn expand_speculative(
Some((node.syntax_node(), token))
}
-#[salsa::tracked(lru = 1024, returns(ref))]
-fn ast_id_map(db: &dyn ExpandDatabase, file_id: HirFileId) -> AstIdMap {
- AstIdMap::from_source(&db.parse_or_expand(file_id))
-}
-
-/// Main public API -- parses a hir file, not caring whether it's a real
-/// file or a macro expansion.
-fn parse_or_expand(db: &dyn ExpandDatabase, file_id: HirFileId) -> SyntaxNode {
- match file_id {
- HirFileId::FileId(file_id) => file_id.parse(db).syntax_node(),
- HirFileId::MacroFile(macro_file) => {
- macro_file.parse_macro_expansion(db).value.0.syntax_node()
- }
- }
-}
-
-pub(crate) fn parse_with_map(
- db: &dyn ExpandDatabase,
- file_id: HirFileId,
-) -> (Parse<SyntaxNode>, SpanMap<'_>) {
- match file_id {
- HirFileId::FileId(file_id) => {
- (file_id.parse(db).to_syntax(), SpanMap::RealSpanMap(db.real_span_map(file_id)))
- }
- HirFileId::MacroFile(macro_file) => {
- let (parse, map) = &macro_file.parse_macro_expansion(db).value;
- (parse.clone(), SpanMap::ExpansionSpanMap(map))
- }
- }
-}
-
impl<'db> TokenExpander<'db> {
fn macro_expander(db: &'db dyn ExpandDatabase, id: MacroDefId) -> TokenExpander<'db> {
match id.kind {
diff --git a/crates/hir-expand/src/declarative.rs b/crates/hir-expand/src/declarative.rs
index 107014164e..5ba30f1256 100644
--- a/crates/hir-expand/src/declarative.rs
+++ b/crates/hir-expand/src/declarative.rs
@@ -87,7 +87,8 @@ impl DeclarativeMacroExpander {
def_crate: Crate,
id: AstId<ast::Macro>,
) -> DeclarativeMacroExpander {
- let (root, map) = crate::db::parse_with_map(db, id.file_id);
+ let (root, map) = id.file_id.parse_with_map(db);
+
let root = root.syntax_node();
let transparency = |node: ast::AnyHasAttrs| {
diff --git a/crates/hir-expand/src/eager.rs b/crates/hir-expand/src/eager.rs
index 30e9624b2b..16053840b7 100644
--- a/crates/hir-expand/src/eager.rs
+++ b/crates/hir-expand/src/eager.rs
@@ -206,7 +206,7 @@ fn eager_macro_recur(
continue;
}
};
- let ast_id = db.ast_id_map(curr.file_id).ast_id(&call);
+ let ast_id = curr.file_id.ast_id_map(db).ast_id(&call);
let ExpandResult { value, err } = match def.kind {
MacroDefKind::BuiltInEager(..) => {
let ExpandResult { value, err } = expand_eager_macro_input(
diff --git a/crates/hir-expand/src/files.rs b/crates/hir-expand/src/files.rs
index 5f03e1b6b3..a5e2433880 100644
--- a/crates/hir-expand/src/files.rs
+++ b/crates/hir-expand/src/files.rs
@@ -94,16 +94,16 @@ pub type AstId<N> = crate::InFile<FileAstId<N>>;
impl<N: AstNode> AstId<N> {
pub fn to_node(&self, db: &dyn ExpandDatabase) -> N {
- self.to_ptr(db).to_node(&db.parse_or_expand(self.file_id))
+ self.to_ptr(db).to_node(&self.file_id.parse_or_expand(db))
}
pub fn to_range(&self, db: &dyn ExpandDatabase) -> TextRange {
self.to_ptr(db).text_range()
}
pub fn to_in_file_node(&self, db: &dyn ExpandDatabase) -> crate::InFile<N> {
- crate::InFile::new(self.file_id, self.to_ptr(db).to_node(&db.parse_or_expand(self.file_id)))
+ crate::InFile::new(self.file_id, self.to_ptr(db).to_node(&self.file_id.parse_or_expand(db)))
}
pub fn to_ptr(&self, db: &dyn ExpandDatabase) -> AstPtr<N> {
- db.ast_id_map(self.file_id).get(self.value)
+ self.file_id.ast_id_map(db).get(self.value)
}
pub fn erase(&self) -> ErasedAstId {
crate::InFile::new(self.file_id, self.value.erase())
@@ -124,7 +124,7 @@ impl ErasedAstId {
self.to_ptr(db).text_range()
}
pub fn to_ptr(&self, db: &dyn ExpandDatabase) -> SyntaxNodePtr {
- db.ast_id_map(self.file_id).get_erased(self.value)
+ self.file_id.ast_id_map(db).get_erased(self.value)
}
}
@@ -218,7 +218,7 @@ impl FileIdToSyntax for MacroCallId {
}
impl FileIdToSyntax for HirFileId {
fn file_syntax(self, db: &dyn db::ExpandDatabase) -> SyntaxNode {
- db.parse_or_expand(self)
+ self.parse_or_expand(db)
}
}
diff --git a/crates/hir-expand/src/lib.rs b/crates/hir-expand/src/lib.rs
index 73647d0ece..719a38edf4 100644
--- a/crates/hir-expand/src/lib.rs
+++ b/crates/hir-expand/src/lib.rs
@@ -39,7 +39,8 @@ use base_db::Crate;
use either::Either;
use mbe::MatchedArmIndex;
use span::{
- Edition, ErasedFileAstId, FileAstId, NO_DOWNMAP_ERASED_FILE_AST_ID_MARKER, Span, SyntaxContext,
+ AstIdMap, Edition, ErasedFileAstId, FileAstId, NO_DOWNMAP_ERASED_FILE_AST_ID_MARKER, Span,
+ SyntaxContext,
};
use syntax::{
Parse, SyntaxError, SyntaxNode, SyntaxToken, T, TextRange, TextSize,
@@ -486,7 +487,7 @@ impl MacroCallId {
#[salsa::tracked]
impl MacroCallId {
- /// Implementation of [`crate::db::parse_or_expand`] for the macro case.
+ /// Implementation of [`HirFileId::parse_or_expand`] for the macro case.
// FIXME: We should verify that the parsed node is one of the many macro node variants we expect
// instead of having it be untyped
#[salsa::tracked(returns(ref), lru = 512)]
@@ -550,7 +551,7 @@ impl MacroCallId {
return (eager.arg.clone(), SyntaxFixupUndoInfo::NONE, eager.span);
}
- let (parse, map) = crate::db::parse_with_map(db, loc.kind.file_id());
+ let (parse, map) = loc.kind.file_id().parse_with_map(db);
let root = parse.syntax_node();
let (is_derive, censor_item_tree_attr_ids, item_node, span) = match &loc.kind {
@@ -790,8 +791,8 @@ fn expand_unimplemented_builtin_macro(span: Span) -> ExpandResult<tt::TopSubtree
fn proc_macro_span(db: &dyn ExpandDatabase, ast: AstId<ast::Fn>) -> Span {
#[salsa::tracked]
fn proc_macro_span(db: &dyn ExpandDatabase, ast: AstId<ast::Fn>, _: ()) -> Span {
- let root = db.parse_or_expand(ast.file_id);
- let ast_id_map = db.ast_id_map(ast.file_id);
+ let root = ast.file_id.parse_or_expand(db);
+ let ast_id_map = ast.file_id.ast_id_map(db);
let span_map = db.span_map(ast.file_id);
let node = ast_id_map.get(ast.value).to_node(&root);
@@ -854,10 +855,10 @@ impl MacroDefId {
| MacroDefKind::BuiltInDerive(id, _)
| MacroDefKind::BuiltInEager(id, _)
| MacroDefKind::UnimplementedBuiltIn(id) => {
- id.with_value(db.ast_id_map(id.file_id).get(id.value).text_range())
+ id.with_value(id.file_id.ast_id_map(db).get(id.value).text_range())
}
MacroDefKind::ProcMacro(id, _, _) => {
- id.with_value(db.ast_id_map(id.file_id).get(id.value).text_range())
+ id.with_value(id.file_id.ast_id_map(db).get(id.value).text_range())
}
}
}
@@ -1513,4 +1514,38 @@ impl HirFileId {
};
Some(attr.with_value(ast::Attr::cast(attr.value.clone())?))
}
+
+ /// Main public API -- parses a hir file, not caring whether it's a real
+ /// file or a macro expansion.
+ pub fn parse_or_expand(self, db: &dyn ExpandDatabase) -> SyntaxNode {
+ match self {
+ HirFileId::FileId(file_id) => file_id.parse(db).syntax_node(),
+ HirFileId::MacroFile(macro_file) => {
+ macro_file.parse_macro_expansion(db).value.0.syntax_node()
+ }
+ }
+ }
+
+ pub(crate) fn parse_with_map(
+ self,
+ db: &dyn ExpandDatabase,
+ ) -> (Parse<SyntaxNode>, SpanMap<'_>) {
+ match self {
+ HirFileId::FileId(file_id) => {
+ (file_id.parse(db).to_syntax(), SpanMap::RealSpanMap(db.real_span_map(file_id)))
+ }
+ HirFileId::MacroFile(macro_file) => {
+ let (parse, map) = &macro_file.parse_macro_expansion(db).value;
+ (parse.clone(), SpanMap::ExpansionSpanMap(map))
+ }
+ }
+ }
+}
+
+#[salsa::tracked]
+impl HirFileId {
+ #[salsa::tracked(lru = 1024, returns(ref))]
+ pub fn ast_id_map(self, db: &dyn ExpandDatabase) -> AstIdMap {
+ AstIdMap::from_source(&self.parse_or_expand(db))
+ }
}
diff --git a/crates/hir-expand/src/span_map.rs b/crates/hir-expand/src/span_map.rs
index d19eead4a8..1b588a8425 100644
--- a/crates/hir-expand/src/span_map.rs
+++ b/crates/hir-expand/src/span_map.rs
@@ -54,7 +54,7 @@ pub(crate) fn real_span_map(
) -> RealSpanMap {
use syntax::ast::HasModuleItem;
let mut pairs = vec![(syntax::TextSize::new(0), span::ROOT_ERASED_FILE_AST_ID)];
- let ast_id_map = db.ast_id_map(editioned_file_id.into());
+ let ast_id_map = HirFileId::from(editioned_file_id).ast_id_map(db);
let tree = editioned_file_id.parse(db).tree();
// This is an incrementality layer. Basically we can't use absolute ranges for our spans as that
diff --git a/crates/hir-ty/src/tests.rs b/crates/hir-ty/src/tests.rs
index 9ffe38e749..febd2a833a 100644
--- a/crates/hir-ty/src/tests.rs
+++ b/crates/hir-ty/src/tests.rs
@@ -25,7 +25,7 @@ use hir_def::{
src::HasSource,
type_ref::TypeRefId,
};
-use hir_expand::{FileRange, InFile, db::ExpandDatabase};
+use hir_expand::{FileRange, InFile};
use itertools::Itertools;
use rustc_hash::FxHashMap;
use stdx::format_to;
@@ -278,7 +278,7 @@ fn expr_node(
) -> Option<InFile<SyntaxNode>> {
Some(match body_source_map.expr_syntax(expr) {
Ok(sp) => {
- let root = db.parse_or_expand(sp.file_id);
+ let root = sp.file_id.parse_or_expand(db);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => return None,
@@ -292,7 +292,7 @@ fn pat_node(
) -> Option<InFile<SyntaxNode>> {
Some(match body_source_map.pat_syntax(pat) {
Ok(sp) => {
- let root = db.parse_or_expand(sp.file_id);
+ let root = sp.file_id.parse_or_expand(db);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => return None,
@@ -306,7 +306,7 @@ fn type_node(
) -> Option<InFile<SyntaxNode>> {
Some(match body_source_map.type_syntax(type_ref) {
Ok(sp) => {
- let root = db.parse_or_expand(sp.file_id);
+ let root = sp.file_id.parse_or_expand(db);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => return None,
@@ -349,7 +349,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
if let Some((binding_id, syntax_ptr)) = self_param {
let ty = &inference_result.type_of_binding[binding_id];
if let Some(syntax_ptr) = syntax_ptr {
- let root = db.parse_or_expand(syntax_ptr.file_id);
+ let root = syntax_ptr.file_id.parse_or_expand(&db);
let node = syntax_ptr.map(|ptr| ptr.to_node(&root).syntax().clone());
types.push((node, ty.as_ref()));
}
@@ -361,7 +361,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
}
let node = match source_map.pat_syntax(pat) {
Ok(sp) => {
- let root = db.parse_or_expand(sp.file_id);
+ let root = sp.file_id.parse_or_expand(&db);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => continue,
@@ -375,7 +375,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
for (expr, ty) in inference_result.type_of_expr.iter() {
let node = match source_map.expr_syntax(expr) {
Ok(sp) => {
- let root = db.parse_or_expand(sp.file_id);
+ let root = sp.file_id.parse_or_expand(&db);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => continue,
diff --git a/crates/hir-ty/src/tests/incremental.rs b/crates/hir-ty/src/tests/incremental.rs
index 4c26b19120..3432d47b2f 100644
--- a/crates/hir-ty/src/tests/incremental.rs
+++ b/crates/hir-ty/src/tests/incremental.rs
@@ -34,7 +34,7 @@ fn foo() -> i32 {
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"InferenceResult::for_body_",
@@ -78,7 +78,7 @@ fn foo() -> i32 {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"AttrFlags::query_",
@@ -123,7 +123,7 @@ fn baz() -> i32 {
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"InferenceResult::for_body_",
@@ -194,7 +194,7 @@ fn baz() -> i32 {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"AttrFlags::query_",
@@ -247,7 +247,7 @@ $0",
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"TraitImpls::for_crate_",
@@ -284,7 +284,7 @@ pub struct NewStruct {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"crate_local_def_map",
@@ -322,7 +322,7 @@ $0",
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"TraitImpls::for_crate_",
@@ -360,7 +360,7 @@ pub enum SomeEnum {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"crate_local_def_map",
@@ -398,7 +398,7 @@ $0",
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"TraitImpls::for_crate_",
@@ -433,7 +433,7 @@ fn bar() -> f32 {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"crate_local_def_map",
@@ -475,7 +475,7 @@ $0",
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"TraitImpls::for_crate_",
@@ -518,7 +518,7 @@ impl SomeStruct {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"crate_local_def_map",
@@ -576,7 +576,7 @@ fn main() {
"source_root_crates",
"crate_local_def_map",
"file_item_tree_query",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"parse",
"real_span_map",
"TraitItems::query_with_diagnostics_",
@@ -671,7 +671,7 @@ fn main() {
expect_test::expect![[r#"
[
"parse",
- "ast_id_map",
+ "HirFileId::ast_id_map_",
"file_item_tree_query",
"real_span_map",
"crate_local_def_map",
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index d99ed37d7e..33a46a3e17 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -993,7 +993,7 @@ impl<'db> AnyDiagnostic<'db> {
}
InferenceDiagnostic::PathDiagnostic { node, diag } => {
let source = expr_or_pat_syntax(*node)?;
- let syntax = source.value.to_node(&db.parse_or_expand(source.file_id));
+ let syntax = source.value.to_node(&source.file_id.parse_or_expand(db));
let path = match_ast! {
match (syntax.syntax()) {
ast::RecordExpr(it) => it.path()?,
@@ -1296,7 +1296,7 @@ impl<'db> AnyDiagnostic<'db> {
Some(match diag {
TyLoweringDiagnostic::PathDiagnostic { source, diag } => {
let source = Self::type_syntax(*source, source_map)?;
- let syntax = source.value.to_node(&db.parse_or_expand(source.file_id));
+ let syntax = source.value.to_node(&source.file_id.parse_or_expand(db));
let ast::Type::PathType(syntax) = syntax else { return None };
Self::path_diagnostic(diag, source.with_value(syntax.path()?))?
}
diff --git a/crates/hir/src/has_source.rs b/crates/hir/src/has_source.rs
index 9bff8bda3a..9248aaec02 100644
--- a/crates/hir/src/has_source.rs
+++ b/crates/hir/src/has_source.rs
@@ -297,7 +297,7 @@ impl HasSource for Param<'_> {
let (_, source_map) =
ExpressionStore::with_source_map(db, owner.expression_store_owner(db));
let ast @ InFile { file_id, value } = source_map.expr_syntax(expr_id).ok()?;
- let root = db.parse_or_expand(file_id);
+ let root = file_id.parse_or_expand(db);
match value.to_node(&root) {
Either::Left(ast::Expr::ClosureExpr(it)) => it
.param_list()?
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index ceac3f0876..a78ce2a2ab 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -813,7 +813,7 @@ impl Module {
expr_store_diagnostics(db, acc, source_map);
let (variants, diagnostics) = e.id.enum_variants_with_diagnostics(db);
let file = e.id.lookup(db).id.file_id;
- let ast_id_map = db.ast_id_map(file);
+ let ast_id_map = file.ast_id_map(db);
for diag in diagnostics {
acc.push(
InactiveCode {
@@ -883,7 +883,7 @@ impl Module {
.iter()
.for_each(|&(_ast, call_id)| macro_call_diagnostics(db, call_id, acc));
- let ast_id_map = db.ast_id_map(file_id);
+ let ast_id_map = file_id.ast_id_map(db);
for diag in impl_id.impl_items_with_diagnostics(db).1.iter() {
emit_def_diagnostic(db, acc, diag, edition, loc.container.krate(db));
@@ -1170,7 +1170,7 @@ fn macro_call_diagnostics<'db>(
let RenderedExpandError { message, error, kind } = err.render_to_string(db);
if Some(err.span().anchor.file_id) == file_id.file_id().map(|it| it.span_file_id(db)) {
range.value = err.span().range
- + db.ast_id_map(file_id).get_erased(err.span().anchor.ast_id).text_range().start();
+ + file_id.ast_id_map(db).get_erased(err.span().anchor.ast_id).text_range().start();
}
acc.push(MacroError { range, message, error, kind }.into());
}
@@ -1260,7 +1260,7 @@ fn emit_def_diagnostic_<'db>(
}
DefDiagnosticKind::UnconfiguredCode { ast_id, cfg, opts } => {
- let ast_id_map = db.ast_id_map(ast_id.file_id);
+ let ast_id_map = ast_id.file_id.ast_id_map(db);
let ptr = ast_id_map.get_erased(ast_id.value);
acc.push(
InactiveCode {
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 8fc08abef1..c696ebcf18 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -550,7 +550,7 @@ impl<'db> SemanticsImpl<'db> {
}
pub fn parse_or_expand(&self, file_id: HirFileId) -> SyntaxNode {
- let node = self.db.parse_or_expand(file_id);
+ let node = file_id.parse_or_expand(self.db);
self.cache(node.clone(), file_id);
node
}
@@ -690,7 +690,7 @@ impl<'db> SemanticsImpl<'db> {
pub fn derive_helpers_in_scope(&self, adt: &ast::Adt) -> Option<Vec<(Symbol, Symbol)>> {
let sa = self.analyze_no_infer(adt.syntax())?;
- let id = self.db.ast_id_map(sa.file_id).ast_id(adt);
+ let id = sa.file_id.ast_id_map(self.db).ast_id(adt);
let result = sa
.resolver
.def_map()
@@ -713,7 +713,7 @@ impl<'db> SemanticsImpl<'db> {
})?;
let attr_name = attr.path().and_then(|it| it.as_single_name_ref())?.as_name();
let sa = self.analyze_no_infer(adt.syntax())?;
- let id = self.db.ast_id_map(sa.file_id).ast_id(&adt);
+ let id = sa.file_id.ast_id_map(self.db).ast_id(&adt);
let res: Vec<_> = sa
.resolver
.def_map()
@@ -1498,7 +1498,7 @@ impl<'db> SemanticsImpl<'db> {
self.analyze_impl(InFile::new(expansion, &parent), None, false)
})?
.resolver;
- let id = db.ast_id_map(expansion).ast_id(&adt);
+ let id = expansion.ast_id_map(db).ast_id(&adt);
let helpers = resolver
.def_map()
.derive_helpers_in_scope(InFile::new(expansion, id))?;
diff --git a/crates/hir/src/semantics/child_by_source.rs b/crates/hir/src/semantics/child_by_source.rs
index 97c5a451ab..d9c98c920e 100644
--- a/crates/hir/src/semantics/child_by_source.rs
+++ b/crates/hir/src/semantics/child_by_source.rs
@@ -200,7 +200,7 @@ impl ChildBySource for EnumId {
return;
}
- let ast_id_map = db.ast_id_map(loc.id.file_id);
+ let ast_id_map = loc.id.file_id.ast_id_map(db);
self.enum_variants(db).variants.values().for_each(|&(variant, _)| {
res[keys::ENUM_VARIANT].insert(ast_id_map.get(variant.lookup(db).id.value), variant);
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index fc03f82135..59d029b1e2 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -1366,7 +1366,7 @@ impl<'db> SourceAnalyzer<'db> {
},
);
if let Some(adt) = adt {
- let ast_id = db.ast_id_map(self.file_id).ast_id(&adt);
+ let ast_id = self.file_id.ast_id_map(db).ast_id(&adt);
if let Some(helpers) = self
.resolver
.def_map()
diff --git a/crates/ide-diagnostics/src/handlers/incorrect_case.rs b/crates/ide-diagnostics/src/handlers/incorrect_case.rs
index bda3f9bf0a..888f55cea7 100644
--- a/crates/ide-diagnostics/src/handlers/incorrect_case.rs
+++ b/crates/ide-diagnostics/src/handlers/incorrect_case.rs
@@ -1,4 +1,4 @@
-use hir::{CaseType, InFile, db::ExpandDatabase};
+use hir::{CaseType, InFile};
use ide_db::{assists::Assist, defs::NameClass, rename::RenameDefinition};
use syntax::AstNode;
@@ -37,7 +37,7 @@ pub(crate) fn incorrect_case(
}
fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::IncorrectCase) -> Option<Vec<Assist>> {
- let root = ctx.sema.db.parse_or_expand(d.file);
+ let root = d.file.parse_or_expand(ctx.sema.db);
let name_node = d.ident.to_node(&root);
let def = NameClass::classify(&ctx.sema, &name_node)?.defined()?;
diff --git a/crates/ide-diagnostics/src/handlers/missing_fields.rs b/crates/ide-diagnostics/src/handlers/missing_fields.rs
index fe71707f07..2030be4368 100644
--- a/crates/ide-diagnostics/src/handlers/missing_fields.rs
+++ b/crates/ide-diagnostics/src/handlers/missing_fields.rs
@@ -1,8 +1,6 @@
use either::Either;
use hir::{
- AssocItem, FindPathConfig, HasVisibility, HirDisplay, InFile, Type,
- db::{ExpandDatabase, HirDatabase},
- sym,
+ AssocItem, FindPathConfig, HasVisibility, HirDisplay, InFile, Type, db::HirDatabase, sym,
};
use ide_db::{
FxHashMap,
@@ -65,7 +63,7 @@ fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::MissingFields) -> Option<Vec
return None;
}
- let root = ctx.sema.db.parse_or_expand(d.file);
+ let root = d.file.parse_or_expand(ctx.sema.db);
let current_module =
ctx.sema.scope(d.field_list_parent.to_node(&root).syntax()).map(|it| it.module());
diff --git a/crates/ide-diagnostics/src/handlers/missing_unsafe.rs b/crates/ide-diagnostics/src/handlers/missing_unsafe.rs
index d279e9b4e8..808b76e082 100644
--- a/crates/ide-diagnostics/src/handlers/missing_unsafe.rs
+++ b/crates/ide-diagnostics/src/handlers/missing_unsafe.rs
@@ -1,4 +1,3 @@
-use hir::db::ExpandDatabase;
use hir::{UnsafeLint, UnsafetyReason};
use ide_db::text_edit::TextEdit;
use ide_db::{assists::Assist, source_change::SourceChange};
@@ -47,7 +46,7 @@ fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::MissingUnsafe) -> Option<Vec
return None;
}
- let root = ctx.sema.db.parse_or_expand(d.node.file_id);
+ let root = d.node.file_id.parse_or_expand(ctx.sema.db);
let node = d.node.value.to_node(&root);
let expr = node.syntax().ancestors().find_map(ast::Expr::cast)?;
diff --git a/crates/ide-diagnostics/src/handlers/mutability_errors.rs b/crates/ide-diagnostics/src/handlers/mutability_errors.rs
index 49aa6d7bd9..e4ee066653 100644
--- a/crates/ide-diagnostics/src/handlers/mutability_errors.rs
+++ b/crates/ide-diagnostics/src/handlers/mutability_errors.rs
@@ -1,4 +1,3 @@
-use hir::db::ExpandDatabase;
use ide_db::source_change::SourceChange;
use ide_db::text_edit::TextEdit;
use syntax::{AstNode, SyntaxKind, SyntaxNode, SyntaxNodePtr, SyntaxToken, T, ast};
@@ -9,7 +8,7 @@ use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext, fix};
//
// This diagnostic is triggered on mutating an immutable variable.
pub(crate) fn need_mut(ctx: &DiagnosticsContext<'_, '_>, d: &hir::NeedMut) -> Option<Diagnostic> {
- let root = ctx.sema.db.parse_or_expand(d.span.file_id);
+ let root = d.span.file_id.parse_or_expand(ctx.sema.db);
let node = d.span.value.to_node(&root);
let mut span = d.span;
if let Some(parent) = node.parent()
diff --git a/crates/ide-diagnostics/src/handlers/no_such_field.rs b/crates/ide-diagnostics/src/handlers/no_such_field.rs
index 3dd6744b05..f6fe83177f 100644
--- a/crates/ide-diagnostics/src/handlers/no_such_field.rs
+++ b/crates/ide-diagnostics/src/handlers/no_such_field.rs
@@ -1,5 +1,5 @@
use either::Either;
-use hir::{HasSource, HirDisplay, Semantics, VariantId, db::ExpandDatabase};
+use hir::{HasSource, HirDisplay, Semantics, VariantId};
use ide_db::text_edit::TextEdit;
use ide_db::{EditionedFileId, RootDatabase, source_change::SourceChange};
use syntax::{
@@ -32,7 +32,7 @@ pub(crate) fn no_such_field(ctx: &DiagnosticsContext<'_, '_>, d: &hir::NoSuchFie
fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::NoSuchField) -> Option<Vec<Assist>> {
// FIXME: quickfix for pattern
- let root = ctx.sema.db.parse_or_expand(d.field.file_id);
+ let root = d.field.file_id.parse_or_expand(ctx.sema.db);
match &d.field.value.to_node(&root) {
Either::Left(node) => {
if let Some(private_field) = d.private {
diff --git a/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs b/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
index b5a47e508e..7e431f3ff4 100644
--- a/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
+++ b/crates/ide-diagnostics/src/handlers/remove_trailing_return.rs
@@ -1,4 +1,4 @@
-use hir::{FileRange, db::ExpandDatabase, diagnostics::RemoveTrailingReturn};
+use hir::{FileRange, diagnostics::RemoveTrailingReturn};
use ide_db::text_edit::TextEdit;
use ide_db::{assists::Assist, source_change::SourceChange};
use syntax::{AstNode, ast};
@@ -37,7 +37,7 @@ pub(crate) fn remove_trailing_return(
}
fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &RemoveTrailingReturn) -> Option<Vec<Assist>> {
- let root = ctx.sema.db.parse_or_expand(d.return_expr.file_id);
+ let root = d.return_expr.file_id.parse_or_expand(ctx.sema.db);
let return_expr = d.return_expr.value.to_node(&root);
let stmt = return_expr.syntax().parent().and_then(ast::ExprStmt::cast);
diff --git a/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs b/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
index aa7b57e292..337b05e21f 100644
--- a/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
+++ b/crates/ide-diagnostics/src/handlers/remove_unnecessary_else.rs
@@ -1,4 +1,4 @@
-use hir::{db::ExpandDatabase, diagnostics::RemoveUnnecessaryElse};
+use hir::diagnostics::RemoveUnnecessaryElse;
use ide_db::text_edit::TextEdit;
use ide_db::{assists::Assist, source_change::SourceChange};
use itertools::Itertools;
@@ -41,7 +41,7 @@ pub(crate) fn remove_unnecessary_else(
}
fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &RemoveUnnecessaryElse) -> Option<Vec<Assist>> {
- let root = ctx.sema.db.parse_or_expand(d.if_expr.file_id);
+ let root = d.if_expr.file_id.parse_or_expand(ctx.sema.db);
let if_expr = d.if_expr.value.to_node(&root);
let if_expr = ctx.sema.original_ast_node(if_expr)?;
diff --git a/crates/ide-diagnostics/src/handlers/replace_filter_map_next_with_find_map.rs b/crates/ide-diagnostics/src/handlers/replace_filter_map_next_with_find_map.rs
index f974c55023..e67d86b8a2 100644
--- a/crates/ide-diagnostics/src/handlers/replace_filter_map_next_with_find_map.rs
+++ b/crates/ide-diagnostics/src/handlers/replace_filter_map_next_with_find_map.rs
@@ -1,4 +1,4 @@
-use hir::{InFile, db::ExpandDatabase};
+use hir::InFile;
use ide_db::source_change::SourceChange;
use ide_db::text_edit::TextEdit;
use syntax::{
@@ -29,7 +29,7 @@ fn fixes(
ctx: &DiagnosticsContext<'_, '_>,
d: &hir::ReplaceFilterMapNextWithFindMap,
) -> Option<Vec<Assist>> {
- let root = ctx.sema.db.parse_or_expand(d.file);
+ let root = d.file.parse_or_expand(ctx.sema.db);
let next_expr = d.next_expr.to_node(&root);
let next_call = ast::MethodCallExpr::cast(next_expr.syntax().clone())?;
diff --git a/crates/ide-diagnostics/src/handlers/trait_impl_redundant_assoc_item.rs b/crates/ide-diagnostics/src/handlers/trait_impl_redundant_assoc_item.rs
index ee972f2d1d..9374688d0e 100644
--- a/crates/ide-diagnostics/src/handlers/trait_impl_redundant_assoc_item.rs
+++ b/crates/ide-diagnostics/src/handlers/trait_impl_redundant_assoc_item.rs
@@ -1,4 +1,4 @@
-use hir::{HasSource, HirDisplay, db::ExpandDatabase};
+use hir::{HasSource, HirDisplay};
use ide_db::text_edit::TextRange;
use ide_db::{
assists::{Assist, AssistId},
@@ -82,7 +82,7 @@ fn quickfix_for_redundant_assoc_item(
let file_id = d.file_id.file_id()?;
let add_assoc_item_def = |builder: &mut SourceChangeBuilder| -> Option<()> {
let db = ctx.sema.db;
- let root = db.parse_or_expand(d.file_id);
+ let root = d.file_id.parse_or_expand(db);
// don't modify trait def in outer crate
let impl_def = d.impl_.to_node(&root);
let current_crate = ctx.sema.scope(impl_def.syntax())?.krate();
diff --git a/crates/ide-diagnostics/src/handlers/type_mismatch.rs b/crates/ide-diagnostics/src/handlers/type_mismatch.rs
index da6fc20c3e..8950850d4a 100644
--- a/crates/ide-diagnostics/src/handlers/type_mismatch.rs
+++ b/crates/ide-diagnostics/src/handlers/type_mismatch.rs
@@ -1,5 +1,5 @@
use either::Either;
-use hir::{CallableKind, ClosureStyle, HirDisplay, InFile, db::ExpandDatabase};
+use hir::{CallableKind, ClosureStyle, HirDisplay, InFile};
use ide_db::{
famous_defs::FamousDefs,
source_change::{SourceChange, SourceChangeBuilder},
@@ -151,7 +151,7 @@ fn add_missing_ok_or_some(
expr_ptr: &InFile<AstPtr<ast::Expr>>,
acc: &mut Vec<Assist>,
) -> Option<()> {
- let root = ctx.db().parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.db());
let expr = expr_ptr.value.to_node(&root);
let hir::FileRange { file_id, range: expr_range } =
ctx.sema.original_range_opt(expr.syntax())?;
@@ -246,7 +246,7 @@ fn remove_unnecessary_wrapper(
acc: &mut Vec<Assist>,
) -> Option<()> {
let db = ctx.db();
- let root = db.parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(db);
let expr = expr_ptr.value.to_node(&root);
// FIXME: support inside MacroCall?
let expr = ctx.sema.original_ast_node(expr)?;
@@ -327,7 +327,7 @@ fn remove_semicolon(
expr_ptr: &InFile<AstPtr<ast::Expr>>,
acc: &mut Vec<Assist>,
) -> Option<()> {
- let root = ctx.db().parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.db());
let expr = expr_ptr.value.to_node(&root);
if !d.actual.is_unit() {
return None;
@@ -365,7 +365,7 @@ fn str_ref_to_owned(
return None;
}
- let root = ctx.db().parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.db());
let expr = expr_ptr.value.to_node(&root);
let hir::FileRange { file_id, range } = ctx.sema.original_range_opt(expr.syntax())?;
@@ -391,7 +391,7 @@ fn add_await(
return None;
}
- let root = ctx.db().parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.db());
let expr = expr_ptr.value.to_node(&root);
let hir::FileRange { file_id, range } = ctx.sema.original_range_opt(expr.syntax())?;
diff --git a/crates/ide-diagnostics/src/handlers/typed_hole.rs b/crates/ide-diagnostics/src/handlers/typed_hole.rs
index e000d6388a..4c59482961 100644
--- a/crates/ide-diagnostics/src/handlers/typed_hole.rs
+++ b/crates/ide-diagnostics/src/handlers/typed_hole.rs
@@ -2,7 +2,6 @@ use std::ops::Not;
use hir::{
ClosureStyle, FindPathConfig, HirDisplay,
- db::ExpandDatabase,
term_search::{TermSearchConfig, TermSearchCtx, term_search},
};
use ide_db::text_edit::TextEdit;
@@ -46,7 +45,7 @@ pub(crate) fn typed_hole<'db>(
fn fixes<'db>(ctx: &DiagnosticsContext<'_, 'db>, d: &hir::TypedHole<'db>) -> Option<Vec<Assist>> {
let db = ctx.sema.db;
- let root = db.parse_or_expand(d.expr.file_id);
+ let root = d.expr.file_id.parse_or_expand(db);
let (original_range, _) =
d.expr.as_ref().map(|it| it.to_node(&root)).syntax().original_file_range_opt(db)?;
let scope = ctx.sema.scope(d.expr.value.to_node(&root).syntax())?;
diff --git a/crates/ide-diagnostics/src/handlers/unresolved_field.rs b/crates/ide-diagnostics/src/handlers/unresolved_field.rs
index 78e13677cf..682a8130a8 100644
--- a/crates/ide-diagnostics/src/handlers/unresolved_field.rs
+++ b/crates/ide-diagnostics/src/handlers/unresolved_field.rs
@@ -1,5 +1,5 @@
use either::Either;
-use hir::{Adt, FileRange, HasSource, HirDisplay, InFile, Struct, Union, db::ExpandDatabase};
+use hir::{Adt, FileRange, HasSource, HirDisplay, InFile, Struct, Union};
use ide_db::text_edit::TextEdit;
use ide_db::{
assists::{Assist, AssistId},
@@ -64,7 +64,7 @@ fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::UnresolvedField<'_>) -> Opti
// FIXME: Add Snippet Support
fn field_fix(ctx: &DiagnosticsContext<'_, '_>, d: &hir::UnresolvedField<'_>) -> Option<Assist> {
// Get the FileRange of the invalid field access
- let root = ctx.sema.db.parse_or_expand(d.expr.file_id);
+ let root = d.expr.file_id.parse_or_expand(ctx.sema.db);
let expr = d.expr.value.to_node(&root).left()?;
let error_range = ctx.sema.original_range_opt(expr.syntax())?;
@@ -266,7 +266,7 @@ fn method_fix(
ctx: &DiagnosticsContext<'_, '_>,
expr_ptr: &InFile<AstPtr<Either<ast::Expr, ast::Pat>>>,
) -> Option<Assist> {
- let root = ctx.sema.db.parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.sema.db);
let expr = expr_ptr.value.to_node(&root);
let FileRange { range, file_id } = ctx.sema.original_range_opt(expr.syntax())?;
Some(Assist {
diff --git a/crates/ide-diagnostics/src/handlers/unresolved_method.rs b/crates/ide-diagnostics/src/handlers/unresolved_method.rs
index 01929a5144..853e9d9f56 100644
--- a/crates/ide-diagnostics/src/handlers/unresolved_method.rs
+++ b/crates/ide-diagnostics/src/handlers/unresolved_method.rs
@@ -1,4 +1,4 @@
-use hir::{FileRange, HirDisplay, InFile, db::ExpandDatabase};
+use hir::{FileRange, HirDisplay, InFile};
use ide_db::text_edit::TextEdit;
use ide_db::{
assists::{Assist, AssistId},
@@ -82,7 +82,7 @@ fn field_fix(
return None;
}
let expr_ptr = &d.expr;
- let root = ctx.sema.db.parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(ctx.sema.db);
let expr = expr_ptr.value.to_node(&root);
let (file_id, range) = match expr.left()? {
ast::Expr::MethodCallExpr(mcall) => {
@@ -118,7 +118,7 @@ fn assoc_func_fix(
let db = ctx.sema.db;
let expr_ptr = &d.expr;
- let root = db.parse_or_expand(expr_ptr.file_id);
+ let root = expr_ptr.file_id.parse_or_expand(db);
let expr: ast::Expr = expr_ptr.value.to_node(&root).left()?;
let call = ast::MethodCallExpr::cast(expr.syntax().clone())?;
diff --git a/crates/ide-diagnostics/src/handlers/unresolved_module.rs b/crates/ide-diagnostics/src/handlers/unresolved_module.rs
index 1e0e9105d8..d5f2697bd2 100644
--- a/crates/ide-diagnostics/src/handlers/unresolved_module.rs
+++ b/crates/ide-diagnostics/src/handlers/unresolved_module.rs
@@ -1,4 +1,3 @@
-use hir::db::ExpandDatabase;
use ide_db::{assists::Assist, base_db::AnchoredPathBuf, source_change::FileSystemEdit};
use itertools::Itertools;
use syntax::AstNode;
@@ -33,7 +32,7 @@ pub(crate) fn unresolved_module(
}
fn fixes(ctx: &DiagnosticsContext<'_, '_>, d: &hir::UnresolvedModule) -> Option<Vec<Assist>> {
- let root = ctx.sema.db.parse_or_expand(d.decl.file_id);
+ let root = d.decl.file_id.parse_or_expand(ctx.sema.db);
let unresolved_module = d.decl.value.to_node(&root);
Some(
d.candidates
diff --git a/crates/load-cargo/src/lib.rs b/crates/load-cargo/src/lib.rs
index 96c95ec277..4a97a5f05e 100644
--- a/crates/load-cargo/src/lib.rs
+++ b/crates/load-cargo/src/lib.rs
@@ -705,8 +705,8 @@ impl ProcMacroExpander for Expander {
let call_site_ast_id = macro_call_loc.kind.erased_ast_id();
if let Some(editioned_file_id) = call_site_file.file_id() {
- let range = db
- .ast_id_map(editioned_file_id.into())
+ let range = hir_expand::HirFileId::from(editioned_file_id)
+ .ast_id_map(db)
.get_erased(call_site_ast_id)
.text_range();
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index 1a036c3b99..f53512e5ec 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -13,7 +13,7 @@ use cfg::{CfgAtom, CfgDiff};
use hir::{
Adt, AssocItem, Crate, DefWithBody, FindPathConfig, GenericDef, HasCrate, HasSource,
HirDisplay, ModuleDef, Name, Variant, crate_lang_items,
- db::{DefDatabase, ExpandDatabase, HirDatabase},
+ db::{DefDatabase, HirDatabase},
};
use hir_def::{
DefWithBodyId, ExpressionStoreOwnerId, GenericDefId, SyntheticSyntax,
@@ -1503,7 +1503,7 @@ fn location_csv_expr(db: &RootDatabase, vfs: &Vfs, sm: &BodySourceMap, expr_id:
Ok(s) => s,
Err(SyntheticSyntax) => return "synthetic,,".to_owned(),
};
- let root = db.parse_or_expand(src.file_id);
+ let root = src.file_id.parse_or_expand(db);
let node = src.map(|e| e.to_node(&root).syntax().clone());
let original_range = node.as_ref().original_file_range_rooted(db);
let path = vfs.file_path(original_range.file_id.file_id(db));
@@ -1519,7 +1519,7 @@ fn location_csv_pat(db: &RootDatabase, vfs: &Vfs, sm: &BodySourceMap, pat_id: Pa
Ok(s) => s,
Err(SyntheticSyntax) => return "synthetic,,".to_owned(),
};
- let root = db.parse_or_expand(src.file_id);
+ let root = src.file_id.parse_or_expand(db);
let node = src.map(|e| e.to_node(&root).syntax().clone());
let original_range = node.as_ref().original_file_range_rooted(db);
let path = vfs.file_path(original_range.file_id.file_id(db));
@@ -1538,7 +1538,7 @@ fn expr_syntax_range<'a>(
) -> Option<(&'a VfsPath, LineCol, LineCol)> {
let src = sm.expr_syntax(expr_id);
if let Ok(src) = src {
- let root = db.parse_or_expand(src.file_id);
+ let root = src.file_id.parse_or_expand(db);
let node = src.map(|e| e.to_node(&root).syntax().clone());
let original_range = node.as_ref().original_file_range_rooted(db);
let path = vfs.file_path(original_range.file_id.file_id(db));
@@ -1559,7 +1559,7 @@ fn pat_syntax_range<'a>(
) -> Option<(&'a VfsPath, LineCol, LineCol)> {
let src = sm.pat_syntax(pat_id);
if let Ok(src) = src {
- let root = db.parse_or_expand(src.file_id);
+ let root = src.file_id.parse_or_expand(db);
let node = src.map(|e| e.to_node(&root).syntax().clone());
let original_range = node.as_ref().original_file_range_rooted(db);
let path = vfs.file_path(original_range.file_id.file_id(db));