ArgumentsAdjusters.h revision 360784
1//===- ArgumentsAdjusters.h - Command line arguments adjuster ---*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares type ArgumentsAdjuster and functions to create several
10// useful argument adjusters.
11// ArgumentsAdjusters modify command line arguments obtained from a compilation
12// database before they are used to run a frontend action.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
17#define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
18
19#include "clang/Basic/LLVM.h"
20#include "llvm/ADT/StringRef.h"
21#include <functional>
22#include <string>
23#include <vector>
24
25namespace clang {
26namespace tooling {
27
28/// A sequence of command line arguments.
29using CommandLineArguments = std::vector<std::string>;
30
31/// A prototype of a command line adjuster.
32///
33/// Command line argument adjuster is responsible for command line arguments
34/// modification before the arguments are used to run a frontend action.
35using ArgumentsAdjuster = std::function<CommandLineArguments(
36    const CommandLineArguments &, StringRef Filename)>;
37
38/// Gets an argument adjuster that converts input command line arguments
39/// to the "syntax check only" variant.
40ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
41
42/// Gets an argument adjuster which removes output-related command line
43/// arguments.
44ArgumentsAdjuster getClangStripOutputAdjuster();
45
46/// Gets an argument adjuster which removes command line arguments related to
47/// diagnostic serialization.
48ArgumentsAdjuster getClangStripSerializeDiagnosticAdjuster();
49
50/// Gets an argument adjuster which removes dependency-file
51/// related command line arguments.
52ArgumentsAdjuster getClangStripDependencyFileAdjuster();
53
54enum class ArgumentInsertPosition { BEGIN, END };
55
56/// Gets an argument adjuster which inserts \p Extra arguments in the
57/// specified position.
58ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
59                                            ArgumentInsertPosition Pos);
60
61/// Gets an argument adjuster which inserts an \p Extra argument in the
62/// specified position.
63ArgumentsAdjuster getInsertArgumentAdjuster(
64    const char *Extra,
65    ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
66
67/// Gets an argument adjuster which strips plugin related command line
68/// arguments.
69ArgumentsAdjuster getStripPluginsAdjuster();
70
71/// Gets an argument adjuster which adjusts the arguments in sequence
72/// with the \p First adjuster and then with the \p Second one.
73ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
74                                   ArgumentsAdjuster Second);
75
76} // namespace tooling
77} // namespace clang
78
79#endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
80