aboutsummaryrefslogtreecommitdiff
path: root/crates/hir/src/code_model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir/src/code_model.rs')
-rw-r--r--crates/hir/src/code_model.rs38
1 files changed, 32 insertions, 6 deletions
diff --git a/crates/hir/src/code_model.rs b/crates/hir/src/code_model.rs
index b7ded3478..97b7a8b5f 100644
--- a/crates/hir/src/code_model.rs
+++ b/crates/hir/src/code_model.rs
@@ -18,10 +18,10 @@ use hir_def::{
18 resolver::{HasResolver, Resolver}, 18 resolver::{HasResolver, Resolver},
19 src::HasSource as _, 19 src::HasSource as _,
20 type_ref::{Mutability, TypeRef}, 20 type_ref::{Mutability, TypeRef},
21 AdtId, AssocContainerId, AssocItemId, AssocItemLoc, AttrDefId, ConstId, DefWithBodyId, EnumId, 21 AdtId, AssocContainerId, AssocItemId, AssocItemLoc, AttrDefId, ConstId, ConstParamId,
22 FunctionId, GenericDefId, HasModule, ImplId, LifetimeParamId, LocalEnumVariantId, LocalFieldId, 22 DefWithBodyId, EnumId, FunctionId, GenericDefId, HasModule, ImplId, LifetimeParamId,
23 LocalModuleId, Lookup, ModuleId, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, 23 LocalEnumVariantId, LocalFieldId, LocalModuleId, Lookup, ModuleId, StaticId, StructId, TraitId,
24 UnionId, 24 TypeAliasId, TypeParamId, UnionId,
25}; 25};
26use hir_def::{find_path::PrefixKind, item_scope::ItemInNs, visibility::Visibility}; 26use hir_def::{find_path::PrefixKind, item_scope::ItemInNs, visibility::Visibility};
27use hir_expand::{ 27use hir_expand::{
@@ -1125,7 +1125,12 @@ impl GenericDef {
1125 id: LifetimeParamId { parent: self.into(), local_id }, 1125 id: LifetimeParamId { parent: self.into(), local_id },
1126 }) 1126 })
1127 .map(GenericParam::LifetimeParam); 1127 .map(GenericParam::LifetimeParam);
1128 ty_params.chain(lt_params).collect() 1128 let const_params = generics
1129 .consts
1130 .iter()
1131 .map(|(local_id, _)| ConstParam { id: ConstParamId { parent: self.into(), local_id } })
1132 .map(GenericParam::ConstParam);
1133 ty_params.chain(lt_params).chain(const_params).collect()
1129 } 1134 }
1130 1135
1131 pub fn type_params(self, db: &dyn HirDatabase) -> Vec<TypeParam> { 1136 pub fn type_params(self, db: &dyn HirDatabase) -> Vec<TypeParam> {
@@ -1237,8 +1242,9 @@ impl Label {
1237pub enum GenericParam { 1242pub enum GenericParam {
1238 TypeParam(TypeParam), 1243 TypeParam(TypeParam),
1239 LifetimeParam(LifetimeParam), 1244 LifetimeParam(LifetimeParam),
1245 ConstParam(ConstParam),
1240} 1246}
1241impl_from!(TypeParam, LifetimeParam for GenericParam); 1247impl_from!(TypeParam, LifetimeParam, ConstParam for GenericParam);
1242 1248
1243#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 1249#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
1244pub struct TypeParam { 1250pub struct TypeParam {
@@ -1300,6 +1306,26 @@ impl LifetimeParam {
1300 } 1306 }
1301} 1307}
1302 1308
1309#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
1310pub struct ConstParam {
1311 pub(crate) id: ConstParamId,
1312}
1313
1314impl ConstParam {
1315 pub fn name(self, db: &dyn HirDatabase) -> Name {
1316 let params = db.generic_params(self.id.parent);
1317 params.consts[self.id.local_id].name.clone()
1318 }
1319
1320 pub fn module(self, db: &dyn HirDatabase) -> Module {
1321 self.id.parent.module(db.upcast()).into()
1322 }
1323
1324 pub fn parent(self, _db: &dyn HirDatabase) -> GenericDef {
1325 self.id.parent.into()
1326 }
1327}
1328
1303#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 1329#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
1304pub struct Impl { 1330pub struct Impl {
1305 pub(crate) id: ImplId, 1331 pub(crate) id: ImplId,