aboutsummaryrefslogtreecommitdiff
path: root/crates/hir/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir/src')
-rw-r--r--crates/hir/src/code_model.rs39
-rw-r--r--crates/hir/src/from_id.rs6
-rw-r--r--crates/hir/src/has_source.rs6
-rw-r--r--crates/hir/src/lib.rs2
-rw-r--r--crates/hir/src/semantics.rs6
5 files changed, 32 insertions, 27 deletions
diff --git a/crates/hir/src/code_model.rs b/crates/hir/src/code_model.rs
index 9bfcd215a..f17734e41 100644
--- a/crates/hir/src/code_model.rs
+++ b/crates/hir/src/code_model.rs
@@ -267,7 +267,12 @@ impl ModuleDef {
267 _ => return, 267 _ => return,
268 }; 268 };
269 269
270 hir_ty::diagnostics::validate_module_item(db, id, sink) 270 let module = match self.module(db) {
271 Some(it) => it,
272 None => return,
273 };
274
275 hir_ty::diagnostics::validate_module_item(db, module.id.krate, id, sink)
271 } 276 }
272} 277}
273 278
@@ -397,9 +402,9 @@ impl Module {
397 def_map[self.id.local_id].scope.declarations().map(ModuleDef::from).collect() 402 def_map[self.id.local_id].scope.declarations().map(ModuleDef::from).collect()
398 } 403 }
399 404
400 pub fn impl_defs(self, db: &dyn HirDatabase) -> Vec<ImplDef> { 405 pub fn impl_defs(self, db: &dyn HirDatabase) -> Vec<Impl> {
401 let def_map = db.crate_def_map(self.id.krate); 406 let def_map = db.crate_def_map(self.id.krate);
402 def_map[self.id.local_id].scope.impls().map(ImplDef::from).collect() 407 def_map[self.id.local_id].scope.impls().map(Impl::from).collect()
403 } 408 }
404 409
405 pub(crate) fn with_module_id(self, module_id: LocalModuleId) -> Module { 410 pub(crate) fn with_module_id(self, module_id: LocalModuleId) -> Module {
@@ -780,8 +785,9 @@ impl Function {
780 } 785 }
781 786
782 pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) { 787 pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) {
788 let krate = self.module(db).id.krate;
783 hir_def::diagnostics::validate_body(db.upcast(), self.id.into(), sink); 789 hir_def::diagnostics::validate_body(db.upcast(), self.id.into(), sink);
784 hir_ty::diagnostics::validate_module_item(db, self.id.into(), sink); 790 hir_ty::diagnostics::validate_module_item(db, krate, self.id.into(), sink);
785 hir_ty::diagnostics::validate_body(db, self.id.into(), sink); 791 hir_ty::diagnostics::validate_body(db, self.id.into(), sink);
786 } 792 }
787 793
@@ -1001,7 +1007,7 @@ pub enum AssocItem {
1001} 1007}
1002pub enum AssocItemContainer { 1008pub enum AssocItemContainer {
1003 Trait(Trait), 1009 Trait(Trait),
1004 ImplDef(ImplDef), 1010 Impl(Impl),
1005} 1011}
1006pub trait AsAssocItem { 1012pub trait AsAssocItem {
1007 fn as_assoc_item(self, db: &dyn HirDatabase) -> Option<AssocItem>; 1013 fn as_assoc_item(self, db: &dyn HirDatabase) -> Option<AssocItem>;
@@ -1058,7 +1064,7 @@ impl AssocItem {
1058 }; 1064 };
1059 match container { 1065 match container {
1060 AssocContainerId::TraitId(id) => AssocItemContainer::Trait(id.into()), 1066 AssocContainerId::TraitId(id) => AssocItemContainer::Trait(id.into()),
1061 AssocContainerId::ImplId(id) => AssocItemContainer::ImplDef(id.into()), 1067 AssocContainerId::ImplId(id) => AssocItemContainer::Impl(id.into()),
1062 AssocContainerId::ContainerId(_) => panic!("invalid AssocItem"), 1068 AssocContainerId::ContainerId(_) => panic!("invalid AssocItem"),
1063 } 1069 }
1064 } 1070 }
@@ -1080,7 +1086,7 @@ pub enum GenericDef {
1080 Adt(Adt), 1086 Adt(Adt),
1081 Trait(Trait), 1087 Trait(Trait),
1082 TypeAlias(TypeAlias), 1088 TypeAlias(TypeAlias),
1083 ImplDef(ImplDef), 1089 Impl(Impl),
1084 // enum variants cannot have generics themselves, but their parent enums 1090 // enum variants cannot have generics themselves, but their parent enums
1085 // can, and this makes some code easier to write 1091 // can, and this makes some code easier to write
1086 EnumVariant(EnumVariant), 1092 EnumVariant(EnumVariant),
@@ -1092,7 +1098,7 @@ impl_from!(
1092 Adt(Struct, Enum, Union), 1098 Adt(Struct, Enum, Union),
1093 Trait, 1099 Trait,
1094 TypeAlias, 1100 TypeAlias,
1095 ImplDef, 1101 Impl,
1096 EnumVariant, 1102 EnumVariant,
1097 Const 1103 Const
1098 for GenericDef 1104 for GenericDef
@@ -1262,30 +1268,28 @@ impl LifetimeParam {
1262 1268
1263// FIXME: rename from `ImplDef` to `Impl` 1269// FIXME: rename from `ImplDef` to `Impl`
1264#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 1270#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
1265pub struct ImplDef { 1271pub struct Impl {
1266 pub(crate) id: ImplId, 1272 pub(crate) id: ImplId,
1267} 1273}
1268 1274
1269impl ImplDef { 1275impl Impl {
1270 pub fn all_in_crate(db: &dyn HirDatabase, krate: Crate) -> Vec<ImplDef> { 1276 pub fn all_in_crate(db: &dyn HirDatabase, krate: Crate) -> Vec<Impl> {
1271 let inherent = db.inherent_impls_in_crate(krate.id); 1277 let inherent = db.inherent_impls_in_crate(krate.id);
1272 let trait_ = db.trait_impls_in_crate(krate.id); 1278 let trait_ = db.trait_impls_in_crate(krate.id);
1273 1279
1274 inherent.all_impls().chain(trait_.all_impls()).map(Self::from).collect() 1280 inherent.all_impls().chain(trait_.all_impls()).map(Self::from).collect()
1275 } 1281 }
1276 pub fn for_trait(db: &dyn HirDatabase, krate: Crate, trait_: Trait) -> Vec<ImplDef> { 1282 pub fn for_trait(db: &dyn HirDatabase, krate: Crate, trait_: Trait) -> Vec<Impl> {
1277 let impls = db.trait_impls_in_crate(krate.id); 1283 let impls = db.trait_impls_in_crate(krate.id);
1278 impls.for_trait(trait_.id).map(Self::from).collect() 1284 impls.for_trait(trait_.id).map(Self::from).collect()
1279 } 1285 }
1280 1286
1287 // FIXME: the return type is wrong. This should be a hir version of
1288 // `TraitRef` (ie, resolved `TypeRef`).
1281 pub fn target_trait(self, db: &dyn HirDatabase) -> Option<TypeRef> { 1289 pub fn target_trait(self, db: &dyn HirDatabase) -> Option<TypeRef> {
1282 db.impl_data(self.id).target_trait.clone() 1290 db.impl_data(self.id).target_trait.clone()
1283 } 1291 }
1284 1292
1285 pub fn target_type(self, db: &dyn HirDatabase) -> TypeRef {
1286 db.impl_data(self.id).target_type.clone()
1287 }
1288
1289 pub fn target_ty(self, db: &dyn HirDatabase) -> Type { 1293 pub fn target_ty(self, db: &dyn HirDatabase) -> Type {
1290 let impl_data = db.impl_data(self.id); 1294 let impl_data = db.impl_data(self.id);
1291 let resolver = self.id.resolver(db.upcast()); 1295 let resolver = self.id.resolver(db.upcast());
@@ -1319,6 +1323,7 @@ impl ImplDef {
1319 let item = src.file_id.is_builtin_derive(db.upcast())?; 1323 let item = src.file_id.is_builtin_derive(db.upcast())?;
1320 let hygenic = hir_expand::hygiene::Hygiene::new(db.upcast(), item.file_id); 1324 let hygenic = hir_expand::hygiene::Hygiene::new(db.upcast(), item.file_id);
1321 1325
1326 // FIXME: handle `cfg_attr`
1322 let attr = item 1327 let attr = item
1323 .value 1328 .value
1324 .attrs() 1329 .attrs()
@@ -1898,7 +1903,7 @@ pub enum ScopeDef {
1898 ModuleDef(ModuleDef), 1903 ModuleDef(ModuleDef),
1899 MacroDef(MacroDef), 1904 MacroDef(MacroDef),
1900 GenericParam(TypeParam), 1905 GenericParam(TypeParam),
1901 ImplSelfType(ImplDef), 1906 ImplSelfType(Impl),
1902 AdtSelfType(Adt), 1907 AdtSelfType(Adt),
1903 Local(Local), 1908 Local(Local),
1904 Unknown, 1909 Unknown,
diff --git a/crates/hir/src/from_id.rs b/crates/hir/src/from_id.rs
index dd3fcfe4a..8d0f84508 100644
--- a/crates/hir/src/from_id.rs
+++ b/crates/hir/src/from_id.rs
@@ -39,7 +39,7 @@ from_id![
39 (hir_def::StaticId, crate::Static), 39 (hir_def::StaticId, crate::Static),
40 (hir_def::ConstId, crate::Const), 40 (hir_def::ConstId, crate::Const),
41 (hir_def::FunctionId, crate::Function), 41 (hir_def::FunctionId, crate::Function),
42 (hir_def::ImplId, crate::ImplDef), 42 (hir_def::ImplId, crate::Impl),
43 (hir_def::TypeParamId, crate::TypeParam), 43 (hir_def::TypeParamId, crate::TypeParam),
44 (hir_def::LifetimeParamId, crate::LifetimeParam), 44 (hir_def::LifetimeParamId, crate::LifetimeParam),
45 (hir_expand::MacroDefId, crate::MacroDef) 45 (hir_expand::MacroDefId, crate::MacroDef)
@@ -146,7 +146,7 @@ impl From<GenericDef> for GenericDefId {
146 GenericDef::Adt(it) => GenericDefId::AdtId(it.into()), 146 GenericDef::Adt(it) => GenericDefId::AdtId(it.into()),
147 GenericDef::Trait(it) => GenericDefId::TraitId(it.id), 147 GenericDef::Trait(it) => GenericDefId::TraitId(it.id),
148 GenericDef::TypeAlias(it) => GenericDefId::TypeAliasId(it.id), 148 GenericDef::TypeAlias(it) => GenericDefId::TypeAliasId(it.id),
149 GenericDef::ImplDef(it) => GenericDefId::ImplId(it.id), 149 GenericDef::Impl(it) => GenericDefId::ImplId(it.id),
150 GenericDef::EnumVariant(it) => { 150 GenericDef::EnumVariant(it) => {
151 GenericDefId::EnumVariantId(EnumVariantId { parent: it.parent.id, local_id: it.id }) 151 GenericDefId::EnumVariantId(EnumVariantId { parent: it.parent.id, local_id: it.id })
152 } 152 }
@@ -162,7 +162,7 @@ impl From<GenericDefId> for GenericDef {
162 GenericDefId::AdtId(it) => GenericDef::Adt(it.into()), 162 GenericDefId::AdtId(it) => GenericDef::Adt(it.into()),
163 GenericDefId::TraitId(it) => GenericDef::Trait(it.into()), 163 GenericDefId::TraitId(it) => GenericDef::Trait(it.into()),
164 GenericDefId::TypeAliasId(it) => GenericDef::TypeAlias(it.into()), 164 GenericDefId::TypeAliasId(it) => GenericDef::TypeAlias(it.into()),
165 GenericDefId::ImplId(it) => GenericDef::ImplDef(it.into()), 165 GenericDefId::ImplId(it) => GenericDef::Impl(it.into()),
166 GenericDefId::EnumVariantId(it) => { 166 GenericDefId::EnumVariantId(it) => {
167 GenericDef::EnumVariant(EnumVariant { parent: it.parent.into(), id: it.local_id }) 167 GenericDef::EnumVariant(EnumVariant { parent: it.parent.into(), id: it.local_id })
168 } 168 }
diff --git a/crates/hir/src/has_source.rs b/crates/hir/src/has_source.rs
index 11ae63c31..c5b81b252 100644
--- a/crates/hir/src/has_source.rs
+++ b/crates/hir/src/has_source.rs
@@ -10,8 +10,8 @@ use hir_expand::InFile;
10use syntax::ast; 10use syntax::ast;
11 11
12use crate::{ 12use crate::{
13 db::HirDatabase, Const, Enum, EnumVariant, Field, FieldSource, Function, ImplDef, 13 db::HirDatabase, Const, Enum, EnumVariant, Field, FieldSource, Function, Impl, LifetimeParam,
14 LifetimeParam, MacroDef, Module, Static, Struct, Trait, TypeAlias, TypeParam, Union, 14 MacroDef, Module, Static, Struct, Trait, TypeAlias, TypeParam, Union,
15}; 15};
16 16
17pub trait HasSource { 17pub trait HasSource {
@@ -118,7 +118,7 @@ impl HasSource for MacroDef {
118 } 118 }
119 } 119 }
120} 120}
121impl HasSource for ImplDef { 121impl HasSource for Impl {
122 type Ast = ast::Impl; 122 type Ast = ast::Impl;
123 fn source(self, db: &dyn HirDatabase) -> InFile<ast::Impl> { 123 fn source(self, db: &dyn HirDatabase) -> InFile<ast::Impl> {
124 self.id.lookup(db.upcast()).source(db.upcast()) 124 self.id.lookup(db.upcast()).source(db.upcast())
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 0f399a2c6..3f4f8d8e4 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -35,7 +35,7 @@ pub use crate::{
35 code_model::{ 35 code_model::{
36 Access, Adt, AsAssocItem, AssocItem, AssocItemContainer, Callable, CallableKind, Const, 36 Access, Adt, AsAssocItem, AssocItem, AssocItemContainer, Callable, CallableKind, Const,
37 Crate, CrateDependency, DefWithBody, Enum, EnumVariant, Field, FieldSource, Function, 37 Crate, CrateDependency, DefWithBody, Enum, EnumVariant, Field, FieldSource, Function,
38 GenericDef, HasVisibility, ImplDef, LifetimeParam, Local, MacroDef, Module, ModuleDef, 38 GenericDef, HasVisibility, Impl, LifetimeParam, Local, MacroDef, Module, ModuleDef,
39 ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, 39 ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef,
40 }, 40 },
41 has_source::HasSource, 41 has_source::HasSource,
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index ee2074602..83ec91f58 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -25,7 +25,7 @@ use crate::{
25 diagnostics::Diagnostic, 25 diagnostics::Diagnostic,
26 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx}, 26 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx},
27 source_analyzer::{resolve_hir_path, SourceAnalyzer}, 27 source_analyzer::{resolve_hir_path, SourceAnalyzer},
28 AssocItem, Callable, Crate, Field, Function, HirFileId, ImplDef, InFile, LifetimeParam, Local, 28 AssocItem, Callable, Crate, Field, Function, HirFileId, Impl, InFile, LifetimeParam, Local,
29 MacroDef, Module, ModuleDef, Name, Path, ScopeDef, Trait, Type, TypeAlias, TypeParam, 29 MacroDef, Module, ModuleDef, Name, Path, ScopeDef, Trait, Type, TypeAlias, TypeParam,
30 VariantDef, 30 VariantDef,
31}; 31};
@@ -38,7 +38,7 @@ pub enum PathResolution {
38 Local(Local), 38 Local(Local),
39 /// A generic parameter 39 /// A generic parameter
40 TypeParam(TypeParam), 40 TypeParam(TypeParam),
41 SelfType(ImplDef), 41 SelfType(Impl),
42 Macro(MacroDef), 42 Macro(MacroDef),
43 AssocItem(AssocItem), 43 AssocItem(AssocItem),
44} 44}
@@ -708,7 +708,7 @@ to_def_impls![
708 (crate::Enum, ast::Enum, enum_to_def), 708 (crate::Enum, ast::Enum, enum_to_def),
709 (crate::Union, ast::Union, union_to_def), 709 (crate::Union, ast::Union, union_to_def),
710 (crate::Trait, ast::Trait, trait_to_def), 710 (crate::Trait, ast::Trait, trait_to_def),
711 (crate::ImplDef, ast::Impl, impl_to_def), 711 (crate::Impl, ast::Impl, impl_to_def),
712 (crate::TypeAlias, ast::TypeAlias, type_alias_to_def), 712 (crate::TypeAlias, ast::TypeAlias, type_alias_to_def),
713 (crate::Const, ast::Const, const_to_def), 713 (crate::Const, ast::Const, const_to_def),
714 (crate::Static, ast::Static, static_to_def), 714 (crate::Static, ast::Static, static_to_def),