diff options
author | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-05-24 15:11:45 +0000 |
---|---|---|
committer | Yitzhak Mandelbaum <yitzhakm@google.com> | 2019-05-24 15:11:45 +0000 |
commit | fab7205ac454cb1459216f0524294aa4beb1b720 (patch) | |
tree | 55c9bd376dfd0d602e449850e1e4c3c0dae722cc /clang | |
parent | c1cc8d0eca459a5f49e8e6b99a93b0e1d05a13ba (diff) | |
download | llvm-fab7205ac454cb1459216f0524294aa4beb1b720.zip llvm-fab7205ac454cb1459216f0524294aa4beb1b720.tar.gz llvm-fab7205ac454cb1459216f0524294aa4beb1b720.tar.bz2 |
[LibTooling] Add Explanation parameter to `makeRule`.
Summary:
Conceptually, a single-case RewriteRule has a matcher, edit(s) and an (optional)
explanation. `makeRule` previously only took the matcher and edit(s). This
change adds (optional) support for the explanation.
Reviewers: ilya-biryukov
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D62390
llvm-svn: 361643
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Tooling/Refactoring/Transformer.h | 8 | ||||
-rw-r--r-- | clang/lib/Tooling/Refactoring/Transformer.cpp | 8 | ||||
-rw-r--r-- | clang/unittests/Tooling/TransformerTest.cpp | 3 |
3 files changed, 10 insertions, 9 deletions
diff --git a/clang/include/clang/Tooling/Refactoring/Transformer.h b/clang/include/clang/Tooling/Refactoring/Transformer.h index 4fecd2a..e66dd05 100644 --- a/clang/include/clang/Tooling/Refactoring/Transformer.h +++ b/clang/include/clang/Tooling/Refactoring/Transformer.h @@ -125,14 +125,16 @@ struct RewriteRule { /// Convenience function for constructing a simple \c RewriteRule. RewriteRule makeRule(ast_matchers::internal::DynTypedMatcher M, - SmallVector<ASTEdit, 1> Edits); + SmallVector<ASTEdit, 1> Edits, + TextGenerator Explanation = nullptr); /// Convenience overload of \c makeRule for common case of only one edit. inline RewriteRule makeRule(ast_matchers::internal::DynTypedMatcher M, - ASTEdit Edit) { + ASTEdit Edit, + TextGenerator Explanation = nullptr) { SmallVector<ASTEdit, 1> Edits; Edits.emplace_back(std::move(Edit)); - return makeRule(std::move(M), std::move(Edits)); + return makeRule(std::move(M), std::move(Edits), std::move(Explanation)); } /// Applies the first rule whose pattern matches; other rules are ignored. diff --git a/clang/lib/Tooling/Refactoring/Transformer.cpp b/clang/lib/Tooling/Refactoring/Transformer.cpp index bcbe001..76573d6 100644 --- a/clang/lib/Tooling/Refactoring/Transformer.cpp +++ b/clang/lib/Tooling/Refactoring/Transformer.cpp @@ -96,10 +96,10 @@ ASTEdit tooling::change(RangeSelector S, TextGenerator Replacement) { return E; } -RewriteRule tooling::makeRule(DynTypedMatcher M, - SmallVector<ASTEdit, 1> Edits) { - return RewriteRule{ - {RewriteRule::Case{std::move(M), std::move(Edits), nullptr}}}; +RewriteRule tooling::makeRule(DynTypedMatcher M, SmallVector<ASTEdit, 1> Edits, + TextGenerator Explanation) { + return RewriteRule{{RewriteRule::Case{std::move(M), std::move(Edits), + std::move(Explanation)}}}; } // Determines whether A is a base type of B in the class hierarchy, including diff --git a/clang/unittests/Tooling/TransformerTest.cpp b/clang/unittests/Tooling/TransformerTest.cpp index 0bf012a..41c7e7a 100644 --- a/clang/unittests/Tooling/TransformerTest.cpp +++ b/clang/unittests/Tooling/TransformerTest.cpp @@ -147,8 +147,7 @@ static RewriteRule ruleStrlenSize() { on(expr(hasType(isOrPointsTo(StringType))) .bind(StringExpr)), callee(cxxMethodDecl(hasName("c_str")))))), - change(text("REPLACED"))); - R.Cases[0].Explanation = text("Use size() method directly on string."); + change(text("REPLACED")), text("Use size() method directly on string.")); return R; } |