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