@@ -806,25 +806,34 @@ impl<'hir> Map<'hir> {
806806 /// Given a node ID, gets a list of attributes associated with the AST
807807 /// corresponding to the node-ID.
808808 pub fn attrs(&self, id: HirId) -> &'hir [ast::Attribute] {
809- let attrs = match self.find_entry(id).map(|entry| entry.node) {
810- Some( Node::Param(a)) => Some( &a.attrs[..]) ,
811- Some( Node::Local(l)) => Some( &l.attrs[..]) ,
812- Some( Node::Item(i)) => Some( &i.attrs[..]) ,
813- Some( Node::ForeignItem(fi)) => Some( &fi.attrs[..]) ,
814- Some( Node::TraitItem(ref ti)) => Some( &ti.attrs[..]) ,
815- Some( Node::ImplItem(ref ii)) => Some( &ii.attrs[..]) ,
816- Some( Node::Variant(ref v)) => Some( &v.attrs[..]) ,
817- Some( Node::Field(ref f)) => Some( &f.attrs[..]) ,
818- Some( Node::Expr(ref e)) => Some( &*e.attrs) ,
819- Some( Node::Stmt(ref s)) => Some( s.kind.attrs(|id| self.item(id.id) )),
820- Some( Node::Arm(ref a)) => Some( &*a.attrs) ,
821- Some( Node::GenericParam(param)) => Some( ¶m.attrs[..]) ,
809+ let attrs = self.find_entry(id).map(|entry| match entry.node {
810+ Node::Param(a) => &a.attrs[..],
811+ Node::Local(l) => &l.attrs[..],
812+ Node::Item(i) => &i.attrs[..],
813+ Node::ForeignItem(fi) => &fi.attrs[..],
814+ Node::TraitItem(ref ti) => &ti.attrs[..],
815+ Node::ImplItem(ref ii) => &ii.attrs[..],
816+ Node::Variant(ref v) => &v.attrs[..],
817+ Node::Field(ref f) => &f.attrs[..],
818+ Node::Expr(ref e) => &*e.attrs,
819+ Node::Stmt(ref s) => s.kind.attrs(|id| self.item(id.id)),
820+ Node::Arm(ref a) => &*a.attrs,
821+ Node::GenericParam(param) => ¶m.attrs[..],
822822 // Unit/tuple structs/variants take the attributes straight from
823823 // the struct/variant definition.
824- Some(Node::Ctor(..)) => return self.attrs(self.get_parent_item(id)),
825- Some(Node::Crate(item)) => Some(&item.attrs[..]),
826- _ => None,
827- };
824+ Node::Ctor(..) => self.attrs(self.get_parent_item(id)),
825+ Node::Crate(item) => &item.attrs[..],
826+ Node::MacroDef(def) => def.attrs,
827+ Node::AnonConst(..)
828+ | Node::PathSegment(..)
829+ | Node::Ty(..)
830+ | Node::Pat(..)
831+ | Node::Binding(..)
832+ | Node::TraitRef(..)
833+ | Node::Block(..)
834+ | Node::Lifetime(..)
835+ | Node::Visibility(..) => &[],
836+ });
828837 attrs.unwrap_or(&[])
829838 }
830839
0 commit comments