[PATCH] D75603: [clangd] Add instrumentation mode in clangd for metrics collection.
UTKARSH SAXENA via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 4 10:39:36 PST 2020
usaxena95 updated this revision to Diff 248240.
usaxena95 marked 2 inline comments as done.
usaxena95 added a comment.
Remove ununsed import.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75603/new/
https://reviews.llvm.org/D75603
Files:
clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/CodeComplete.h
clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -29,7 +29,9 @@
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <condition_variable>
+#include <functional>
#include <mutex>
+#include <vector>
namespace clang {
namespace clangd {
@@ -1041,6 +1043,24 @@
EXPECT_THAT(Completions, Contains(Named("TT")));
}
+TEST(CompletionTest, EnableInstrumentationMode) {
+ std::vector<CodeCompletion> RecordedCompletions;
+ std::function<void(const CodeCompletion &, const SymbolQualitySignals &,
+ const SymbolRelevanceSignals &)>
+ ResultRecorder =
+ [&RecordedCompletions](const CodeCompletion &CC,
+ const SymbolQualitySignals &,
+ const SymbolRelevanceSignals &) -> void {
+ RecordedCompletions.push_back(CC);
+ };
+ CodeCompleteOptions Opts;
+ Opts.RecordCCResult = &ResultRecorder;
+
+ completions("int xy1, xy2; int a = xy^", /*IndexSymbols=*/{}, Opts);
+ EXPECT_THAT(RecordedCompletions,
+ UnorderedElementsAre(Named("xy1"), Named("xy2")));
+}
+
SignatureHelp signatures(llvm::StringRef Text, Position Point,
std::vector<Symbol> IndexSymbols = {}) {
std::unique_ptr<SymbolIndex> Index;
Index: clang-tools-extra/clangd/CodeComplete.h
===================================================================
--- clang-tools-extra/clangd/CodeComplete.h
+++ clang-tools-extra/clangd/CodeComplete.h
@@ -19,6 +19,7 @@
#include "Logger.h"
#include "Path.h"
#include "Protocol.h"
+#include "Quality.h"
#include "index/Index.h"
#include "index/Symbol.h"
#include "index/SymbolOrigin.h"
@@ -29,12 +30,14 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Error.h"
+#include <functional>
#include <future>
namespace clang {
class NamedDecl;
namespace clangd {
struct PreambleData;
+struct CodeCompletion;
struct CodeCompleteOptions {
/// Returns options that can be passed to clang's completion engine.
@@ -129,6 +132,12 @@
/// Always use text-based completion.
NeverParse,
} RunParser = ParseIfReady;
+
+ /// Allows capturing various internal structures used by clangd during code
+ /// completion. Eg: Symbol quality and relevance signals of all the candidates
+ /// in the output.
+ std::function<void(const CodeCompletion &, const SymbolQualitySignals &,
+ const SymbolRelevanceSignals &)> *RecordCCResult = nullptr;
};
// Semi-structured representation of a code-complete suggestion for our C++ API.
Index: clang-tools-extra/clangd/CodeComplete.cpp
===================================================================
--- clang-tools-extra/clangd/CodeComplete.cpp
+++ clang-tools-extra/clangd/CodeComplete.cpp
@@ -1660,6 +1660,9 @@
? Scores.Total / Relevance.NameMatch
: Scores.Quality;
+ if (Opts.RecordCCResult)
+ (*Opts.RecordCCResult)(toCodeCompletion(Bundle), Quality, Relevance);
+
dlog("CodeComplete: {0} ({1}) = {2}\n{3}{4}\n", First.Name,
llvm::to_string(Origin), Scores.Total, llvm::to_string(Quality),
llvm::to_string(Relevance));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75603.248240.patch
Type: text/x-patch
Size: 3409 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200304/34547499/attachment-0001.bin>
More information about the cfe-commits
mailing list