1a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//===--- ArgumentsAdjusters.cpp - Command line arguments adjuster ---------===//
2a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//
3a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//                     The LLVM Compiler Infrastructure
4a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//
5a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan// This file is distributed under the University of Illinois Open Source
6a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan// License. See LICENSE.TXT for details.
7a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//
8a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//===----------------------------------------------------------------------===//
9a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//
10a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan// This file contains definitions of classes which implement ArgumentsAdjuster
11a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan// interface.
12a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//
13a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan//===----------------------------------------------------------------------===//
14a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan
15a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan#include "clang/Tooling/ArgumentsAdjusters.h"
16e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko#include "clang/Basic/LLVM.h"
17e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko#include "llvm/ADT/StringRef.h"
18a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan
19a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyannamespace clang {
20a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyannamespace tooling {
21a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan
22025983a8dd27fd5ff1defa11ebcd88ecd7248773David Blaikievoid ArgumentsAdjuster::anchor() {
23025983a8dd27fd5ff1defa11ebcd88ecd7248773David Blaikie}
24025983a8dd27fd5ff1defa11ebcd88ecd7248773David Blaikie
25a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan/// Add -fsyntax-only option to the commnand line arguments.
26a01ddc787b5c8b1cf11e975d3586908d3629954cSimon AtanasyanCommandLineArguments
27a01ddc787b5c8b1cf11e975d3586908d3629954cSimon AtanasyanClangSyntaxOnlyAdjuster::Adjust(const CommandLineArguments &Args) {
28e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko  CommandLineArguments AdjustedArgs;
29e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko  for (size_t i = 0, e = Args.size(); i != e; ++i) {
30e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko    StringRef Arg = Args[i];
31e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko    // FIXME: Remove options that generate output.
32e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko    if (!Arg.startswith("-fcolor-diagnostics") &&
33e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko        !Arg.startswith("-fdiagnostics-color"))
34e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko      AdjustedArgs.push_back(Args[i]);
35e7b04868ea410c846e4c63c80e32538bbc693264Alexander Kornienko  }
36a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan  AdjustedArgs.push_back("-fsyntax-only");
37a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan  return AdjustedArgs;
38a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan}
39a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan
4063d5335aea916584b76790af1f1ed7caeaf8efebPavel LabathCommandLineArguments
4163d5335aea916584b76790af1f1ed7caeaf8efebPavel LabathClangStripOutputAdjuster::Adjust(const CommandLineArguments &Args) {
4263d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath  CommandLineArguments AdjustedArgs;
4363d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath  for (size_t i = 0, e = Args.size(); i < e; ++i) {
4463d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath    StringRef Arg = Args[i];
4563d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath    if(!Arg.startswith("-o"))
4663d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath      AdjustedArgs.push_back(Args[i]);
4763d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath
4863d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath    if(Arg == "-o") {
4963d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath      // Output is specified as -o foo. Skip the next argument also.
5063d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath      ++i;
5163d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath    }
5263d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath    // Else, the output is specified as -ofoo. Just do nothing.
5363d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath  }
5463d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath  return AdjustedArgs;
5563d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath}
5663d5335aea916584b76790af1f1ed7caeaf8efebPavel Labath
57a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan} // end namespace tooling
58a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan} // end namespace clang
59a01ddc787b5c8b1cf11e975d3586908d3629954cSimon Atanasyan
60