[PATCH] D136293: [IncludeCleaner] Add public API
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 25 14:15:54 PDT 2022
sammccall added inline comments.
================
Comment at: clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h:27
+ Symbol(Decl &D) : Storage(&D) {}
+ Symbol(tooling::stdlib::Symbol S) : Storage(S) {}
+
----------------
Doh, I was skimming and missed that you removed the `Location` concept and folded stdlib handling into `Symbol`.
`tooling::stdlib::Symbol` only captures top-level symbols, so we've thrown away the identity of the actual symbol being accessed. This is not a complete disaster, but I think it causes problems, and I think we should be very deliberate and consistent about what information we preserve vs throw away.
Some examples of how this might bite us:
- distinguishing between macros/decls is non-uniform (need to check separately for decl vs macro vs stdlib-decl vs stdlib-macro)
- can't treat different types of symbols e.g. constructors vs classes differently (you suggested elsewhere we could check the kind of targetdecl to implement external policies)
- can't treat nested classes differently (i.e. must treat `std::vector` and `decltype(myvec)::iterator` the same).
- can't print the name, e.g. the fixit hint for `auto x = TimePoint<>::min()` becomes `include header <chrono> for 'std::chrono::time_point'` instead of `include header <chrono> for 'std::chrono::time_point<...>::min()'`
- can't insert forward declarations with a code action (legal for c symbols)
- harder to understand/debug (is this an implicit reference to a copy constructor, move constructor, conversion operator, or the type itself? where *are* all the redecls? is this misclassified user code, such as a trait specialization)?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136293/new/
https://reviews.llvm.org/D136293
More information about the cfe-commits
mailing list