1//===--- ArgumentsAdjusters.h - Command line arguments adjuster -*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file declares typedef ArgumentsAdjuster and functions to create several
11// useful argument adjusters.
12// ArgumentsAdjusters modify command line arguments obtained from a compilation
13// database before they are used to run a frontend action.
14//
15//===----------------------------------------------------------------------===//
16
17#ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
18#define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
19
20#include "clang/Basic/LLVM.h"
21#include "llvm/ADT/StringRef.h"
22#include <functional>
23#include <string>
24#include <vector>
25
26namespace clang {
27namespace tooling {
28
29/// \brief A sequence of command line arguments.
30typedef std::vector<std::string> CommandLineArguments;
31
32/// \brief A prototype of a command line adjuster.
33///
34/// Command line argument adjuster is responsible for command line arguments
35/// modification before the arguments are used to run a frontend action.
36typedef std::function<CommandLineArguments(
37    const CommandLineArguments &, StringRef Filename)> ArgumentsAdjuster;
38
39/// \brief Gets an argument adjuster that converts input command line arguments
40/// to the "syntax check only" variant.
41ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
42
43/// \brief Gets an argument adjuster which removes output-related command line
44/// arguments.
45ArgumentsAdjuster getClangStripOutputAdjuster();
46
47enum class ArgumentInsertPosition { BEGIN, END };
48
49/// \brief Gets an argument adjuster which inserts \p Extra arguments in the
50/// specified position.
51ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
52                                            ArgumentInsertPosition Pos);
53
54/// \brief Gets an argument adjuster which inserts an \p Extra argument in the
55/// specified position.
56ArgumentsAdjuster getInsertArgumentAdjuster(
57    const char *Extra,
58    ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
59
60/// \brief Gets an argument adjuster which adjusts the arguments in sequence
61/// with the \p First adjuster and then with the \p Second one.
62ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
63                                   ArgumentsAdjuster Second);
64
65} // namespace tooling
66} // namespace clang
67
68#endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
69
70