diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-01-01 13:45:10 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-01 13:45:10 +0000 |
commit | 0e5fe4715360ab2f0d2954c9a8b37b247335bbcc (patch) | |
tree | 8a5f87218610fa80b1994dce8e0066ec713f6f0d /crates/hir/src/code_model.rs | |
parent | 51d29fe55456e6e7af69d23982aa57c7fcf91e81 (diff) | |
parent | 18bf2e5af5875f036b321bcf9e07e9904c02510e (diff) |
Merge #7080
7080: Implement ConstParams for HIR r=Veykril a=Veykril
r? @flodiebold
Co-authored-by: Lukas Wirth <[email protected]>
Diffstat (limited to 'crates/hir/src/code_model.rs')
-rw-r--r-- | crates/hir/src/code_model.rs | 38 |
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 | }; |
26 | use hir_def::{find_path::PrefixKind, item_scope::ItemInNs, visibility::Visibility}; | 26 | use hir_def::{find_path::PrefixKind, item_scope::ItemInNs, visibility::Visibility}; |
27 | use hir_expand::{ | 27 | use 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 { | |||
1237 | pub enum GenericParam { | 1242 | pub enum GenericParam { |
1238 | TypeParam(TypeParam), | 1243 | TypeParam(TypeParam), |
1239 | LifetimeParam(LifetimeParam), | 1244 | LifetimeParam(LifetimeParam), |
1245 | ConstParam(ConstParam), | ||
1240 | } | 1246 | } |
1241 | impl_from!(TypeParam, LifetimeParam for GenericParam); | 1247 | impl_from!(TypeParam, LifetimeParam, ConstParam for GenericParam); |
1242 | 1248 | ||
1243 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | 1249 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] |
1244 | pub struct TypeParam { | 1250 | pub struct TypeParam { |
@@ -1300,6 +1306,26 @@ impl LifetimeParam { | |||
1300 | } | 1306 | } |
1301 | } | 1307 | } |
1302 | 1308 | ||
1309 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] | ||
1310 | pub struct ConstParam { | ||
1311 | pub(crate) id: ConstParamId, | ||
1312 | } | ||
1313 | |||
1314 | impl 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)] |
1304 | pub struct Impl { | 1330 | pub struct Impl { |
1305 | pub(crate) id: ImplId, | 1331 | pub(crate) id: ImplId, |