ilya-biryukov added a comment.

In https://reviews.llvm.org/D41823#970725, @hokein wrote:

> With this patch, the index-based code completion will not provide any 
> candidates for `ns1::MyClass::^` (as the index-based completion drops all  
> results from clang's completion engine), we need a way to combine symbols 
> from 3 sources (static index, dynamic index and clang's completion engine).


Given that index-based completion is still experimental I think it's still fine 
to address this in a follow-up change. (In order to keep both changes simpler 
and more focused).



================
Comment at: clangd/index/FileIndex.cpp:22
                                      llvm::ArrayRef<const Decl *> Decls) {
-  auto Collector = std::make_shared<SymbolCollector>();
+  auto CollectorOpts = SymbolCollector::Options();
+  CollectorOpts.IndexMainFiles = true;
----------------
NIT: why not `SymbolCollector::Options CollectorOpts`? It's seems more concise.

Or even `SymbolCollector::Options{/*IndexMainFiles=*/true}`; 
The last one does not play nicely with moving the fields of the struct around, 
though


================
Comment at: clangd/index/SymbolCollector.cpp:80
+                                    : decl(unless(isExpansionInMainFile())),
+                hasDeclContext(anyOf(namespaceDecl(), 
translationUnitDecl())))),
+            *D, *ASTCtx)
----------------
hokein wrote:
> These ast matchers seems to be relatively simple, maybe we can use the `Decl` 
> methods  to implement them at the moment. Or will we add more complex filters 
> in the future?
I second this. Also the code would probably be more readable without matchers 
in this particular example.


================
Comment at: clangd/index/SymbolCollector.cpp:86
+    // FIXME: Should we include the internal linkage symbols?
+    if (!ND->hasExternalFormalLinkage() || ND->isInAnonymousNamespace())
+      return true;
----------------
This should probably include changes from @hokein 's patch D41759.


================
Comment at: clangd/index/SymbolCollector.h:28
+  struct Options {
+    bool IndexMainFiles = false;
+  };
----------------
hokein wrote:
> We need documentation for the options.
Also, would naming it `OnlyMainFiles` make the intent of the option clearer?


================
Comment at: unittests/clangd/FileIndexTests.cpp:173
   M.update(Ctx, "f1",
-           build("f1", "class X { static int m1; int m2;};").getPointer());
+           build("f1", "class X { int m2; static void f(); };").getPointer());
 
----------------
Why do we need to remove `static int m1`?
Perhaps simply adding `void f()` is enough?


================
Comment at: unittests/clangd/SymbolCollectorTests.cpp:107
   const std::string Header = R"(
-    class Foo {
-      void f();
-    };
+    class Foo {};
     void f1();
----------------
Why do we remove `void f()`? Maybe assert that it's not in the list of symbols 
instead?


================
Comment at: unittests/clangd/SymbolCollectorTests.cpp:182
   )";
-  runSymbolCollector(/*Header=*/"", Main);
+  runSymbolCollector(Header, /*Main=*/"");
   EXPECT_THAT(
----------------
Why should we change this test?


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D41823



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

Reply via email to