Skip to content

Commit 568c6ed

Browse files
committed
propagate function attributes in ast visitor
1 parent acda5e9 commit 568c6ed

File tree

8 files changed

+23
-19
lines changed

8 files changed

+23
-19
lines changed

compiler/rustc_ast/src/visit.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -645,8 +645,9 @@ macro_rules! common_visitor_and_walkers {
645645
fn visit_fn(
646646
&mut self,
647647
fk: FnKind<$($lt)? $(${ignore($mut)} '_)?>,
648+
_: &AttrVec,
648649
_: Span,
649-
_: NodeId
650+
_: NodeId,
650651
) -> Self::Result {
651652
walk_fn(self, fk)
652653
}
@@ -740,6 +741,7 @@ macro_rules! common_visitor_and_walkers {
740741
type Ctxt;
741742
fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
742743
&$($lt)? $($mut)? self,
744+
attrs: &AttrVec,
743745
span: Span,
744746
id: NodeId,
745747
visibility: &$($lt)? $($mut)? Visibility,
@@ -773,7 +775,7 @@ macro_rules! common_visitor_and_walkers {
773775
) -> V::Result {
774776
let Item { attrs, id, kind, vis, span, tokens: _ } = item;
775777
visit_visitable!($($mut)? visitor, id, attrs, vis);
776-
try_visit!(kind.walk(*span, *id, vis, ctxt, visitor));
778+
try_visit!(kind.walk(attrs, *span, *id, vis, ctxt, visitor));
777779
visit_visitable!($($mut)? visitor, span);
778780
V::Result::output()
779781
}
@@ -799,6 +801,7 @@ macro_rules! common_visitor_and_walkers {
799801
type Ctxt = ();
800802
fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
801803
&$($lt)? $($mut)? self,
804+
attrs: &AttrVec,
802805
span: Span,
803806
id: NodeId,
804807
visibility: &$($lt)? $($mut)? Visibility,
@@ -808,7 +811,7 @@ macro_rules! common_visitor_and_walkers {
808811
match self {
809812
ItemKind::Fn(func) => {
810813
let kind = FnKind::Fn(FnCtxt::Free, visibility, &$($mut)? *func);
811-
try_visit!(vis.visit_fn(kind, span, id));
814+
try_visit!(vis.visit_fn(kind, attrs, span, id));
812815
}
813816
ItemKind::ExternCrate(orig_name, ident) =>
814817
visit_visitable!($($mut)? vis, orig_name, ident),
@@ -856,6 +859,7 @@ macro_rules! common_visitor_and_walkers {
856859
type Ctxt = AssocCtxt;
857860
fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
858861
&$($lt)? $($mut)? self,
862+
attrs: &AttrVec,
859863
span: Span,
860864
id: NodeId,
861865
visibility: &$($lt)? $($mut)? Visibility,
@@ -867,7 +871,7 @@ macro_rules! common_visitor_and_walkers {
867871
visit_visitable!($($mut)? vis, item),
868872
AssocItemKind::Fn(func) => {
869873
let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), visibility, &$($mut)? *func);
870-
try_visit!(vis.visit_fn(kind, span, id))
874+
try_visit!(vis.visit_fn(kind, attrs, span, id))
871875
}
872876
AssocItemKind::Type(alias) =>
873877
visit_visitable!($($mut)? vis, alias),
@@ -886,6 +890,7 @@ macro_rules! common_visitor_and_walkers {
886890
type Ctxt = ();
887891
fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
888892
&$($lt)? $($mut)? self,
893+
attrs: &AttrVec,
889894
span: Span,
890895
id: NodeId,
891896
visibility: &$($lt)? $($mut)? Visibility,
@@ -897,7 +902,7 @@ macro_rules! common_visitor_and_walkers {
897902
visit_visitable!($($mut)? vis, item),
898903
ForeignItemKind::Fn(func) => {
899904
let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)?*func);
900-
try_visit!(vis.visit_fn(kind, span, id))
905+
try_visit!(vis.visit_fn(kind, attrs, span, id))
901906
}
902907
ForeignItemKind::TyAlias(alias) =>
903908
visit_visitable!($($mut)? vis, alias),
@@ -999,7 +1004,7 @@ macro_rules! common_visitor_and_walkers {
9991004
}) => {
10001005
visit_visitable!($($mut)? vis, constness, movability, capture_clause);
10011006
let kind = FnKind::Closure(binder, coroutine_kind, fn_decl, body);
1002-
try_visit!(vis.visit_fn(kind, *span, *id));
1007+
try_visit!(vis.visit_fn(kind, attrs, *span, *id));
10031008
visit_visitable!($($mut)? vis, fn_decl_span, fn_arg_span);
10041009
}
10051010
ExprKind::Block(block, opt_label) =>

compiler/rustc_ast_passes/src/ast_validation.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
11041104
}
11051105

11061106
let kind = FnKind::Fn(FnCtxt::Free, &item.vis, &*func);
1107-
self.visit_fn(kind, item.span, item.id);
1107+
self.visit_fn(kind, &item.attrs, item.span, item.id);
11081108
}
11091109
ItemKind::ForeignMod(ForeignMod { extern_span, abi, safety, .. }) => {
11101110
let old_item = mem::replace(&mut self.extern_mod_span, Some(item.span));
@@ -1478,7 +1478,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
14781478
visit::walk_param_bound(self, bound)
14791479
}
14801480

1481-
fn visit_fn(&mut self, fk: FnKind<'a>, span: Span, id: NodeId) {
1481+
fn visit_fn(&mut self, fk: FnKind<'a>, _attrs: &AttrVec, span: Span, id: NodeId) {
14821482
// Only associated `fn`s can have `self` parameters.
14831483
let self_semantic = match fk.ctxt() {
14841484
Some(FnCtxt::Assoc(_)) => SelfSemantic::Yes,
@@ -1648,7 +1648,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
16481648
{
16491649
self.visit_attrs_vis_ident(&item.attrs, &item.vis, &func.ident);
16501650
let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), &item.vis, &*func);
1651-
self.visit_fn(kind, item.span, item.id);
1651+
self.visit_fn(kind, &item.attrs, item.span, item.id);
16521652
}
16531653
AssocItemKind::Type(_) => {
16541654
let disallowed = (!parent_is_const).then(|| match self.outer_trait_or_trait_impl {

compiler/rustc_ast_passes/src/feature_gate.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
use rustc_ast as ast;
21
use rustc_ast::visit::{self, AssocCtxt, FnCtxt, FnKind, Visitor};
3-
use rustc_ast::{NodeId, PatKind, attr, token};
2+
use rustc_ast::{self as ast, AttrVec, NodeId, PatKind, attr, token};
43
use rustc_feature::{AttributeGate, BUILTIN_ATTRIBUTE_MAP, BuiltinAttribute, Features};
54
use rustc_session::Session;
65
use rustc_session::parse::{feature_err, feature_warn};
@@ -392,7 +391,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
392391
visit::walk_poly_trait_ref(self, t);
393392
}
394393

395-
fn visit_fn(&mut self, fn_kind: FnKind<'a>, span: Span, _: NodeId) {
394+
fn visit_fn(&mut self, fn_kind: FnKind<'a>, _: &AttrVec, span: Span, _: NodeId) {
396395
if let Some(_header) = fn_kind.header() {
397396
// Stability of const fn methods are covered in `visit_assoc_item` below.
398397
}

compiler/rustc_lint/src/early.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! syntactical lints.
66
77
use rustc_ast::visit::{self as ast_visit, Visitor, walk_list};
8-
use rustc_ast::{self as ast, HasAttrs};
8+
use rustc_ast::{self as ast, AttrVec, HasAttrs};
99
use rustc_data_structures::stack::ensure_sufficient_stack;
1010
use rustc_errors::{BufferedEarlyLint, DecorateDiagCompat, LintBuffer};
1111
use rustc_feature::Features;
@@ -135,7 +135,7 @@ impl<'ast, 'ecx, 'tcx, T: EarlyLintPass> ast_visit::Visitor<'ast>
135135
});
136136
}
137137

138-
fn visit_fn(&mut self, fk: ast_visit::FnKind<'ast>, span: Span, id: ast::NodeId) {
138+
fn visit_fn(&mut self, fk: ast_visit::FnKind<'ast>, _: &AttrVec, span: Span, id: ast::NodeId) {
139139
lint_callback!(self, check_fn, fk, span, id);
140140
ast_visit::walk_fn(self, fk);
141141
}

compiler/rustc_passes/src/input_stats.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// completely accurate (some things might be counted twice, others missed).
44

55
use rustc_ast::visit::BoundKind;
6-
use rustc_ast::{self as ast, NodeId, visit as ast_visit};
6+
use rustc_ast::{self as ast, AttrVec, NodeId, visit as ast_visit};
77
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
88
use rustc_data_structures::thousands::usize_with_underscores;
99
use rustc_hir::{self as hir, AmbigArg, HirId, intravisit as hir_visit};
@@ -709,7 +709,7 @@ impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> {
709709
ast_visit::walk_where_predicate(self, p)
710710
}
711711

712-
fn visit_fn(&mut self, fk: ast_visit::FnKind<'v>, _: Span, _: NodeId) {
712+
fn visit_fn(&mut self, fk: ast_visit::FnKind<'v>, _: &AttrVec, _: Span, _: NodeId) {
713713
self.record("FnDecl", None, fk.decl());
714714
ast_visit::walk_fn(self, fk)
715715
}

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1358,7 +1358,7 @@ impl<'a, 'ra, 'tcx> Visitor<'a> for BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
13581358
// Visit attributes after items for backward compatibility.
13591359
// This way they can use `macro_rules` defined later.
13601360
self.visit_vis(&item.vis);
1361-
item.kind.walk(item.span, item.id, &item.vis, (), self);
1361+
item.kind.walk(&item.attrs, item.span, item.id, &item.vis, (), self);
13621362
visit::walk_list!(self, visit_attribute, &item.attrs);
13631363
}
13641364
_ => visit::walk_item(self, item),

compiler/rustc_resolve/src/def_collector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
193193
});
194194
}
195195

196-
fn visit_fn(&mut self, fn_kind: FnKind<'a>, span: Span, _: NodeId) {
196+
fn visit_fn(&mut self, fn_kind: FnKind<'a>, _: &AttrVec, span: Span, _: NodeId) {
197197
match fn_kind {
198198
FnKind::Fn(
199199
_ctxt,

compiler/rustc_resolve/src/late.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1034,7 +1034,7 @@ impl<'ast, 'ra, 'tcx> Visitor<'ast> for LateResolutionVisitor<'_, 'ast, 'ra, 'tc
10341034
}
10351035
}
10361036
}
1037-
fn visit_fn(&mut self, fn_kind: FnKind<'ast>, sp: Span, fn_id: NodeId) {
1037+
fn visit_fn(&mut self, fn_kind: FnKind<'ast>, _: &AttrVec, sp: Span, fn_id: NodeId) {
10381038
let previous_value = self.diag_metadata.current_function;
10391039
match fn_kind {
10401040
// Bail if the function is foreign, and thus cannot validly have

0 commit comments

Comments
 (0)