sammccall marked 2 inline comments as done.
sammccall added a comment.

In D115243#3176741 <https://reviews.llvm.org/D115243#3176741>, @kadircet wrote:

> I think we also need to update `index/remote/Server.cpp` && `FileSymbols` 
> (and `FileIndex` too).
>
> Regarding updates to `loadIndex`, I actually think it makes sense for that 
> index the always retrieve symbols as `Static` origin, then whoever makes use 
> of that (we always have either a `FileSymbol` or a complete remote-index 
> marshaling on top) should overwrite the origin while either building the 
> final merged index or during marshaling. That would get rid of lots of extra 
> plumbing.
> WDYT?

The problem is these methods yield SymbolSlabs, and the symbols within them are 
frozen/const. There's no provision to "just tweak some bitfield" - we'd have to 
copy the whole slab.
In general the const-ness is useful safety: it ensures strings are interned and 
point to the slab's storage. But it's annoying here.
(The amount of extra plumbing seemed modest enough that I didn't try very hard 
to hack around this, there may be a neat solution).



================
Comment at: clang-tools-extra/clangd/index/SymbolOrigin.cpp:17
     return OS << "unknown";
-  constexpr static char Sigils[] = "ADSMIR67";
+  constexpr static char Sigils[] = "AOSMIR67BP012345";
   for (unsigned I = 0; I < sizeof(Sigils); ++I)
----------------
kadircet wrote:
> `s/P/9` && `s/6/P`
Whoops, good catch!


================
Comment at: clang-tools-extra/clangd/index/SymbolOrigin.h:26
+  Static = 1 << 2,     // From a static, externally-built index.
   Merge = 1 << 3,      // A non-trivial index merge was performed.
   Identifier = 1 << 4, // Raw identifiers in file.
----------------
kadircet wrote:
> do we think this still provides a meaningful signal ?
> It only provides value only when multiple indices of same type was involved 
> in providing the result (and only that single type of indices). I suppose 
> after this patch it can only happen for `SM` (as there are certain 
> remote-index implementations that mark themselves as static) or `RM` (well 
> this is not possible today, but some day we might have a stack of 
> remote-indices).
> As soon as there's a different type of index is involved `M` no longer has 
> any meanings, as it's clear that there was some sort of merge happening (or 
> am I missing something obvious?)
> 
> ---
> 
> Before this patch situation is a little bit different since `FileIndex` just 
> said `D` for both main file and preamble, but that's changing.
Hmm, we can also get M when merging happens at indexing time due to multiple 
visits of the same symbol (`DuplicateHandling::Merge`, which is used by 
background indexing).

I don't have a strong opinion on its usefulness though. IIRC we added it (and 
origins) when trying to understand the paths various symbols took through 
indexes. As a debugging tool some redundancy maybe has some sanity-check value, 
but we could also drop it.

I don't think it has so much to do with this patch (unless you think we should 
reuse the bit instead of expanding to 16)...

> Before this patch situation is a little bit different since FileIndex just 
> said D for both main file and preamble

...it makes sense that this could have been a reason for the flag, but I don't 
think it actually was :-)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115243

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

Reply via email to