diff options
author | Yitzhak Mandelbaum <yitzhakm@google.com> | 2020-07-20 21:16:39 +0000 |
---|---|---|
committer | Yitzhak Mandelbaum <yitzhakm@google.com> | 2020-07-20 21:17:09 +0000 |
commit | c0b8954ecba500e3d9609152295b74ccd7d89d62 (patch) | |
tree | 79a792d70a2b8560f5a8577baadaaf8639262386 /clang/unittests/Tooling/TransformerTest.cpp | |
parent | 917f8421591d2cc53c48ebd17d88b0dd3255aa2c (diff) | |
download | llvm-c0b8954ecba500e3d9609152295b74ccd7d89d62.zip llvm-c0b8954ecba500e3d9609152295b74ccd7d89d62.tar.gz llvm-c0b8954ecba500e3d9609152295b74ccd7d89d62.tar.bz2 |
[libTooling] In Clang Transformer, change `Metadata` field to deferred evalutaion
`Metadata` is being changed from an `llvm::Any` to a `MatchConsumer<llvm;:Any>`, so that it's evaluation can be be dependent on `MatchResult`s passed in.
Reviewed By: ymandel, gribozavr2
Differential Revision: https://reviews.llvm.org/D83820
Diffstat (limited to 'clang/unittests/Tooling/TransformerTest.cpp')
-rw-r--r-- | clang/unittests/Tooling/TransformerTest.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/clang/unittests/Tooling/TransformerTest.cpp b/clang/unittests/Tooling/TransformerTest.cpp index 7d6b632..59b334b 100644 --- a/clang/unittests/Tooling/TransformerTest.cpp +++ b/clang/unittests/Tooling/TransformerTest.cpp @@ -440,6 +440,12 @@ TEST_F(TransformerTest, RemoveEdit) { } TEST_F(TransformerTest, WithMetadata) { + auto makeMetadata = [](const MatchFinder::MatchResult &R) -> llvm::Any { + int N = + R.Nodes.getNodeAs<IntegerLiteral>("int")->getValue().getLimitedValue(); + return N; + }; + std::string Input = R"cc( int f() { int x = 5; @@ -448,8 +454,11 @@ TEST_F(TransformerTest, WithMetadata) { )cc"; Transformer T( - makeRule(declStmt().bind("decl"), - withMetadata(remove(statement(std::string("decl"))), 17)), + makeRule( + declStmt(containsDeclaration(0, varDecl(hasInitializer( + integerLiteral().bind("int"))))) + .bind("decl"), + withMetadata(remove(statement(std::string("decl"))), makeMetadata)), consumer()); T.registerMatchers(&MatchFinder); auto Factory = newFrontendActionFactory(&MatchFinder); @@ -459,7 +468,7 @@ TEST_F(TransformerTest, WithMetadata) { ASSERT_EQ(Changes.size(), 1u); const llvm::Any &Metadata = Changes[0].getMetadata(); ASSERT_TRUE(llvm::any_isa<int>(Metadata)); - EXPECT_THAT(llvm::any_cast<int>(Metadata), 17); + EXPECT_THAT(llvm::any_cast<int>(Metadata), 5); } TEST_F(TransformerTest, MultiChange) { |