Skip to content

Commit a0d1df4

Browse files
committed
Auto merge of rust-lang#101709 - nnethercote:simplify-visitors-more, r=cjgillot
Simplify visitors more A successor to rust-lang#100392. r? `@cjgillot`
2 parents a5b58ad + b8ed1c5 commit a0d1df4

File tree

26 files changed

+115
-156
lines changed

26 files changed

+115
-156
lines changed

compiler/rustc_ast/src/visit.rs

+13-17
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ pub trait Visitor<'ast>: Sized {
156156
fn visit_where_predicate(&mut self, p: &'ast WherePredicate) {
157157
walk_where_predicate(self, p)
158158
}
159-
fn visit_fn(&mut self, fk: FnKind<'ast>, s: Span, _: NodeId) {
160-
walk_fn(self, fk, s)
159+
fn visit_fn(&mut self, fk: FnKind<'ast>, _: Span, _: NodeId) {
160+
walk_fn(self, fk)
161161
}
162162
fn visit_assoc_item(&mut self, i: &'ast AssocItem, ctxt: AssocCtxt) {
163163
walk_assoc_item(self, i, ctxt)
@@ -201,11 +201,11 @@ pub trait Visitor<'ast>: Sized {
201201
fn visit_use_tree(&mut self, use_tree: &'ast UseTree, id: NodeId, _nested: bool) {
202202
walk_use_tree(self, use_tree, id)
203203
}
204-
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'ast PathSegment) {
205-
walk_path_segment(self, path_span, path_segment)
204+
fn visit_path_segment(&mut self, path_segment: &'ast PathSegment) {
205+
walk_path_segment(self, path_segment)
206206
}
207-
fn visit_generic_args(&mut self, path_span: Span, generic_args: &'ast GenericArgs) {
208-
walk_generic_args(self, path_span, generic_args)
207+
fn visit_generic_args(&mut self, generic_args: &'ast GenericArgs) {
208+
walk_generic_args(self, generic_args)
209209
}
210210
fn visit_generic_arg(&mut self, generic_arg: &'ast GenericArg) {
211211
walk_generic_arg(self, generic_arg)
@@ -435,7 +435,7 @@ pub fn walk_ty<'a, V: Visitor<'a>>(visitor: &mut V, typ: &'a Ty) {
435435

436436
pub fn walk_path<'a, V: Visitor<'a>>(visitor: &mut V, path: &'a Path) {
437437
for segment in &path.segments {
438-
visitor.visit_path_segment(path.span, segment);
438+
visitor.visit_path_segment(segment);
439439
}
440440
}
441441

@@ -457,18 +457,14 @@ pub fn walk_use_tree<'a, V: Visitor<'a>>(visitor: &mut V, use_tree: &'a UseTree,
457457
}
458458
}
459459

460-
pub fn walk_path_segment<'a, V: Visitor<'a>>(
461-
visitor: &mut V,
462-
path_span: Span,
463-
segment: &'a PathSegment,
464-
) {
460+
pub fn walk_path_segment<'a, V: Visitor<'a>>(visitor: &mut V, segment: &'a PathSegment) {
465461
visitor.visit_ident(segment.ident);
466462
if let Some(ref args) = segment.args {
467-
visitor.visit_generic_args(path_span, args);
463+
visitor.visit_generic_args(args);
468464
}
469465
}
470466

471-
pub fn walk_generic_args<'a, V>(visitor: &mut V, _path_span: Span, generic_args: &'a GenericArgs)
467+
pub fn walk_generic_args<'a, V>(visitor: &mut V, generic_args: &'a GenericArgs)
472468
where
473469
V: Visitor<'a>,
474470
{
@@ -502,7 +498,7 @@ where
502498
pub fn walk_assoc_constraint<'a, V: Visitor<'a>>(visitor: &mut V, constraint: &'a AssocConstraint) {
503499
visitor.visit_ident(constraint.ident);
504500
if let Some(ref gen_args) = constraint.gen_args {
505-
visitor.visit_generic_args(gen_args.span(), gen_args);
501+
visitor.visit_generic_args(gen_args);
506502
}
507503
match constraint.kind {
508504
AssocConstraintKind::Equality { ref term } => match term {
@@ -659,7 +655,7 @@ pub fn walk_fn_decl<'a, V: Visitor<'a>>(visitor: &mut V, function_declaration: &
659655
visitor.visit_fn_ret_ty(&function_declaration.output);
660656
}
661657

662-
pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>, _span: Span) {
658+
pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>) {
663659
match kind {
664660
FnKind::Fn(_, _, sig, _, generics, body) => {
665661
visitor.visit_generics(generics);
@@ -800,7 +796,7 @@ pub fn walk_expr<'a, V: Visitor<'a>>(visitor: &mut V, expression: &'a Expr) {
800796
walk_list!(visitor, visit_expr, arguments);
801797
}
802798
ExprKind::MethodCall(ref segment, ref receiver, ref arguments, _span) => {
803-
visitor.visit_path_segment(expression.span, segment);
799+
visitor.visit_path_segment(segment);
804800
visitor.visit_expr(receiver);
805801
walk_list!(visitor, visit_expr, arguments);
806802
}

compiler/rustc_ast_lowering/src/index.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,9 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
246246
});
247247
}
248248

249-
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'hir PathSegment<'hir>) {
250-
self.insert(path_span, path_segment.hir_id, Node::PathSegment(path_segment));
251-
intravisit::walk_path_segment(self, path_span, path_segment);
249+
fn visit_path_segment(&mut self, path_segment: &'hir PathSegment<'hir>) {
250+
self.insert(path_segment.ident.span, path_segment.hir_id, Node::PathSegment(path_segment));
251+
intravisit::walk_path_segment(self, path_segment);
252252
}
253253

254254
fn visit_ty(&mut self, ty: &'hir Ty<'hir>) {
@@ -280,12 +280,12 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
280280
fk: intravisit::FnKind<'hir>,
281281
fd: &'hir FnDecl<'hir>,
282282
b: BodyId,
283-
s: Span,
283+
_: Span,
284284
id: HirId,
285285
) {
286286
assert_eq!(self.owner, id.owner);
287287
assert_eq!(self.parent_node, id.local_id);
288-
intravisit::walk_fn(self, fk, fd, b, s, id);
288+
intravisit::walk_fn(self, fk, fd, b, id);
289289
}
290290

291291
fn visit_block(&mut self, block: &'hir Block<'hir>) {

compiler/rustc_ast_lowering/src/lifetime_collector.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ impl<'ast> Visitor<'ast> for LifetimeCollectVisitor<'ast> {
6363
self.record_lifetime_use(*lifetime);
6464
}
6565

66-
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'ast PathSegment) {
67-
self.record_elided_anchor(path_segment.id, path_span);
68-
visit::walk_path_segment(self, path_span, path_segment);
66+
fn visit_path_segment(&mut self, path_segment: &'ast PathSegment) {
67+
self.record_elided_anchor(path_segment.id, path_segment.ident.span);
68+
visit::walk_path_segment(self, path_segment);
6969
}
7070

7171
fn visit_poly_trait_ref(&mut self, t: &'ast PolyTraitRef) {

compiler/rustc_ast_passes/src/ast_validation.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,9 @@ impl<'a> AstValidator<'a> {
223223
for (i, segment) in path.segments.iter().enumerate() {
224224
// Allow `impl Trait` iff we're on the final path segment
225225
if i == path.segments.len() - 1 {
226-
self.visit_path_segment(path.span, segment);
226+
self.visit_path_segment(segment);
227227
} else {
228-
self.with_banned_impl_trait(|this| {
229-
this.visit_path_segment(path.span, segment)
230-
});
228+
self.with_banned_impl_trait(|this| this.visit_path_segment(segment));
231229
}
232230
}
233231
}
@@ -1293,7 +1291,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
12931291
}
12941292

12951293
// Mirrors `visit::walk_generic_args`, but tracks relevant state.
1296-
fn visit_generic_args(&mut self, _: Span, generic_args: &'a GenericArgs) {
1294+
fn visit_generic_args(&mut self, generic_args: &'a GenericArgs) {
12971295
match *generic_args {
12981296
GenericArgs::AngleBracketed(ref data) => {
12991297
self.check_generic_args_before_constraints(data);
@@ -1529,7 +1527,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
15291527
matches!(fk.header(), Some(FnHeader { constness: Const::Yes(_), .. }))
15301528
|| matches!(fk.ctxt(), Some(FnCtxt::Assoc(_)));
15311529

1532-
self.with_tilde_const(tilde_const_allowed, |this| visit::walk_fn(this, fk, span));
1530+
self.with_tilde_const(tilde_const_allowed, |this| visit::walk_fn(this, fk));
15331531
}
15341532

15351533
fn visit_assoc_item(&mut self, item: &'a AssocItem, ctxt: AssocCtxt) {

compiler/rustc_ast_passes/src/feature_gate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
680680
gate_feature_post!(&self, c_variadic, span, "C-variadic functions are unstable");
681681
}
682682

683-
visit::walk_fn(self, fn_kind, span)
683+
visit::walk_fn(self, fn_kind)
684684
}
685685

686686
fn visit_assoc_constraint(&mut self, constraint: &'a AssocConstraint) {

compiler/rustc_ast_passes/src/node_count.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ impl<'ast> Visitor<'ast> for NodeCounter {
6363
self.count += 1;
6464
walk_generics(self, g)
6565
}
66-
fn visit_fn(&mut self, fk: visit::FnKind<'_>, s: Span, _: NodeId) {
66+
fn visit_fn(&mut self, fk: visit::FnKind<'_>, _: Span, _: NodeId) {
6767
self.count += 1;
68-
walk_fn(self, fk, s)
68+
walk_fn(self, fk)
6969
}
7070
fn visit_assoc_item(&mut self, ti: &AssocItem, ctxt: AssocCtxt) {
7171
self.count += 1;
@@ -115,9 +115,9 @@ impl<'ast> Visitor<'ast> for NodeCounter {
115115
self.count += 1;
116116
walk_use_tree(self, use_tree, id)
117117
}
118-
fn visit_generic_args(&mut self, path_span: Span, generic_args: &GenericArgs) {
118+
fn visit_generic_args(&mut self, generic_args: &GenericArgs) {
119119
self.count += 1;
120-
walk_generic_args(self, path_span, generic_args)
120+
walk_generic_args(self, generic_args)
121121
}
122122
fn visit_assoc_constraint(&mut self, constraint: &AssocConstraint) {
123123
self.count += 1;

compiler/rustc_hir/src/intravisit.rs

+28-45
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ pub trait Visitor<'v>: Sized {
298298
fn visit_id(&mut self, _hir_id: HirId) {
299299
// Nothing to do.
300300
}
301-
fn visit_name(&mut self, _span: Span, _name: Symbol) {
301+
fn visit_name(&mut self, _name: Symbol) {
302302
// Nothing to do.
303303
}
304304
fn visit_ident(&mut self, ident: Ident) {
@@ -361,8 +361,8 @@ pub trait Visitor<'v>: Sized {
361361
fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>) {
362362
walk_fn_decl(self, fd)
363363
}
364-
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl<'v>, b: BodyId, s: Span, id: HirId) {
365-
walk_fn(self, fk, fd, b, s, id)
364+
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl<'v>, b: BodyId, _: Span, id: HirId) {
365+
walk_fn(self, fk, fd, b, id)
366366
}
367367
fn visit_use(&mut self, path: &'v Path<'v>, hir_id: HirId) {
368368
walk_use(self, path, hir_id)
@@ -388,8 +388,8 @@ pub trait Visitor<'v>: Sized {
388388
fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>) {
389389
walk_param_bound(self, bounds)
390390
}
391-
fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>, m: TraitBoundModifier) {
392-
walk_poly_trait_ref(self, t, m)
391+
fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>) {
392+
walk_poly_trait_ref(self, t)
393393
}
394394
fn visit_variant_data(&mut self, s: &'v VariantData<'v>) {
395395
walk_struct_def(self, s)
@@ -420,17 +420,18 @@ pub trait Visitor<'v>: Sized {
420420
fn visit_lifetime(&mut self, lifetime: &'v Lifetime) {
421421
walk_lifetime(self, lifetime)
422422
}
423-
fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, span: Span) {
424-
walk_qpath(self, qpath, id, span)
423+
// The span is that of the surrounding type/pattern/expr/whatever.
424+
fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, _span: Span) {
425+
walk_qpath(self, qpath, id)
425426
}
426427
fn visit_path(&mut self, path: &'v Path<'v>, _id: HirId) {
427428
walk_path(self, path)
428429
}
429-
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'v PathSegment<'v>) {
430-
walk_path_segment(self, path_span, path_segment)
430+
fn visit_path_segment(&mut self, path_segment: &'v PathSegment<'v>) {
431+
walk_path_segment(self, path_segment)
431432
}
432-
fn visit_generic_args(&mut self, path_span: Span, generic_args: &'v GenericArgs<'v>) {
433-
walk_generic_args(self, path_span, generic_args)
433+
fn visit_generic_args(&mut self, generic_args: &'v GenericArgs<'v>) {
434+
walk_generic_args(self, generic_args)
434435
}
435436
fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>) {
436437
walk_assoc_type_binding(self, type_binding)
@@ -472,7 +473,7 @@ pub fn walk_local<'v, V: Visitor<'v>>(visitor: &mut V, local: &'v Local<'v>) {
472473
}
473474

474475
pub fn walk_ident<'v, V: Visitor<'v>>(visitor: &mut V, ident: Ident) {
475-
visitor.visit_name(ident.span, ident.name);
476+
visitor.visit_name(ident.name);
476477
}
477478

478479
pub fn walk_label<'v, V: Visitor<'v>>(visitor: &mut V, label: &'v Label) {
@@ -494,11 +495,7 @@ pub fn walk_lifetime<'v, V: Visitor<'v>>(visitor: &mut V, lifetime: &'v Lifetime
494495
}
495496
}
496497

497-
pub fn walk_poly_trait_ref<'v, V: Visitor<'v>>(
498-
visitor: &mut V,
499-
trait_ref: &'v PolyTraitRef<'v>,
500-
_modifier: TraitBoundModifier,
501-
) {
498+
pub fn walk_poly_trait_ref<'v, V: Visitor<'v>>(visitor: &mut V, trait_ref: &'v PolyTraitRef<'v>) {
502499
walk_list!(visitor, visit_generic_param, trait_ref.bound_generic_params);
503500
visitor.visit_trait_ref(&trait_ref.trait_ref);
504501
}
@@ -519,7 +516,7 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item<'v>) {
519516
ItemKind::ExternCrate(orig_name) => {
520517
visitor.visit_id(item.hir_id());
521518
if let Some(orig_name) = orig_name {
522-
visitor.visit_name(item.span, orig_name);
519+
visitor.visit_name(orig_name);
523520
}
524521
}
525522
ItemKind::Use(ref path, _) => {
@@ -680,7 +677,7 @@ pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty<'v>) {
680677
}
681678
TyKind::TraitObject(bounds, ref lifetime, _syntax) => {
682679
for bound in bounds {
683-
visitor.visit_poly_trait_ref(bound, TraitBoundModifier::None);
680+
visitor.visit_poly_trait_ref(bound);
684681
}
685682
visitor.visit_lifetime(lifetime);
686683
}
@@ -693,48 +690,35 @@ pub fn walk_inf<'v, V: Visitor<'v>>(visitor: &mut V, inf: &'v InferArg) {
693690
visitor.visit_id(inf.hir_id);
694691
}
695692

696-
pub fn walk_qpath<'v, V: Visitor<'v>>(
697-
visitor: &mut V,
698-
qpath: &'v QPath<'v>,
699-
id: HirId,
700-
span: Span,
701-
) {
693+
pub fn walk_qpath<'v, V: Visitor<'v>>(visitor: &mut V, qpath: &'v QPath<'v>, id: HirId) {
702694
match *qpath {
703695
QPath::Resolved(ref maybe_qself, ref path) => {
704696
walk_list!(visitor, visit_ty, maybe_qself);
705697
visitor.visit_path(path, id)
706698
}
707699
QPath::TypeRelative(ref qself, ref segment) => {
708700
visitor.visit_ty(qself);
709-
visitor.visit_path_segment(span, segment);
701+
visitor.visit_path_segment(segment);
710702
}
711703
QPath::LangItem(..) => {}
712704
}
713705
}
714706

715707
pub fn walk_path<'v, V: Visitor<'v>>(visitor: &mut V, path: &'v Path<'v>) {
716708
for segment in path.segments {
717-
visitor.visit_path_segment(path.span, segment);
709+
visitor.visit_path_segment(segment);
718710
}
719711
}
720712

721-
pub fn walk_path_segment<'v, V: Visitor<'v>>(
722-
visitor: &mut V,
723-
path_span: Span,
724-
segment: &'v PathSegment<'v>,
725-
) {
713+
pub fn walk_path_segment<'v, V: Visitor<'v>>(visitor: &mut V, segment: &'v PathSegment<'v>) {
726714
visitor.visit_ident(segment.ident);
727715
visitor.visit_id(segment.hir_id);
728716
if let Some(ref args) = segment.args {
729-
visitor.visit_generic_args(path_span, args);
717+
visitor.visit_generic_args(args);
730718
}
731719
}
732720

733-
pub fn walk_generic_args<'v, V: Visitor<'v>>(
734-
visitor: &mut V,
735-
_path_span: Span,
736-
generic_args: &'v GenericArgs<'v>,
737-
) {
721+
pub fn walk_generic_args<'v, V: Visitor<'v>>(visitor: &mut V, generic_args: &'v GenericArgs<'v>) {
738722
walk_list!(visitor, visit_generic_arg, generic_args.args);
739723
walk_list!(visitor, visit_assoc_type_binding, generic_args.bindings);
740724
}
@@ -745,7 +729,7 @@ pub fn walk_assoc_type_binding<'v, V: Visitor<'v>>(
745729
) {
746730
visitor.visit_id(type_binding.hir_id);
747731
visitor.visit_ident(type_binding.ident);
748-
visitor.visit_generic_args(type_binding.span, type_binding.gen_args);
732+
visitor.visit_generic_args(type_binding.gen_args);
749733
match type_binding.kind {
750734
TypeBindingKind::Equality { ref term } => match term {
751735
Term::Ty(ref ty) => visitor.visit_ty(ty),
@@ -819,12 +803,12 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v
819803

820804
pub fn walk_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v GenericBound<'v>) {
821805
match *bound {
822-
GenericBound::Trait(ref typ, modifier) => {
823-
visitor.visit_poly_trait_ref(typ, modifier);
806+
GenericBound::Trait(ref typ, _modifier) => {
807+
visitor.visit_poly_trait_ref(typ);
824808
}
825-
GenericBound::LangItemTrait(_, span, hir_id, args) => {
809+
GenericBound::LangItemTrait(_, _span, hir_id, args) => {
826810
visitor.visit_id(hir_id);
827-
visitor.visit_generic_args(span, args);
811+
visitor.visit_generic_args(args);
828812
}
829813
GenericBound::Outlives(ref lifetime) => visitor.visit_lifetime(lifetime),
830814
}
@@ -910,7 +894,6 @@ pub fn walk_fn<'v, V: Visitor<'v>>(
910894
function_kind: FnKind<'v>,
911895
function_declaration: &'v FnDecl<'v>,
912896
body_id: BodyId,
913-
_span: Span,
914897
id: HirId,
915898
) {
916899
visitor.visit_id(id);
@@ -1095,7 +1078,7 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr<'v>)
10951078
walk_list!(visitor, visit_expr, arguments);
10961079
}
10971080
ExprKind::MethodCall(ref segment, receiver, arguments, _) => {
1098-
visitor.visit_path_segment(expression.span, segment);
1081+
visitor.visit_path_segment(segment);
10991082
visitor.visit_expr(receiver);
11001083
walk_list!(visitor, visit_expr, arguments);
11011084
}

compiler/rustc_infer/src/infer/error_reporting/nice_region_error/find_anon_type.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ impl<'tcx> Visitor<'tcx> for FindNestedTypeVisitor<'tcx> {
9191
hir::TyKind::TraitObject(bounds, ..) => {
9292
for bound in bounds {
9393
self.current_index.shift_in(1);
94-
self.visit_poly_trait_ref(bound, hir::TraitBoundModifier::None);
94+
self.visit_poly_trait_ref(bound);
9595
self.current_index.shift_out(1);
9696
}
9797
}

0 commit comments

Comments
 (0)