Author: Yu Hao Date: 2025-11-24T16:46:29-05:00 New Revision: e737f67fcf883e90683e1dd46247bd176fe15b5f
URL: https://github.com/llvm/llvm-project/commit/e737f67fcf883e90683e1dd46247bd176fe15b5f DIFF: https://github.com/llvm/llvm-project/commit/e737f67fcf883e90683e1dd46247bd176fe15b5f.diff LOG: [clang][transformer] Fix `node` range-selector to include type name qualifiers of type locs. (#167619) Previously, e.g. for TypeLoc "MyNamespace::MyClass", `node()` selects only "MyClass" without the qualifier. With this change, it now selects "MyNamespace::MyClass". --------- Co-authored-by: Florian Mayer <[email protected]> Added: Modified: clang/lib/Tooling/Transformer/RangeSelector.cpp clang/unittests/Tooling/RangeSelectorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Tooling/Transformer/RangeSelector.cpp b/clang/lib/Tooling/Transformer/RangeSelector.cpp index b4bdec1fcdd69..54a1590d3106d 100644 --- a/clang/lib/Tooling/Transformer/RangeSelector.cpp +++ b/clang/lib/Tooling/Transformer/RangeSelector.cpp @@ -139,7 +139,8 @@ RangeSelector transformer::node(std::string ID) { (Node->get<Stmt>() != nullptr && Node->get<Expr>() == nullptr)) ? tooling::getExtendedRange(*Node, tok::TokenKind::semi, *Result.Context) - : CharSourceRange::getTokenRange(Node->getSourceRange()); + : CharSourceRange::getTokenRange( + Node->getSourceRange(/*IncludeQualifier=*/true)); }; } diff --git a/clang/unittests/Tooling/RangeSelectorTest.cpp b/clang/unittests/Tooling/RangeSelectorTest.cpp index a1fcbb023832f..d441da165b09b 100644 --- a/clang/unittests/Tooling/RangeSelectorTest.cpp +++ b/clang/unittests/Tooling/RangeSelectorTest.cpp @@ -339,6 +339,13 @@ TEST(RangeSelectorTest, NodeOpExpression) { EXPECT_THAT_EXPECTED(select(node("id"), Match), HasValue("3")); } +TEST(RangeSelectorTest, NodeOpTypeLoc) { + StringRef Code = "namespace ns {struct Foo{};} ns::Foo a;"; + TestMatch Match = + matchCode(Code, varDecl(hasTypeLoc(typeLoc().bind("typeloc")))); + EXPECT_THAT_EXPECTED(select(node("typeloc"), Match), HasValue("ns::Foo")); +} + TEST(RangeSelectorTest, StatementOp) { StringRef Code = "int f() { return 3; }"; TestMatch Match = matchCode(Code, expr().bind("id")); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
