1239313Sdim//===--- ArgumentsAdjusters.cpp - Command line arguments adjuster ---------===// 2239313Sdim// 3239313Sdim// The LLVM Compiler Infrastructure 4239313Sdim// 5239313Sdim// This file is distributed under the University of Illinois Open Source 6239313Sdim// License. See LICENSE.TXT for details. 7239313Sdim// 8239313Sdim//===----------------------------------------------------------------------===// 9239313Sdim// 10239313Sdim// This file contains definitions of classes which implement ArgumentsAdjuster 11239313Sdim// interface. 12239313Sdim// 13239313Sdim//===----------------------------------------------------------------------===// 14239313Sdim 15239313Sdim#include "clang/Tooling/ArgumentsAdjusters.h" 16263508Sdim#include "clang/Basic/LLVM.h" 17263508Sdim#include "llvm/ADT/StringRef.h" 18239313Sdim 19239313Sdimnamespace clang { 20239313Sdimnamespace tooling { 21239313Sdim 22239313Sdimvoid ArgumentsAdjuster::anchor() { 23239313Sdim} 24239313Sdim 25239313Sdim/// Add -fsyntax-only option to the commnand line arguments. 26239313SdimCommandLineArguments 27239313SdimClangSyntaxOnlyAdjuster::Adjust(const CommandLineArguments &Args) { 28263508Sdim CommandLineArguments AdjustedArgs; 29263508Sdim for (size_t i = 0, e = Args.size(); i != e; ++i) { 30263508Sdim StringRef Arg = Args[i]; 31263508Sdim // FIXME: Remove options that generate output. 32263508Sdim if (!Arg.startswith("-fcolor-diagnostics") && 33263508Sdim !Arg.startswith("-fdiagnostics-color")) 34263508Sdim AdjustedArgs.push_back(Args[i]); 35263508Sdim } 36239313Sdim AdjustedArgs.push_back("-fsyntax-only"); 37239313Sdim return AdjustedArgs; 38239313Sdim} 39239313Sdim 40263508SdimCommandLineArguments 41263508SdimClangStripOutputAdjuster::Adjust(const CommandLineArguments &Args) { 42263508Sdim CommandLineArguments AdjustedArgs; 43263508Sdim for (size_t i = 0, e = Args.size(); i < e; ++i) { 44263508Sdim StringRef Arg = Args[i]; 45263508Sdim if(!Arg.startswith("-o")) 46263508Sdim AdjustedArgs.push_back(Args[i]); 47263508Sdim 48263508Sdim if(Arg == "-o") { 49263508Sdim // Output is specified as -o foo. Skip the next argument also. 50263508Sdim ++i; 51263508Sdim } 52263508Sdim // Else, the output is specified as -ofoo. Just do nothing. 53263508Sdim } 54263508Sdim return AdjustedArgs; 55263508Sdim} 56263508Sdim 57239313Sdim} // end namespace tooling 58239313Sdim} // end namespace clang 59239313Sdim 60