diff options
| author | Michael Goulet <michael@errs.io> | 2023-12-09 17:27:18 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-12-15 16:17:28 +0000 |
| commit | bc1ca6b52854d09cfdcb83d0559f3e72720aa41f (patch) | |
| tree | d56c4f53dff780b5a6c615c542e857bd59bca6f3 /compiler/rustc_ast | |
| parent | 04fafd69dec85b02338cf303a21df93ad9594fa1 (diff) | |
| download | rust-bc1ca6b52854d09cfdcb83d0559f3e72720aa41f.tar.gz rust-bc1ca6b52854d09cfdcb83d0559f3e72720aa41f.zip | |
Fix enforcement of generics for associated items
Diffstat (limited to 'compiler/rustc_ast')
| -rw-r--r-- | compiler/rustc_ast/src/ast.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs index 5755ae8a8bc..9d543563c0f 100644 --- a/compiler/rustc_ast/src/ast.rs +++ b/compiler/rustc_ast/src/ast.rs @@ -2845,6 +2845,28 @@ impl Item { pub fn span_with_attributes(&self) -> Span { self.attrs.iter().fold(self.span, |acc, attr| acc.to(attr.span)) } + + pub fn opt_generics(&self) -> Option<&Generics> { + match &self.kind { + ItemKind::ExternCrate(_) + | ItemKind::Use(_) + | ItemKind::Mod(_, _) + | ItemKind::ForeignMod(_) + | ItemKind::GlobalAsm(_) + | ItemKind::MacCall(_) + | ItemKind::MacroDef(_) => None, + ItemKind::Static(_) => None, + ItemKind::Const(i) => Some(&i.generics), + ItemKind::Fn(i) => Some(&i.generics), + ItemKind::TyAlias(i) => Some(&i.generics), + ItemKind::TraitAlias(generics, _) + | ItemKind::Enum(_, generics) + | ItemKind::Struct(_, generics) + | ItemKind::Union(_, generics) => Some(&generics), + ItemKind::Trait(i) => Some(&i.generics), + ItemKind::Impl(i) => Some(&i.generics), + } + } } /// `extern` qualifier on a function item or function type. |
