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

Reply via email to