sammccall added a comment.

TL;DR: let's go with this patch as-is rather than borrowing problems from the 
future. This enum isn't growing very rapidly.

In D134728#3822775 <https://reviews.llvm.org/D134728#3822775>, @ckandeler wrote:

> In D134728#3822653 <https://reviews.llvm.org/D134728#3822653>, @sammccall 
> wrote:
>
>> It doesn't scale very well though: we're limited to 30 modifiers in total, 
>> this patch brings us up to 16, if we followed this class.constructor 
>> precedent for function.operator, class.constructor.copy enum.scoped etc we 
>> could end up exhausting this.

BTW, I remembered the other idea that could eat a bunch of the modifiers: 
rainbow highlighting a la https://github.com/clangd/clangd/issues/889. The idea 
is you could encode e.g. an 8 bit hash of the symbol identity as the 
presence/absence of 8 modifiers. But we never shipped it, and I suspect 8 would 
be enough.

> In light of this (and assuming it really has to be this way)

FWIW the reason is that modifiers are encoded as an integer, and the spec says 
integers are <2^31-1 for interop purposes. (I'm not sure why they didn't go for 
2^53-1, everyone has either doubles or 64-bit integers right? sigh).

> would it make sense to introduce a generic modifier that changes its meaning 
> depending on the main highlighting kind? It would have the drawback of not 
> being self-documenting

Neat idea. That's workable at a technical level, but requires editors/themes to 
be pretty tightly coupled to this idiosyncracy of clangd. So I'm not sure it's 
a good fit for the loosely-coupled LSP ecosystem.

> but with the given constraints might just be a pragmatic solution

Yeah, however the constraints aren't very tight at this point, I was just 
thinking out loud a bit. Let's go for the simple thing for now - we may never 
need something cleverer, and if we do then we'll have more examples to drive 
the design. I think that's worth the potential breaking change.

>   // Class -> Constructor/Destructor

We'd need Generic1 and Generic2 so you can distinguish constructor/destructor 
right?
If the distinction isn't important, maybe we should add a single "constructor 
or destructor" modifier...


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D134728

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

Reply via email to