Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp

Issue 2677483004: Emit edit tracking information from *all* rewriters. (Closed)
Patch Set: It even works this time... Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/clang/rewrite_to_chrome_style/EditTracker.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Changes Blink-style names to Chrome-style names. Currently transforms: 5 // Changes Blink-style names to Chrome-style names. Currently transforms:
6 // fields: 6 // fields:
7 // int m_operationCount => int operation_count_ 7 // int m_operationCount => int operation_count_
8 // variables (including parameters): 8 // variables (including parameters):
9 // int mySuperVariable => int my_super_variable 9 // int mySuperVariable => int my_super_variable
10 // constants: 10 // constants:
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 const clang::UnresolvedUsingValueDecl& decl) { 1032 const clang::UnresolvedUsingValueDecl& decl) {
1033 return decl.getNameInfo().getLoc(); 1033 return decl.getNameInfo().getLoc();
1034 } 1034 }
1035 static const char* GetName() { return "decl"; } 1035 static const char* GetName() { return "decl"; }
1036 static const char* GetType() { return "UnresolvedUsingValueDecl"; } 1036 static const char* GetType() { return "UnresolvedUsingValueDecl"; }
1037 }; 1037 };
1038 1038
1039 template <typename TargetNode> 1039 template <typename TargetNode>
1040 class RewriterBase : public MatchFinder::MatchCallback { 1040 class RewriterBase : public MatchFinder::MatchCallback {
1041 public: 1041 public:
1042 explicit RewriterBase(std::set<Replacement>* replacements) 1042 explicit RewriterBase(std::set<Replacement>* replacements,
1043 : replacements_(replacements) {} 1043 RenameCategory category)
1044 : replacements_(replacements), edit_tracker_(category) {}
1044 1045
1045 const TargetNode& GetTargetNode(const MatchFinder::MatchResult& result) { 1046 const TargetNode& GetTargetNode(const MatchFinder::MatchResult& result) {
1046 const TargetNode* target_node = result.Nodes.getNodeAs<TargetNode>( 1047 const TargetNode* target_node = result.Nodes.getNodeAs<TargetNode>(
1047 TargetNodeTraits<TargetNode>::GetName()); 1048 TargetNodeTraits<TargetNode>::GetName());
1048 assert(target_node); 1049 assert(target_node);
1049 return *target_node; 1050 return *target_node;
1050 } 1051 }
1051 1052
1052 bool GenerateReplacement(const MatchFinder::MatchResult& result, 1053 bool GenerateReplacement(const MatchFinder::MatchResult& result,
1053 clang::SourceLocation loc, 1054 clang::SourceLocation loc,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 return; 1120 return;
1120 1121
1121 Replacement replacement; 1122 Replacement replacement;
1122 if (!GenerateReplacement(result, loc, old_name, new_name, &replacement)) 1123 if (!GenerateReplacement(result, loc, old_name, new_name, &replacement))
1123 return; 1124 return;
1124 1125
1125 replacements_->insert(std::move(replacement)); 1126 replacements_->insert(std::move(replacement));
1126 edit_tracker_.Add(*result.SourceManager, loc, old_name, new_name); 1127 edit_tracker_.Add(*result.SourceManager, loc, old_name, new_name);
1127 } 1128 }
1128 1129
1129 const EditTracker& edit_tracker() const { return edit_tracker_; } 1130 const EditTracker* edit_tracker() const { return &edit_tracker_; }
1130 1131
1131 private: 1132 private:
1132 std::set<Replacement>* const replacements_; 1133 std::set<Replacement>* const replacements_;
1133 EditTracker edit_tracker_; 1134 EditTracker edit_tracker_;
1134 }; 1135 };
1135 1136
1137 template <typename DeclNode>
1138 RenameCategory GetCategory();
1139 template <>
1140 RenameCategory GetCategory<clang::FieldDecl>() {
1141 return RenameCategory::kField;
1142 }
1143 template <>
1144 RenameCategory GetCategory<clang::VarDecl>() {
1145 return RenameCategory::kVariable;
1146 }
1147 template <>
1148 RenameCategory GetCategory<clang::FunctionDecl>() {
1149 return RenameCategory::kFunction;
1150 }
1151 template <>
1152 RenameCategory GetCategory<clang::CXXMethodDecl>() {
1153 return RenameCategory::kFunction;
1154 }
1155 template <>
1156 RenameCategory GetCategory<clang::EnumConstantDecl>() {
1157 return RenameCategory::kEnumValue;
1158 }
1159 template <>
1160 RenameCategory GetCategory<clang::NamedDecl>() {
1161 return RenameCategory::kUnresolved;
1162 }
1163 template <>
1164 RenameCategory GetCategory<clang::UsingDecl>() {
1165 return RenameCategory::kUnresolved;
1166 }
1167
1136 template <typename DeclNode, typename TargetNode> 1168 template <typename DeclNode, typename TargetNode>
1137 class DeclRewriterBase : public RewriterBase<TargetNode> { 1169 class DeclRewriterBase : public RewriterBase<TargetNode> {
1138 public: 1170 public:
1139 using Base = RewriterBase<TargetNode>; 1171 using Base = RewriterBase<TargetNode>;
1140 1172
1141 explicit DeclRewriterBase(std::set<Replacement>* replacements) 1173 explicit DeclRewriterBase(std::set<Replacement>* replacements)
1142 : Base(replacements) {} 1174 : Base(replacements, GetCategory<DeclNode>()) {}
1143 1175
1144 void run(const MatchFinder::MatchResult& result) override { 1176 void run(const MatchFinder::MatchResult& result) override {
1145 const DeclNode* decl = result.Nodes.getNodeAs<DeclNode>("decl"); 1177 const DeclNode* decl = result.Nodes.getNodeAs<DeclNode>("decl");
1146 if (!decl->getDeclName().isIdentifier()) 1178 if (!decl->getDeclName().isIdentifier())
1147 return; 1179 return;
1148 1180
1149 assert(decl); 1181 assert(decl);
1150 llvm::StringRef old_name = decl->getName(); 1182 llvm::StringRef old_name = decl->getName();
1151 1183
1152 // Return early if there's no name to be renamed. 1184 // Return early if there's no name to be renamed.
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 // that |using Base::foo| refers to a method. 1351 // that |using Base::foo| refers to a method.
1320 return true; 1352 return true;
1321 } 1353 }
1322 1354
1323 template <typename TargetNode> 1355 template <typename TargetNode>
1324 class UnresolvedRewriterBase : public RewriterBase<TargetNode> { 1356 class UnresolvedRewriterBase : public RewriterBase<TargetNode> {
1325 public: 1357 public:
1326 using Base = RewriterBase<TargetNode>; 1358 using Base = RewriterBase<TargetNode>;
1327 1359
1328 explicit UnresolvedRewriterBase(std::set<Replacement>* replacements) 1360 explicit UnresolvedRewriterBase(std::set<Replacement>* replacements)
1329 : RewriterBase<TargetNode>(replacements) {} 1361 : RewriterBase<TargetNode>(replacements, RenameCategory::kUnresolved) {}
1330 1362
1331 void run(const MatchFinder::MatchResult& result) override { 1363 void run(const MatchFinder::MatchResult& result) override {
1332 const TargetNode& node = Base::GetTargetNode(result); 1364 const TargetNode& node = Base::GetTargetNode(result);
1333 1365
1334 clang::DeclarationName decl_name = GetUnresolvedName(node); 1366 clang::DeclarationName decl_name = GetUnresolvedName(node);
1335 switch (decl_name.getNameKind()) { 1367 switch (decl_name.getNameKind()) {
1336 // Do not rewrite this: 1368 // Do not rewrite this:
1337 // return operator T*(); 1369 // return operator T*();
1338 // into this: 1370 // into this:
1339 // return Operator type - parameter - 0 - 0 * T * (); 1371 // return Operator type - parameter - 0 - 0 * T * ();
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 // Prepare and run the tool. 1869 // Prepare and run the tool.
1838 SourceFileCallbacks source_file_callbacks(&gmock_member_rewriter); 1870 SourceFileCallbacks source_file_callbacks(&gmock_member_rewriter);
1839 std::unique_ptr<clang::tooling::FrontendActionFactory> factory = 1871 std::unique_ptr<clang::tooling::FrontendActionFactory> factory =
1840 clang::tooling::newFrontendActionFactory(&match_finder, 1872 clang::tooling::newFrontendActionFactory(&match_finder,
1841 &source_file_callbacks); 1873 &source_file_callbacks);
1842 int result = tool.run(factory.get()); 1874 int result = tool.run(factory.get());
1843 if (result != 0) 1875 if (result != 0)
1844 return result; 1876 return result;
1845 1877
1846 // Supplemental data for the Blink rename rebase helper. 1878 // Supplemental data for the Blink rename rebase helper.
1847 // TODO(dcheng): There's a lot of match rewriters missing from this list. 1879 std::vector<const EditTracker*> all_edit_trackers{
1880 field_decl_rewriter.edit_tracker(),
1881 var_decl_rewriter.edit_tracker(),
1882 enum_member_decl_rewriter.edit_tracker(),
1883 member_rewriter.edit_tracker(),
1884 decl_ref_rewriter.edit_tracker(),
1885 enum_member_ref_rewriter.edit_tracker(),
1886 member_ref_rewriter.edit_tracker(),
1887 function_decl_rewriter.edit_tracker(),
1888 function_ref_rewriter.edit_tracker(),
1889 method_decl_rewriter.edit_tracker(),
1890 method_ref_rewriter.edit_tracker(),
1891 method_member_rewriter.edit_tracker(),
1892 constructor_initializer_rewriter.edit_tracker(),
1893 unresolved_lookup_rewriter.edit_tracker(),
1894 unresolved_member_rewriter.edit_tracker(),
1895 unresolved_dependent_member_rewriter.edit_tracker(),
1896 unresolved_using_value_decl_rewriter.edit_tracker(),
1897 using_decl_rewriter.edit_tracker(),
1898 dependent_scope_decl_ref_expr_rewriter.edit_tracker(),
1899 cxx_dependent_scope_member_expr_rewriter.edit_tracker(),
1900 gmock_member_rewriter.edit_tracker(),
1901 };
1848 llvm::outs() << "==== BEGIN TRACKED EDITS ====\n"; 1902 llvm::outs() << "==== BEGIN TRACKED EDITS ====\n";
1849 field_decl_rewriter.edit_tracker().SerializeTo("var", llvm::outs()); 1903 for (const EditTracker* edit_tracker : all_edit_trackers)
1850 var_decl_rewriter.edit_tracker().SerializeTo("var", llvm::outs()); 1904 edit_tracker->SerializeTo(llvm::outs());
1851 enum_member_decl_rewriter.edit_tracker().SerializeTo("enu", llvm::outs());
1852 function_decl_rewriter.edit_tracker().SerializeTo("fun", llvm::outs());
1853 method_decl_rewriter.edit_tracker().SerializeTo("fun", llvm::outs());
1854 llvm::outs() << "==== END TRACKED EDITS ====\n"; 1905 llvm::outs() << "==== END TRACKED EDITS ====\n";
1855 1906
1856 // Serialization format is documented in tools/clang/scripts/run_tool.py 1907 // Serialization format is documented in tools/clang/scripts/run_tool.py
1857 llvm::outs() << "==== BEGIN EDITS ====\n"; 1908 llvm::outs() << "==== BEGIN EDITS ====\n";
1858 for (const auto& r : replacements) { 1909 for (const auto& r : replacements) {
1859 std::string replacement_text = r.getReplacementText().str(); 1910 std::string replacement_text = r.getReplacementText().str();
1860 std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0'); 1911 std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0');
1861 llvm::outs() << "r:::" << r.getFilePath() << ":::" << r.getOffset() 1912 llvm::outs() << "r:::" << r.getFilePath() << ":::" << r.getOffset()
1862 << ":::" << r.getLength() << ":::" << replacement_text << "\n"; 1913 << ":::" << r.getLength() << ":::" << replacement_text << "\n";
1863 } 1914 }
1864 llvm::outs() << "==== END EDITS ====\n"; 1915 llvm::outs() << "==== END EDITS ====\n";
1865 1916
1866 return 0; 1917 return 0;
1867 } 1918 }
OLDNEW
« no previous file with comments | « tools/clang/rewrite_to_chrome_style/EditTracker.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698