forked from OSchip/llvm-project
Make ArgumentAdjuster aware of the current file being processed.
Summary: This is needed to handle per-project configurations when adding extra arguments in clang-tidy for example. Reviewers: klimek, djasper Subscribers: djasper, cfe-commits, klimek Differential Revision: http://reviews.llvm.org/D14191 llvm-svn: 252134
This commit is contained in:
parent
fc5d9dd4b5
commit
857b10f471
|
@ -17,6 +17,8 @@
|
|||
#ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
|
||||
#define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
|
||||
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
@ -31,8 +33,8 @@ typedef std::vector<std::string> CommandLineArguments;
|
|||
///
|
||||
/// Command line argument adjuster is responsible for command line arguments
|
||||
/// modification before the arguments are used to run a frontend action.
|
||||
typedef std::function<CommandLineArguments(const CommandLineArguments &)>
|
||||
ArgumentsAdjuster;
|
||||
typedef std::function<CommandLineArguments(
|
||||
const CommandLineArguments &, StringRef Filename)> ArgumentsAdjuster;
|
||||
|
||||
/// \brief Gets an argument adjuster that converts input command line arguments
|
||||
/// to the "syntax check only" variant.
|
||||
|
|
|
@ -13,15 +13,13 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/Tooling/ArgumentsAdjusters.h"
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
namespace clang {
|
||||
namespace tooling {
|
||||
|
||||
/// Add -fsyntax-only option to the commnand line arguments.
|
||||
ArgumentsAdjuster getClangSyntaxOnlyAdjuster() {
|
||||
return [](const CommandLineArguments &Args) {
|
||||
return [](const CommandLineArguments &Args, StringRef /*unused*/) {
|
||||
CommandLineArguments AdjustedArgs;
|
||||
for (size_t i = 0, e = Args.size(); i != e; ++i) {
|
||||
StringRef Arg = Args[i];
|
||||
|
@ -36,7 +34,7 @@ ArgumentsAdjuster getClangSyntaxOnlyAdjuster() {
|
|||
}
|
||||
|
||||
ArgumentsAdjuster getClangStripOutputAdjuster() {
|
||||
return [](const CommandLineArguments &Args) {
|
||||
return [](const CommandLineArguments &Args, StringRef /*unused*/) {
|
||||
CommandLineArguments AdjustedArgs;
|
||||
for (size_t i = 0, e = Args.size(); i < e; ++i) {
|
||||
StringRef Arg = Args[i];
|
||||
|
@ -55,7 +53,7 @@ ArgumentsAdjuster getClangStripOutputAdjuster() {
|
|||
|
||||
ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
|
||||
ArgumentInsertPosition Pos) {
|
||||
return [Extra, Pos](const CommandLineArguments &Args) {
|
||||
return [Extra, Pos](const CommandLineArguments &Args, StringRef /*unused*/) {
|
||||
CommandLineArguments Return(Args);
|
||||
|
||||
CommandLineArguments::iterator I;
|
||||
|
@ -78,8 +76,8 @@ ArgumentsAdjuster getInsertArgumentAdjuster(const char *Extra,
|
|||
|
||||
ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
|
||||
ArgumentsAdjuster Second) {
|
||||
return [First, Second](const CommandLineArguments &Args) {
|
||||
return Second(First(Args));
|
||||
return [First, Second](const CommandLineArguments &Args, StringRef File) {
|
||||
return Second(First(Args, File), File);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ private:
|
|||
adjustCommands(std::vector<CompileCommand> Commands) const {
|
||||
for (CompileCommand &Command : Commands)
|
||||
for (const auto &Adjuster : Adjusters)
|
||||
Command.CommandLine = Adjuster(Command.CommandLine);
|
||||
Command.CommandLine = Adjuster(Command.CommandLine, Command.Filename);
|
||||
return Commands;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -409,7 +409,7 @@ int ClangTool::run(ToolAction *Action) {
|
|||
|
||||
std::vector<std::string> CommandLine = CompileCommand.CommandLine;
|
||||
if (ArgsAdjuster)
|
||||
CommandLine = ArgsAdjuster(CommandLine);
|
||||
CommandLine = ArgsAdjuster(CommandLine, CompileCommand.Filename);
|
||||
assert(!CommandLine.empty());
|
||||
CommandLine[0] = MainExecutable;
|
||||
// FIXME: We need a callback mechanism for the tool writer to output a
|
||||
|
|
|
@ -288,7 +288,7 @@ TEST(ClangToolTest, ArgumentAdjusters) {
|
|||
bool Found = false;
|
||||
bool Ran = false;
|
||||
ArgumentsAdjuster CheckSyntaxOnlyAdjuster =
|
||||
[&Found, &Ran](const CommandLineArguments &Args) {
|
||||
[&Found, &Ran](const CommandLineArguments &Args, StringRef /*unused*/) {
|
||||
Ran = true;
|
||||
if (std::find(Args.begin(), Args.end(), "-fsyntax-only") != Args.end())
|
||||
Found = true;
|
||||
|
|
Loading…
Reference in New Issue