[PATCH] D66990: [clangd] Add distinct highlightings for declarations of functions and methods
Nathan Ridge via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 2 14:50:00 PDT 2019
nridge added a comment.
In D66990#1654312 <https://reviews.llvm.org/D66990#1654312>, @ilya-biryukov wrote:
> I think this makes sense, but it should be done for **all** declarations and not just functions.
> But doing that in the current design would mean we need to double the number of styles. In addition to `field`, `method`, `function`, we would need `field-declaration`, `method-declaration`, `function-declaration`, etc.
> Combinatorial explosion of that kind is bad, so I would rather avoid it.
I agree that a combinatorial explosion would be unfortunate. I actually think that having a linear list of semantic highlighting kinds is a weakness of this protocol extension for exactly this reason.
I think the way cquery does it <https://github.com/cquery-project/vscode-cquery/blob/4aac325dcf0735aa5d5f98960f28d6af6ca83d50/src/extension.ts#L84> it better in this regard: in place of a single kind enum, they essentially have a 4-tuple of `(kind, parent kind, storage class, role)`. With this setup:
- The kinds can be a relatively small set of fundamental language entity kinds (variable, function, class, namespace, etc.)
- Things like "field" can be expressed as `kind = variable, parentKind = class`
- The storage class allows differentiating things like static vs. nonstatic without having to introduce distinct kinds for those.
- The role allows differentiating declarations from uses, and even fancier things like read occurrences from write occurrences.
I've been meaning to comment on the upstream protocol proposal to suggest a more flexible approach like this, though I'm not sure how it would integrate with TextMate scopes (which cquery doesn't bother with).
I was hoping though that a patch like this, which would bring us largely to parity with Eclipse CDT's highlightings, wouldn't need to blocked on a change to the upstream protocol proposal, which could take a while.
> That would also mean we would rely on every editor to apply consistent styling for this, at least by default: make `somethind-decl` just like `decl` but bold.
> I don't think there's any way to enforce this.
Keep in mind that since the scopes for declarations just add `.declaration` to the scopes for the base entities, by default they would be highlighted the same as the base entity. Only if a user or theme goes to the trouble of adding a specific rule for the `.declaration`, would they look different, and in that case I think we can trust the judgment of the user or theme author.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66990/new/
https://reviews.llvm.org/D66990
More information about the cfe-commits
mailing list