This implements the server side of the approach discussed at
https://github.com/clangd/vscode-clangd/pull/193#issuecomment-1044315732
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
Corresponding client-side support is implemented for vscode in the latest version of https://github.com/clangd/vscode-clangd/pull/193.
The issue addressed by this patch is attracting a steady stream of user interest (two recent examples are https://github.com/clangd/clangd/issues/1545 and https://github.com/clangd/vscode-clangd/issues/469).
A review would be appreciated :)
Thanks, and sorry for late response.
The patch looks good to me in general.
clang-tools-extra/clangd/ClangdLSPServer.cpp | ||
---|---|---|
591 | nit: add trailing // clangd extension, probably better to move to below line 585 (since we group all extension there) | |
clang-tools-extra/clangd/ClangdServer.cpp | ||
120 | nit: just AST.getMacros().SkppedRanges()? | |
974 | As discussed in the GitHub thread (the experiment of highlighting the inactive regions as comment is considered as a failure), we should always not include the inactive region in the semantic highlighting, this will also simplify the existing code in semantic highlighting (e.g. https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clangd/SemanticHighlighting.cpp#L464-L513). I think we can do it in a separated patch. | |
clang-tools-extra/clangd/ClangdServer.h | ||
91 | it would be nice to have a unittest for this, I think it should not be to hard to add one in ClangdTests.cpp (with a customize Callbacks passing to the ClangdServer). | |
clang-tools-extra/clangd/Protocol.h | ||
521 | nit: notificatin => notification |
clang-tools-extra/clangd/ClangdServer.cpp | ||
---|---|---|
974 | I think it might make sense to keep this support around for a while, so that users whose clients do not yet support this extension still have some indication of which preprocessor branches are inactive. However, we could make it optional, since some users (for example those who have to work on large sections of code in inactive preprocessor branches) may prefer to see the client-side colors over having it all highlighted as one color. | |
clang-tools-extra/clangd/ClangdServer.h | ||
91 | Good idea -- added! |
Thanks, the implementation looks good.
clang-tools-extra/clangd/ClangdServer.cpp | ||
---|---|---|
974 | Rendering the inactive code as comment is the best we can perform per the standard LSP spec, but it provides an suboptimal (possibly confusing) UX experience, we have received some user complains about that. Since we are doing it via an extension, I think we should just remove the old one in the next release (17). | |
clang-tools-extra/clangd/Protocol.h | ||
1743 | nit: mention this is a clangd extension as well. |
address nit
clang-tools-extra/clangd/ClangdServer.cpp | ||
---|---|---|
974 |
To give other clients a bit more time to implement the extension, perhaps we could:
This way, if someone using a non-vscode client has upgraded to clangd 17, but their client hasn't implemented the protocol extension yet, and they prefer to see the comment tokens (to know which branches are inactive), they can turn them on. |
nit: add trailing // clangd extension, probably better to move to below line 585 (since we group all extension there)