Skip to content

Commit 34754bd

Browse files
bors[bot]matklad
andauthored
Merge #5874
5874: Remove AttrDef r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents 8a845ed + 66e5ced commit 34754bd

File tree

4 files changed

+52
-66
lines changed

4 files changed

+52
-66
lines changed

crates/hir/src/attrs.rs

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,60 +4,63 @@ use hir_def::{
44
db::DefDatabase,
55
docs::Documentation,
66
resolver::{HasResolver, Resolver},
7-
AdtId, FunctionId, GenericDefId, ModuleId, StaticId, TraitId, VariantId,
7+
AdtId, AttrDefId, FunctionId, GenericDefId, ModuleId, StaticId, TraitId, VariantId,
88
};
99
use hir_ty::db::HirDatabase;
10-
use stdx::impl_from;
1110

1211
use crate::{
1312
doc_links::Resolvable, Adt, Const, Enum, EnumVariant, Field, Function, GenericDef, ImplDef,
1413
Local, MacroDef, Module, ModuleDef, Static, Struct, Trait, TypeAlias, TypeParam, Union,
1514
};
1615

17-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
18-
pub enum AttrDef {
19-
Module(Module),
20-
Field(Field),
21-
Adt(Adt),
22-
Function(Function),
23-
EnumVariant(EnumVariant),
24-
Static(Static),
25-
Const(Const),
26-
Trait(Trait),
27-
TypeAlias(TypeAlias),
28-
MacroDef(MacroDef),
29-
}
30-
31-
impl_from!(
32-
Module,
33-
Field,
34-
Adt(Struct, Enum, Union),
35-
EnumVariant,
36-
Static,
37-
Const,
38-
Function,
39-
Trait,
40-
TypeAlias,
41-
MacroDef
42-
for AttrDef
43-
);
44-
4516
pub trait HasAttrs {
4617
fn attrs(self, db: &dyn HirDatabase) -> Attrs;
4718
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation>;
4819
}
4920

50-
impl<T: Into<AttrDef>> HasAttrs for T {
51-
fn attrs(self, db: &dyn HirDatabase) -> Attrs {
52-
let def: AttrDef = self.into();
53-
db.attrs(def.into())
54-
}
55-
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
56-
let def: AttrDef = self.into();
57-
db.documentation(def.into())
58-
}
21+
macro_rules! impl_has_attrs {
22+
($(($def:ident, $def_id:ident),)*) => {$(
23+
impl HasAttrs for $def {
24+
fn attrs(self, db: &dyn HirDatabase) -> Attrs {
25+
let def = AttrDefId::$def_id(self.into());
26+
db.attrs(def)
27+
}
28+
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
29+
let def = AttrDefId::$def_id(self.into());
30+
db.documentation(def)
31+
}
32+
}
33+
)*};
34+
}
35+
36+
impl_has_attrs![
37+
(Field, FieldId),
38+
(EnumVariant, EnumVariantId),
39+
(Static, StaticId),
40+
(Const, ConstId),
41+
(Trait, TraitId),
42+
(TypeAlias, TypeAliasId),
43+
(MacroDef, MacroDefId),
44+
(Function, FunctionId),
45+
(Adt, AdtId),
46+
(Module, ModuleId),
47+
];
48+
49+
macro_rules! impl_has_attrs_adt {
50+
($($adt:ident),*) => {$(
51+
impl HasAttrs for $adt {
52+
fn attrs(self, db: &dyn HirDatabase) -> Attrs {
53+
Adt::$adt(self).attrs(db)
54+
}
55+
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
56+
Adt::$adt(self).docs(db)
57+
}
58+
}
59+
)*};
5960
}
6061

