hokein added inline comments.
================
Comment at: clangd/index/SymbolCollector.cpp:543
+
+  if (!(S.Flags & Symbol::IndexedForCodeCompletion))
+    return Insert(S);
----------------
ilya-biryukov wrote:
> hokein wrote:
> > ilya-biryukov wrote:
> > > Most of the fields updated at the bottom aren't useful. However, I feel 
> > > the documentation is actually important, since Sema only has doc comments 
> > > for the **current** file and the rest are currently expected to be 
> > > provided by the index.
> > > 
> > > I'm not sure if we already have the code to query the doc comments via 
> > > index for member completions. If not, it's an oversight.
> > > In any case, I suggest we **always** store the comments in **dynamic** 
> > > index. Not storing the comments in the static index is fine, since any 
> > > data for member completions should be provided by the dynamic index (we 
> > > see a member in completion ⇒ sema has processed the headers ⇒ the dynamic 
> > > index should know about those members)
> > This is a good point.
> > 
> > For class member completions, we rely solely on Sema completions (no query 
> > being queried). I'm not sure it is practical to query the index for member 
> > completions.
> > - this means for **every** code completion, we query the index, it may slow 
> > down completions
> > - `fuzzyFind` is not supported for class members in our internal index 
> > service (due to the large number of them)
> > 
> > So it turns two possibilities:
> > 
> > 1) always store comments (`SymbolCollector` doesn't know whether it is used 
> > in static index or dynamic index)
> > 2) or drop them for now, this wouldn't break anything, and add it back when 
> > we actually use them for class completions
> > 
> > I slightly prefer 2) at the moment. WDYT?
> Yeah, instead of using `fuzzyFind()`, we'll call  `lookup()` to get details 
> of the symbols we've discovered.
> It's true that this is going to add some latency, but I hope we have the 
> latency budget to handle this (these queries should be fast, e.g. we're doing 
> this for signature help and I haven't seen any noticeable latency there from 
> the index query, most of the running time is parsing C++).
> 
> I also like option 2, but unfortunately we already rely on this to get the 
> comments in signature help, so this change would actually introduce 
> regressions there (less used than code completion, but still not nice to 
> break it)
> Would the third option of having a config option (e.g. 
> `SymbolCollector::Options::StoreAllComments`) work?  `clangd-indexer` and 
> auto-indexer would set the option to false, `indexSymbols` would set the 
> option to true. We'll both get the optimizations and avoid introducing any 
> regressions. The plumbing should be no more than a few lines of code.
Sounds fair. I totally missed `signature help`, it is unfortunate that our test 
case doesn't find this regression (added one!)

> Would the third option of having a config option (e.g. 
> SymbolCollector::Options::StoreAllComments) work?  clangd-indexer and 
> auto-indexer would set the option to false, indexSymbols would set the option 
> to true. We'll both get the optimizations and avoid introducing any 
> regressions. The plumbing should be no more than a few lines of code.

This is a reasonable solution, but I prefer to do it in a separated patch. Now 
I make this patch always store docs, which should not introduce any 
regressions. There is another optimization opportunity here -- unlike header 
symbols, docs from main-file symbols can be dropped from the index, we can 
retrieve them from Sema.


Repository:
  rCTE Clang Tools Extra

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

https://reviews.llvm.org/D56314



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

Reply via email to