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