[PATCH] D88299: [clang-format] Add MacroUnexpander.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 11 10:46:59 PDT 2022
sammccall accepted this revision.
sammccall added a comment.
This revision is now accepted and ready to land.
Herald added a project: All.
OK, I think we've reached the point where:
- the impact is very clear, this solves a whole class of clang-format's biggest problems
- the idea clearly works (there are good tests)
- the implementation is very well-documented: I can't really improve my understanding further by asking for things to be better explained
- I can't make clear suggestions to simplify - you've applied all my low-level suggestions and my high-level understanding is poor
- I still don't feel like I really understand how it works, but that's not really different than the other big pieces of clang-format
So I think all that's left to do here is ship it. It makes me uneasy that the core of clang-format is functionally magic (could anyone other than you and Daniel reproduce it after nuclear apocalypse?) but this doesn't really change that state.
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:53
+ assert(State != Finalized);
+ LLVM_DEBUG(llvm::dbgs() << "Unex: new line...\n");
+ forEachToken(Line, [&](FormatToken *Token, FormatToken *Parent, bool First) {
----------------
if you want to keep these LLVM_DEBUGs, maybe this should be "MCR" or so instead of "unex"?
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:62
+ finalize();
+ UnwrappedLine Final =
+ createUnwrappedLine(*Result.Tokens.front()->Children.front(), Level);
----------------
you might want an assertion that Result has one token with one child (it's pretty obvious in finalize() but less so here)
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:98
+ ActiveExpansions.size() != Token->MacroCtx->ExpandedFrom.size())) {
+ if (reconstructActiveCallUntil(Token))
+ First = true;
----------------
nit: I think this would be clearer by naming the result:
`if (bool PassedMacroComma = reconstruct...)`
(because it's not clear from the name what the function returns, and documenting it would help only a little)
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:108
+ appendToken(Token);
+ } else {
+ // Otherwise add the reconstructed equivalent of the token.
----------------
(this is the else branch of a negated condition, consider swapping the branches to avoid double-negative)
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:114
+
+// Adjusts the stack of active reconstructed liens so we're ready to push
+// tokens. The tokens to be pushed are children of ExpandedParent in the
----------------
liens -> lines
(unless there's a *really* weird metaphor going on here!)
================
Comment at: clang/lib/Format/MacroCallReconstructor.cpp:232
+ } else if (!currentLine()->Tokens.empty()) {
+ // FIXME:assert(!currentLine()->Tokens.empty());
+ // Map all hidden tokens to the last visible token in the output.
----------------
this FIXME looks obsolete?
================
Comment at: clang/lib/Format/Macros.h:190
+ /// that needs to be processed to finish an macro call.
+ /// Only when \c finished() is true, \c getResult() can be called to retrieve
+ /// the resulting \c UnwrappedLine.
----------------
nit: getResult()->takeResult() in comment now
================
Comment at: clang/lib/Format/Macros.h:201
+ /// Generally, this line tries to have the same structure as the expanded,
+ /// formatted unwrapped lines handed in via \c addLine(), with the exception
+ /// that for multiple top-level lines, each subsequent line will be the
----------------
you could give this a name like "tail form", and then refer to it in docs of MacroCallReconstructor::Result, in MacroCallReconstructor.cpp:482, etc.
Up to you.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88299/new/
https://reviews.llvm.org/D88299
More information about the cfe-commits
mailing list