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