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