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 dependency-file
47/// related command line arguments.
48ArgumentsAdjuster getClangStripDependencyFileAdjuster();
49
50enum class ArgumentInsertPosition { BEGIN, END };
51
52/// Gets an argument adjuster which inserts \p Extra arguments in the
53/// specified position.
54ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
55 ArgumentInsertPosition Pos);
56
57/// Gets an argument adjuster which inserts an \p Extra argument in the
58/// specified position.
59ArgumentsAdjuster getInsertArgumentAdjuster(
60 const char *Extra,
61 ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
62
63/// Gets an argument adjuster which strips plugin related command line
64/// arguments.
65ArgumentsAdjuster getStripPluginsAdjuster();
66
67/// Gets an argument adjuster which adjusts the arguments in sequence
68/// with the \p First adjuster and then with the \p Second one.
69ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
70 ArgumentsAdjuster Second);
71
72} // namespace tooling
73} // namespace clang
74
75#endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
76

source code of clang/include/clang/Tooling/ArgumentsAdjusters.h