[PATCH] D77206: [clangd] Don't send semanticHighlights to clients that support semanticTokens.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 2 08:39:48 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rGfc830106e155: [clangd] Don't send semanticHighlights to clients that support semanticTokens. (authored by sammccall).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D77206/new/
https://reviews.llvm.org/D77206
Files:
clang-tools-extra/clangd/ClangdLSPServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/Protocol.cpp
clang-tools-extra/clangd/Protocol.h
clang-tools-extra/clangd/test/semantic-tokens.test
Index: clang-tools-extra/clangd/test/semantic-tokens.test
===================================================================
--- clang-tools-extra/clangd/test/semantic-tokens.test
+++ clang-tools-extra/clangd/test/semantic-tokens.test
@@ -1,5 +1,10 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{}}
+# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s -implicit-check-not=semanticHighlight
+# Send capabilities for both Theia semanticHighlight & standard semanticTokens.
+# clangd should not use/acknowledge the Theia protocol in this case.
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"capabilities":{"textDocument":{
+ "semanticHighlightingCapabilities":{"semanticHighlighting":true},
+ "semanticTokens":{"dynamicRegistration":true}
+}}}}
---
{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.cpp","languageId":"cpp","text":"int x = 2;"}}}
---
Index: clang-tools-extra/clangd/Protocol.h
===================================================================
--- clang-tools-extra/clangd/Protocol.h
+++ clang-tools-extra/clangd/Protocol.h
@@ -433,8 +433,13 @@
/// textDocument.codeAction.codeActionLiteralSupport.
bool CodeActionStructure = false;
+ /// Client advertises support for the semanticTokens feature.
+ /// We support the textDocument/semanticTokens request in any case.
+ /// textDocument.semanticTokens
+ bool SemanticTokens = false;
/// Client supports Theia semantic highlighting extension.
/// https://github.com/microsoft/vscode-languageserver-node/pull/367
+ /// This will be ignored if the client also supports semanticTokens.
/// textDocument.semanticHighlightingCapabilities.semanticHighlighting
/// FIXME: drop this support once clients support LSP 3.16 Semantic Tokens.
bool TheiaSemanticHighlighting = false;
Index: clang-tools-extra/clangd/Protocol.cpp
===================================================================
--- clang-tools-extra/clangd/Protocol.cpp
+++ clang-tools-extra/clangd/Protocol.cpp
@@ -297,6 +297,8 @@
SemanticHighlighting->getBoolean("semanticHighlighting"))
R.TheiaSemanticHighlighting = *SemanticHighlightingSupport;
}
+ if (auto *SemanticHighlighting = TextDocument->getObject("semanticTokens"))
+ R.SemanticTokens = true;
if (auto *Diagnostics = TextDocument->getObject("publishDiagnostics")) {
if (auto CategorySupport = Diagnostics->getBoolean("categorySupport"))
R.DiagnosticCategory = *CategorySupport;
Index: clang-tools-extra/clangd/ClangdServer.h
===================================================================
--- clang-tools-extra/clangd/ClangdServer.h
+++ clang-tools-extra/clangd/ClangdServer.h
@@ -145,7 +145,7 @@
/// fetch system include path.
std::vector<std::string> QueryDriverGlobs;
- /// Enable semantic highlighting features.
+ /// Enable notification-based semantic highlighting.
bool TheiaSemanticHighlighting = false;
/// Returns true if the tweak should be enabled.
Index: clang-tools-extra/clangd/ClangdLSPServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -480,6 +480,13 @@
ClangdServerOpts.TheiaSemanticHighlighting =
Params.capabilities.TheiaSemanticHighlighting;
+ if (Params.capabilities.TheiaSemanticHighlighting &&
+ Params.capabilities.SemanticTokens) {
+ log("Client supports legacy semanticHighlights notification and standard "
+ "semanticTokens request, choosing the latter (no notifications).");
+ ClangdServerOpts.TheiaSemanticHighlighting = false;
+ }
+
if (Params.rootUri && *Params.rootUri)
ClangdServerOpts.WorkspaceRoot = std::string(Params.rootUri->file());
else if (Params.rootPath && !Params.rootPath->empty())
@@ -612,7 +619,7 @@
}}}};
if (NegotiatedOffsetEncoding)
Result["offsetEncoding"] = *NegotiatedOffsetEncoding;
- if (Params.capabilities.TheiaSemanticHighlighting)
+ if (ClangdServerOpts.TheiaSemanticHighlighting)
Result.getObject("capabilities")
->insert(
{"semanticHighlighting",
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77206.254535.patch
Type: text/x-patch
Size: 4277 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200402/3e2fa09c/attachment-0001.bin>
More information about the cfe-commits
mailing list