[clang-tools-extra] 1698799 - [clangd] Fix LineFoldingOnly flag is not propagated correctly to ClangdServer.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 5 06:58:22 PDT 2022
Author: Haojian Wu
Date: 2022-09-05T15:55:29+02:00
New Revision: 16987998e6a0ad62efd4e387c18b0b9b5ef51947
URL: https://github.com/llvm/llvm-project/commit/16987998e6a0ad62efd4e387c18b0b9b5ef51947
DIFF: https://github.com/llvm/llvm-project/commit/16987998e6a0ad62efd4e387c18b0b9b5ef51947.diff
LOG: [clangd] Fix LineFoldingOnly flag is not propagated correctly to ClangdServer.
The Opts.LineFoldingOnly must be set before the clangdServer
construction, otherwise this flag is always false when using clangd in VSCode.
Differential Revision: https://reviews.llvm.org/D133299
Added:
clang-tools-extra/clangd/test/folding-range.test
Modified:
clang-tools-extra/clangd/ClangdLSPServer.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 449ac9e3a85bd..c5238e426d692 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -466,32 +466,6 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
if (Server)
return Reply(llvm::make_error<LSPError>("server already initialized",
ErrorCode::InvalidRequest));
- if (Opts.UseDirBasedCDB) {
- DirectoryBasedGlobalCompilationDatabase::Options CDBOpts(TFS);
- if (const auto &Dir = Params.initializationOptions.compilationDatabasePath)
- CDBOpts.CompileCommandsDir = Dir;
- CDBOpts.ContextProvider = Opts.ContextProvider;
- BaseCDB =
- std::make_unique<DirectoryBasedGlobalCompilationDatabase>(CDBOpts);
- BaseCDB = getQueryDriverDatabase(llvm::makeArrayRef(Opts.QueryDriverGlobs),
- std::move(BaseCDB));
- }
- auto Mangler = CommandMangler::detect();
- if (Opts.ResourceDir)
- Mangler.ResourceDir = *Opts.ResourceDir;
- CDB.emplace(BaseCDB.get(), Params.initializationOptions.fallbackFlags,
- tooling::ArgumentsAdjuster(std::move(Mangler)));
- {
- // Switch caller's context with LSPServer's background context. Since we
- // rather want to propagate information from LSPServer's context into the
- // Server, CDB, etc.
- WithContext MainContext(BackgroundContext.clone());
- llvm::Optional<WithContextValue> WithOffsetEncoding;
- if (Opts.Encoding)
- WithOffsetEncoding.emplace(kCurrentOffsetEncoding, *Opts.Encoding);
- Server.emplace(*CDB, TFS, Opts,
- static_cast<ClangdServer::Callbacks *>(this));
- }
Opts.CodeComplete.EnableSnippets = Params.capabilities.CompletionSnippets;
Opts.CodeComplete.IncludeFixIts = Params.capabilities.CompletionFixes;
@@ -521,6 +495,33 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
BackgroundIndexSkipCreate = Params.capabilities.ImplicitProgressCreation;
Opts.ImplicitCancellation = !Params.capabilities.CancelsStaleRequests;
+ if (Opts.UseDirBasedCDB) {
+ DirectoryBasedGlobalCompilationDatabase::Options CDBOpts(TFS);
+ if (const auto &Dir = Params.initializationOptions.compilationDatabasePath)
+ CDBOpts.CompileCommandsDir = Dir;
+ CDBOpts.ContextProvider = Opts.ContextProvider;
+ BaseCDB =
+ std::make_unique<DirectoryBasedGlobalCompilationDatabase>(CDBOpts);
+ BaseCDB = getQueryDriverDatabase(llvm::makeArrayRef(Opts.QueryDriverGlobs),
+ std::move(BaseCDB));
+ }
+ auto Mangler = CommandMangler::detect();
+ if (Opts.ResourceDir)
+ Mangler.ResourceDir = *Opts.ResourceDir;
+ CDB.emplace(BaseCDB.get(), Params.initializationOptions.fallbackFlags,
+ tooling::ArgumentsAdjuster(std::move(Mangler)));
+ {
+ // Switch caller's context with LSPServer's background context. Since we
+ // rather want to propagate information from LSPServer's context into the
+ // Server, CDB, etc.
+ WithContext MainContext(BackgroundContext.clone());
+ llvm::Optional<WithContextValue> WithOffsetEncoding;
+ if (Opts.Encoding)
+ WithOffsetEncoding.emplace(kCurrentOffsetEncoding, *Opts.Encoding);
+ Server.emplace(*CDB, TFS, Opts,
+ static_cast<ClangdServer::Callbacks *>(this));
+ }
+
llvm::json::Object ServerCaps{
{"textDocumentSync",
llvm::json::Object{
diff --git a/clang-tools-extra/clangd/test/folding-range.test b/clang-tools-extra/clangd/test/folding-range.test
new file mode 100644
index 0000000000000..758980d2061d2
--- /dev/null
+++ b/clang-tools-extra/clangd/test/folding-range.test
@@ -0,0 +1,24 @@
+# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
+void f() {
+
+}
+---
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument": {"foldingRange": {"lineFoldingOnly": true}}},"trace":"off"}}
+---
+{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"void f() {\n\n}\n","uri":"test:///foo.cpp","version":1}}}
+---
+{"id":1,"jsonrpc":"2.0","method":"textDocument/foldingRange","params":{"textDocument":{"uri":"test:///foo.cpp"}}}
+# CHECK: "id": 1,
+# CHECK-NEXT: "jsonrpc": "2.0",
+# CHECK-NEXT: "result": [
+# CHECK-NEXT: {
+# CHECK-NEXT: "endLine": 1,
+# CHECK-NEXT: "kind": "region",
+# CHECK-NEXT: "startCharacter": 10,
+# CHECK-NEXT: "startLine": 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+---
+{"jsonrpc":"2.0","id":5,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","method":"exit"}
More information about the cfe-commits
mailing list