66 lines
2.3 KiB
C++
66 lines
2.3 KiB
C++
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Performs simple cleanups of base::Value API usage.
|
|
|
|
#include <assert.h>
|
|
#include <memory>
|
|
#include <set>
|
|
#include <string>
|
|
|
|
#include "clang/ASTMatchers/ASTMatchFinder.h"
|
|
#include "clang/Basic/CharInfo.h"
|
|
#include "clang/Basic/SourceManager.h"
|
|
#include "clang/Frontend/FrontendActions.h"
|
|
#include "clang/Lex/Lexer.h"
|
|
#include "clang/Tooling/CommonOptionsParser.h"
|
|
#include "clang/Tooling/Refactoring.h"
|
|
#include "clang/Tooling/Tooling.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/TargetSelect.h"
|
|
|
|
#include "ListValueRewriter.h"
|
|
|
|
using namespace clang::ast_matchers;
|
|
using clang::tooling::CommonOptionsParser;
|
|
using clang::tooling::Replacement;
|
|
using llvm::StringRef;
|
|
|
|
static llvm::cl::extrahelp common_help(CommonOptionsParser::HelpMessage);
|
|
|
|
int main(int argc, const char* argv[]) {
|
|
// TODO(dcheng): Clang tooling should do this itself.
|
|
// http://llvm.org/bugs/show_bug.cgi?id=21627
|
|
llvm::InitializeNativeTarget();
|
|
llvm::InitializeNativeTargetAsmParser();
|
|
llvm::cl::OptionCategory category(
|
|
"value_cleanup: Cleanup deprecated base::Value APIs.");
|
|
CommonOptionsParser options(argc, argv, category);
|
|
clang::tooling::ClangTool tool(options.getCompilations(),
|
|
options.getSourcePathList());
|
|
|
|
MatchFinder match_finder;
|
|
std::set<Replacement> replacements;
|
|
|
|
ListValueRewriter list_value_rewriter(&replacements);
|
|
list_value_rewriter.RegisterMatchers(&match_finder);
|
|
|
|
std::unique_ptr<clang::tooling::FrontendActionFactory> factory =
|
|
clang::tooling::newFrontendActionFactory(&match_finder);
|
|
int result = tool.run(factory.get());
|
|
if (result != 0)
|
|
return result;
|
|
|
|
// Serialization format is documented in tools/clang/scripts/run_tool.py
|
|
llvm::outs() << "==== BEGIN EDITS ====\n";
|
|
for (const auto& r : replacements) {
|
|
std::string replacement_text = r.getReplacementText().str();
|
|
std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0');
|
|
llvm::outs() << "r:::" << r.getFilePath() << ":::" << r.getOffset()
|
|
<< ":::" << r.getLength() << ":::" << replacement_text << "\n";
|
|
}
|
|
llvm::outs() << "==== END EDITS ====\n";
|
|
|
|
return 0;
|
|
}
|