Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/db.rs')
-rw-r--r--crates/hir-def/src/db.rs89
1 files changed, 21 insertions, 68 deletions
diff --git a/crates/hir-def/src/db.rs b/crates/hir-def/src/db.rs
index 4a9a3b12cf..c618e4bdce 100644
--- a/crates/hir-def/src/db.rs
+++ b/crates/hir-def/src/db.rs
@@ -1,18 +1,20 @@
//! Defines database & queries for name resolution.
use base_db::{Crate, RootQueryDb, SourceDatabase};
use either::Either;
-use hir_expand::{EditionedFileId, HirFileId, MacroCallId, MacroDefId, db::ExpandDatabase};
+use hir_expand::{
+ EditionedFileId, HirFileId, InFile, Lookup, MacroCallId, MacroDefId, MacroDefKind,
+ db::ExpandDatabase,
+};
use intern::sym;
use la_arena::ArenaMap;
use syntax::{AstPtr, ast};
-use thin_vec::ThinVec;
use triomphe::Arc;
use crate::{
- AttrDefId, BlockId, BlockLoc, ConstId, ConstLoc, DefWithBodyId, EnumId, EnumLoc, EnumVariantId,
+ AssocItemId, AttrDefId, ConstId, ConstLoc, DefWithBodyId, EnumId, EnumLoc, EnumVariantId,
EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId, ExternCrateLoc, FunctionId,
- FunctionLoc, GenericDefId, ImplId, ImplLoc, LocalFieldId, Macro2Id, Macro2Loc, MacroId,
- MacroRulesId, MacroRulesLoc, MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId,
+ FunctionLoc, GenericDefId, ImplId, ImplLoc, LocalFieldId, Macro2Id, Macro2Loc, MacroExpander,
+ MacroId, MacroRulesId, MacroRulesLoc, MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId,
StaticLoc, StructId, StructLoc, TraitAliasId, TraitAliasLoc, TraitId, TraitLoc, TypeAliasId,
TypeAliasLoc, UnionId, UnionLoc, UseId, UseLoc, VariantId,
attr::{Attrs, AttrsWithOwner},
@@ -21,17 +23,13 @@ use crate::{
},
hir::generics::GenericParams,
import_map::ImportMap,
- item_tree::{AttrOwner, ItemTree},
+ item_tree::{ItemTree, file_item_tree_query},
lang_item::{self, LangItem},
- nameres::{
- assoc::{ImplItems, TraitItems},
- crate_def_map,
- diagnostics::DefDiagnostics,
- },
+ nameres::{assoc::TraitItems, crate_def_map, diagnostics::DefDiagnostics},
signatures::{
- ConstSignature, EnumSignature, EnumVariants, FunctionSignature, ImplSignature,
- InactiveEnumVariantCode, StaticSignature, StructSignature, TraitAliasSignature,
- TraitSignature, TypeAliasSignature, UnionSignature, VariantFields,
+ ConstSignature, EnumSignature, FunctionSignature, ImplSignature, StaticSignature,
+ StructSignature, TraitAliasSignature, TraitSignature, TypeAliasSignature, UnionSignature,
+ VariantFields,
},
tt,
visibility::{self, Visibility},
@@ -93,9 +91,6 @@ pub trait InternDatabase: RootQueryDb {
#[salsa::interned]
fn intern_macro_rules(&self, loc: MacroRulesLoc) -> MacroRulesId;
// // endregion: items
-
- #[salsa::interned]
- fn intern_block(&self, loc: BlockLoc) -> BlockId;
}
#[query_group::query_group]
@@ -105,11 +100,9 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
fn expand_proc_attr_macros(&self) -> bool;
/// Computes an [`ItemTree`] for the given file or macro expansion.
- #[salsa::invoke(ItemTree::file_item_tree_query)]
- fn file_item_tree(&self, file_id: HirFileId) -> Arc<ItemTree>;
-
- #[salsa::invoke(ItemTree::block_item_tree_query)]
- fn block_item_tree(&self, block_id: BlockId) -> Arc<ItemTree>;
+ #[salsa::invoke(file_item_tree_query)]
+ #[salsa::transparent]
+ fn file_item_tree(&self, file_id: HirFileId) -> &ItemTree;
/// Turns a MacroId into a MacroDefId, describing the macro's definition post name resolution.
#[salsa::invoke(macro_def)]
@@ -123,24 +116,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
id: VariantId,
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>);
- #[salsa::tracked]
- fn enum_variants(&self, id: EnumId) -> Arc<EnumVariants> {
- self.enum_variants_with_diagnostics(id).0
- }
-
- #[salsa::invoke(EnumVariants::enum_variants_query)]
- fn enum_variants_with_diagnostics(
- &self,
- id: EnumId,
- ) -> (Arc<EnumVariants>, Option<Arc<ThinVec<InactiveEnumVariantCode>>>);
-
- #[salsa::transparent]
- #[salsa::invoke(ImplItems::impl_items_query)]
- fn impl_items(&self, e: ImplId) -> Arc<ImplItems>;
-
- #[salsa::invoke(ImplItems::impl_items_with_diagnostics_query)]
- fn impl_items_with_diagnostics(&self, e: ImplId) -> (Arc<ImplItems>, DefDiagnostics);
-
#[salsa::transparent]
#[salsa::invoke(TraitItems::trait_items_query)]
fn trait_items(&self, e: TraitId) -> Arc<TraitItems>;
@@ -323,16 +298,8 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
#[salsa::invoke(visibility::field_visibilities_query)]
fn field_visibilities(&self, var: VariantId) -> Arc<ArenaMap<LocalFieldId, Visibility>>;
- // FIXME: unify function_visibility and const_visibility?
-
- #[salsa::invoke(visibility::function_visibility_query)]
- fn function_visibility(&self, def: FunctionId) -> Visibility;
-
- #[salsa::invoke(visibility::const_visibility_query)]
- fn const_visibility(&self, def: ConstId) -> Visibility;
-
- #[salsa::invoke(visibility::type_alias_visibility_query)]
- fn type_alias_visibility(&self, def: TypeAliasId) -> Visibility;
+ #[salsa::invoke(visibility::assoc_visibility_query)]
+ fn assoc_visibility(&self, def: AssocItemId) -> Visibility;
// endregion:visibilities
@@ -368,7 +335,7 @@ fn include_macro_invoc(
fn crate_supports_no_std(db: &dyn DefDatabase, crate_id: Crate) -> bool {
let file = crate_id.data(db).root_file_id(db);
let item_tree = db.file_item_tree(file.into());
- let attrs = item_tree.raw_attrs(AttrOwner::TopLevel);
+ let attrs = item_tree.top_level_raw_attrs();
for attr in &**attrs {
match attr.path().as_ident() {
Some(ident) if *ident == sym::no_std => return true,
@@ -399,10 +366,6 @@ fn crate_supports_no_std(db: &dyn DefDatabase, crate_id: Crate) -> bool {
}
fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
- use hir_expand::InFile;
-
- use crate::{Lookup, MacroDefKind, MacroExpander};
-
let kind = |expander, file_id, m| {
let in_file = InFile::new(file_id, m);
match expander {
@@ -418,11 +381,9 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
MacroId::Macro2Id(it) => {
let loc: Macro2Loc = it.lookup(db);
- let item_tree = loc.id.item_tree(db);
- let makro = &item_tree[loc.id.value];
MacroDefId {
krate: loc.container.krate,
- kind: kind(loc.expander, loc.id.file_id(), makro.ast_id.upcast()),
+ kind: kind(loc.expander, loc.id.file_id, loc.id.value.upcast()),
local_inner: false,
allow_internal_unsafe: loc.allow_internal_unsafe,
edition: loc.edition,
@@ -431,11 +392,9 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
MacroId::MacroRulesId(it) => {
let loc: MacroRulesLoc = it.lookup(db);
- let item_tree = loc.id.item_tree(db);
- let makro = &item_tree[loc.id.value];
MacroDefId {
krate: loc.container.krate,
- kind: kind(loc.expander, loc.id.file_id(), makro.ast_id.upcast()),
+ kind: kind(loc.expander, loc.id.file_id, loc.id.value.upcast()),
local_inner: loc.flags.contains(MacroRulesLocFlags::LOCAL_INNER),
allow_internal_unsafe: loc
.flags
@@ -446,15 +405,9 @@ fn macro_def(db: &dyn DefDatabase, id: MacroId) -> MacroDefId {
MacroId::ProcMacroId(it) => {
let loc = it.lookup(db);
- let item_tree = loc.id.item_tree(db);
- let makro = &item_tree[loc.id.value];
MacroDefId {
krate: loc.container.krate,
- kind: MacroDefKind::ProcMacro(
- InFile::new(loc.id.file_id(), makro.ast_id),
- loc.expander,
- loc.kind,
- ),
+ kind: MacroDefKind::ProcMacro(loc.id, loc.expander, loc.kind),
local_inner: false,
allow_internal_unsafe: false,
edition: loc.edition,