Author: Nathan Ridge Date: 2024-11-19T01:47:45-05:00 New Revision: 44a41b0660912a90be903a843e8b6f234fa0a2be
URL: https://github.com/llvm/llvm-project/commit/44a41b0660912a90be903a843e8b6f234fa0a2be DIFF: https://github.com/llvm/llvm-project/commit/44a41b0660912a90be903a843e8b6f234fa0a2be.diff LOG: [clangd] Check for other clangd extension capabilities under 'experimental' (#116531) This is a follow-up to PR114699, with the same motivation: to support clients which only support adding custom (language-specific or server-specific) capabilities under 'experimental'. Added: Modified: clang-tools-extra/clangd/Protocol.cpp clang-tools-extra/clangd/Protocol.h Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp index 761f96846d4538..05c8041df7de75 100644 --- a/clang-tools-extra/clangd/Protocol.cpp +++ b/clang-tools-extra/clangd/Protocol.cpp @@ -511,6 +511,35 @@ bool fromJSON(const llvm::json::Value &Params, ClientCapabilities &R, if (auto EditsNearCursor = Completion->getBoolean("editsNearCursor")) R.CompletionFixes |= *EditsNearCursor; } + if (auto *References = TextDocument->getObject("references")) { + if (auto ContainerSupport = References->getBoolean("container")) { + R.ReferenceContainer |= *ContainerSupport; + } + } + if (auto *Diagnostics = TextDocument->getObject("publishDiagnostics")) { + if (auto CodeActions = Diagnostics->getBoolean("codeActionsInline")) { + R.DiagnosticFixes |= *CodeActions; + } + } + if (auto *InactiveRegions = + TextDocument->getObject("inactiveRegionsCapabilities")) { + if (auto InactiveRegionsSupport = + InactiveRegions->getBoolean("inactiveRegions")) { + R.InactiveRegions |= *InactiveRegionsSupport; + } + } + } + if (auto *Window = Experimental->getObject("window")) { + if (auto Implicit = + Window->getBoolean("implicitWorkDoneProgressCreate")) { + R.ImplicitProgressCreation |= *Implicit; + } + } + if (auto *OffsetEncoding = Experimental->get("offsetEncoding")) { + R.offsetEncoding.emplace(); + if (!fromJSON(*OffsetEncoding, *R.offsetEncoding, + P.field("offsetEncoding"))) + return false; } } diff --git a/clang-tools-extra/clangd/Protocol.h b/clang-tools-extra/clangd/Protocol.h index 5b28095758198d..c7ef1a13e6e39e 100644 --- a/clang-tools-extra/clangd/Protocol.h +++ b/clang-tools-extra/clangd/Protocol.h @@ -452,6 +452,7 @@ struct ClientCapabilities { std::optional<SymbolKindBitset> WorkspaceSymbolKinds; /// Whether the client accepts diagnostics with codeActions attached inline. + /// This is a clangd extension. /// textDocument.publishDiagnostics.codeActionsInline. bool DiagnosticFixes = false; @@ -475,6 +476,7 @@ struct ClientCapabilities { /// Client supports displaying a container string for results of /// textDocument/reference (clangd extension) + /// textDocument.references.container bool ReferenceContainer = false; /// Client supports hierarchical document symbols. @@ -563,6 +565,7 @@ struct ClientCapabilities { /// Whether the client supports the textDocument/inactiveRegions /// notification. This is a clangd extension. + /// textDocument.inactiveRegionsCapabilities.inactiveRegions bool InactiveRegions = false; }; bool fromJSON(const llvm::json::Value &, ClientCapabilities &, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits