Skip to content

Commit 628b7d4

Browse files
committed
Unify {visit,walk}_path
1 parent cfda402 commit 628b7d4

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
@@ -205,7 +205,6 @@ macro_rules! make_ast_visitor {
205205
make_visit!{MacroDef; visit_macro_def, walk_macro_def}
206206
make_visit!{MetaItem; visit_meta_item, walk_meta_item}
207207
make_visit!{MetaItemInner; visit_meta_list_item, walk_meta_list_item}
208-
make_visit!{Path; visit_path, walk_path}
209208
make_visit!{PreciseCapturingArg; visit_precise_capturing_arg, walk_precise_capturing_arg}
210209

211210
fn flat_map_foreign_item(&mut self, ni: P<ForeignItem>) -> SmallVec<[P<ForeignItem>; 1]> {
@@ -287,7 +286,6 @@ macro_rules! make_ast_visitor {
287286
make_visit!{ForeignItem; visit_foreign_item, walk_item}
288287
make_visit!{GenericParam; visit_generic_param, walk_generic_param}
289288
make_visit!{Item; visit_item, walk_item}
290-
make_visit!{Path, _ id: NodeId; visit_path, walk_path}
291289
make_visit!{Stmt; visit_stmt, walk_stmt}
292290

293291
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -342,6 +340,7 @@ macro_rules! make_ast_visitor {
342340
make_visit!{Param; visit_param, walk_param}
343341
make_visit!{ParenthesizedArgs; visit_parenthesized_parameter_data, walk_parenthesized_parameter_data}
344342
make_visit!{PatField; visit_pat_field, walk_pat_field}
343+
make_visit!{Path, _ id: NodeId; visit_path, walk_path}
345344
make_visit!{PathSegment; visit_path_segment, walk_path_segment}
346345
make_visit!{PolyTraitRef; visit_poly_trait_ref, walk_poly_trait_ref}
347346
make_visit!{TraitRef; visit_trait_ref, walk_trait_ref}
@@ -692,6 +691,17 @@ macro_rules! make_ast_visitor {
692691
return_result!(V)
693692
}
694693

694+
pub fn walk_path<$($lt,)? V: $trait$(<$lt>)?>(
695+
vis: &mut V,
696+
path: ref_t!(Path)
697+
) -> result!(V) {
698+
let Path { span, segments, tokens } = path;
699+
visit_list!(vis, visit_path_segment, segments);
700+
visit_lazy_tts!(vis, tokens);
701+
try_v!(visit_span!(vis, span));
702+
return_result!(V)
703+
}
704+
695705
pub fn walk_path_segment<$($lt,)? V: $trait$(<$lt>)?>(
696706
vis: &mut V,
697707
segment: ref_t!(PathSegment)
@@ -720,13 +730,7 @@ macro_rules! make_ast_visitor {
720730
id: NodeId,
721731
) -> result!(V) {
722732
let UseTree { prefix, kind, span } = use_tree;
723-
// TODO: Remove this after unifying visit_path
724-
try_v!(macro_if!{$($mut)? {{
725-
let _ = id;
726-
vis.visit_path(prefix)
727-
}} else {
728-
vis.visit_path(prefix, id)
729-
}});
733+
try_v!(vis.visit_path(prefix, id));
730734
match kind {
731735
UseTreeKind::Simple(rename) => {
732736
// The extra IDs are handled during AST lowering.
@@ -1120,12 +1124,6 @@ pub mod visit {
11201124
V::Result::output()
11211125
}
11221126

1123-
pub fn walk_path<'a, V: Visitor<'a>>(visitor: &mut V, path: &'a Path) -> V::Result {
1124-
let Path { span: _, segments, tokens: _ } = path;
1125-
walk_list!(visitor, visit_path_segment, segments);
1126-
V::Result::output()
1127-
}
1128-
11291127
pub fn walk_generic_arg<'a, V>(visitor: &mut V, generic_arg: &'a GenericArg) -> V::Result
11301128
where
11311129
V: Visitor<'a>,
@@ -1808,7 +1806,7 @@ pub mod mut_visit {
18081806
}
18091807
TyKind::Path(qself, path) => {
18101808
vis.visit_qself(qself);
1811-
vis.visit_path(path);
1809+
vis.visit_path(path, *id);
18121810
}
18131811
TyKind::Array(ty, length) => {
18141812
vis.visit_ty(ty);
@@ -1842,14 +1840,6 @@ pub mod mut_visit {
18421840
smallvec![variant]
18431841
}
18441842

1845-
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens }: &mut Path) {
1846-
for segment in segments {
1847-
vis.visit_path_segment(segment);
1848-
}
1849-
visit_lazy_tts(vis, tokens);
1850-
vis.visit_span(span);
1851-
}
1852-
18531843
fn walk_generic_arg<T: MutVisitor>(vis: &mut T, arg: &mut GenericArg) {
18541844
match arg {
18551845
GenericArg::Lifetime(lt) => vis.visit_lifetime(lt, LifetimeCtxt::GenericArg),
@@ -1866,7 +1856,7 @@ pub mod mut_visit {
18661856
item: AttrItem { unsafety: _, path, args, tokens },
18671857
tokens: attr_tokens,
18681858
} = &mut **normal;
1869-
vis.visit_path(path);
1859+
vis.visit_path(path, DUMMY_NODE_ID);
18701860
visit_attr_args(vis, args);
18711861
visit_lazy_tts(vis, tokens);
18721862
visit_lazy_tts(vis, attr_tokens);
@@ -1878,7 +1868,7 @@ pub mod mut_visit {
18781868

18791869
fn walk_mac<T: MutVisitor>(vis: &mut T, mac: &mut MacCall) {
18801870
let MacCall { path, args } = mac;
1881-
vis.visit_path(path);
1871+
vis.visit_path(path, DUMMY_NODE_ID);
18821872
visit_delim_args(vis, args);
18831873
}
18841874

@@ -2049,11 +2039,11 @@ pub mod mut_visit {
20492039
token::NtLiteral(expr) => vis.visit_expr(expr),
20502040
token::NtMeta(item) => {
20512041
let AttrItem { unsafety: _, path, args, tokens } = item.deref_mut();
2052-
vis.visit_path(path);
2042+
vis.visit_path(path, DUMMY_NODE_ID);
20532043
visit_attr_args(vis, args);
20542044
visit_lazy_tts(vis, tokens);
20552045
}
2056-
token::NtPath(path) => vis.visit_path(path),
2046+
token::NtPath(path) => vis.visit_path(path, DUMMY_NODE_ID),
20572047
token::NtVis(visib) => vis.visit_vis(visib),
20582048
}
20592049
}
@@ -2143,7 +2133,7 @@ pub mod mut_visit {
21432133
}
21442134
PreciseCapturingArg::Arg(path, id) => {
21452135
vis.visit_id(id);
2146-
vis.visit_path(path);
2136+
vis.visit_path(path, *id);
21472137
}
21482138
}
21492139
}
@@ -2184,7 +2174,7 @@ pub mod mut_visit {
21842174

21852175
fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut TraitRef) {
21862176
vis.visit_id(ref_id);
2187-
vis.visit_path(path);
2177+
vis.visit_path(path, *ref_id);
21882178
}
21892179

21902180
pub fn walk_flat_map_field_def<T: MutVisitor>(
@@ -2317,7 +2307,7 @@ pub mod mut_visit {
23172307
}) => {
23182308
vis.visit_id(id);
23192309
vis.visit_qself(qself);
2320-
vis.visit_path(path);
2310+
vis.visit_path(path, *id);
23212311
if let Some(rename) = rename {
23222312
vis.visit_ident(rename);
23232313
}
@@ -2327,7 +2317,7 @@ pub mod mut_visit {
23272317
}
23282318
ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
23292319
vis.visit_qself(qself);
2330-
vis.visit_path(prefix);
2320+
vis.visit_path(prefix, id);
23312321
if let Some(suffixes) = suffixes {
23322322
for (ident, rename) in suffixes {
23332323
vis.visit_ident(ident);
@@ -2378,7 +2368,7 @@ pub mod mut_visit {
23782368
}) => {
23792369
visitor.visit_id(id);
23802370
visitor.visit_qself(qself);
2381-
visitor.visit_path(path);
2371+
visitor.visit_path(path, *id);
23822372
if let Some(rename) = rename {
23832373
visitor.visit_ident(rename);
23842374
}
@@ -2393,7 +2383,7 @@ pub mod mut_visit {
23932383
body,
23942384
}) => {
23952385
visitor.visit_qself(qself);
2396-
visitor.visit_path(prefix);
2386+
visitor.visit_path(prefix, id);
23972387
if let Some(suffixes) = suffixes {
23982388
for (ident, rename) in suffixes {
23992389
visitor.visit_ident(ident);
@@ -2495,16 +2485,16 @@ pub mod mut_visit {
24952485
PatKind::Lit(e) => vis.visit_expr(e),
24962486
PatKind::TupleStruct(qself, path, elems) => {
24972487
vis.visit_qself(qself);
2498-
vis.visit_path(path);
2488+
vis.visit_path(path, *id);
24992489
visit_thin_vec(elems, |elem| vis.visit_pat(elem));
25002490
}
25012491
PatKind::Path(qself, path) => {
25022492
vis.visit_qself(qself);
2503-
vis.visit_path(path);
2493+
vis.visit_path(path, *id);
25042494
}
25052495
PatKind::Struct(qself, path, fields, _etc) => {
25062496
vis.visit_qself(qself);
2507-
vis.visit_path(path);
2497+
vis.visit_path(path, *id);
25082498
fields.flat_map_in_place(|field| vis.flat_map_pat_field(field));
25092499
}
25102500
PatKind::Box(inner) => vis.visit_pat(inner),
@@ -2531,7 +2521,7 @@ pub mod mut_visit {
25312521
) {
25322522
vis.visit_id(id);
25332523
vis.visit_qself(qself);
2534-
vis.visit_path(path);
2524+
vis.visit_path(path, *id);
25352525
}
25362526

25372527
pub fn walk_expr<T: MutVisitor>(
@@ -2668,7 +2658,7 @@ pub mod mut_visit {
26682658
ExprKind::Underscore => {}
26692659
ExprKind::Path(qself, path) => {
26702660
vis.visit_qself(qself);
2671-
vis.visit_path(path);
2661+
vis.visit_path(path, *id);
26722662
}
26732663
ExprKind::Break(label, expr) => {
26742664
visit_opt(label, |label| vis.visit_label(label));
@@ -2696,7 +2686,7 @@ pub mod mut_visit {
26962686
ExprKind::Struct(se) => {
26972687
let StructExpr { qself, path, fields, rest } = se.deref_mut();
26982688
vis.visit_qself(qself);
2699-
vis.visit_path(path);
2689+
vis.visit_path(path, *id);
27002690
fields.flat_map_in_place(|field| vis.flat_map_expr_field(field));
27012691
match rest {
27022692
StructRest::Base(expr) => vis.visit_expr(expr),
@@ -2782,7 +2772,7 @@ pub mod mut_visit {
27822772
VisibilityKind::Public | VisibilityKind::Inherited => {}
27832773
VisibilityKind::Restricted { path, id, shorthand: _ } => {
27842774
vis.visit_id(id);
2785-
vis.visit_path(path);
2775+
vis.visit_path(path, *id);
27862776
}
27872777
}
27882778
visit_lazy_tts(vis, tokens);

0 commit comments

Comments
 (0)