[PATCH] D69764: [clang-format] Add East/West Const fixer capability

Marek Kurdej via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 27 16:56:20 PDT 2020


curdeius added inline comments.


================
Comment at: clang/docs/ReleaseNotes.rst:359
 
+- Option ``ConstPlacement`` has been added auto-arrange the positioning of const
+  in variable and parameter declarations to be ``Right/East`` const or ``Left/West`` 
----------------
It sounds strange as if you wanted to write "[in order] to auto-arrange".


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:83
+  // Change `const int` to be `int const`.
+  std::string NewType;
+  NewType += Second->TokenText;
----------------
Nit: `NewType` may be misleading when reading. Why not `NewText` as above?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:130
+
+static void swapFourTokens(const SourceManager &SourceMgr,
+                                 tooling::Replacements &Fixes,
----------------
These functions seem a bit ugly... and very specific. And they both look like rotate left/right. Couldn't it be a single function taking a range/span/collection of FormatTokens?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:136
+                                 const FormatToken *Fourth, 
+                                 bool West) {
+  // e.g. Change `const unsigned long long` to be `unsigned long long const`.
----------------
Nit: West doesn't seem appropriate as a name at the level of this function as you rather don't move elements west/east but left/right. Of course, that applies only if you share my view that it's sort of rotate algorithm.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:171
+    return false;
+  return (Tok->isSimpleTypeSpecifier() ||
+          Tok->isOneOf(tok::kw_volatile, tok::kw_auto));
----------------
Parentheses seem to be unnecessary.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:171
+    return false;
+  return (Tok->isSimpleTypeSpecifier() ||
+          Tok->isOneOf(tok::kw_volatile, tok::kw_auto));
----------------
curdeius wrote:
> Parentheses seem to be unnecessary.
Stupid question, are both const and restrict handled here?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:175
+
+// If a token is an identifier and its upper case it could
+// be a macro and hence we need to be able to ignore it
----------------
Typo: its -> it's.
Missing comma before "it could".


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:176
+// If a token is an identifier and its upper case it could
+// be a macro and hence we need to be able to ignore it
+static bool isPossibleMacro(const FormatToken *Tok)
----------------
Missing dot at the end.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:195
+                                FormatToken *Tok) {
+  // We only need to think about streams that begin with const.
+  if (!Tok->is(tok::kw_const)) {
----------------
Why? What about `unsigned const int`?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:208
+
+  if (isCVQualifierOrType(Tok->Next) && isCVQualifierOrType(Tok->Next->Next) && isCVQualifierOrType(Tok->Next->Next->Next)) {
+    swapFourTokens(SourceMgr, Fixes, Tok, Tok->Next, Tok->Next->Next, Tok->Next->Next->Next,
----------------
I think that this code asks for a cleanup. And if we needed to look for five tokens...?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:213
+  }
+  if (isCVQualifierOrType(Tok->Next) && Tok->Next->Next &&
+      isCVQualifierOrType(Tok->Next->Next)) {
----------------
Shouldn't it be `else if`?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:223
+             Tok->Next->is(tok::kw_auto)) {
+    // The basic case  `const int` -> `int const`
+    swapTwoTokens(SourceMgr, Fixes, Tok, Tok->Next);
----------------
Nits: double space, missing ending dot.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:225
+    swapTwoTokens(SourceMgr, Fixes, Tok, Tok->Next);
+
+  } else if (Tok->startsSequence(tok::kw_const, tok::identifier,
----------------
Nit: unnecessary blank line.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:228
+                                 TT_TemplateOpener)) {
+    // Read from to the end of the TemplateOpener to
+    // TemplateCloser const ArrayRef<int> a; const ArrayRef<int> &a;
----------------
"from to the end"?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:244
+      removeToken(SourceMgr, Fixes, Tok);
+      //return EndTemplate->Next;
+      return Tok;
----------------
Forgotten remnants?


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:383
+    while (Tok && Tok != Last) {
+      if (!Tok->Next) {
+        break;
----------------
It's a matter of taste, but this condition could be moved into the while condition above.


================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:387
+      if (Tok->is(tok::comment)) {
+        Tok = Tok->Next;
+        continue;
----------------
You would avoid repetition of this statement if you changed while loop into for loop.


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

https://reviews.llvm.org/D69764





More information about the cfe-commits mailing list