62+
impl_has_attrs_adt![Struct, Union, Enum];
63+
6164
impl Resolvable for ModuleDef {
6265
fn resolver<D: DefDatabase + HirDatabase>(&self, db: &D) -> Option<Resolver> {
6366
Some(match self {

crates/hir/src/code_model.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ use hir_def::{
1717
resolver::{HasResolver, Resolver},
1818
src::HasSource as _,
1919
type_ref::{Mutability, TypeRef},
20-
AdtId, AssocContainerId, ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId, HasModule,
21-
ImplId, LocalEnumVariantId, LocalFieldId, LocalModuleId, Lookup, ModuleId, StaticId, StructId,
22-
TraitId, TypeAliasId, TypeParamId, UnionId,
20+
AdtId, AssocContainerId, AttrDefId, ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId,
21+
HasModule, ImplId, LocalEnumVariantId, LocalFieldId, LocalModuleId, Lookup, ModuleId, StaticId,
22+
StructId, TraitId, TypeAliasId, TypeParamId, UnionId,
2323
};
2424
use hir_expand::{
2525
diagnostics::DiagnosticSink,
@@ -43,7 +43,7 @@ use tt::{Ident, Leaf, Literal, TokenTree};
4343
use crate::{
4444
db::{DefDatabase, HirDatabase},
4545
has_source::HasSource,
46-
AttrDef, HirDisplay, InFile, Name,
46+
HirDisplay, InFile, Name,
4747
};
4848

4949
/// hir::Crate describes a single crate. It's the main interface with which
@@ -126,7 +126,7 @@ impl Crate {
126126
/// Try to get the root URL of the documentation of a crate.
127127
pub fn get_html_root_url(self: &Crate, db: &dyn HirDatabase) -> Option<String> {
128128
// Look for #![doc(html_root_url = "...")]
129-
let attrs = db.attrs(AttrDef::from(self.root_module(db)).into());
129+
let attrs = db.attrs(AttrDefId::ModuleId(self.root_module(db).into()));
130130
let doc_attr_q = attrs.by_key("doc");
131131

132132
if !doc_attr_q.exists() {

crates/hir/src/from_id.rs

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
//! are splitting the hir.
55
66
use hir_def::{
7-
expr::PatId, AdtId, AssocItemId, AttrDefId, DefWithBodyId, EnumVariantId, FieldId,
8-
GenericDefId, ModuleDefId, VariantId,
7+
expr::PatId, AdtId, AssocItemId, DefWithBodyId, EnumVariantId, FieldId, GenericDefId,
8+
ModuleDefId, VariantId,
99
};
1010

1111
use crate::{
12-
code_model::ItemInNs, Adt, AssocItem, AttrDef, DefWithBody, EnumVariant, Field, GenericDef,
13-
Local, MacroDef, ModuleDef, VariantDef,
12+
code_model::ItemInNs, Adt, AssocItem, DefWithBody, EnumVariant, Field, GenericDef, Local,
13+
MacroDef, ModuleDef, VariantDef,
1414
};
1515

1616
macro_rules! from_id {
@@ -196,23 +196,6 @@ impl From<FieldId> for Field {
196196
}
197197
}
198198

199-
impl From<AttrDef> for AttrDefId {
200-
fn from(def: AttrDef) -> Self {
201-
match def {
202-
AttrDef::Module(it) => AttrDefId::ModuleId(it.id),
203-
AttrDef::Field(it) => AttrDefId::FieldId(it.into()),
204-
AttrDef::Adt(it) => AttrDefId::AdtId(it.into()),
205-
AttrDef::Function(it) => AttrDefId::FunctionId(it.id),
206-
AttrDef::EnumVariant(it) => AttrDefId::EnumVariantId(it.into()),
207-
AttrDef::Static(it) => AttrDefId::StaticId(it.id),
208-
AttrDef::Const(it) => AttrDefId::ConstId(it.id),
209-
AttrDef::Trait(it) => AttrDefId::TraitId(it.id),
210-
AttrDef::TypeAlias(it) => AttrDefId::TypeAliasId(it.id),
211-
AttrDef::MacroDef(it) => AttrDefId::MacroDefId(it.id),
212-
}
213-
}
214-
}
215-
216199
impl From<AssocItem> for GenericDefId {
217200
fn from(item: AssocItem) -> Self {
218201
match item {

crates/hir/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ mod attrs;
3232
mod has_source;
3333

3434
pub use crate::{
35-
attrs::{AttrDef, HasAttrs},
35+
attrs::HasAttrs,
3636
code_model::{
3737
Access, Adt, AsAssocItem, AssocItem, AssocItemContainer, Callable, CallableKind, Const,
3838
Crate, CrateDependency, DefWithBody, Enum, EnumVariant, Field, FieldSource, Function,

0 commit comments

Comments
 (0)