]> granicus.if.org Git - clang/commitdiff
[LibTooling] Add Explanation parameter to `makeRule`.
authorYitzhak Mandelbaum <yitzhakm@google.com>
Fri, 24 May 2019 15:11:45 +0000 (15:11 +0000)
committerYitzhak Mandelbaum <yitzhakm@google.com>
Fri, 24 May 2019 15:11:45 +0000 (15:11 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@361643 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Tooling/Refactoring/Transformer.h
lib/Tooling/Refactoring/Transformer.cpp
unittests/Tooling/TransformerTest.cpp

index 4fecd2a4909e09bd5e055da9787b94a7bde53423..e66dd0550247e7f67082dc4d93ff80416577ad8b 100644 (file)
@@ -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.
index bcbe00131074e70f72a9a9db9846f2d113a6e363..76573d6b59f69d8ff85a64da16ffde34f8afb260 100644 (file)
@@ -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
index 0bf012a9fc552e3ff80d0f04f420fbf28b4a71f7..41c7e7a28bd5a1cd3b67bda57c52e30b5abff873 100644 (file)
@@ -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;
 }