1 //===--- ArgumentsAdjusters.h - Command line arguments adjuster -*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares typedef ArgumentsAdjuster and functions to create several 11 // useful argument adjusters. 12 // ArgumentsAdjusters modify command line arguments obtained from a compilation 13 // database before they are used to run a frontend action. 14 // 15 //===----------------------------------------------------------------------===// 16 17 #ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H 18 #define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H 19 20 #include "clang/Basic/LLVM.h" 21 #include "llvm/ADT/StringRef.h" 22 #include <functional> 23 #include <string> 24 #include <vector> 25 26 namespace clang { 27 namespace tooling { 28 29 /// \brief A sequence of command line arguments. 30 typedef std::vector<std::string> CommandLineArguments; 31 32 /// \brief A prototype of a command line adjuster. 33 /// 34 /// Command line argument adjuster is responsible for command line arguments 35 /// modification before the arguments are used to run a frontend action. 36 typedef std::function<CommandLineArguments( 37 const CommandLineArguments &, StringRef Filename)> ArgumentsAdjuster; 38 39 /// \brief Gets an argument adjuster that converts input command line arguments 40 /// to the "syntax check only" variant. 41 ArgumentsAdjuster getClangSyntaxOnlyAdjuster(); 42 43 /// \brief Gets an argument adjuster which removes output-related command line 44 /// arguments. 45 ArgumentsAdjuster getClangStripOutputAdjuster(); 46 47 enum class ArgumentInsertPosition { BEGIN, END }; 48 49 /// \brief Gets an argument adjuster which inserts \p Extra arguments in the 50 /// specified position. 51 ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra, 52 ArgumentInsertPosition Pos); 53 54 /// \brief Gets an argument adjuster which inserts an \p Extra argument in the 55 /// specified position. 56 ArgumentsAdjuster getInsertArgumentAdjuster( 57 const char *Extra, 58 ArgumentInsertPosition Pos = ArgumentInsertPosition::END); 59 60 /// \brief Gets an argument adjuster which adjusts the arguments in sequence 61 /// with the \p First adjuster and then with the \p Second one. 62 ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First, 63 ArgumentsAdjuster Second); 64 65 } // namespace tooling 66 } // namespace clang 67 68 #endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H 69 70