Merge #1026
1026: rename persistent hir database -> def database r=matklad a=matklad Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
bce55c749a
@ -16,11 +16,7 @@ use vfs_filter::IncludeRustFiles;
|
||||
|
||||
type Result<T> = std::result::Result<T, failure::Error>;
|
||||
|
||||
#[salsa::database(
|
||||
ra_db::SourceDatabaseStorage,
|
||||
db::HirDatabaseStorage,
|
||||
db::PersistentHirDatabaseStorage
|
||||
)]
|
||||
#[salsa::database(ra_db::SourceDatabaseStorage, db::HirDatabaseStorage, db::DefDatabaseStorage)]
|
||||
#[derive(Debug)]
|
||||
pub struct BatchDatabase {
|
||||
runtime: salsa::Runtime<BatchDatabase>,
|
||||
|
@ -12,7 +12,7 @@ use ra_syntax::{
|
||||
use crate::{
|
||||
Name, AsName, Struct, Enum, EnumVariant, Crate,
|
||||
HirDatabase, HirFileId, StructField, FieldSource,
|
||||
type_ref::TypeRef, PersistentHirDatabase,
|
||||
type_ref::TypeRef, DefDatabase,
|
||||
};
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
@ -33,7 +33,7 @@ impl AdtDef {
|
||||
}
|
||||
|
||||
impl Struct {
|
||||
pub(crate) fn variant_data(&self, db: &impl PersistentHirDatabase) -> Arc<VariantData> {
|
||||
pub(crate) fn variant_data(&self, db: &impl DefDatabase) -> Arc<VariantData> {
|
||||
db.struct_data((*self).into()).variant_data.clone()
|
||||
}
|
||||
}
|
||||
@ -52,10 +52,7 @@ impl StructData {
|
||||
StructData { name, variant_data }
|
||||
}
|
||||
|
||||
pub(crate) fn struct_data_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
struct_: Struct,
|
||||
) -> Arc<StructData> {
|
||||
pub(crate) fn struct_data_query(db: &impl DefDatabase, struct_: Struct) -> Arc<StructData> {
|
||||
let (_, struct_def) = struct_.source(db);
|
||||
Arc::new(StructData::new(&*struct_def))
|
||||
}
|
||||
@ -68,7 +65,7 @@ fn variants(enum_def: &ast::EnumDef) -> impl Iterator<Item = &ast::EnumVariant>
|
||||
impl EnumVariant {
|
||||
pub(crate) fn source_impl(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
) -> (HirFileId, TreeArc<ast::EnumVariant>) {
|
||||
let (file_id, enum_def) = self.parent.source(db);
|
||||
let var = variants(&*enum_def)
|
||||
@ -79,7 +76,7 @@ impl EnumVariant {
|
||||
.to_owned();
|
||||
(file_id, var)
|
||||
}
|
||||
pub(crate) fn variant_data(&self, db: &impl PersistentHirDatabase) -> Arc<VariantData> {
|
||||
pub(crate) fn variant_data(&self, db: &impl DefDatabase) -> Arc<VariantData> {
|
||||
db.enum_data(self.parent).variants[self.id].variant_data.clone()
|
||||
}
|
||||
}
|
||||
@ -91,7 +88,7 @@ pub struct EnumData {
|
||||
}
|
||||
|
||||
impl EnumData {
|
||||
pub(crate) fn enum_data_query(db: &impl PersistentHirDatabase, e: Enum) -> Arc<EnumData> {
|
||||
pub(crate) fn enum_data_query(db: &impl DefDatabase, e: Enum) -> Arc<EnumData> {
|
||||
let (_file_id, enum_def) = e.source(db);
|
||||
let name = enum_def.name().map(|n| n.as_name());
|
||||
let variants = variants(&*enum_def)
|
||||
@ -189,7 +186,7 @@ impl VariantDef {
|
||||
VariantDef::EnumVariant(it) => it.field(db, name),
|
||||
}
|
||||
}
|
||||
pub(crate) fn variant_data(self, db: &impl PersistentHirDatabase) -> Arc<VariantData> {
|
||||
pub(crate) fn variant_data(self, db: &impl DefDatabase) -> Arc<VariantData> {
|
||||
match self {
|
||||
VariantDef::Struct(it) => it.variant_data(db),
|
||||
VariantDef::EnumVariant(it) => it.variant_data(db),
|
||||
@ -198,7 +195,7 @@ impl VariantDef {
|
||||
}
|
||||
|
||||
impl StructField {
|
||||
pub(crate) fn source_impl(&self, db: &impl PersistentHirDatabase) -> (HirFileId, FieldSource) {
|
||||
pub(crate) fn source_impl(&self, db: &impl DefDatabase) -> (HirFileId, FieldSource) {
|
||||
let var_data = self.parent.variant_data(db);
|
||||
let fields = var_data.fields().unwrap();
|
||||
let ss;
|
||||
|
@ -6,7 +6,7 @@ use ra_syntax::{ast::self, TreeArc, SyntaxNode};
|
||||
|
||||
use crate::{
|
||||
Name, ScopesWithSourceMap, Ty, HirFileId,
|
||||
HirDatabase, PersistentHirDatabase,
|
||||
HirDatabase, DefDatabase,
|
||||
type_ref::TypeRef,
|
||||
nameres::{ModuleScope, Namespace, ImportId, CrateModuleId},
|
||||
expr::{Body, BodySourceMap},
|
||||
@ -38,24 +38,21 @@ impl Crate {
|
||||
self.crate_id
|
||||
}
|
||||
|
||||
pub fn dependencies(&self, db: &impl PersistentHirDatabase) -> Vec<CrateDependency> {
|
||||
pub fn dependencies(&self, db: &impl DefDatabase) -> Vec<CrateDependency> {
|
||||
self.dependencies_impl(db)
|
||||
}
|
||||
|
||||
pub fn root_module(&self, db: &impl PersistentHirDatabase) -> Option<Module> {
|
||||
pub fn root_module(&self, db: &impl DefDatabase) -> Option<Module> {
|
||||
self.root_module_impl(db)
|
||||
}
|
||||
|
||||
pub fn edition(&self, db: &impl PersistentHirDatabase) -> Edition {
|
||||
pub fn edition(&self, db: &impl DefDatabase) -> Edition {
|
||||
let crate_graph = db.crate_graph();
|
||||
crate_graph.edition(self.crate_id)
|
||||
}
|
||||
|
||||
// FIXME: should this be in source_binder?
|
||||
pub fn source_root_crates(
|
||||
db: &impl PersistentHirDatabase,
|
||||
source_root: SourceRootId,
|
||||
) -> Vec<Crate> {
|
||||
pub fn source_root_crates(db: &impl DefDatabase, source_root: SourceRootId) -> Vec<Crate> {
|
||||
let crate_ids = db.source_root_crates(source_root);
|
||||
crate_ids.iter().map(|&crate_id| Crate { crate_id }).collect()
|
||||
}
|
||||
@ -111,7 +108,7 @@ impl Module {
|
||||
}
|
||||
|
||||
/// Returns a node which defines this module. That is, a file or a `mod foo {}` with items.
|
||||
pub fn definition_source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, ModuleSource) {
|
||||
pub fn definition_source(&self, db: &impl DefDatabase) -> (HirFileId, ModuleSource) {
|
||||
self.definition_source_impl(db)
|
||||
}
|
||||
|
||||
@ -134,14 +131,14 @@ impl Module {
|
||||
}
|
||||
|
||||
/// Returns the crate this module is part of.
|
||||
pub fn krate(&self, _db: &impl PersistentHirDatabase) -> Option<Crate> {
|
||||
pub fn krate(&self, _db: &impl DefDatabase) -> Option<Crate> {
|
||||
Some(self.krate)
|
||||
}
|
||||
|
||||
/// Topmost parent of this module. Every module has a `crate_root`, but some
|
||||
/// might be missing `krate`. This can happen if a module's file is not included
|
||||
/// in the module tree of any target in `Cargo.toml`.
|
||||
pub fn crate_root(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn crate_root(&self, db: &impl DefDatabase) -> Module {
|
||||
self.crate_root_impl(db)
|
||||
}
|
||||
|
||||
@ -151,12 +148,12 @@ impl Module {
|
||||
}
|
||||
|
||||
/// Iterates over all child modules.
|
||||
pub fn children(&self, db: &impl PersistentHirDatabase) -> impl Iterator<Item = Module> {
|
||||
pub fn children(&self, db: &impl DefDatabase) -> impl Iterator<Item = Module> {
|
||||
self.children_impl(db)
|
||||
}
|
||||
|
||||
/// Finds a parent module.
|
||||
pub fn parent(&self, db: &impl PersistentHirDatabase) -> Option<Module> {
|
||||
pub fn parent(&self, db: &impl DefDatabase) -> Option<Module> {
|
||||
self.parent_impl(db)
|
||||
}
|
||||
|
||||
@ -229,7 +226,7 @@ impl StructField {
|
||||
self.parent.variant_data(db).fields().unwrap()[self.id].name.clone()
|
||||
}
|
||||
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, FieldSource) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, FieldSource) {
|
||||
self.source_impl(db)
|
||||
}
|
||||
|
||||
@ -257,7 +254,7 @@ pub struct Struct {
|
||||
}
|
||||
|
||||
impl Struct {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::StructDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StructDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
@ -289,7 +286,7 @@ impl Struct {
|
||||
.map(|(id, _)| StructField { parent: (*self).into(), id })
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
|
||||
@ -325,7 +322,7 @@ pub struct Enum {
|
||||
}
|
||||
|
||||
impl Enum {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
@ -337,7 +334,7 @@ impl Enum {
|
||||
db.enum_data(*self).name.clone()
|
||||
}
|
||||
|
||||
pub fn variants(&self, db: &impl PersistentHirDatabase) -> Vec<EnumVariant> {
|
||||
pub fn variants(&self, db: &impl DefDatabase) -> Vec<EnumVariant> {
|
||||
db.enum_data(*self)
|
||||
.variants
|
||||
.iter()
|
||||
@ -345,7 +342,7 @@ impl Enum {
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn variant(&self, db: &impl PersistentHirDatabase, name: &Name) -> Option<EnumVariant> {
|
||||
pub fn variant(&self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
|
||||
db.enum_data(*self)
|
||||
.variants
|
||||
.iter()
|
||||
@ -353,7 +350,7 @@ impl Enum {
|
||||
.map(|(id, _)| EnumVariant { parent: *self, id })
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
|
||||
@ -386,20 +383,17 @@ pub struct EnumVariant {
|
||||
}
|
||||
|
||||
impl EnumVariant {
|
||||
pub fn source(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
) -> (HirFileId, TreeArc<ast::EnumVariant>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::EnumVariant>) {
|
||||
self.source_impl(db)
|
||||
}
|
||||
pub fn module(&self, db: &impl HirDatabase) -> Module {
|
||||
self.parent.module(db)
|
||||
}
|
||||
pub fn parent_enum(&self, _db: &impl PersistentHirDatabase) -> Enum {
|
||||
pub fn parent_enum(&self, _db: &impl DefDatabase) -> Enum {
|
||||
self.parent
|
||||
}
|
||||
|
||||
pub fn name(&self, db: &impl PersistentHirDatabase) -> Option<Name> {
|
||||
pub fn name(&self, db: &impl DefDatabase) -> Option<Name> {
|
||||
db.enum_data(self.parent).variants[self.id].name.clone()
|
||||
}
|
||||
|
||||
@ -465,11 +459,11 @@ impl FnSignature {
|
||||
}
|
||||
|
||||
impl Function {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::FnDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::FnDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
pub fn module(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn module(&self, db: &impl DefDatabase) -> Module {
|
||||
self.id.module(db)
|
||||
}
|
||||
|
||||
@ -503,12 +497,12 @@ impl Function {
|
||||
db.infer(*self)
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
|
||||
/// The containing impl block, if this is a method.
|
||||
pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> {
|
||||
pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
|
||||
let module_impls = db.impls_in_module(self.module(db));
|
||||
ImplBlock::containing(module_impls, (*self).into())
|
||||
}
|
||||
@ -540,11 +534,11 @@ pub struct Const {
|
||||
}
|
||||
|
||||
impl Const {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ConstDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
pub fn module(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn module(&self, db: &impl DefDatabase) -> Module {
|
||||
self.id.module(db)
|
||||
}
|
||||
|
||||
@ -553,7 +547,7 @@ impl Const {
|
||||
}
|
||||
|
||||
/// The containing impl block, if this is a method.
|
||||
pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> {
|
||||
pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
|
||||
let module_impls = db.impls_in_module(self.module(db));
|
||||
ImplBlock::containing(module_impls, (*self).into())
|
||||
}
|
||||
@ -599,11 +593,11 @@ pub struct Static {
|
||||
}
|
||||
|
||||
impl Static {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::StaticDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
pub fn module(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn module(&self, db: &impl DefDatabase) -> Module {
|
||||
self.id.module(db)
|
||||
}
|
||||
|
||||
@ -630,15 +624,15 @@ pub struct Trait {
|
||||
}
|
||||
|
||||
impl Trait {
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TraitDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
pub fn module(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn module(&self, db: &impl DefDatabase) -> Module {
|
||||
self.id.module(db)
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
}
|
||||
@ -655,28 +649,25 @@ pub struct TypeAlias {
|
||||
}
|
||||
|
||||
impl TypeAlias {
|
||||
pub fn source(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::TypeAliasDef>) {
|
||||
self.id.source(db)
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
|
||||
pub fn module(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub fn module(&self, db: &impl DefDatabase) -> Module {
|
||||
self.id.module(db)
|
||||
}
|
||||
|
||||
/// The containing impl block, if this is a method.
|
||||
pub fn impl_block(&self, db: &impl PersistentHirDatabase) -> Option<ImplBlock> {
|
||||
pub fn impl_block(&self, db: &impl DefDatabase) -> Option<ImplBlock> {
|
||||
let module_impls = db.impls_in_module(self.module(db));
|
||||
ImplBlock::containing(module_impls, (*self).into())
|
||||
}
|
||||
|
||||
pub fn type_ref(self, db: &impl PersistentHirDatabase) -> Arc<TypeRef> {
|
||||
pub fn type_ref(self, db: &impl DefDatabase) -> Arc<TypeRef> {
|
||||
db.type_alias_ref(self)
|
||||
}
|
||||
|
||||
|
@ -5,14 +5,11 @@ use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner};
|
||||
use crate::{
|
||||
Name, AsName, Function, FnSignature,
|
||||
type_ref::{TypeRef, Mutability},
|
||||
PersistentHirDatabase,
|
||||
DefDatabase,
|
||||
};
|
||||
|
||||
impl FnSignature {
|
||||
pub(crate) fn fn_signature_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
func: Function,
|
||||
) -> Arc<FnSignature> {
|
||||
pub(crate) fn fn_signature_query(db: &impl DefDatabase, func: Function) -> Arc<FnSignature> {
|
||||
let (_, node) = func.source(db);
|
||||
let name = node.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
|
||||
let mut params = Vec::new();
|
||||
|
@ -5,7 +5,7 @@ use ra_syntax::ast::{NameOwner, TypeAscriptionOwner};
|
||||
use crate::{
|
||||
Name, AsName, Const, ConstSignature, Static,
|
||||
type_ref::{TypeRef},
|
||||
PersistentHirDatabase,
|
||||
DefDatabase,
|
||||
};
|
||||
|
||||
fn const_signature_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<ConstSignature> {
|
||||
@ -17,7 +17,7 @@ fn const_signature_for<N: NameOwner + TypeAscriptionOwner>(node: &N) -> Arc<Cons
|
||||
|
||||
impl ConstSignature {
|
||||
pub(crate) fn const_signature_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
konst: Const,
|
||||
) -> Arc<ConstSignature> {
|
||||
let (_, node) = konst.source(db);
|
||||
@ -25,7 +25,7 @@ impl ConstSignature {
|
||||
}
|
||||
|
||||
pub(crate) fn static_signature_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
konst: Static,
|
||||
) -> Arc<ConstSignature> {
|
||||
let (_, node) = konst.source(db);
|
||||
|
@ -1,12 +1,9 @@
|
||||
use crate::{
|
||||
Crate, CrateDependency, AsName, Module, PersistentHirDatabase,
|
||||
Crate, CrateDependency, AsName, Module, DefDatabase,
|
||||
};
|
||||
|
||||
impl Crate {
|
||||
pub(crate) fn dependencies_impl(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
) -> Vec<CrateDependency> {
|
||||
pub(crate) fn dependencies_impl(&self, db: &impl DefDatabase) -> Vec<CrateDependency> {
|
||||
let crate_graph = db.crate_graph();
|
||||
crate_graph
|
||||
.dependencies(self.crate_id)
|
||||
@ -17,7 +14,7 @@ impl Crate {
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
pub(crate) fn root_module_impl(&self, db: &impl PersistentHirDatabase) -> Option<Module> {
|
||||
pub(crate) fn root_module_impl(&self, db: &impl DefDatabase) -> Option<Module> {
|
||||
let module_id = db.crate_def_map(*self).root();
|
||||
let module = Module { krate: *self, module_id };
|
||||
Some(module)
|
||||
|
@ -4,13 +4,13 @@ use ra_syntax::{ast, SyntaxNode, TreeArc, AstNode};
|
||||
use crate::{
|
||||
Module, ModuleSource, Problem, Name,
|
||||
nameres::{CrateModuleId, ImportId},
|
||||
HirDatabase, PersistentHirDatabase,
|
||||
HirDatabase, DefDatabase,
|
||||
HirFileId, SourceItemId,
|
||||
};
|
||||
|
||||
impl ModuleSource {
|
||||
pub(crate) fn new(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
file_id: Option<FileId>,
|
||||
decl_id: Option<SourceItemId>,
|
||||
) -> ModuleSource {
|
||||
@ -49,7 +49,7 @@ impl Module {
|
||||
|
||||
pub(crate) fn definition_source_impl(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
) -> (HirFileId, ModuleSource) {
|
||||
let def_map = db.crate_def_map(self.krate);
|
||||
let decl_id = def_map[self.module_id].declaration;
|
||||
@ -80,7 +80,7 @@ impl Module {
|
||||
source_map.get(&source, import)
|
||||
}
|
||||
|
||||
pub(crate) fn crate_root_impl(&self, db: &impl PersistentHirDatabase) -> Module {
|
||||
pub(crate) fn crate_root_impl(&self, db: &impl DefDatabase) -> Module {
|
||||
let def_map = db.crate_def_map(self.krate);
|
||||
self.with_module_id(def_map.root())
|
||||
}
|
||||
@ -93,10 +93,7 @@ impl Module {
|
||||
}
|
||||
|
||||
/// Iterates over all child modules.
|
||||
pub(crate) fn children_impl(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
) -> impl Iterator<Item = Module> {
|
||||
pub(crate) fn children_impl(&self, db: &impl DefDatabase) -> impl Iterator<Item = Module> {
|
||||
let def_map = db.crate_def_map(self.krate);
|
||||
let children = def_map[self.module_id]
|
||||
.children
|
||||
@ -106,7 +103,7 @@ impl Module {
|
||||
children.into_iter()
|
||||
}
|
||||
|
||||
pub(crate) fn parent_impl(&self, db: &impl PersistentHirDatabase) -> Option<Module> {
|
||||
pub(crate) fn parent_impl(&self, db: &impl DefDatabase) -> Option<Module> {
|
||||
let def_map = db.crate_def_map(self.krate);
|
||||
let parent_id = def_map[self.module_id].parent?;
|
||||
Some(self.with_module_id(parent_id))
|
||||
|
@ -16,8 +16,8 @@ use crate::{
|
||||
type_ref::TypeRef,
|
||||
};
|
||||
|
||||
#[salsa::query_group(PersistentHirDatabaseStorage)]
|
||||
pub trait PersistentHirDatabase: SourceDatabase + AsRef<HirInterner> {
|
||||
#[salsa::query_group(DefDatabaseStorage)]
|
||||
pub trait DefDatabase: SourceDatabase + AsRef<HirInterner> {
|
||||
#[salsa::invoke(HirFileId::hir_parse)]
|
||||
fn hir_parse(&self, file_id: HirFileId) -> TreeArc<SourceFile>;
|
||||
|
||||
@ -71,7 +71,7 @@ pub trait PersistentHirDatabase: SourceDatabase + AsRef<HirInterner> {
|
||||
}
|
||||
|
||||
#[salsa::query_group(HirDatabaseStorage)]
|
||||
pub trait HirDatabase: PersistentHirDatabase {
|
||||
pub trait HirDatabase: DefDatabase {
|
||||
#[salsa::invoke(ExprScopes::expr_scopes_query)]
|
||||
fn expr_scopes(&self, func: Function) -> Arc<ExprScopes>;
|
||||
|
||||
|
@ -8,7 +8,7 @@ use std::sync::Arc;
|
||||
use ra_syntax::ast::{self, NameOwner, TypeParamsOwner};
|
||||
|
||||
use crate::{
|
||||
db::PersistentHirDatabase,
|
||||
db::DefDatabase,
|
||||
Name, AsName, Function, Struct, Enum, Trait, TypeAlias, ImplBlock
|
||||
};
|
||||
|
||||
@ -40,7 +40,7 @@ impl_froms!(GenericDef: Function, Struct, Enum, Trait, TypeAlias, ImplBlock);
|
||||
|
||||
impl GenericParams {
|
||||
pub(crate) fn generic_params_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
def: GenericDef,
|
||||
) -> Arc<GenericParams> {
|
||||
let mut generics = GenericParams::default();
|
||||
|
@ -10,7 +10,7 @@ use ra_arena::{Arena, RawId, ArenaId, impl_arena_id};
|
||||
|
||||
use crate::{
|
||||
Module,
|
||||
PersistentHirDatabase,
|
||||
DefDatabase,
|
||||
};
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
@ -63,7 +63,7 @@ pub struct HirFileId(HirFileIdRepr);
|
||||
impl HirFileId {
|
||||
/// For macro-expansion files, returns the file original source file the
|
||||
/// expansion originated from.
|
||||
pub fn original_file(self, db: &impl PersistentHirDatabase) -> FileId {
|
||||
pub fn original_file(self, db: &impl DefDatabase) -> FileId {
|
||||
match self.0 {
|
||||
HirFileIdRepr::File(file_id) => file_id,
|
||||
HirFileIdRepr::Macro(macro_call_id) => {
|
||||
@ -83,10 +83,7 @@ impl HirFileId {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn hir_parse(
|
||||
db: &impl PersistentHirDatabase,
|
||||
file_id: HirFileId,
|
||||
) -> TreeArc<SourceFile> {
|
||||
pub(crate) fn hir_parse(db: &impl DefDatabase, file_id: HirFileId) -> TreeArc<SourceFile> {
|
||||
match file_id.0 {
|
||||
HirFileIdRepr::File(file_id) => db.parse(file_id),
|
||||
HirFileIdRepr::Macro(macro_call_id) => {
|
||||
@ -97,10 +94,7 @@ impl HirFileId {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_macro(
|
||||
db: &impl PersistentHirDatabase,
|
||||
macro_call_id: MacroCallId,
|
||||
) -> Option<TreeArc<SourceFile>> {
|
||||
fn parse_macro(db: &impl DefDatabase, macro_call_id: MacroCallId) -> Option<TreeArc<SourceFile>> {
|
||||
let loc = macro_call_id.loc(db);
|
||||
let syntax = db.file_item(loc.source_item_id);
|
||||
let macro_call = ast::MacroCall::cast(&syntax).unwrap();
|
||||
@ -190,7 +184,7 @@ pub(crate) struct LocationCtx<DB> {
|
||||
file_id: HirFileId,
|
||||
}
|
||||
|
||||
impl<'a, DB: PersistentHirDatabase> LocationCtx<&'a DB> {
|
||||
impl<'a, DB: DefDatabase> LocationCtx<&'a DB> {
|
||||
pub(crate) fn new(db: &'a DB, module: Module, file_id: HirFileId) -> LocationCtx<&'a DB> {
|
||||
LocationCtx { db, module, file_id }
|
||||
}
|
||||
@ -205,13 +199,13 @@ impl<'a, DB: PersistentHirDatabase> LocationCtx<&'a DB> {
|
||||
|
||||
pub(crate) trait AstItemDef<N: AstNode>: ArenaId + Clone {
|
||||
fn interner(interner: &HirInterner) -> &LocationInterner<ItemLoc<N>, Self>;
|
||||
fn from_ast(ctx: LocationCtx<&impl PersistentHirDatabase>, ast: &N) -> Self {
|
||||
fn from_ast(ctx: LocationCtx<&impl DefDatabase>, ast: &N) -> Self {
|
||||
let items = ctx.db.file_items(ctx.file_id);
|
||||
let item_id = items.id_of(ctx.file_id, ast.syntax());
|
||||
Self::from_source_item_id_unchecked(ctx, item_id)
|
||||
}
|
||||
fn from_source_item_id_unchecked(
|
||||
ctx: LocationCtx<&impl PersistentHirDatabase>,
|
||||
ctx: LocationCtx<&impl DefDatabase>,
|
||||
item_id: SourceFileItemId,
|
||||
) -> Self {
|
||||
let raw = SourceItemId { file_id: ctx.file_id, item_id };
|
||||
@ -219,7 +213,7 @@ pub(crate) trait AstItemDef<N: AstNode>: ArenaId + Clone {
|
||||
|
||||
Self::interner(ctx.db.as_ref()).loc2id(&loc)
|
||||
}
|
||||
fn source(self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<N>) {
|
||||
fn source(self, db: &impl DefDatabase) -> (HirFileId, TreeArc<N>) {
|
||||
let int = Self::interner(db.as_ref());
|
||||
let loc = int.id2loc(self);
|
||||
let syntax = db.file_item(loc.raw);
|
||||
@ -227,7 +221,7 @@ pub(crate) trait AstItemDef<N: AstNode>: ArenaId + Clone {
|
||||
N::cast(&syntax).unwrap_or_else(|| panic!("invalid ItemLoc: {:?}", loc.raw)).to_owned();
|
||||
(loc.raw.file_id, ast)
|
||||
}
|
||||
fn module(self, db: &impl PersistentHirDatabase) -> Module {
|
||||
fn module(self, db: &impl DefDatabase) -> Module {
|
||||
let int = Self::interner(db.as_ref());
|
||||
let loc = int.id2loc(self);
|
||||
loc.module
|
||||
@ -324,7 +318,7 @@ pub struct SourceFileItems {
|
||||
|
||||
impl SourceFileItems {
|
||||
pub(crate) fn file_items_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
file_id: HirFileId,
|
||||
) -> Arc<SourceFileItems> {
|
||||
let source_file = db.hir_parse(file_id);
|
||||
@ -332,7 +326,7 @@ impl SourceFileItems {
|
||||
}
|
||||
|
||||
pub(crate) fn file_item_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
source_item_id: SourceItemId,
|
||||
) -> TreeArc<SyntaxNode> {
|
||||
let source_file = db.hir_parse(source_item_id.file_id);
|
||||
|
@ -9,7 +9,7 @@ use ra_syntax::{
|
||||
|
||||
use crate::{
|
||||
Const, TypeAlias, Function, HirFileId,
|
||||
HirDatabase, PersistentHirDatabase,
|
||||
HirDatabase, DefDatabase,
|
||||
ModuleDef, Trait, Resolution,
|
||||
type_ref::TypeRef,
|
||||
ids::LocationCtx,
|
||||
@ -59,7 +59,7 @@ impl ImplBlock {
|
||||
}
|
||||
|
||||
/// Returns the syntax of the impl block
|
||||
pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::ImplBlock>) {
|
||||
pub fn source(&self, db: &impl DefDatabase) -> (HirFileId, TreeArc<ast::ImplBlock>) {
|
||||
let source_map = db.impls_in_module_source_map(self.module);
|
||||
let (file_id, source) = self.module.definition_source(db);
|
||||
(file_id, source_map.get(&source, self.impl_id))
|
||||
@ -73,11 +73,11 @@ impl ImplBlock {
|
||||
self.module
|
||||
}
|
||||
|
||||
pub fn target_trait_ref(&self, db: &impl PersistentHirDatabase) -> Option<TypeRef> {
|
||||
pub fn target_trait_ref(&self, db: &impl DefDatabase) -> Option<TypeRef> {
|
||||
db.impls_in_module(self.module).impls[self.impl_id].target_trait().cloned()
|
||||
}
|
||||
|
||||
pub fn target_type(&self, db: &impl PersistentHirDatabase) -> TypeRef {
|
||||
pub fn target_type(&self, db: &impl DefDatabase) -> TypeRef {
|
||||
db.impls_in_module(self.module).impls[self.impl_id].target_type().clone()
|
||||
}
|
||||
|
||||
@ -97,11 +97,11 @@ impl ImplBlock {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn items(&self, db: &impl PersistentHirDatabase) -> Vec<ImplItem> {
|
||||
pub fn items(&self, db: &impl DefDatabase) -> Vec<ImplItem> {
|
||||
db.impls_in_module(self.module).impls[self.impl_id].items().to_vec()
|
||||
}
|
||||
|
||||
pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
|
||||
pub fn generic_params(&self, db: &impl DefDatabase) -> Arc<GenericParams> {
|
||||
db.generic_params((*self).into())
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ pub struct ImplData {
|
||||
|
||||
impl ImplData {
|
||||
pub(crate) fn from_ast(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
file_id: HirFileId,
|
||||
module: Module,
|
||||
node: &ast::ImplBlock,
|
||||
@ -193,11 +193,7 @@ pub struct ModuleImplBlocks {
|
||||
}
|
||||
|
||||
impl ModuleImplBlocks {
|
||||
fn collect(
|
||||
db: &impl PersistentHirDatabase,
|
||||
module: Module,
|
||||
source_map: &mut ImplSourceMap,
|
||||
) -> Self {
|
||||
fn collect(db: &impl DefDatabase, module: Module, source_map: &mut ImplSourceMap) -> Self {
|
||||
let mut m = ModuleImplBlocks {
|
||||
module,
|
||||
impls: Arena::default(),
|
||||
@ -228,7 +224,7 @@ impl ModuleImplBlocks {
|
||||
}
|
||||
|
||||
pub(crate) fn impls_in_module_with_source_map_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
module: Module,
|
||||
) -> (Arc<ModuleImplBlocks>, Arc<ImplSourceMap>) {
|
||||
let mut source_map = ImplSourceMap::default();
|
||||
@ -238,15 +234,12 @@ pub(crate) fn impls_in_module_with_source_map_query(
|
||||
(Arc::new(result), Arc::new(source_map))
|
||||
}
|
||||
|
||||
pub(crate) fn impls_in_module(
|
||||
db: &impl PersistentHirDatabase,
|
||||
module: Module,
|
||||
) -> Arc<ModuleImplBlocks> {
|
||||
pub(crate) fn impls_in_module(db: &impl DefDatabase, module: Module) -> Arc<ModuleImplBlocks> {
|
||||
db.impls_in_module_with_source_map(module).0
|
||||
}
|
||||
|
||||
pub(crate) fn impls_in_module_source_map_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
module: Module,
|
||||
) -> Arc<ImplSourceMap> {
|
||||
db.impls_in_module_with_source_map(module).1
|
||||
|
@ -43,7 +43,7 @@ mod code_model_impl;
|
||||
mod marks;
|
||||
|
||||
use crate::{
|
||||
db::{HirDatabase, PersistentHirDatabase},
|
||||
db::{HirDatabase, DefDatabase},
|
||||
name::{AsName, KnownName},
|
||||
ids::{SourceItemId, SourceFileItems},
|
||||
};
|
||||
|
@ -13,11 +13,7 @@ use crate::{db, HirInterner};
|
||||
|
||||
pub const WORKSPACE: SourceRootId = SourceRootId(0);
|
||||
|
||||
#[salsa::database(
|
||||
ra_db::SourceDatabaseStorage,
|
||||
db::HirDatabaseStorage,
|
||||
db::PersistentHirDatabaseStorage
|
||||
)]
|
||||
#[salsa::database(ra_db::SourceDatabaseStorage, db::HirDatabaseStorage, db::DefDatabaseStorage)]
|
||||
#[derive(Debug)]
|
||||
pub struct MockDatabase {
|
||||
events: Mutex<Option<Vec<salsa::Event<MockDatabase>>>>,
|
||||
|
@ -62,7 +62,7 @@ use test_utils::tested_by;
|
||||
|
||||
use crate::{
|
||||
ModuleDef, Name, Crate, Module, Problem,
|
||||
PersistentHirDatabase, Path, PathKind, HirFileId,
|
||||
DefDatabase, Path, PathKind, HirFileId,
|
||||
ids::{SourceItemId, SourceFileItemId, MacroCallId},
|
||||
};
|
||||
|
||||
@ -196,10 +196,7 @@ enum ReachedFixedPoint {
|
||||
}
|
||||
|
||||
impl CrateDefMap {
|
||||
pub(crate) fn crate_def_map_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
krate: Crate,
|
||||
) -> Arc<CrateDefMap> {
|
||||
pub(crate) fn crate_def_map_query(db: &impl DefDatabase, krate: Crate) -> Arc<CrateDefMap> {
|
||||
let start = std::time::Instant::now();
|
||||
let def_map = {
|
||||
let edition = krate.edition(db);
|
||||
@ -268,7 +265,7 @@ impl CrateDefMap {
|
||||
|
||||
pub(crate) fn resolve_path(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
original_module: CrateModuleId,
|
||||
path: &Path,
|
||||
) -> (PerNs<ModuleDef>, Option<usize>) {
|
||||
@ -280,7 +277,7 @@ impl CrateDefMap {
|
||||
// the result.
|
||||
fn resolve_path_fp(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
mode: ResolveMode,
|
||||
original_module: CrateModuleId,
|
||||
path: &Path,
|
||||
@ -422,7 +419,7 @@ impl CrateDefMap {
|
||||
|
||||
pub(crate) fn resolve_name_in_module(
|
||||
&self,
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
module: CrateModuleId,
|
||||
name: &Name,
|
||||
) -> PerNs<ModuleDef> {
|
||||
@ -442,7 +439,7 @@ impl CrateDefMap {
|
||||
self.extern_prelude.get(name).map_or(PerNs::none(), |&it| PerNs::types(it))
|
||||
}
|
||||
|
||||
fn resolve_in_prelude(&self, db: &impl PersistentHirDatabase, name: &Name) -> PerNs<ModuleDef> {
|
||||
fn resolve_in_prelude(&self, db: &impl DefDatabase, name: &Name) -> PerNs<ModuleDef> {
|
||||
if let Some(prelude) = self.prelude {
|
||||
let resolution = if prelude.krate == self.krate {
|
||||
self[prelude.module_id].scope.items.get(name).cloned()
|
||||
|
@ -6,7 +6,7 @@ use ra_db::FileId;
|
||||
|
||||
use crate::{
|
||||
Function, Module, Struct, Enum, Const, Static, Trait, TypeAlias,
|
||||
PersistentHirDatabase, HirFileId, Name, Path, Problem, Crate,
|
||||
DefDatabase, HirFileId, Name, Path, Problem, Crate,
|
||||
KnownName,
|
||||
nameres::{Resolution, PerNs, ModuleDef, ReachedFixedPoint, ResolveMode, raw},
|
||||
ids::{AstItemDef, LocationCtx, MacroCallLoc, SourceItemId, MacroCallId},
|
||||
@ -14,10 +14,7 @@ use crate::{
|
||||
|
||||
use super::{CrateDefMap, CrateModuleId, ModuleData, CrateMacroId};
|
||||
|
||||
pub(super) fn collect_defs(
|
||||
db: &impl PersistentHirDatabase,
|
||||
mut def_map: CrateDefMap,
|
||||
) -> CrateDefMap {
|
||||
pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> CrateDefMap {
|
||||
// populate external prelude
|
||||
for dep in def_map.krate.dependencies(db) {
|
||||
log::debug!("crate dep {:?} -> {:?}", dep.name, dep.krate);
|
||||
@ -57,7 +54,7 @@ struct DefCollector<DB> {
|
||||
|
||||
impl<'a, DB> DefCollector<&'a DB>
|
||||
where
|
||||
DB: PersistentHirDatabase,
|
||||
DB: DefDatabase,
|
||||
{
|
||||
fn collect(&mut self) {
|
||||
let crate_graph = self.db.crate_graph();
|
||||
@ -370,7 +367,7 @@ struct ModCollector<'a, D> {
|
||||
|
||||
impl<DB> ModCollector<'_, &'_ mut DefCollector<&'_ DB>>
|
||||
where
|
||||
DB: PersistentHirDatabase,
|
||||
DB: DefDatabase,
|
||||
{
|
||||
fn collect(&mut self, items: &[raw::RawItem]) {
|
||||
for item in items {
|
||||
@ -523,7 +520,7 @@ fn is_macro_rules(path: &Path) -> bool {
|
||||
}
|
||||
|
||||
fn resolve_submodule(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
file_id: HirFileId,
|
||||
name: &Name,
|
||||
is_root: bool,
|
||||
|
@ -12,7 +12,7 @@ use ra_syntax::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
PersistentHirDatabase, Name, AsName, Path, HirFileId, ModuleSource,
|
||||
DefDatabase, Name, AsName, Path, HirFileId, ModuleSource,
|
||||
ids::{SourceFileItemId, SourceFileItems},
|
||||
};
|
||||
|
||||
@ -47,15 +47,12 @@ impl ImportSourceMap {
|
||||
}
|
||||
|
||||
impl RawItems {
|
||||
pub(crate) fn raw_items_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
file_id: FileId,
|
||||
) -> Arc<RawItems> {
|
||||
pub(crate) fn raw_items_query(db: &impl DefDatabase, file_id: FileId) -> Arc<RawItems> {
|
||||
db.raw_items_with_source_map(file_id).0
|
||||
}
|
||||
|
||||
pub(crate) fn raw_items_with_source_map_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
db: &impl DefDatabase,
|
||||
file_id: FileId,
|
||||
) -> (Arc<RawItems>, Arc<ImportSourceMap>) {
|
||||
let mut collector = RawItemsCollector {
|
||||
|
@ -2,12 +2,9 @@
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::{TypeAlias, db::PersistentHirDatabase, type_ref::TypeRef};
|
||||
use crate::{TypeAlias, db::DefDatabase, type_ref::TypeRef};
|
||||
|
||||
pub(crate) fn type_alias_ref_query(
|
||||
db: &impl PersistentHirDatabase,
|
||||
typ: TypeAlias,
|
||||
) -> Arc<TypeRef> {
|
||||
pub(crate) fn type_alias_ref_query(db: &impl DefDatabase, typ: TypeAlias) -> Arc<TypeRef> {
|
||||
let (_, node) = typ.source(db);
|
||||
Arc::new(TypeRef::from_ast_opt(node.type_ref()))
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ use crate::{LineIndex, symbol_index::{self, SymbolsDatabase}};
|
||||
LineIndexDatabaseStorage,
|
||||
symbol_index::SymbolsDatabaseStorage,
|
||||
hir::db::HirDatabaseStorage,
|
||||
hir::db::PersistentHirDatabaseStorage
|
||||
hir::db::DefDatabaseStorage
|
||||
)]
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct RootDatabase {
|
||||
|
Loading…
x
Reference in New Issue
Block a user