[clang-tools-extra] [clangd] Store documentation when indexing standard library (PR #133681)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 30 23:33:36 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clangd
@llvm/pr-subscribers-clang-tools-extra
Author: Nathan Ridge (HighCommander4)
<details>
<summary>Changes</summary>
Fixes https://github.com/clangd/clangd/issues/2344
---
Full diff: https://github.com/llvm/llvm-project/pull/133681.diff
6 Files Affected:
- (modified) clang-tools-extra/clangd/index/Background.cpp (+1)
- (modified) clang-tools-extra/clangd/index/IndexAction.cpp (-1)
- (modified) clang-tools-extra/clangd/indexer/IndexerMain.cpp (+1)
- (modified) clang-tools-extra/clangd/unittests/StdLibTests.cpp (+37)
- (modified) clang-tools-extra/clangd/unittests/SyncAPI.cpp (+7)
- (modified) clang-tools-extra/clangd/unittests/SyncAPI.h (+3)
``````````diff
diff --git a/clang-tools-extra/clangd/index/Background.cpp b/clang-tools-extra/clangd/index/Background.cpp
index 496d1455def4b..8013e9ea86112 100644
--- a/clang-tools-extra/clangd/index/Background.cpp
+++ b/clang-tools-extra/clangd/index/Background.cpp
@@ -306,6 +306,7 @@ llvm::Error BackgroundIndex::index(tooling::CompileCommand Cmd) {
return true;
};
IndexOpts.CollectMainFileRefs = true;
+ IndexOpts.StoreAllDocumentation = false;
IndexFileIn Index;
auto Action = createStaticIndexingAction(
diff --git a/clang-tools-extra/clangd/index/IndexAction.cpp b/clang-tools-extra/clangd/index/IndexAction.cpp
index ed56c2a9d2e81..cec5f4558455c 100644
--- a/clang-tools-extra/clangd/index/IndexAction.cpp
+++ b/clang-tools-extra/clangd/index/IndexAction.cpp
@@ -223,7 +223,6 @@ std::unique_ptr<FrontendAction> createStaticIndexingAction(
Opts.CollectIncludePath = true;
if (Opts.Origin == SymbolOrigin::Unknown)
Opts.Origin = SymbolOrigin::Static;
- Opts.StoreAllDocumentation = false;
if (RefsCallback != nullptr) {
Opts.RefFilter = RefKind::All;
Opts.RefsInHeaders = true;
diff --git a/clang-tools-extra/clangd/indexer/IndexerMain.cpp b/clang-tools-extra/clangd/indexer/IndexerMain.cpp
index bc5d1a7408991..806734f6ad40e 100644
--- a/clang-tools-extra/clangd/indexer/IndexerMain.cpp
+++ b/clang-tools-extra/clangd/indexer/IndexerMain.cpp
@@ -55,6 +55,7 @@ class IndexActionFactory : public tooling::FrontendActionFactory {
std::unique_ptr<FrontendAction> create() override {
SymbolCollector::Options Opts;
Opts.CountReferences = true;
+ Opts.StoreAllDocumentation = false;
Opts.FileFilter = [&](const SourceManager &SM, FileID FID) {
const auto F = SM.getFileEntryRefForID(FID);
if (!F)
diff --git a/clang-tools-extra/clangd/unittests/StdLibTests.cpp b/clang-tools-extra/clangd/unittests/StdLibTests.cpp
index a7a33f78303d3..00c6d629e1c25 100644
--- a/clang-tools-extra/clangd/unittests/StdLibTests.cpp
+++ b/clang-tools-extra/clangd/unittests/StdLibTests.cpp
@@ -158,6 +158,43 @@ TEST(StdLibTests, EndToEnd) {
UnorderedElementsAre(StdlibSymbol("list"), StdlibSymbol("vector")));
}
+TEST(StdLibTests, StdLibDocComments) {
+ Config Cfg;
+ Cfg.Index.StandardLibrary = true;
+ WithContextValue Enabled(Config::Key, std::move(Cfg));
+
+ MockFS FS;
+ FS.Files["stdlib/vector"] = R"cpp(
+ namespace std {
+ template <typename T>
+ class vector {
+ public:
+ /**doc comment*/
+ unsigned int size() const;
+ };
+ }
+ )cpp";
+ MockCompilationDatabase CDB;
+ CDB.ExtraClangFlags.push_back("-isystem" + testPath("stdlib"));
+ ClangdServer::Options Opts = ClangdServer::optsForTest();
+ Opts.BuildDynamicSymbolIndex = true; // also used for stdlib index
+ ClangdServer Server(CDB, FS, Opts);
+
+ Annotations A(R"cpp(
+ #include <vector>
+ void foo() {
+ std::vector<int> v;
+ v.si^ze();
+ }
+ )cpp");
+
+ Server.addDocument(testPath("foo.cc"), A.code());
+ ASSERT_TRUE(Server.blockUntilIdleForTest());
+ auto HI = cantFail(runHover(Server, testPath("foo.cc"), A.point()));
+ EXPECT_TRUE(HI.has_value());
+ EXPECT_EQ(HI->Documentation, "doc comment");
+}
+
} // namespace
} // namespace clangd
} // namespace clang
diff --git a/clang-tools-extra/clangd/unittests/SyncAPI.cpp b/clang-tools-extra/clangd/unittests/SyncAPI.cpp
index d48622eba5378..00bec7afd1a98 100644
--- a/clang-tools-extra/clangd/unittests/SyncAPI.cpp
+++ b/clang-tools-extra/clangd/unittests/SyncAPI.cpp
@@ -68,6 +68,13 @@ template <typename T> CaptureProxy<T> capture(std::optional<T> &Target) {
}
} // namespace
+llvm::Expected<std::optional<HoverInfo>> runHover(ClangdServer &Server,
+ PathRef File, Position Pos) {
+ std::optional<llvm::Expected<std::optional<HoverInfo>>> HI;
+ Server.findHover(File, Pos, capture(HI));
+ return std::move(*HI);
+}
+
llvm::Expected<CodeCompleteResult>
runCodeComplete(ClangdServer &Server, PathRef File, Position Pos,
clangd::CodeCompleteOptions Opts) {
diff --git a/clang-tools-extra/clangd/unittests/SyncAPI.h b/clang-tools-extra/clangd/unittests/SyncAPI.h
index cf3de4f742e84..e0c7c4d72e73e 100644
--- a/clang-tools-extra/clangd/unittests/SyncAPI.h
+++ b/clang-tools-extra/clangd/unittests/SyncAPI.h
@@ -29,6 +29,9 @@ void runAddDocument(ClangdServer &Server, PathRef File, StringRef Contents,
WantDiagnostics WantDiags = WantDiagnostics::Auto,
bool ForceRebuild = false);
+llvm::Expected<std::optional<HoverInfo>> runHover(ClangdServer &Server,
+ PathRef File, Position Pos);
+
llvm::Expected<CodeCompleteResult>
runCodeComplete(ClangdServer &Server, PathRef File, Position Pos,
clangd::CodeCompleteOptions Opts);
``````````
</details>
https://github.com/llvm/llvm-project/pull/133681
More information about the cfe-commits
mailing list