[PATCH] D28462: clang-format: Add new style option AlignConsecutiveMacros
Daniel Jasper via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 27 22:32:12 PDT 2017
djasper added inline comments.
================
Comment at: lib/Format/WhitespaceManager.cpp:413
+
+ while (Param && !Param->is(tok::l_paren)) {
+ if (!Param->is(tok::identifier) && !Param->is(tok::comma))
----------------
enyquist wrote:
> djasper wrote:
> > I think you should be able to use Current.MatchingParen here.
> Hmm, I couldn't make this work... I just replaced this line with
>
> while (Param && Param != Current->MatchingParen)
>
> But it must not be doing what I think it's doing, since it made some tests fail.
> Mind you, my C-brain might be taking over here, please let me know if I'm using MatchingParen incorrectly
You shouldn't need a while loop. Just:
if (!Current->MatchingParen || !Current->MatchingParen->Previous)
return false;
Param = Param->MatchingParen->Previous;
And with that, I think you can simplify all these methods a bit:
static bool endsPPIdentifier(const FormatToken *Current) {
if (!Current->Next || Current->Next->SpacesRequiredBefore == 0)
return false;
// If Current is a "(", skip past the parameter list.
if (Current->is(tok::r_paren)) {
if (!Current->MatchingParen || !Current->MatchingParen->Previous)
return false;
Current = Current->MatchingParen->Previous;
}
const FormatToken *Keyword = Current->Previous;
if (!Keyword || !Keyword->is(tok::pp_define))
return false;
return Current->is(tok::identifier);
}
Does that work? If so, I'd even suggest inlining this code directly into the lambda instead of pulling out a function.
================
Comment at: lib/Format/WhitespaceManager.cpp:401
+ return Current->is(tok::identifier) && Current->Next &&
+ Current->Next->SpacesRequiredBefore == SpacesRequiredBefore;
+}
----------------
Note that this is comparing an unsigned with a bool, which might not work as you expect. And especially, there are tokens for which we set SpacesRequiredBefore to 2. Also I wonder whether we should check the SpacesRequiredBefore of the r_paren in a function like macro, i.e. in
#define a(x) (x)
We should check that a space is required between "a(x)" and "(x)". Please take a look at my longer code snippet below where I am proposing an alternative solution.
https://reviews.llvm.org/D28462
More information about the cfe-commits
mailing list