hokein added inline comments.

================
Comment at: clang-tools-extra/include-cleaner/lib/AnalysisInternal.h:33
+/// Indicates the relation between the reference and the target.
+enum class RefType {
+  /// Target is explicit from the reference, e.g. function call.
----------------
I'm wondering what's our plan of supporting policy (different coding-style may 
have different decisions about which includes are used)?

IIUC, the RefType is part of the picture, providing fine-grained information 
about each reference, and the caller can make their decisions based on it?

Thinking about the `Implicit` type, I think cases like non-spelled constructor 
call, implicit conversion calls (maybe more?) fall into this type, if we 
support `Policy.Constructor`, and `Policy.Conversion`, how do we distinguish 
with these cases? We can probably do some ad-hoc checks on the `TargetDecl`, 
but I'm not sure that the tuple `<SourceLocation, TargetDecl, Ref>` will 
provide enough information to implement different policy .


================
Comment at: clang-tools-extra/include-cleaner/lib/AnalysisInternal.h:36
+  Explicit,
+  /// Target isn't spelled, e.g. default constructor call.
+  Implicit,
----------------
nit: `default constructor call` is vague -- `S s = S();` it is a default 
constructor call, but it is not implicit, maybe more specific by giving a 
simple example, like default constructor call in `S s;`?


================
Comment at: clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp:12
 #include "gtest/gtest.h"
+#include <map>
+#include <unordered_map>
----------------
nit: it seems unused.


================
Comment at: clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp:177
 TEST(WalkAST, ConstructExprs) {
-  testWalk("struct ^S {};", "S ^t;");
-  testWalk("struct S { ^S(int); };", "S ^t(42);");
+  testWalk("struct $implicit^S {};", "S ^t;");
+  testWalk("struct S { $explicit^S(int); };", "S ^t(42);");
----------------
maybe add this following case, I think it will mark the the constructor `S()` 
implicit. 

```
struct S { S(); };
S ^t;
```


================
Comment at: clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp:178
+  testWalk("struct $implicit^S {};", "S ^t;");
+  testWalk("struct S { $explicit^S(int); };", "S ^t(42);");
 }
----------------
nit: also  add an implicit case

```
S t = 42; 
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D135859

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

Reply via email to