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