diff options
| author | Lukas Wirth <[email protected]> | 2021-01-01 23:42:07 +0000 |
|---|---|---|
| committer | Lukas Wirth <[email protected]> | 2021-01-01 23:44:59 +0000 |
| commit | ec448ca4b33202e384eb034b4e15ed751355488c (patch) | |
| tree | 1d9dab48356bee385c637fe6c344935e8ef96766 /crates/hir | |
| parent | b4a7caedb066a653560dfe9ec005f20b9e2548c0 (diff) | |
Impl HasAttrs for GenericParam
Diffstat (limited to 'crates/hir')
| -rw-r--r-- | crates/hir/src/attrs.rs | 13 | ||||
| -rw-r--r-- | crates/hir/src/from_id.rs | 28 | ||||
| -rw-r--r-- | crates/hir/src/lib.rs | 5 |
3 files changed, 37 insertions, 9 deletions
diff --git a/crates/hir/src/attrs.rs b/crates/hir/src/attrs.rs index d32ce37ed..a027f881e 100644 --- a/crates/hir/src/attrs.rs +++ b/crates/hir/src/attrs.rs | |||
| @@ -3,15 +3,15 @@ use hir_def::{ | |||
| 3 | attr::{Attrs, Documentation}, | 3 | attr::{Attrs, Documentation}, |
| 4 | path::ModPath, | 4 | path::ModPath, |
| 5 | resolver::HasResolver, | 5 | resolver::HasResolver, |
| 6 | AttrDefId, ModuleDefId, | 6 | AttrDefId, GenericParamId, ModuleDefId, |
| 7 | }; | 7 | }; |
| 8 | use hir_expand::hygiene::Hygiene; | 8 | use hir_expand::hygiene::Hygiene; |
| 9 | use hir_ty::db::HirDatabase; | 9 | use hir_ty::db::HirDatabase; |
| 10 | use syntax::ast; | 10 | use syntax::ast; |
| 11 | 11 | ||
| 12 | use crate::{ | 12 | use crate::{ |
| 13 | Adt, Const, Enum, Field, Function, MacroDef, Module, ModuleDef, Static, Struct, Trait, | 13 | Adt, Const, Enum, Field, Function, GenericParam, MacroDef, Module, ModuleDef, Static, Struct, |
| 14 | TypeAlias, Union, Variant, | 14 | Trait, TypeAlias, Union, Variant, |
| 15 | }; | 15 | }; |
| 16 | 16 | ||
| 17 | pub trait HasAttrs { | 17 | pub trait HasAttrs { |
| @@ -62,6 +62,7 @@ impl_has_attrs![ | |||
| 62 | (Function, FunctionId), | 62 | (Function, FunctionId), |
| 63 | (Adt, AdtId), | 63 | (Adt, AdtId), |
| 64 | (Module, ModuleId), | 64 | (Module, ModuleId), |
| 65 | (GenericParam, GenericParamId), | ||
| 65 | ]; | 66 | ]; |
| 66 | 67 | ||
| 67 | macro_rules! impl_has_attrs_adt { | 68 | macro_rules! impl_has_attrs_adt { |
| @@ -99,6 +100,12 @@ fn resolve_doc_path( | |||
| 99 | AttrDefId::TraitId(it) => it.resolver(db.upcast()), | 100 | AttrDefId::TraitId(it) => it.resolver(db.upcast()), |
| 100 | AttrDefId::TypeAliasId(it) => it.resolver(db.upcast()), | 101 | AttrDefId::TypeAliasId(it) => it.resolver(db.upcast()), |
| 101 | AttrDefId::ImplId(it) => it.resolver(db.upcast()), | 102 | AttrDefId::ImplId(it) => it.resolver(db.upcast()), |
| 103 | AttrDefId::GenericParamId(it) => match it { | ||
| 104 | GenericParamId::TypeParamId(it) => it.parent, | ||
| 105 | GenericParamId::LifetimeParamId(it) => it.parent, | ||
| 106 | GenericParamId::ConstParamId(it) => it.parent, | ||
| 107 | } | ||
| 108 | .resolver(db.upcast()), | ||
| 102 | AttrDefId::MacroDefId(_) => return None, | 109 | AttrDefId::MacroDefId(_) => return None, |
| 103 | }; | 110 | }; |
| 104 | let path = ast::Path::parse(link).ok()?; | 111 | let path = ast::Path::parse(link).ok()?; |
diff --git a/crates/hir/src/from_id.rs b/crates/hir/src/from_id.rs index 2422887e3..3e47a5e9d 100644 --- a/crates/hir/src/from_id.rs +++ b/crates/hir/src/from_id.rs | |||
| @@ -6,13 +6,13 @@ | |||
| 6 | use hir_def::{ | 6 | use hir_def::{ |
| 7 | expr::{LabelId, PatId}, | 7 | expr::{LabelId, PatId}, |
| 8 | item_scope::ItemInNs, | 8 | item_scope::ItemInNs, |
| 9 | AdtId, AssocItemId, DefWithBodyId, EnumVariantId, FieldId, GenericDefId, ModuleDefId, | 9 | AdtId, AssocItemId, DefWithBodyId, EnumVariantId, FieldId, GenericDefId, GenericParamId, |
| 10 | VariantId, | 10 | ModuleDefId, VariantId, |
| 11 | }; | 11 | }; |
| 12 | 12 | ||
| 13 | use crate::{ | 13 | use crate::{ |
| 14 | Adt, AssocItem, DefWithBody, Field, GenericDef, Label, Local, MacroDef, ModuleDef, Variant, | 14 | code_model::GenericParam, Adt, AssocItem, DefWithBody, Field, GenericDef, Label, Local, |
| 15 | VariantDef, | 15 | MacroDef, ModuleDef, Variant, VariantDef, |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
| 18 | macro_rules! from_id { | 18 | macro_rules! from_id { |
| @@ -68,6 +68,26 @@ impl From<Adt> for AdtId { | |||
| 68 | } | 68 | } |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | impl From<GenericParamId> for GenericParam { | ||
| 72 | fn from(id: GenericParamId) -> Self { | ||
| 73 | match id { | ||
| 74 | GenericParamId::TypeParamId(it) => GenericParam::TypeParam(it.into()), | ||
| 75 | GenericParamId::LifetimeParamId(it) => GenericParam::LifetimeParam(it.into()), | ||
| 76 | GenericParamId::ConstParamId(it) => GenericParam::ConstParam(it.into()), | ||
| 77 | } | ||
| 78 | } | ||
| 79 | } | ||
| 80 | |||
| 81 | impl From<GenericParam> for GenericParamId { | ||
| 82 | fn from(id: GenericParam) -> Self { | ||
| 83 | match id { | ||
| 84 | GenericParam::TypeParam(it) => GenericParamId::TypeParamId(it.id), | ||
| 85 | GenericParam::LifetimeParam(it) => GenericParamId::LifetimeParamId(it.id), | ||
| 86 | GenericParam::ConstParam(it) => GenericParamId::ConstParamId(it.id), | ||
| 87 | } | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 71 | impl From<EnumVariantId> for Variant { | 91 | impl From<EnumVariantId> for Variant { |
| 72 | fn from(id: EnumVariantId) -> Self { | 92 | fn from(id: EnumVariantId) -> Self { |
| 73 | Variant { parent: id.parent.into(), id: id.local_id } | 93 | Variant { parent: id.parent.into(), id: id.local_id } |
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 8ac27e2dd..769945c47 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs | |||
| @@ -35,8 +35,9 @@ 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 | ConstParam, Crate, CrateDependency, DefWithBody, Enum, Field, FieldSource, Function, | 37 | ConstParam, Crate, CrateDependency, DefWithBody, Enum, Field, FieldSource, Function, |
| 38 | GenericDef, HasVisibility, Impl, Label, LifetimeParam, Local, MacroDef, Module, ModuleDef, | 38 | GenericDef, GenericParam, HasVisibility, Impl, Label, LifetimeParam, Local, MacroDef, |
| 39 | ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, Variant, VariantDef, | 39 | Module, ModuleDef, ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, |
| 40 | Variant, VariantDef, | ||
| 40 | }, | 41 | }, |
| 41 | has_source::HasSource, | 42 | has_source::HasSource, |
| 42 | semantics::{PathResolution, Semantics, SemanticsScope}, | 43 | semantics::{PathResolution, Semantics, SemanticsScope}, |
