hokein created this revision. hokein added a reviewer: sammccall. Herald added subscribers: usaxena95, kadircet, arphaman. Herald added a project: clang. hokein requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
Repository: rG LLVM Github Monorepo 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,30 @@ using Node = SelectionTree::Node; using ast_type_traits::DynTypedNode; +std::string 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) { 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 +847,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); }
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,30 @@ using Node = SelectionTree::Node; using ast_type_traits::DynTypedNode; +std::string 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) { 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 +847,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); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits