Skip to content

Commit 20e23ae

Browse files
committed
Unify {visit,walk}_path
1 parent 400fbbc commit 20e23ae

File tree

1 file changed

+31
-41
lines changed

1 file changed

+31
-41
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ macro_rules! make_ast_visitor {
211211
make_visit!{MacroDef; visit_macro_def, walk_macro_def}
212212
make_visit!{MetaItem; visit_meta_item, walk_meta_item}
213213
make_visit!{MetaItemInner; visit_meta_list_item, walk_meta_list_item}
214-
make_visit!{Path; visit_path, walk_path}
215214
make_visit!{PreciseCapturingArg; visit_precise_capturing_arg, walk_precise_capturing_arg}
216215

217216
fn flat_map_foreign_item(&mut self, ni: P<ForeignItem>) -> SmallVec<[P<ForeignItem>; 1]> {
@@ -293,7 +292,6 @@ macro_rules! make_ast_visitor {
293292
make_visit!{ForeignItem; visit_foreign_item, walk_item}
294293
make_visit!{GenericParam; visit_generic_param, walk_generic_param}
295294
make_visit!{Item; visit_item, walk_item}
296-
make_visit!{Path, _ id: NodeId; visit_path, walk_path}
297295
make_visit!{Stmt; visit_stmt, walk_stmt}
298296

299297
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -348,6 +346,7 @@ macro_rules! make_ast_visitor {
348346
make_visit!{Param; visit_param, walk_param}
349347
make_visit!{ParenthesizedArgs; visit_parenthesized_parameter_data, walk_parenthesized_parameter_data}
350348
make_visit!{PatField; visit_pat_field, walk_pat_field}
349+
make_visit!{Path, _ id: NodeId; visit_path, walk_path}
351350
make_visit!{PathSegment; visit_path_segment, walk_path_segment}
352351
make_visit!{PolyTraitRef; visit_poly_trait_ref, walk_poly_trait_ref}
353352
make_visit!{TraitRef; visit_trait_ref, walk_trait_ref}
@@ -698,6 +697,17 @@ macro_rules! make_ast_visitor {
698697
return_result!(V)
699698
}
700699

700+
pub fn walk_path<$($lt,)? V: $trait$(<$lt>)?>(
701+
vis: &mut V,
702+
path: ref_t!(Path)
703+
) -> result!(V) {
704+
let Path { span, segments, tokens } = path;
705+
visit_list!(vis, visit_path_segment, segments);
706+
visit_lazy_tts!(vis, tokens);
707+
try_v!(visit_span!(vis, span));
708+
return_result!(V)
709+
}
710+
701711
pub fn walk_path_segment<$($lt,)? V: $trait$(<$lt>)?>(
702712
vis: &mut V,
703713
segment: ref_t!(PathSegment)
@@ -726,13 +736,7 @@ macro_rules! make_ast_visitor {
726736
id: NodeId,
727737
) -> result!(V) {
728738
let UseTree { prefix, kind, span } = use_tree;
729-
// TODO: Remove this after unifying visit_path
730-
try_v!(macro_if!{$($mut)? {{
731-
let _ = id;
732-
vis.visit_path(prefix)
733-
}} else {
734-
vis.visit_path(prefix, id)
735-
}});
739+
try_v!(vis.visit_path(prefix, id));
736740
match kind {
737741
UseTreeKind::Simple(rename) => {
738742
// The extra IDs are handled during AST lowering.
@@ -1126,12 +1130,6 @@ pub mod visit {
11261130
V::Result::output()
11271131
}
11281132

1129-
pub fn walk_path<'a, V: Visitor<'a>>(visitor: &mut V, path: &'a Path) -> V::Result {
1130-
let Path { span: _, segments, tokens: _ } = path;
1131-
walk_list!(visitor, visit_path_segment, segments);
1132-
V::Result::output()
1133-
}
1134-
11351133
pub fn walk_generic_arg<'a, V>(visitor: &mut V, generic_arg: &'a GenericArg) -> V::Result
11361134
where
11371135
V: Visitor<'a>,
@@ -1814,7 +1812,7 @@ pub mod mut_visit {
18141812
}
18151813
TyKind::Path(qself, path) => {
18161814
vis.visit_qself(qself);
1817-
vis.visit_path(path);
1815+
vis.visit_path(path, *id);
18181816
}
18191817
TyKind::Array(ty, length) => {
18201818
vis.visit_ty(ty);
@@ -1848,14 +1846,6 @@ pub mod mut_visit {
18481846
smallvec![variant]
18491847
}
18501848

1851-
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens }: &mut Path) {
1852-
for segment in segments {
1853-
vis.visit_path_segment(segment);
1854-
}
1855-
visit_lazy_tts(vis, tokens);
1856-
vis.visit_span(span);
1857-
}
1858-
18591849
fn walk_generic_arg<T: MutVisitor>(vis: &mut T, arg: &mut GenericArg) {
18601850
match arg {
18611851
GenericArg::Lifetime(lt) => vis.visit_lifetime(lt, LifetimeCtxt::GenericArg),
@@ -1872,7 +1862,7 @@ pub mod mut_visit {
18721862
item: AttrItem { unsafety: _, path, args, tokens },
18731863
tokens: attr_tokens,
18741864
} = &mut **normal;
1875-
vis.visit_path(path);
1865+
vis.visit_path(path, DUMMY_NODE_ID);
18761866
visit_attr_args(vis, args);
18771867
visit_lazy_tts(vis, tokens);
18781868
visit_lazy_tts(vis, attr_tokens);
@@ -1884,7 +1874,7 @@ pub mod mut_visit {
18841874

18851875
fn walk_mac<T: MutVisitor>(vis: &mut T, mac: &mut MacCall) {
18861876
let MacCall { path, args } = mac;
1887-
vis.visit_path(path);
1877+
vis.visit_path(path, DUMMY_NODE_ID);
18881878
visit_delim_args(vis, args);
18891879
}
18901880

@@ -2055,11 +2045,11 @@ pub mod mut_visit {
20552045
token::NtLiteral(expr) => vis.visit_expr(expr),
20562046
token::NtMeta(item) => {
20572047
let AttrItem { unsafety: _, path, args, tokens } = item.deref_mut();
2058-
vis.visit_path(path);
2048+
vis.visit_path(path, DUMMY_NODE_ID);
20592049
visit_attr_args(vis, args);
20602050
visit_lazy_tts(vis, tokens);
20612051
}
2062-
token::NtPath(path) => vis.visit_path(path),
2052+
token::NtPath(path) => vis.visit_path(path, DUMMY_NODE_ID),
20632053
token::NtVis(visib) => vis.visit_vis(visib),
20642054
}
20652055
}
@@ -2149,7 +2139,7 @@ pub mod mut_visit {
21492139
}
21502140
PreciseCapturingArg::Arg(path, id) => {
21512141
vis.visit_id(id);
2152-
vis.visit_path(path);
2142+
vis.visit_path(path, *id);
21532143
}
21542144
}
21552145
}
@@ -2190,7 +2180,7 @@ pub mod mut_visit {
21902180

21912181
fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut TraitRef) {
21922182
vis.visit_id(ref_id);
2193-
vis.visit_path(path);
2183+
vis.visit_path(path, *ref_id);
21942184
}
21952185

21962186
pub fn walk_flat_map_field_def<T: MutVisitor>(
@@ -2323,7 +2313,7 @@ pub mod mut_visit {
23232313
}) => {
23242314
vis.visit_id(id);
23252315
vis.visit_qself(qself);
2326-
vis.visit_path(path);
2316+
vis.visit_path(path, *id);
23272317
if let Some(rename) = rename {
23282318
vis.visit_ident(rename);
23292319
}
@@ -2333,7 +2323,7 @@ pub mod mut_visit {
23332323
}
23342324
ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
23352325
vis.visit_qself(qself);
2336-
vis.visit_path(prefix);
2326+
vis.visit_path(prefix, id);
23372327
if let Some(suffixes) = suffixes {
23382328
for (ident, rename) in suffixes {
23392329
vis.visit_ident(ident);
@@ -2384,7 +2374,7 @@ pub mod mut_visit {
23842374
}) => {
23852375
visitor.visit_id(id);
23862376
visitor.visit_qself(qself);
2387-
visitor.visit_path(path);
2377+
visitor.visit_path(path, *id);
23882378
if let Some(rename) = rename {
23892379
visitor.visit_ident(rename);
23902380
}
@@ -2399,7 +2389,7 @@ pub mod mut_visit {
23992389
body,
24002390
}) => {
24012391
visitor.visit_qself(qself);
2402-
visitor.visit_path(prefix);
2392+
visitor.visit_path(prefix, id);
24032393
if let Some(suffixes) = suffixes {
24042394
for (ident, rename) in suffixes {
24052395
visitor.visit_ident(ident);
@@ -2501,16 +2491,16 @@ pub mod mut_visit {
25012491
PatKind::Lit(e) => vis.visit_expr(e),
25022492
PatKind::TupleStruct(qself, path, elems) => {
25032493
vis.visit_qself(qself);
2504-
vis.visit_path(path);
2494+
vis.visit_path(path, *id);
25052495
visit_thin_vec(elems, |elem| vis.visit_pat(elem));
25062496
}
25072497
PatKind::Path(qself, path) => {
25082498
vis.visit_qself(qself);
2509-
vis.visit_path(path);
2499+
vis.visit_path(path, *id);
25102500
}
25112501
PatKind::Struct(qself, path, fields, _etc) => {
25122502
vis.visit_qself(qself);
2513-
vis.visit_path(path);
2503+
vis.visit_path(path, *id);
25142504
fields.flat_map_in_place(|field| vis.flat_map_pat_field(field));
25152505
}
25162506
PatKind::Box(inner) => vis.visit_pat(inner),
@@ -2537,7 +2527,7 @@ pub mod mut_visit {
25372527
) {
25382528
vis.visit_id(id);
25392529
vis.visit_qself(qself);
2540-
vis.visit_path(path);
2530+
vis.visit_path(path, *id);
25412531
}
25422532

25432533
pub fn walk_expr<T: MutVisitor>(
@@ -2674,7 +2664,7 @@ pub mod mut_visit {
26742664
ExprKind::Underscore => {}
26752665
ExprKind::Path(qself, path) => {
26762666
vis.visit_qself(qself);
2677-
vis.visit_path(path);
2667+
vis.visit_path(path, *id);
26782668
}
26792669
ExprKind::Break(label, expr) => {
26802670
visit_opt(label, |label| vis.visit_label(label));
@@ -2702,7 +2692,7 @@ pub mod mut_visit {
27022692
ExprKind::Struct(se) => {
27032693
let StructExpr { qself, path, fields, rest } = se.deref_mut();
27042694
vis.visit_qself(qself);
2705-
vis.visit_path(path);
2695+
vis.visit_path(path, *id);
27062696
fields.flat_map_in_place(|field| vis.flat_map_expr_field(field));
27072697
match rest {
27082698
StructRest::Base(expr) => vis.visit_expr(expr),
@@ -2788,7 +2778,7 @@ pub mod mut_visit {
27882778
VisibilityKind::Public | VisibilityKind::Inherited => {}
27892779
VisibilityKind::Restricted { path, id, shorthand: _ } => {
27902780
vis.visit_id(id);
2791-
vis.visit_path(path);
2781+
vis.visit_path(path, *id);
27922782
}
27932783
}
27942784
visit_lazy_tts(vis, tokens);

0 commit comments

Comments
 (0)