[PATCH] D112209: [clangd] IncludeCleaner: Complicated rules for enum usage

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 25 07:22:13 PDT 2021


sammccall added inline comments.


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:38
   bool VisitTagType(TagType *TT) {
+    // For enumerations we will require only the definition if it's present and
+    // the underlying type is not specified.
----------------
I don't understand this special case.
It seems you're trying to avoid requiring too many redecls of a referenced type. Why is this important, and different from e.g. Class?


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:93
 
+  // Require redeclarations only for definitions and only when the underlying
+  // type is specified.
----------------
This says what, rather than why.

Rather maybe:
``` 
Enums may be usefully forward-declared as *complete* types by specifying an underlying type.
In this case, the definition should see the declaration so they can be checked for compatibility.
```


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:96
+  bool VisitEnumDecl(EnumDecl *D) {
+    if (D != D->getDefinition() || !D->getIntegerTypeSourceInfo())
+      return false;
----------------
D->isThisDeclarationADefinition() is more idiomatic for the first part


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:98
+      return false;
+    for (const auto *Redecl : D->redecls())
+      Result.insert(Redecl->getLocation());
----------------
rather add(D) here?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112209



More information about the cfe-commits mailing list