Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/semantics/source_to_def.rs')
| -rw-r--r-- | crates/hir/src/semantics/source_to_def.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/hir/src/semantics/source_to_def.rs b/crates/hir/src/semantics/source_to_def.rs index 877d385fbd..9b8e563592 100644 --- a/crates/hir/src/semantics/source_to_def.rs +++ b/crates/hir/src/semantics/source_to_def.rs @@ -92,8 +92,8 @@ use hir_def::{ expr::{LabelId, PatId}, keys::{self, Key}, AdtId, ConstId, ConstParamId, DefWithBodyId, EnumId, EnumVariantId, FieldId, FunctionId, - GenericDefId, ImplId, LifetimeParamId, ModuleId, StaticId, StructId, TraitId, TypeAliasId, - TypeParamId, UnionId, VariantId, + GenericDefId, GenericParamId, ImplId, LifetimeParamId, ModuleId, StaticId, StructId, TraitId, + TypeAliasId, TypeParamId, UnionId, VariantId, }; use hir_expand::{name::AsName, AstId, HirFileId, MacroCallId, MacroDefId, MacroDefKind}; use rustc_hash::FxHashMap; @@ -299,6 +299,23 @@ impl SourceToDefCtx<'_, '_> { dyn_map[keys::CONST_PARAM].get(&src).copied() } + pub(super) fn generic_param_to_def( + &mut self, + InFile { file_id, value }: InFile<ast::GenericParam>, + ) -> Option<GenericParamId> { + match value { + ast::GenericParam::ConstParam(it) => { + self.const_param_to_def(InFile::new(file_id, it)).map(GenericParamId::ConstParamId) + } + ast::GenericParam::LifetimeParam(it) => self + .lifetime_param_to_def(InFile::new(file_id, it)) + .map(GenericParamId::LifetimeParamId), + ast::GenericParam::TypeParam(it) => { + self.type_param_to_def(InFile::new(file_id, it)).map(GenericParamId::TypeParamId) + } + } + } + pub(super) fn macro_to_def(&mut self, src: InFile<ast::Macro>) -> Option<MacroDefId> { let makro = self.dyn_map(src.as_ref()).and_then(|it| it[keys::MACRO].get(&src).copied()); if let res @ Some(_) = makro { |