diff options
author | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-05-22 14:48:19 +0000 |
---|---|---|
committer | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-05-22 14:48:19 +0000 |
commit | 3ec50e292f35b5792cbb4281ca7380665ff7f195 (patch) | |
tree | b55168076ef67b6c705bf147dbbf3994c67eecaf /clang/unittests/Tooling/TransformerTest.cpp | |
parent | e7230ea7c9dc9b092ee78192d7f32a49bbf28896 (diff) | |
download | llvm-3ec50e292f35b5792cbb4281ca7380665ff7f195.zip llvm-3ec50e292f35b5792cbb4281ca7380665ff7f195.tar.gz llvm-3ec50e292f35b5792cbb4281ca7380665ff7f195.tar.bz2 |
[LibTooling] Update Transformer to use RangeSelector instead of NodePart enum.
Transformer provides an enum to indicate the range of source text to be edited.
That support is now redundant with the new (and more general) RangeSelector
library, so we remove the custom enum support in favor of supporting any
RangeSelector.
Reviewers: ilya-biryukov
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D62149
llvm-svn: 361392
Diffstat (limited to 'clang/unittests/Tooling/TransformerTest.cpp')
-rw-r--r-- | clang/unittests/Tooling/TransformerTest.cpp | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/clang/unittests/Tooling/TransformerTest.cpp b/clang/unittests/Tooling/TransformerTest.cpp index 7e8cd6e..0bf012a 100644 --- a/clang/unittests/Tooling/TransformerTest.cpp +++ b/clang/unittests/Tooling/TransformerTest.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "clang/Tooling/Refactoring/Transformer.h" - #include "clang/ASTMatchers/ASTMatchers.h" +#include "clang/Tooling/Refactoring/RangeSelector.h" #include "clang/Tooling/Tooling.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" @@ -147,7 +147,7 @@ static RewriteRule ruleStrlenSize() { on(expr(hasType(isOrPointsTo(StringType))) .bind(StringExpr)), callee(cxxMethodDecl(hasName("c_str")))))), - change<clang::Expr>("REPLACED")); + change(text("REPLACED"))); R.Cases[0].Explanation = text("Use size() method directly on string."); return R; } @@ -183,7 +183,7 @@ TEST_F(TransformerTest, Flag) { hasName("proto::ProtoCommandLineFlag")))) .bind(Flag)), unless(callee(cxxMethodDecl(hasName("GetProto"))))), - change<clang::Expr>(Flag, "EXPR")); + change(node(Flag), text("EXPR"))); std::string Input = R"cc( proto::ProtoCommandLineFlag flag; @@ -201,9 +201,8 @@ TEST_F(TransformerTest, Flag) { TEST_F(TransformerTest, NodePartNameNamedDecl) { StringRef Fun = "fun"; - RewriteRule Rule = - makeRule(functionDecl(hasName("bad")).bind(Fun), - change<clang::FunctionDecl>(Fun, NodePart::Name, "good")); + RewriteRule Rule = makeRule(functionDecl(hasName("bad")).bind(Fun), + change(name(Fun), text("good"))); std::string Input = R"cc( int bad(int x); @@ -235,7 +234,7 @@ TEST_F(TransformerTest, NodePartNameDeclRef) { StringRef Ref = "ref"; testRule(makeRule(declRefExpr(to(functionDecl(hasName("bad")))).bind(Ref), - change<clang::Expr>(Ref, NodePart::Name, "good")), + change(name(Ref), text("good"))), Input, Expected); } @@ -253,7 +252,7 @@ TEST_F(TransformerTest, NodePartNameDeclRefFailure) { StringRef Ref = "ref"; Transformer T(makeRule(declRefExpr(to(functionDecl())).bind(Ref), - change<clang::Expr>(Ref, NodePart::Name, "good")), + change(name(Ref), text("good"))), consumer()); T.registerMatchers(&MatchFinder); EXPECT_FALSE(rewrite(Input)); @@ -262,7 +261,7 @@ TEST_F(TransformerTest, NodePartNameDeclRefFailure) { TEST_F(TransformerTest, NodePartMember) { StringRef E = "expr"; RewriteRule Rule = makeRule(memberExpr(member(hasName("bad"))).bind(E), - change<clang::Expr>(E, NodePart::Member, "good")); + change(member(E), text("good"))); std::string Input = R"cc( struct S { @@ -315,8 +314,7 @@ TEST_F(TransformerTest, NodePartMemberQualified) { )cc"; StringRef E = "expr"; - testRule(makeRule(memberExpr().bind(E), - change<clang::Expr>(E, NodePart::Member, "good")), + testRule(makeRule(memberExpr().bind(E), change(member(E), text("good"))), Input, Expected); } @@ -348,7 +346,7 @@ TEST_F(TransformerTest, NodePartMemberMultiToken) { StringRef MemExpr = "member"; testRule(makeRule(memberExpr().bind(MemExpr), - change<clang::Expr>(MemExpr, NodePart::Member, "good")), + change(member(MemExpr), text("good"))), Input, Expected); } @@ -371,8 +369,9 @@ TEST_F(TransformerTest, MultiChange) { StringRef C = "C", T = "T", E = "E"; testRule(makeRule(ifStmt(hasCondition(expr().bind(C)), hasThen(stmt().bind(T)), hasElse(stmt().bind(E))), - {change<Expr>(C, "true"), change<Stmt>(T, "{ /* then */ }"), - change<Stmt>(E, "{ /* else */ }")}), + {change(node(C), text("true")), + change(statement(T), text("{ /* then */ }")), + change(statement(E), text("{ /* else */ }"))}), Input, Expected); } @@ -383,7 +382,7 @@ TEST_F(TransformerTest, OrderedRuleUnrelated) { hasName("proto::ProtoCommandLineFlag")))) .bind(Flag)), unless(callee(cxxMethodDecl(hasName("GetProto"))))), - change<clang::Expr>(Flag, "PROTO")); + change(node(Flag), text("PROTO"))); std::string Input = R"cc( proto::ProtoCommandLineFlag flag; @@ -410,7 +409,7 @@ RewriteRule ruleStrlenSizeDistinct() { hasArgument(0, cxxMemberCallExpr( on(expr().bind(S)), callee(cxxMethodDecl(hasName("c_str")))))), - change<clang::Expr>("DISTINCT")); + change(text("DISTINCT"))); } TEST_F(TransformerTest, OrderedRuleRelated) { @@ -475,7 +474,7 @@ TEST_F(TransformerTest, TextGeneratorFailure) { -> llvm::Expected<std::string> { return llvm::createStringError(llvm::errc::invalid_argument, "ERROR"); }; - Transformer T(makeRule(binaryOperator().bind(O), change<Expr>(O, AlwaysFail)), + Transformer T(makeRule(binaryOperator().bind(O), change(node(O), AlwaysFail)), consumer()); T.registerMatchers(&MatchFinder); EXPECT_FALSE(rewrite(Input)); @@ -488,10 +487,10 @@ TEST_F(TransformerTest, OverlappingEditsInRule) { std::string Input = "int conflictOneRule() { return 3 + 7; }"; // Try to change the whole binary-operator expression AND one its operands: StringRef O = "O", L = "L"; - Transformer T( - makeRule(binaryOperator(hasLHS(expr().bind(L))).bind(O), - {change<Expr>(O, "DELETE_OP"), change<Expr>(L, "DELETE_LHS")}), - consumer()); + Transformer T(makeRule(binaryOperator(hasLHS(expr().bind(L))).bind(O), + {change(node(O), text("DELETE_OP")), + change(node(L), text("DELETE_LHS"))}), + consumer()); T.registerMatchers(&MatchFinder); EXPECT_FALSE(rewrite(Input)); EXPECT_THAT(Changes, IsEmpty()); @@ -503,7 +502,7 @@ TEST_F(TransformerTest, OverlappingEditsMultipleMatches) { std::string Input = "int conflictOneRule() { return -7; }"; // Try to change the whole binary-operator expression AND one its operands: StringRef E = "E"; - Transformer T(makeRule(expr().bind(E), change<Expr>(E, "DELETE_EXPR")), + Transformer T(makeRule(expr().bind(E), change(node(E), text("DELETE_EXPR"))), consumer()); T.registerMatchers(&MatchFinder); // The rewrite process fails because the changes conflict with each other... @@ -517,7 +516,7 @@ TEST_F(TransformerTest, ErrorOccurredMatchSkipped) { // Syntax error in the function body: std::string Input = "void errorOccurred() { 3 }"; Transformer T(makeRule(functionDecl(hasName("errorOccurred")), - change<Decl>("DELETED;")), + change(text("DELETED;"))), consumer()); T.registerMatchers(&MatchFinder); // The rewrite process itself fails... |