mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 18:10:11 +01:00
This replaces the use of `isExpansionInMainFile` with instead taking the list of input files, and only touching them. This doesn't keep `isExpansionInMainFile` because it should be redundant, and as such it'd be easy to forget. Unless it starts being a performance issue, it's probably better to omit.
41 lines
1.5 KiB
C++
41 lines
1.5 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
#include "clang/Tooling/CommonOptionsParser.h"
|
|
#include "clang/Tooling/Refactoring.h"
|
|
#include "migrate_cpp/cpp_refactoring/fn_inserter.h"
|
|
|
|
namespace cam = ::clang::ast_matchers;
|
|
namespace ct = ::clang::tooling;
|
|
|
|
// Initialize the files in replacements. Matcher will restrict replacements to
|
|
// initialized files.
|
|
static void InitReplacements(ct::RefactoringTool* tool) {
|
|
auto& files = tool->getFiles();
|
|
auto& repl = tool->getReplacements();
|
|
for (const auto& path : tool->getSourcePaths()) {
|
|
auto file = files.getFile(path);
|
|
if (file.getError()) {
|
|
llvm::report_fatal_error("Error accessing `" + path +
|
|
"`: " + file.getError().message() + "\n");
|
|
}
|
|
repl.insert({files.getCanonicalName(*file).str(), {}});
|
|
}
|
|
}
|
|
|
|
auto main(int argc, const char** argv) -> int {
|
|
llvm::cl::OptionCategory category("C++ refactoring options");
|
|
auto parser = ct::CommonOptionsParser::create(argc, argv, category);
|
|
ct::RefactoringTool tool(parser->getCompilations(),
|
|
parser->getSourcePathList());
|
|
InitReplacements(&tool);
|
|
|
|
// Set up AST matcher callbacks.
|
|
cam::MatchFinder finder;
|
|
Carbon::FnInserter fn_inserter(tool.getReplacements(), &finder);
|
|
|
|
return tool.runAndSave(
|
|
clang::tooling::newFrontendActionFactory(&finder).get());
|
|
}
|