Repository navigation
Unify AST Visitors with a macro like MIR Visitors - #128974
maxcabrajac wants to merge 82 commits into
Conversation
commented
Aug 11, 2024
|
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @lcnr (or someone else) some time within the next two weeks. Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (
|
This comment has been minimized.
This comment has been minimized.
commented
Aug 12, 2024
|
r? compiler |
commented
Aug 12, 2024
|
r? @cjgillot woops |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
left a comment
There was a problem hiding this comment.
Wow, that's some great work you did @maxcabrajac!
Please take this as an opportunity to simplify stuff. If some distinction has you make weird corner cases, don't hesitate to remove it. My comments are suggestions in this direction.
| make_visit!{P!(Local), visit_local, walk_local} | ||
| make_visit!{P!(Pat), visit_pat, walk_pat} | ||
| make_visit!{P!(Expr), visit_expr, walk_expr} | ||
| make_visit!{P!(Ty), visit_ty, walk_ty} | ||
| make_visit!{P!(Block), visit_block, walk_block} | ||
| make_visit!{P!(FnDecl), visit_fn_decl, walk_fn_decl} |
There was a problem hiding this comment.
Should we remove the P! from all these?
There was a problem hiding this comment.
I put these P! to maintain all function signatures the same, thus avoiding changes on implementers. I don't know why the original MutVisitor received &mut P<T> instead of &mut T for these types, but I just kept what was being done.
commented
Aug 27, 2024
|
I think it's better to do two passes. Do what can be done without changing the trait API, after that, change what is weird about their original implementation and change all implementers accordingly. What do you think about it? |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
6613670 to
2d751e6
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
commented
Oct 24, 2024
👍
I didn't look into much detail yet, just a general feeling (e.g. there are multiple layers of macros, a dozen of helper macros, etc). |
commented
Oct 24, 2024
|
☔ The latest upstream changes (presumably #132116) made this pull request unmergeable. Please resolve the merge conflicts. |
commented
Nov 7, 2024
|
@maxcabrajac any updates on this? thanks |
commented
Nov 7, 2024
|
Hi @Dylan-DPC! The motivation for doing it was functions like this: fn visit_expr(&mut self, expr: &mut P<ast::Expr>) {
match expr.kind {
ast::ExprKind::MacCall(_) => *expr = self.remove(expr.id).make_expr(),
_ => walk_expr(self, expr),
}
}In the code above the After removing the wrapper from fn visit_expr(&mut self, expr: &mut ast::Expr) {
match expr.kind {
ast::ExprKind::MacCall(_) => *expr = self.remove(expr.id).make_expr().into_inner(),
_ => walk_expr(self, expr),
}
}This reuses the previous allocation, but throws away the one But changing this requires a huge amount of other changes and thinking about whether each callee requires the wrapper or should also return an unwrapped All of this multiplied by the amount of structs that are wrapped in I still think removing the wrappers from the There are still other unrelated changes to do. I'll focus on them for now. =) |
commented
Feb 15, 2025
|
@maxcabrajac any updates on this? thanks |
|
IIRC, the last time I looked at this PR it was mostly ready for merging. Upd: cc "Remove P<> from visit_s in ast MutVisitor", it was not linked from this PR, so I forgot about it when writing the comment. |
commented
Apr 28, 2025
|
Closing due to inactivity. |
This is a PR to work on #127615