From 3bdb0349061a8a62c8490336efe7549c5525bb90 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 23 Nov 2019 16:30:14 +0300 Subject: Remove unneded supertrait --- crates/ra_hir/src/db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 399101b83..3ae5df8d5 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -29,7 +29,7 @@ pub use hir_expand::db::{ #[salsa::query_group(HirDatabaseStorage)] #[salsa::requires(salsa::Database)] -pub trait HirDatabase: DefDatabase + AstDatabase { +pub trait HirDatabase: DefDatabase { #[salsa::invoke(crate::ty::infer_query)] fn infer(&self, def: DefWithBody) -> Arc; -- cgit v1.2.3 From e5bcb69e4f88c7536b1039a881816cb8f1c1f867 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 23 Nov 2019 16:39:53 +0300 Subject: Hide ImportId --- crates/ra_hir/src/code_model.rs | 26 ++++++++++------------- crates/ra_hir/src/code_model/src.rs | 12 ++++++++++- crates/ra_hir/src/lib.rs | 5 ++--- crates/ra_ide_api/src/completion/complete_path.rs | 4 ++-- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 4b3ec5457..50c9a79fc 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -9,7 +9,7 @@ use hir_def::{ body::scope::ExprScopes, builtin_type::BuiltinType, docs::Documentation, - nameres::per_ns::PerNs, + nameres::{per_ns::PerNs, raw::ImportId}, resolver::{HasResolver, TypeNs}, type_ref::TypeRef, ContainerId, CrateModuleId, HasModule, ImplId, LocalEnumVariantId, LocalStructFieldId, Lookup, @@ -30,7 +30,7 @@ use crate::{ TypeAliasId, }, ty::{InferenceResult, Namespace, TraitRef}, - Either, HasSource, ImportId, Name, Source, Ty, + Either, HasSource, Name, Source, Ty, }; /// hir::Crate describes a single crate. It's the main interface with which @@ -129,17 +129,6 @@ impl Module { }) } - /// Returns the syntax of the last path segment corresponding to this import - pub fn import_source( - self, - db: &impl HirDatabase, - import: ImportId, - ) -> Either { - let src = self.definition_source(db); - let (_, source_map) = db.raw_items_with_source_map(src.file_id); - source_map.get(&src.value, import) - } - /// Returns the crate this module is part of. pub fn krate(self) -> Crate { Crate { crate_id: self.id.krate } @@ -189,11 +178,13 @@ impl Module { } /// Returns a `ModuleScope`: a set of items, visible in this module. - pub fn scope(self, db: &impl HirDatabase) -> Vec<(Name, ScopeDef, Option)> { + pub fn scope(self, db: &impl HirDatabase) -> Vec<(Name, ScopeDef, Option)> { db.crate_def_map(self.id.krate)[self.id.module_id] .scope .entries() - .map(|(name, res)| (name.clone(), res.def.into(), res.import)) + .map(|(name, res)| { + (name.clone(), res.def.into(), res.import.map(|id| Import { parent: self, id })) + }) .collect() } @@ -236,6 +227,11 @@ impl Module { } } +pub struct Import { + pub(crate) parent: Module, + pub(crate) id: ImportId, +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct StructField { pub(crate) parent: VariantDef, diff --git a/crates/ra_hir/src/code_model/src.rs b/crates/ra_hir/src/code_model/src.rs index 09bacf579..ceb3daa27 100644 --- a/crates/ra_hir/src/code_model/src.rs +++ b/crates/ra_hir/src/code_model/src.rs @@ -8,7 +8,7 @@ use crate::{ db::{AstDatabase, DefDatabase, HirDatabase}, ids::AstItemDef, Const, Enum, EnumVariant, FieldSource, Function, HasBody, MacroDef, Module, ModuleSource, - Static, Struct, StructField, Trait, TypeAlias, Union, + Static, Struct, StructField, Trait, TypeAlias, Union, Import }; pub use hir_expand::Source; @@ -113,6 +113,16 @@ impl HasSource for MacroDef { Source { file_id: self.id.ast_id.file_id(), value: self.id.ast_id.to_node(db) } } } +impl HasSource for Import { + type Ast = Either; + + /// Returns the syntax of the last path segment corresponding to this import + fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + let src = self.parent.definition_source(db); + let (_, source_map) = db.raw_items_with_source_map(src.file_id); + src.with_value(source_map.get(&src.value, self.id)) + } +} pub trait HasBodySource: HasBody + HasSource where diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index d42161612..e51d4d063 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -53,8 +53,8 @@ pub use crate::{ src::{HasBodySource, HasSource}, Adt, AssocItem, AttrDef, Const, Container, Crate, CrateDependency, DefWithBody, Docs, Enum, EnumVariant, FieldSource, Function, GenericDef, GenericParam, HasAttrs, HasBody, ImplBlock, - Local, MacroDef, Module, ModuleDef, ModuleSource, ScopeDef, Static, Struct, StructField, - Trait, TypeAlias, Union, VariantDef, + Import, Local, MacroDef, Module, ModuleDef, ModuleSource, ScopeDef, Static, Struct, + StructField, Trait, TypeAlias, Union, VariantDef, }, expr::ExprScopes, from_source::FromSource, @@ -70,7 +70,6 @@ pub use crate::{ pub use hir_def::{ builtin_type::BuiltinType, docs::Documentation, - nameres::raw::ImportId, path::{Path, PathKind}, type_ref::Mutability, }; diff --git a/crates/ra_ide_api/src/completion/complete_path.rs b/crates/ra_ide_api/src/completion/complete_path.rs index 802c7701a..63e25e0bf 100644 --- a/crates/ra_ide_api/src/completion/complete_path.rs +++ b/crates/ra_ide_api/src/completion/complete_path.rs @@ -1,6 +1,6 @@ //! FIXME: write short doc here -use hir::{Adt, Either, PathResolution}; +use hir::{Adt, Either, HasSource, PathResolution}; use ra_syntax::AstNode; use test_utils::tested_by; @@ -27,7 +27,7 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { } if Some(module) == ctx.module { if let Some(import) = import { - if let Either::A(use_tree) = module.import_source(ctx.db, import) { + if let Either::A(use_tree) = import.source(ctx.db).value { if use_tree.syntax().text_range().contains_inclusive(ctx.offset) { // for `use self::foo<|>`, don't suggest `foo` as a completion tested_by!(dont_complete_current_use); -- cgit v1.2.3 From 338ff052c2fe658d6fcf88888918b2e372129e21 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 23 Nov 2019 16:41:04 +0300 Subject: Simplify HasSource --- crates/ra_hir/src/code_model/src.rs | 39 +++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/crates/ra_hir/src/code_model/src.rs b/crates/ra_hir/src/code_model/src.rs index ceb3daa27..402f821bf 100644 --- a/crates/ra_hir/src/code_model/src.rs +++ b/crates/ra_hir/src/code_model/src.rs @@ -5,24 +5,24 @@ use hir_expand::either::Either; use ra_syntax::ast::{self, AstNode}; use crate::{ - db::{AstDatabase, DefDatabase, HirDatabase}, + db::{DefDatabase, HirDatabase}, ids::AstItemDef, - Const, Enum, EnumVariant, FieldSource, Function, HasBody, MacroDef, Module, ModuleSource, - Static, Struct, StructField, Trait, TypeAlias, Union, Import + Const, Enum, EnumVariant, FieldSource, Function, HasBody, Import, MacroDef, Module, + ModuleSource, Static, Struct, StructField, Trait, TypeAlias, Union, }; pub use hir_expand::Source; pub trait HasSource { type Ast; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source; + fn source(self, db: &impl DefDatabase) -> Source; } /// NB: Module is !HasSource, because it has two source nodes at the same time: /// definition and declaration. 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 DefDatabase + AstDatabase)) -> Source { + pub fn definition_source(self, db: &impl DefDatabase) -> Source { let def_map = db.crate_def_map(self.id.krate); let src = def_map[self.id.module_id].definition_source(db); src.map(|it| match it { @@ -33,10 +33,7 @@ impl Module { /// Returns a node which declares this module, either a `mod foo;` or a `mod foo {}`. /// `None` for the crate root. - pub fn declaration_source( - self, - db: &(impl DefDatabase + AstDatabase), - ) -> Option> { + pub fn declaration_source(self, db: &impl DefDatabase) -> Option> { let def_map = db.crate_def_map(self.id.krate); def_map[self.id.module_id].declaration_source(db) } @@ -44,7 +41,7 @@ impl Module { impl HasSource for StructField { type Ast = FieldSource; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { let var = VariantId::from(self.parent); let src = var.child_source(db); src.map(|it| match it[self.id].clone() { @@ -55,61 +52,61 @@ impl HasSource for StructField { } impl HasSource for Struct { type Ast = ast::StructDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.0.source(db) } } impl HasSource for Union { type Ast = ast::StructDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.0.source(db) } } impl HasSource for Enum { type Ast = ast::EnumDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for EnumVariant { type Ast = ast::EnumVariant; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.parent.id.child_source(db).map(|map| map[self.id].clone()) } } impl HasSource for Function { type Ast = ast::FnDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for Const { type Ast = ast::ConstDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for Static { type Ast = ast::StaticDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for Trait { type Ast = ast::TraitDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.source(db) } } impl HasSource for TypeAlias { type Ast = ast::TypeAliasDef; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { self.id.lookup(db).source(db) } } impl HasSource for MacroDef { type Ast = ast::MacroCall; - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { Source { file_id: self.id.ast_id.file_id(), value: self.id.ast_id.to_node(db) } } } @@ -117,7 +114,7 @@ impl HasSource for Import { type Ast = Either; /// Returns the syntax of the last path segment corresponding to this import - fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source { + fn source(self, db: &impl DefDatabase) -> Source { let src = self.parent.definition_source(db); let (_, source_map) = db.raw_items_with_source_map(src.file_id); src.with_value(source_map.get(&src.value, self.id)) -- cgit v1.2.3