syntax: simplify HasAttrs code

This commit is contained in:
Mazdak Farrokhzad 2020-01-11 12:33:11 +01:00
parent 64d0143c2c
commit 9be73dc63a
2 changed files with 12 additions and 22 deletions

View File

@ -62,7 +62,7 @@ fn attrs(&self) -> &[Attribute] {
}
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
match self {
Annotatable::Item(item) => item.visit_attrs(f),
Annotatable::TraitItem(trait_item) => trait_item.visit_attrs(f),

View File

@ -657,15 +657,15 @@ fn from_tokens<I>(tokens: &mut iter::Peekable<I>) -> Option<NestedMetaItem>
}
pub trait HasAttrs: Sized {
fn attrs(&self) -> &[ast::Attribute];
fn visit_attrs<F: FnOnce(&mut Vec<ast::Attribute>)>(&mut self, f: F);
fn attrs(&self) -> &[Attribute];
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>));
}
impl<T: HasAttrs> HasAttrs for Spanned<T> {
fn attrs(&self) -> &[ast::Attribute] {
fn attrs(&self) -> &[Attribute] {
self.node.attrs()
}
fn visit_attrs<F: FnOnce(&mut Vec<ast::Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
self.node.visit_attrs(f);
}
}
@ -674,7 +674,7 @@ impl HasAttrs for Vec<Attribute> {
fn attrs(&self) -> &[Attribute] {
self
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
f(self)
}
}
@ -683,7 +683,7 @@ impl HasAttrs for AttrVec {
fn attrs(&self) -> &[Attribute] {
self
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
visit_clobber(self, |this| {
let mut vec = this.into();
f(&mut vec);
@ -696,7 +696,7 @@ impl<T: HasAttrs + 'static> HasAttrs for P<T> {
fn attrs(&self) -> &[Attribute] {
(**self).attrs()
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
(**self).visit_attrs(f);
}
}
@ -714,7 +714,7 @@ fn attrs(&self) -> &[Attribute] {
}
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
match self {
StmtKind::Local(local) => local.visit_attrs(f),
StmtKind::Item(..) => {}
@ -733,21 +733,11 @@ fn attrs(&self) -> &[ast::Attribute] {
self.kind.attrs()
}
fn visit_attrs<F: FnOnce(&mut Vec<ast::Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
self.kind.visit_attrs(f);
}
}
impl HasAttrs for GenericParam {
fn attrs(&self) -> &[ast::Attribute] {
&self.attrs
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
self.attrs.visit_attrs(f);
}
}
macro_rules! derive_has_attrs {
($($ty:path),*) => { $(
impl HasAttrs for $ty {
@ -755,7 +745,7 @@ fn attrs(&self) -> &[Attribute] {
&self.attrs
}
fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
self.attrs.visit_attrs(f);
}
}
@ -764,5 +754,5 @@ fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
derive_has_attrs! {
Item, Expr, Local, ast::ForeignItem, ast::StructField, ast::AssocItem, ast::Arm,
ast::Field, ast::FieldPat, ast::Variant, ast::Param
ast::Field, ast::FieldPat, ast::Variant, ast::Param, GenericParam
}