Skip to content

Commit

Permalink
Make ArgumentAdjuster aware of the current file being processed.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
alexfh committed Nov 5, 2015
1 parent fc5d9dd commit 857b10f
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 12 deletions.
6 changes: 4 additions & 2 deletions clang/include/clang/Tooling/ArgumentsAdjusters.h
Expand Up @@ -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>
Expand All @@ -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.
Expand Down
12 changes: 5 additions & 7 deletions clang/lib/Tooling/ArgumentsAdjusters.cpp
Expand Up @@ -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];
Expand All @@ -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];
Expand All @@ -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;
Expand All @@ -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);
};
}

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Tooling/CommonOptionsParser.cpp
Expand Up @@ -86,7 +86,7 @@ class ArgumentsAdjustingCompilations : public CompilationDatabase {
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;
}
};
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Tooling/Tooling.cpp
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion clang/unittests/Tooling/ToolingTest.cpp
Expand Up @@ -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;
Expand Down

0 comments on commit 857b10f

Please sign in to comment.