[PATCH] D38835: [refactor] selection: new CodeRangeASTSelection represents a set of selected consecutive statements

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 12 04:42:25 PDT 2017


hokein added inline comments.


================
Comment at: include/clang/Tooling/Refactoring/ASTSelection.h:74
+/// An AST selection value that corresponds to a selection of a set of
+/// statements that belong to one body of code (like one function).
+///
----------------
I see all your tests are for function body,  does it support other body, i.e. "global namespace", "compound statement"? 

if yes, how about adding more test cases to cover it.

```
// variable in global namespace
int a; // select int.
``` 

```
void f() {
   {
       int a;  // select a.
   }
}
```


================
Comment at: include/clang/Tooling/Refactoring/ASTSelection.h:95
+/// \c SelectedASTNode tree and should not outlive it.
+struct CodeRangeASTSelection {
+  CodeRangeASTSelection(CodeRangeASTSelection &&) = default;
----------------
nit:  instead of a structure, this feels more like a `class`.


================
Comment at: lib/Tooling/Refactoring/ASTSelection.cpp:247
+namespace {
+
+struct SelectedNodeWithParents {
----------------
nit: remove the empty line.


================
Comment at: unittests/Tooling/ASTSelectionTest.cpp:685
+)";
+  // Empty range is an invalid code range.
+  findSelectedASTNodesWithRange(
----------------
I think "No selection range" is more precise -- you are passing `None` parameter to the function.

For `empty range`, it should be something like `FileRange{{2, 2}, {2, 2}}`, we can also add a test for it.


================
Comment at: unittests/Tooling/ASTSelectionTest.cpp:688
+      Source, {2, 2}, None,
+      [](SourceRange SelectionRange, Optional<SelectedASTNode> Node) {
+        EXPECT_TRUE(Node);
----------------
I'm a bit confused here, if the selection range is none/empty,  shouldn't `SelectedASTNode` be empty?

If this behavior is intended, I'd suggest documenting it in `findSelectedASTNodesWithRange`.


================
Comment at: unittests/Tooling/ASTSelectionTest.cpp:718
+            isa<TranslationUnitDecl>(Parents[0].get().Node.get<Decl>()));
+        EXPECT_TRUE(isa<FunctionDecl>(Parents[1].get().Node.get<Decl>()));
+        EXPECT_TRUE(isa<CompoundStmt>(Parents[2].get().Node.get<Stmt>()));
----------------
nit: would be clearer to add a comment indicating the corresponding code, the same below.

like

```
EXPECT_TRUE(...); // function f definition
EXPECT_TRUE(...); // function body of function f
```


Repository:
  rL LLVM

https://reviews.llvm.org/D38835





More information about the cfe-commits mailing list