ArcsinX marked an inline comment as done. ArcsinX added a comment. In D93683#2469584 <https://reviews.llvm.org/D93683#2469584>, @sammccall wrote:
> In D93683#2469553 <https://reviews.llvm.org/D93683#2469553>, @ArcsinX wrote: > >> In D93683#2468842 <https://reviews.llvm.org/D93683#2468842>, @sammccall >> wrote: >> >>> I'm not 100% sure this bug would block adding the equivalent change for >>> `fuzzyFind` though - it'll affect documentSymbol but not code-completion >>> IIUC (because of the workaround I mentioned above). And these symbols are >>> pretty rare. >> >> With the similar change for `fuzzyFind()`, `WorkspaceSymbols.Macros` test >> fails. But maybe I can create one more review for this and we will discuss >> it there. > > Sorry, incomplete thought. I meant workspace/symbols would be broken for such > macros, but maybe that was acceptable (it's not a terrible common feature nor > symbol kind). Not great but we're trading one bug for another. > In particular, if we plan to fix both I don't think the *sequencing* matters. Ok. I will propose a separate patch for `fuzzyFind()` similar to this one. Thank you for review. ================ Comment at: clang-tools-extra/clangd/index/FileIndex.cpp:434 + PreambleSymbols.update( + *FilePath, std::make_unique<SymbolSlab>(std::move(*IF->Symbols)), + std::make_unique<RefSlab>(), ---------------- sammccall wrote: > ArcsinX wrote: > > sammccall wrote: > > > ArcsinX wrote: > > > > We do not need this change to fix behaviour for removed definition, but > > > > this is the only one place where we use URI instead of path as a key. > > > Yeah... nevertheless the key is totally arbitrary here, so we might as > > > well use whatever is most convenient/cheapest. > > It's not arbitrary after D93393 (we use these keys to create the list of > > indexed files). > > > > But as it turns, the problem is deeper... I will try to explain. > > Preamble index does not contain references, so with that change our logic > > about "file X is in the dynamic index, so toss references with location in > > X from the static index" breaks here, seems we can not think about preamble > > index that it is a part of the dynamic index for the background index > > (static). I wonder why tests do not catch this, but with this change > > find-all-references does not contain refs from headers for which we have > > preamble index, that's why I reverted this. Maybe we need to add some > > comment here about this behavior. > > Example: > > `test.h` > > ``` > > void test(); > > ``` > > `test.c` > > ``` > > #include "test.h" > > void te^st {} > > ``` > > > > - didOpen `test.c` > > - references (where ^ is) > > With this change only 1 element will be returned (definition of `test` in > > `test.c` and nothing from `test.h`) > > > > I am not sure what we can do here, but I think we need some special merge > > for preamble and main file indexes (another merge class for this case > > instead of `MergedIndex`?) > > Preamble index does not contain references, so with that change our logic > > about "file X is in the dynamic index, so toss references with location in > > X from the static index" breaks > > Hmm, what if we made the return value of the indexedFiles functor a bitmask > instead of a single boolean (contains symbols, contains refs, ...)? This sounds reasonable. I will try to implement a solution for this problem based on your suggestion (in a separate patch) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D93683/new/ https://reviews.llvm.org/D93683 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits