gribozavr2 added a comment.

I feel uneasy about adding this code without tests. Could we maybe port the 
function parameter list to use this infrastructure, and then add tests that 
exercise `getElementsAsNodesAndDelimiters`?



================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:194
 
+enum TerminationKind {
+  Terminated,
----------------
`enum class`?

Also, I think it should be renamed to `ListTerminationKind` or moved into 
`List` as a nested type.


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:197
+  MaybeTerminated,
+  Separated,
+};
----------------
Add a "WithoutDelimiters" case as well?


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:200
+
+class List : public Tree {
+  template <typename Element> struct ElementAndDelimiter {
----------------
Could you add a doc comment?


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:229
+  /// elements to empty or one-element lists.
+  clang::tok::TokenKind getDelimiterTokenKind();
+
----------------
Should we change this function to return optional to allow representing lists 
that don't have any delimiters?


================
Comment at: clang/include/clang/Tooling/Syntax/Tree.h:232
+  TerminationKind getTerminationKind();
+  bool canBeEmpty();
+};
----------------
Please add a doc comment that emphasizes that any list can be empty when the 
syntax tree represents code with syntax errors.


================
Comment at: clang/lib/Tooling/Syntax/Tree.cpp:277
+  if (!firstChild()) {
+    assert(canBeEmpty());
+    return {};
----------------
This assert is only correct for valid code. When a syntax tree represents 
invalid code, any list can be empty.


================
Comment at: clang/lib/Tooling/Syntax/Tree.cpp:293
+      children.push_back(
+          {elementWithoutDelimiter, llvm::cast<syntax::Leaf>(C)});
+      elementWithoutDelimiter = nullptr;
----------------



================
Comment at: clang/lib/Tooling/Syntax/Tree.cpp:298
+    default:
+      llvm_unreachable("A list has only elements or delimiters.");
+    }
----------------



================
Comment at: clang/lib/Tooling/Syntax/Tree.cpp:368
+clang::tok::TokenKind syntax::List::getDelimiterTokenKind() {
+  return clang::tok::TokenKind::unknown;
+}
----------------
I think the eventual implementation should switch on the syntax tree node kind 
and return the appropriate information. Right now, there are no subclasses of 
List, to these methods should be implemented as llvm_unreachable.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D85295

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to