ArgumentsAdjusters.h revision 341825
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 type 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/// A sequence of command line arguments.
30using CommandLineArguments = std::vector<std::string>;
31
32/// 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.
36using ArgumentsAdjuster = std::function<CommandLineArguments(
37    const CommandLineArguments &, StringRef Filename)>;
38
39/// Gets an argument adjuster that converts input command line arguments
40/// to the "syntax check only" variant.
41ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
42
43/// Gets an argument adjuster which removes output-related command line
44/// arguments.
45ArgumentsAdjuster getClangStripOutputAdjuster();
46
47/// Gets an argument adjuster which removes dependency-file
48/// related command line arguments.
49ArgumentsAdjuster getClangStripDependencyFileAdjuster();
50
51enum class ArgumentInsertPosition { BEGIN, END };
52
53/// Gets an argument adjuster which inserts \p Extra arguments in the
54/// specified position.
55ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
56                                            ArgumentInsertPosition Pos);
57
58/// Gets an argument adjuster which inserts an \p Extra argument in the
59/// specified position.
60ArgumentsAdjuster getInsertArgumentAdjuster(
61    const char *Extra,
62    ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
63
64/// Gets an argument adjuster which adjusts the arguments in sequence
65/// with the \p First adjuster and then with the \p Second one.
66ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
67                                   ArgumentsAdjuster Second);
68
69} // namespace tooling
70} // namespace clang
71
72#endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
73