forked from OSchip/llvm-project
[clangd] Don't send semanticHighlights to clients that support semanticTokens.
Summary: This allows the standard mechanism to gracefully displace the old one. Reviewers: hokein Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77206
This commit is contained in:
parent
24bb2d1e77
commit
fc830106e1
|
@ -480,6 +480,13 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
|
|||
|
||||
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 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
|
|||
}}}};
|
||||
if (NegotiatedOffsetEncoding)
|
||||
Result["offsetEncoding"] = *NegotiatedOffsetEncoding;
|
||||
if (Params.capabilities.TheiaSemanticHighlighting)
|
||||
if (ClangdServerOpts.TheiaSemanticHighlighting)
|
||||
Result.getObject("capabilities")
|
||||
->insert(
|
||||
{"semanticHighlighting",
|
||||
|
|
|
@ -145,7 +145,7 @@ public:
|
|||
/// 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.
|
||||
|
|
|
@ -297,6 +297,8 @@ bool fromJSON(const llvm::json::Value &Params, ClientCapabilities &R) {
|
|||
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;
|
||||
|
|
|
@ -433,8 +433,13 @@ struct ClientCapabilities {
|
|||
/// 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;
|
||||
|
|
|
@ -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;"}}}
|
||||
---
|
||||
|
|
Loading…
Reference in New Issue