passes: prohibit attrs on generic params
This commit modifies the `check_attr` pass so that attribute placement on generic parameters is checked for validity. Signed-off-by: David Wood <david@davidtw.co>
This commit is contained in:
parent
2e5723137b
commit
75eb72cc9c
6 changed files with 147 additions and 5 deletions
|
@ -9,6 +9,13 @@ use crate::{Item, ItemKind, TraitItem, TraitItemKind};
|
|||
|
||||
use std::fmt::{self, Display};
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum GenericParamKind {
|
||||
Type,
|
||||
Lifetime,
|
||||
Const,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum MethodKind {
|
||||
Trait { body: bool },
|
||||
|
@ -43,6 +50,7 @@ pub enum Target {
|
|||
ForeignFn,
|
||||
ForeignStatic,
|
||||
ForeignTy,
|
||||
GenericParam(GenericParamKind),
|
||||
}
|
||||
|
||||
impl Display for Target {
|
||||
|
@ -77,6 +85,11 @@ impl Display for Target {
|
|||
Target::ForeignFn => "foreign function",
|
||||
Target::ForeignStatic => "foreign static item",
|
||||
Target::ForeignTy => "foreign type",
|
||||
Target::GenericParam(kind) => match kind {
|
||||
GenericParamKind::Type => "type parameter",
|
||||
GenericParamKind::Lifetime => "lifetime parameter",
|
||||
GenericParamKind::Const => "const parameter",
|
||||
},
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -124,4 +137,14 @@ impl Target {
|
|||
hir::ForeignItemKind::Type => Target::ForeignTy,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_generic_param(generic_param: &hir::GenericParam<'_>) -> Target {
|
||||
match generic_param.kind {
|
||||
hir::GenericParamKind::Type { .. } => Target::GenericParam(GenericParamKind::Type),
|
||||
hir::GenericParamKind::Lifetime { .. } => {
|
||||
Target::GenericParam(GenericParamKind::Lifetime)
|
||||
}
|
||||
hir::GenericParamKind::Const { .. } => Target::GenericParam(GenericParamKind::Const),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue