[PATCH] D92157: [clangd] Add language metrics for recovery AST usage.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 26 06:17:28 PST 2020
hokein updated this revision to Diff 307852.
hokein added a comment.
address comment.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92157/new/
https://reviews.llvm.org/D92157
Files:
clang-tools-extra/clangd/Selection.cpp
clang-tools-extra/clangd/unittests/SelectionTests.cpp
Index: clang-tools-extra/clangd/unittests/SelectionTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SelectionTests.cpp
@@ -18,6 +18,7 @@
namespace clang {
namespace clangd {
namespace {
+using ::testing::ElementsAreArray;
using ::testing::UnorderedElementsAreArray;
// Create a selection tree corresponding to a point or pair of points.
@@ -469,7 +470,7 @@
EXPECT_TRUE(verifyCommonAncestor(T.root(), T.commonAncestor(), C.Code))
<< C.Code;
EXPECT_THAT(Tracer.takeMetric("selection_recovery"),
- testing::ElementsAreArray({0}));
+ ElementsAreArray({0}));
}
}
}
@@ -494,10 +495,11 @@
auto AST = TestTU::withCode(Annotations(Code).code()).build();
trace::TestTracer Tracer;
auto T = makeSelectionTree(Code, AST);
- EXPECT_THAT(Tracer.takeMetric("selection_recovery"),
- testing::ElementsAreArray({1}));
+ EXPECT_THAT(Tracer.takeMetric("selection_recovery"), ElementsAreArray({1}));
EXPECT_THAT(Tracer.takeMetric("selection_recovery_type"),
- testing::ElementsAreArray({1}));
+ ElementsAreArray({1}));
+ EXPECT_THAT(Tracer.takeMetric("selection_recovery_available", "C++"),
+ ElementsAreArray({1}));
}
// FIXME: Doesn't select the binary operator node in
Index: clang-tools-extra/clangd/Selection.cpp
===================================================================
--- clang-tools-extra/clangd/Selection.cpp
+++ clang-tools-extra/clangd/Selection.cpp
@@ -37,17 +37,32 @@
using Node = SelectionTree::Node;
using ast_type_traits::DynTypedNode;
+const char *getLanguage(const clang::LangOptions &Lang) {
+ if (Lang.C99 || Lang.C11 || Lang.C17 || Lang.C2x)
+ return "C";
+ if (Lang.ObjC)
+ return "ObjC";
+ if (Lang.CPlusPlus)
+ return "C++";
+ return "Others"; // others we don't care.
+}
+
// Measure the fraction of selections that were enabled by recovery AST.
-void recordMetrics(const SelectionTree &S) {
+void recordMetrics(const SelectionTree &S, const ASTContext &AST) {
+ if (!trace::enabled())
+ return;
static constexpr trace::Metric SelectionUsedRecovery(
"selection_recovery", trace::Metric::Distribution);
static constexpr trace::Metric RecoveryType("selection_recovery_type",
trace::Metric::Distribution);
+ static constexpr trace::Metric RecoveryAvailable(
+ "selection_recovery_available", trace::Metric::Counter, "languages");
const auto *Common = S.commonAncestor();
for (const auto *N = Common; N; N = N->Parent) {
if (const auto *RE = N->ASTNode.get<RecoveryExpr>()) {
SelectionUsedRecovery.record(1); // used recovery ast.
RecoveryType.record(RE->isTypeDependent() ? 0 : 1);
+ RecoveryAvailable.record(1, getLanguage(AST.getLangOpts()));
return;
}
}
@@ -834,7 +849,7 @@
.printToString(SM));
Nodes = SelectionVisitor::collect(AST, Tokens, PrintPolicy, Begin, End, FID);
Root = Nodes.empty() ? nullptr : &Nodes.front();
- recordMetrics(*this);
+ recordMetrics(*this, AST);
dlog("Built selection tree\n{0}", *this);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92157.307852.patch
Type: text/x-patch
Size: 3265 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201126/0a71e2f1/attachment-0001.bin>
More information about the cfe-commits
mailing list