[PATCH] D71842: Allow newlines in AST Matchers in clang-query files

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 24 10:19:54 PST 2019


aaron.ballman added inline comments.


================
Comment at: clang-tools-extra/clang-query/Query.cpp:106
+      Source.split(Lines, "\n");
+      auto firstLine = Lines[0];
+      Lines.erase(Lines.begin(), Lines.begin() + 1);
----------------
`firstLine` should be `FirstLine` and I have a slight preference for `StringRef` instead of `auto` (but don't insist because `Lines` is so nearby and clear).


================
Comment at: clang-tools-extra/clang-query/Query.cpp:111
+      }
+      int maxLength = firstLine.size();
       std::string prefixText = "Matcher: ";
----------------
`MaxLength` and perhaps this type should be `unsigned` or `size_t` rather than `int` to avoid the unnecessary type conversion?


================
Comment at: clang-tools-extra/clang-query/Query.cpp:112
+      int maxLength = firstLine.size();
       std::string prefixText = "Matcher: ";
+      OS << "\n  " << prefixText << firstLine;
----------------
Oh, I see the existing text is already inconsistent with naming conventions. You can ignore the renaming comments if you want -- we can always fix up the names post-commit -- or you can fix up this name (which is the only oddball in the file).


================
Comment at: clang-tools-extra/clang-query/QueryParser.cpp:30
+  Line = Line.drop_while([this](char c) {
+    // Don't trim newlines
+    return StringRef(" \t\v\f\r").contains(c);
----------------
Comment missing a trailing full stop.


================
Comment at: clang-tools-extra/clang-query/QueryParser.cpp:132
+  StringRef Extra = Line;
+  auto ExtraTrimmed = Extra.drop_while(
+      [](char c) { return StringRef(" \t\v\f\r").contains(c); });
----------------
Definitely prefer using `StringRef` here -- I had no idea `drop_while()` returned `this`.


================
Comment at: clang-tools-extra/clang-query/QueryParser.cpp:140
+  else {
+    auto TrailingWord = lexWord();
+    if (TrailingWord.front() == '#') {
----------------
`auto` -> `StringRef`


================
Comment at: clang-tools-extra/clang-query/QueryParser.cpp:243-244
 
-    return new LetQuery(Name, Value);
+    auto Q = new LetQuery(Name, Value);
+    Q->RemainingContent = Line;
+    return Q;
----------------
Would it make more sense to have `Query` with another constructor to hold the remaining content, and then thread that through `LetQuery`, `MatchQuery`, etc? Whether there is remaining content or not seems like a pretty important property of the query, so it seems reasonable to let people construct with that information rather than set it after the fact.

If not, these should be `auto *` rather than deducing the pointer.


================
Comment at: clang/lib/ASTMatchers/Dynamic/Parser.cpp:301
+    Code = Code.drop_while([this](char c) {
+      // Don't trim newlines
+      return StringRef(" \t\v\f\r").contains(c);
----------------
Add a full stop to the comment.


================
Comment at: clang/lib/ASTMatchers/Dynamic/Parser.cpp:361
+        << "NewLine";
+    ;
+    return false;
----------------
Spurious semi-colon?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71842





More information about the cfe-commits mailing list