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