[clang-tools-extra] r363765 - [clangd] Add ClangdServer accessor for buffer contents

Sam McCall via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 19 00:29:06 PDT 2019


Author: sammccall
Date: Wed Jun 19 00:29:05 2019
New Revision: 363765

URL: http://llvm.org/viewvc/llvm-project?rev=363765&view=rev
Log:
[clangd] Add ClangdServer accessor for buffer contents

Modified:
    clang-tools-extra/trunk/clangd/ClangdServer.cpp
    clang-tools-extra/trunk/clangd/ClangdServer.h
    clang-tools-extra/trunk/clangd/TUScheduler.cpp
    clang-tools-extra/trunk/clangd/TUScheduler.h
    clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp

Modified: clang-tools-extra/trunk/clangd/ClangdServer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdServer.cpp?rev=363765&r1=363764&r2=363765&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/ClangdServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdServer.cpp Wed Jun 19 00:29:05 2019
@@ -150,6 +150,10 @@ void ClangdServer::addDocument(PathRef F
 
 void ClangdServer::removeDocument(PathRef File) { WorkScheduler.remove(File); }
 
+llvm::StringRef ClangdServer::getDocument(PathRef File) const {
+  return WorkScheduler.getContents(File);
+}
+
 void ClangdServer::codeComplete(PathRef File, Position Pos,
                                 const clangd::CodeCompleteOptions &Opts,
                                 Callback<CodeCompleteResult> CB) {

Modified: clang-tools-extra/trunk/clangd/ClangdServer.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdServer.h?rev=363765&r1=363764&r2=363765&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/ClangdServer.h (original)
+++ clang-tools-extra/trunk/clangd/ClangdServer.h Wed Jun 19 00:29:05 2019
@@ -163,6 +163,9 @@ public:
   void addDocument(PathRef File, StringRef Contents,
                    WantDiagnostics WD = WantDiagnostics::Auto);
 
+  /// Get the contents of \p File, which should have been added.
+  llvm::StringRef getDocument(PathRef File) const;
+
   /// Remove \p File from list of tracked files, schedule a request to free
   /// resources associated with it. Pending diagnostics for closed files may not
   /// be delivered, even if requested with WantDiags::Auto or WantDiags::Yes.

Modified: clang-tools-extra/trunk/clangd/TUScheduler.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/TUScheduler.cpp?rev=363765&r1=363764&r2=363765&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/TUScheduler.cpp (original)
+++ clang-tools-extra/trunk/clangd/TUScheduler.cpp Wed Jun 19 00:29:05 2019
@@ -884,6 +884,15 @@ void TUScheduler::remove(PathRef File) {
          File);
 }
 
+llvm::StringRef TUScheduler::getContents(PathRef File) const {
+  auto It = Files.find(File);
+  if (It == Files.end()) {
+    elog("getContents() for untracked file: {0}", File);
+    return "";
+  }
+  return It->second->Contents;
+}
+
 void TUScheduler::run(llvm::StringRef Name,
                       llvm::unique_function<void()> Action) {
   if (!PreambleTasks)

Modified: clang-tools-extra/trunk/clangd/TUScheduler.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/TUScheduler.h?rev=363765&r1=363764&r2=363765&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/TUScheduler.h (original)
+++ clang-tools-extra/trunk/clangd/TUScheduler.h Wed Jun 19 00:29:05 2019
@@ -155,6 +155,10 @@ public:
   /// if requested with WantDiags::Auto or WantDiags::Yes.
   void remove(PathRef File);
 
+  /// Returns the current contents of the buffer for File, per last update().
+  /// The returned StringRef may be invalidated by any write to TUScheduler.
+  llvm::StringRef getContents(PathRef File) const;
+
   /// Schedule an async task with no dependencies.
   void run(llvm::StringRef Name, llvm::unique_function<void()> Action);
 

Modified: clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp?rev=363765&r1=363764&r2=363765&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp (original)
+++ clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp Wed Jun 19 00:29:05 2019
@@ -107,12 +107,14 @@ TEST_F(TUSchedulerTests, MissingFiles) {
                 ASTRetentionPolicy());
 
   auto Added = testPath("added.cpp");
-  Files[Added] = "";
+  Files[Added] = "x";
 
   auto Missing = testPath("missing.cpp");
   Files[Missing] = "";
 
-  S.update(Added, getInputs(Added, ""), WantDiagnostics::No);
+  EXPECT_EQ(S.getContents(Added), "");
+  S.update(Added, getInputs(Added, "x"), WantDiagnostics::No);
+  EXPECT_EQ(S.getContents(Added), "x");
 
   // Assert each operation for missing file is an error (even if it's available
   // in VFS).
@@ -131,7 +133,9 @@ TEST_F(TUSchedulerTests, MissingFiles) {
                     [&](Expected<InputsAndPreamble> Preamble) {
                       EXPECT_TRUE(bool(Preamble));
                     });
+  EXPECT_EQ(S.getContents(Added), "x");
   S.remove(Added);
+  EXPECT_EQ(S.getContents(Added), "");
 
   // Assert that all operations fail after removing the file.
   S.runWithAST("", Added,




More information about the cfe-commits mailing list