ArgumentsAdjusters.h revision 341825
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 type 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 26namespace clang { 27namespace tooling { 28 29/// A sequence of command line arguments. 30using CommandLineArguments = std::vector<std::string>; 31 32/// 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. 36using ArgumentsAdjuster = std::function<CommandLineArguments( 37 const CommandLineArguments &, StringRef Filename)>; 38 39/// Gets an argument adjuster that converts input command line arguments 40/// to the "syntax check only" variant. 41ArgumentsAdjuster getClangSyntaxOnlyAdjuster(); 42 43/// Gets an argument adjuster which removes output-related command line 44/// arguments. 45ArgumentsAdjuster getClangStripOutputAdjuster(); 46 47/// Gets an argument adjuster which removes dependency-file 48/// related command line arguments. 49ArgumentsAdjuster getClangStripDependencyFileAdjuster(); 50 51enum class ArgumentInsertPosition { BEGIN, END }; 52 53/// Gets an argument adjuster which inserts \p Extra arguments in the 54/// specified position. 55ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra, 56 ArgumentInsertPosition Pos); 57 58/// Gets an argument adjuster which inserts an \p Extra argument in the 59/// specified position. 60ArgumentsAdjuster getInsertArgumentAdjuster( 61 const char *Extra, 62 ArgumentInsertPosition Pos = ArgumentInsertPosition::END); 63 64/// Gets an argument adjuster which adjusts the arguments in sequence 65/// with the \p First adjuster and then with the \p Second one. 66ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First, 67 ArgumentsAdjuster Second); 68 69} // namespace tooling 70} // namespace clang 71 72#endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H 73