[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

Marek Kurdej via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 25 00:17:39 PST 2022


curdeius requested changes to this revision.
curdeius added a comment.
This revision now requires changes to proceed.

Last nits, apart from this clean up, I'm OK.



================
Comment at: clang/lib/Format/FormatToken.h:125
+/// Operators that can follow a C variable.
+static const std::set<clang::tok::TokenKind> C_OperatorsFollowingVar = {
+    tok::l_square,     tok::r_square,
----------------
HazardyKnusperkeks wrote:
> And maybe choose a different container: https://llvm.org/docs/ProgrammersManual.html#set-like-containers-std-set-smallset-setvector-etc
Not done it seems.
Please rename and use a different type. Maybe `ImmutableSet`? Or just a sorted `std::vector`?


================
Comment at: clang/lib/Format/UnwrappedLineFormatter.cpp:109
+        return true;
+      // Handle Qt signals
+      else if ((RootToken.isOneOf(Keywords.kw_signals, Keywords.kw_qsignals) &&
----------------
Nit here and elsewhere: full stop at the end of comments.


================
Comment at: clang/lib/Format/UnwrappedLineFormatter.cpp:113
+        return true;
+      // Handle malformed access specifier i.e. 'private' without trailing ':'
+      else if ((RootToken.isAccessSpecifier(false) &&
----------------



================
Comment at: clang/lib/Format/UnwrappedLineFormatter.cpp:116
+                (!RootToken.Next ||
+                 (!C_OperatorsFollowingVar.count(
+                      RootToken.Next->Tok.getKind()) &&
----------------
Please use `contains` instead of `count` if using `ImmutableSet`.


================
Comment at: clang/lib/Format/UnwrappedLineParser.cpp:2497
 void UnwrappedLineParser::parseAccessSpecifier() {
+  auto *AccessSpecifierCandidate = FormatTok;
   nextToken();
----------------



================
Comment at: clang/lib/Format/UnwrappedLineParser.cpp:2506-2512
+    // is not a variable name or namespacename
+  } else if (!C_OperatorsFollowingVar.count(FormatTok->Tok.getKind()) &&
+             !FormatTok->Tok.is(tok::coloncolon))
+    addUnwrappedLine();
+  // consider the accessSpecifier to be a C identifier
+  else if (AccessSpecifierCandidate)
+    AccessSpecifierCandidate->Tok.setKind(tok::identifier);
----------------



================
Comment at: clang/lib/Format/UnwrappedLineParser.cpp:2507
+    // is not a variable name or namespacename
+  } else if (!C_OperatorsFollowingVar.count(FormatTok->Tok.getKind()) &&
+             !FormatTok->Tok.is(tok::coloncolon))
----------------
Ditto. Use `contains`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117416/new/

https://reviews.llvm.org/D117416



More information about the cfe-commits mailing list