[PATCH] D75603: [clangd] Add instrumentation mode in clangd for metrics collection.
UTKARSH SAXENA via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 5 03:51:45 PST 2020
usaxena95 updated this revision to Diff 248422.
usaxena95 added a comment.
Passed score as a float as an explicit argument of the callback.
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,21 @@
EXPECT_THAT(Completions, Contains(Named("TT")));
}
+TEST(CompletionTest, RecordCCResultCallback) {
+ std::vector<CodeCompletion> RecordedCompletions;
+ CodeCompleteOptions Opts;
+ Opts.RecordCCResult = [&RecordedCompletions](const CodeCompletion &CC,
+ const SymbolQualitySignals &,
+ const SymbolRelevanceSignals &,
+ float Score) {
+ RecordedCompletions.push_back(CC);
+ };
+
+ 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,16 @@
/// Always use text-based completion.
NeverParse,
} RunParser = ParseIfReady;
+
+ /// Callback invoked on all CompletionCandidate after they are scored and
+ /// before they are ranked (by -Score). Thus the results are yielded in
+ /// arbitrary order.
+ ///
+ /// This callbacks allows capturing various internal structures used by clangd
+ /// during code completion. Eg: Symbol quality and relevance signals.
+ std::function<void(const CodeCompletion &, const SymbolQualitySignals &,
+ const SymbolRelevanceSignals &, float Score)>
+ RecordCCResult;
};
// 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,10 @@
? Scores.Total / Relevance.NameMatch
: Scores.Quality;
+ if (Opts.RecordCCResult)
+ Opts.RecordCCResult(toCodeCompletion(Bundle), Quality, Relevance,
+ Scores.Total);
+
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.248422.patch
Type: text/x-patch
Size: 3507 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200305/2bfde39e/attachment-0001.bin>
More information about the cfe-commits
mailing list