Rollup merge of #133188 - maxcabrajac:walk_no_visit, r=petrochenkov

Add `visit` methods to ast nodes that already have `walk`s on ast visitors

Some `walk` functions are called directly, because there were no correspondent visit functions.

related to #128974 & #127615

r? `@petrochenkov`
This commit is contained in:
Matthias Krüger 2024-11-19 22:24:46 +01:00 committed by GitHub
commit 022bb9c3bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 16 deletions

View file

@ -330,6 +330,10 @@ pub trait MutVisitor: Sized {
fn visit_capture_by(&mut self, capture_by: &mut CaptureBy) { fn visit_capture_by(&mut self, capture_by: &mut CaptureBy) {
walk_capture_by(self, capture_by) walk_capture_by(self, capture_by)
} }
fn visit_fn_ret_ty(&mut self, fn_ret_ty: &mut FnRetTy) {
walk_fn_ret_ty(self, fn_ret_ty)
}
} }
/// Use a map-style function (`FnOnce(T) -> T`) to overwrite a `&mut T`. Useful /// Use a map-style function (`FnOnce(T) -> T`) to overwrite a `&mut T`. Useful
@ -609,7 +613,7 @@ fn walk_angle_bracketed_parameter_data<T: MutVisitor>(vis: &mut T, data: &mut An
fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut ParenthesizedArgs) { fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut ParenthesizedArgs) {
let ParenthesizedArgs { inputs, output, span, inputs_span } = args; let ParenthesizedArgs { inputs, output, span, inputs_span } = args;
visit_thin_vec(inputs, |input| vis.visit_ty(input)); visit_thin_vec(inputs, |input| vis.visit_ty(input));
walk_fn_ret_ty(vis, output); vis.visit_fn_ret_ty(output);
vis.visit_span(span); vis.visit_span(span);
vis.visit_span(inputs_span); vis.visit_span(inputs_span);
} }
@ -911,7 +915,7 @@ fn walk_fn<T: MutVisitor>(vis: &mut T, kind: FnKind<'_>) {
fn walk_fn_decl<T: MutVisitor>(vis: &mut T, decl: &mut P<FnDecl>) { fn walk_fn_decl<T: MutVisitor>(vis: &mut T, decl: &mut P<FnDecl>) {
let FnDecl { inputs, output } = decl.deref_mut(); let FnDecl { inputs, output } = decl.deref_mut();
inputs.flat_map_in_place(|param| vis.flat_map_param(param)); inputs.flat_map_in_place(|param| vis.flat_map_param(param));
walk_fn_ret_ty(vis, output); vis.visit_fn_ret_ty(output);
} }
fn walk_fn_ret_ty<T: MutVisitor>(vis: &mut T, fn_ret_ty: &mut FnRetTy) { fn walk_fn_ret_ty<T: MutVisitor>(vis: &mut T, fn_ret_ty: &mut FnRetTy) {

View file

@ -299,6 +299,12 @@ pub trait Visitor<'ast>: Sized {
fn visit_coroutine_kind(&mut self, _coroutine_kind: &'ast CoroutineKind) -> Self::Result { fn visit_coroutine_kind(&mut self, _coroutine_kind: &'ast CoroutineKind) -> Self::Result {
Self::Result::output() Self::Result::output()
} }
fn visit_fn_decl(&mut self, fn_decl: &'ast FnDecl) -> Self::Result {
walk_fn_decl(self, fn_decl)
}
fn visit_qself(&mut self, qs: &'ast Option<P<QSelf>>) -> Self::Result {
walk_qself(self, qs)
}
} }
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result { pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
@ -434,13 +440,13 @@ impl WalkItemKind for ItemKind {
body, body,
from_glob: _, from_glob: _,
}) => { }) => {
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
visit_opt!(visitor, visit_ident, rename); visit_opt!(visitor, visit_ident, rename);
visit_opt!(visitor, visit_block, body); visit_opt!(visitor, visit_block, body);
} }
ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => { ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
try_visit!(visitor.visit_path(prefix, id)); try_visit!(visitor.visit_path(prefix, id));
if let Some(suffixes) = suffixes { if let Some(suffixes) = suffixes {
for (ident, rename) in suffixes { for (ident, rename) in suffixes {
@ -518,10 +524,10 @@ pub fn walk_ty<'a, V: Visitor<'a>>(visitor: &mut V, typ: &'a Ty) -> V::Result {
let BareFnTy { safety: _, ext: _, generic_params, decl, decl_span: _ } = let BareFnTy { safety: _, ext: _, generic_params, decl, decl_span: _ } =
&**function_declaration; &**function_declaration;
walk_list!(visitor, visit_generic_param, generic_params); walk_list!(visitor, visit_generic_param, generic_params);
try_visit!(walk_fn_decl(visitor, decl)); try_visit!(visitor.visit_fn_decl(decl));
} }
TyKind::Path(maybe_qself, path) => { TyKind::Path(maybe_qself, path) => {
try_visit!(walk_qself(visitor, maybe_qself)); try_visit!(visitor.visit_qself(maybe_qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
} }
TyKind::Pat(ty, pat) => { TyKind::Pat(ty, pat) => {
@ -652,16 +658,16 @@ pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) -> V::Res
let Pat { id, kind, span: _, tokens: _ } = pattern; let Pat { id, kind, span: _, tokens: _ } = pattern;
match kind { match kind {
PatKind::TupleStruct(opt_qself, path, elems) => { PatKind::TupleStruct(opt_qself, path, elems) => {
try_visit!(walk_qself(visitor, opt_qself)); try_visit!(visitor.visit_qself(opt_qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
walk_list!(visitor, visit_pat, elems); walk_list!(visitor, visit_pat, elems);
} }
PatKind::Path(opt_qself, path) => { PatKind::Path(opt_qself, path) => {
try_visit!(walk_qself(visitor, opt_qself)); try_visit!(visitor.visit_qself(opt_qself));
try_visit!(visitor.visit_path(path, *id)) try_visit!(visitor.visit_path(path, *id))
} }
PatKind::Struct(opt_qself, path, fields, _rest) => { PatKind::Struct(opt_qself, path, fields, _rest) => {
try_visit!(walk_qself(visitor, opt_qself)); try_visit!(visitor.visit_qself(opt_qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
walk_list!(visitor, visit_pat_field, fields); walk_list!(visitor, visit_pat_field, fields);
} }
@ -846,13 +852,13 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>) -> V::Resu
// Identifier and visibility are visited as a part of the item. // Identifier and visibility are visited as a part of the item.
try_visit!(visitor.visit_fn_header(header)); try_visit!(visitor.visit_fn_header(header));
try_visit!(visitor.visit_generics(generics)); try_visit!(visitor.visit_generics(generics));
try_visit!(walk_fn_decl(visitor, decl)); try_visit!(visitor.visit_fn_decl(decl));
visit_opt!(visitor, visit_block, body); visit_opt!(visitor, visit_block, body);
} }
FnKind::Closure(binder, coroutine_kind, decl, body) => { FnKind::Closure(binder, coroutine_kind, decl, body) => {
try_visit!(visitor.visit_closure_binder(binder)); try_visit!(visitor.visit_closure_binder(binder));
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref()); visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
try_visit!(walk_fn_decl(visitor, decl)); try_visit!(visitor.visit_fn_decl(decl));
try_visit!(visitor.visit_expr(body)); try_visit!(visitor.visit_expr(body));
} }
} }
@ -902,13 +908,13 @@ impl WalkItemKind for AssocItemKind {
body, body,
from_glob: _, from_glob: _,
}) => { }) => {
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
visit_opt!(visitor, visit_ident, rename); visit_opt!(visitor, visit_ident, rename);
visit_opt!(visitor, visit_block, body); visit_opt!(visitor, visit_block, body);
} }
AssocItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => { AssocItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
try_visit!(visitor.visit_path(prefix, id)); try_visit!(visitor.visit_path(prefix, id));
if let Some(suffixes) = suffixes { if let Some(suffixes) = suffixes {
for (ident, rename) in suffixes { for (ident, rename) in suffixes {
@ -1023,7 +1029,7 @@ pub fn walk_inline_asm_sym<'a, V: Visitor<'a>>(
visitor: &mut V, visitor: &mut V,
InlineAsmSym { id, qself, path }: &'a InlineAsmSym, InlineAsmSym { id, qself, path }: &'a InlineAsmSym,
) -> V::Result { ) -> V::Result {
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
visitor.visit_path(path, *id) visitor.visit_path(path, *id)
} }
@ -1055,7 +1061,7 @@ pub fn walk_expr<'a, V: Visitor<'a>>(visitor: &mut V, expression: &'a Expr) -> V
} }
ExprKind::Struct(se) => { ExprKind::Struct(se) => {
let StructExpr { qself, path, fields, rest } = &**se; let StructExpr { qself, path, fields, rest } = &**se;
try_visit!(walk_qself(visitor, qself)); try_visit!(visitor.visit_qself(qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
walk_list!(visitor, visit_expr_field, fields); walk_list!(visitor, visit_expr_field, fields);
match rest { match rest {
@ -1164,7 +1170,7 @@ pub fn walk_expr<'a, V: Visitor<'a>>(visitor: &mut V, expression: &'a Expr) -> V
} }
ExprKind::Underscore => {} ExprKind::Underscore => {}
ExprKind::Path(maybe_qself, path) => { ExprKind::Path(maybe_qself, path) => {
try_visit!(walk_qself(visitor, maybe_qself)); try_visit!(visitor.visit_qself(maybe_qself));
try_visit!(visitor.visit_path(path, *id)); try_visit!(visitor.visit_path(path, *id));
} }
ExprKind::Break(opt_label, opt_expr) => { ExprKind::Break(opt_label, opt_expr) => {