[PATCH] D133299: [clangd] Fix LineFoldingOnly flag is not propagated correctly to ClangdServer.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 5 06:44:08 PDT 2022


hokein updated this revision to Diff 457972.
hokein marked an inline comment as done.
hokein added a comment.

address comment: create the ClangdServer when Opts is fully initialized.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133299/new/

https://reviews.llvm.org/D133299

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/test/folding-range.test


Index: clang-tools-extra/clangd/test/folding-range.test
===================================================================
--- /dev/null
+++ 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"}
Index: clang-tools-extra/clangd/ClangdLSPServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -466,32 +466,6 @@
   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 @@
   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{


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133299.457972.patch
Type: text/x-patch
Size: 4513 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220905/b8aa285c/attachment-0001.bin>


More information about the cfe-commits mailing list