[PATCH] D128457: [clangd] Add new IncludeType to IncludeHeaderWithReferences

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 30 08:13:49 PST 2022


kadircet added inline comments.


================
Comment at: clang-tools-extra/clangd/Headers.cpp:237
   for (const auto &Include : Includes)
-    Headers.push_back(Include.IncludeHeader);
+    if (Include.SupportedDirectives & clang::clangd::Symbol::Include)
+      Headers.push_back(Include.IncludeHeader);
----------------
i don't think this is the right layer to perform such a filtering, we should instead be returning everything here, both the header and the directive to use.

later on inside CodeComplete.cpp, there's `headerToInsertIfAllowed` for now we can drop headers to be #import'd there, with a fixme saying propagation into other layers.
similarly IncludeFixer should drop these inside `fixesForSymbols` for now.


================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:809
 void SymbolCollector::setIncludeLocation(const Symbol &S, SourceLocation Loc) {
   if (Opts.CollectIncludePath)
+    if (shouldCollectIncludePath(S.SymInfo.Kind) != Symbol::Invalid)
----------------
nit: while here combine with the condition above


================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:843
   llvm::SmallString<128> QName;
   for (const auto &Entry : IncludeFiles) {
     if (const Symbol *S = Symbols.find(Entry.first)) {
----------------
nit: feel free to rewrite as `const auto &[SID, FID] : IncludeFiles`, as you seem to be referring to `Entry.second` a bunch.


================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:870
+        if ((CollectDirectives & Symbol::Import) != 0) {
+          auto It = FileToContainsImportsOrObjC.find(Entry.second);
+          if (It == FileToContainsImportsOrObjC.end())
----------------
nit:
```
if ((CollectDirectives & Symbol::Import) != 0) {
     auto [It, Inserted] = FileToContainsImportsOrObjC.try_emplace(Entry.second);
     if(Inserted)
       It->second = FilesWithObjCConstructs.contains(Entry.second) || fileContainsImports(Entry.second,ASTCtx->getSourceManager());
     if(It->second) Directives |= Symbol::Import;
}
```


================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:877
+                                              ASTCtx->getSourceManager()) ||
+                              FilesWithObjCConstructs.contains(Entry.second)})
+                     .first;
----------------
i'd first do this check, as it doesn't require parsing file contents


================
Comment at: clang-tools-extra/clangd/index/SymbolCollector.cpp:966
   setIncludeLocation(S, ND.getLocation());
+  if (Opts.CollectIncludePath && S.SymInfo.Lang == index::SymbolLanguage::ObjC)
+    FilesWithObjCConstructs.insert(FID);
----------------
let's drop the `Opts.CollectIncludePath` check. it doesn't really align with the model of "we're just marking files that contain objc constructs"


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128457



More information about the cfe-commits mailing list