xref: /freebsd/contrib/llvm-project/clang/include/clang/Tooling/ArgumentsAdjusters.h (revision fe6060f10f634930ff71b7c50291ddc610da2475)
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 
25 namespace clang {
26 namespace tooling {
27 
28 /// A sequence of command line arguments.
29 using 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.
35 using 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.
40 ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
41 
42 /// Gets an argument adjuster which removes output-related command line
43 /// arguments.
44 ArgumentsAdjuster getClangStripOutputAdjuster();
45 
46 /// Gets an argument adjuster which removes dependency-file
47 /// related command line arguments.
48 ArgumentsAdjuster getClangStripDependencyFileAdjuster();
49 
50 enum class ArgumentInsertPosition { BEGIN, END };
51 
52 /// Gets an argument adjuster which inserts \p Extra arguments in the
53 /// specified position.
54 ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
55                                             ArgumentInsertPosition Pos);
56 
57 /// Gets an argument adjuster which inserts an \p Extra argument in the
58 /// specified position.
59 ArgumentsAdjuster getInsertArgumentAdjuster(
60     const char *Extra,
61     ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
62 
63 /// Gets an argument adjuster which strips plugin related command line
64 /// arguments.
65 ArgumentsAdjuster 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.
69 ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
70                                    ArgumentsAdjuster Second);
71 
72 } // namespace tooling
73 } // namespace clang
74 
75 #endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
76