]> granicus.if.org Git - clang/blobdiff - include/clang/Tooling/ArgumentsAdjusters.h
Make ArgumentsAdjuster an std::function.
[clang] / include / clang / Tooling / ArgumentsAdjusters.h
index 30bca9bb4144b7d21856e466bf981c2a985f7428..e0292d8082a9ac2db48db3c4d0701aea9ff2c69b 100644 (file)
@@ -7,74 +7,60 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file declares base abstract class ArgumentsAdjuster and its descendants.
-// These classes are intended to modify command line arguments obtained from
-// a compilation database before they are used to run a frontend action.
+// This file declares typedef ArgumentsAdjuster and functions to create several
+// useful argument adjusters.
+// ArgumentsAdjusters modify command line arguments obtained from a compilation
+// database before they are used to run a frontend action.
 //
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
 #define LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
 
+#include <functional>
 #include <string>
 #include <vector>
 
 namespace clang {
-
 namespace tooling {
 
 /// \brief A sequence of command line arguments.
 typedef std::vector<std::string> CommandLineArguments;
 
-/// \brief Abstract interface for a command line adjusters.
+/// \brief A prototype of a command line adjuster.
 ///
-/// This abstract interface describes a command line argument adjuster,
-/// which is responsible for command line arguments modification before
-/// the arguments are used to run a frontend action.
-class ArgumentsAdjuster {
-  virtual void anchor();
-public:
-  /// \brief Returns adjusted command line arguments.
-  ///
-  /// \param Args Input sequence of command line arguments.
-  ///
-  /// \returns Modified sequence of command line arguments.
-  virtual CommandLineArguments Adjust(const CommandLineArguments &Args) = 0;
-  virtual ~ArgumentsAdjuster() {}
-};
+/// Command line argument adjuster is responsible for command line arguments
+/// modification before the arguments are used to run a frontend action.
+typedef std::function<CommandLineArguments(const CommandLineArguments &)>
+    ArgumentsAdjuster;
 
-/// \brief Syntax check only command line adjuster.
-///
-/// This class implements ArgumentsAdjuster interface and converts input
-/// command line arguments to the "syntax check only" variant.
-class ClangSyntaxOnlyAdjuster : public ArgumentsAdjuster {
-  CommandLineArguments Adjust(const CommandLineArguments &Args) override;
-};
+/// \brief Gets an argument adjuster that converts input command line arguments
+/// to the "syntax check only" variant.
+ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
 
-/// \brief An argument adjuster which removes output-related command line
+/// \brief Gets an argument adjuster which removes output-related command line
 /// arguments.
-class ClangStripOutputAdjuster : public ArgumentsAdjuster {
-  CommandLineArguments Adjust(const CommandLineArguments &Args) override;
-};
+ArgumentsAdjuster getClangStripOutputAdjuster();
 
-class InsertArgumentAdjuster : public ArgumentsAdjuster {
-public:
-  enum Position { BEGIN, END };
+enum class ArgumentInsertPosition { BEGIN, END };
 
-  InsertArgumentAdjuster(const CommandLineArguments &Extra, Position Pos)
-      : Extra(Extra), Pos(Pos) {}
+/// \brief Gets an argument adjuster which inserts \p Extra arguments in the
+/// specified position.
+ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
+                                            ArgumentInsertPosition Pos);
 
-  InsertArgumentAdjuster(const char *Extra, Position Pos)
-      : Extra(1, std::string(Extra)), Pos(Pos) {}
+/// \brief Gets an argument adjuster which inserts an \p Extra argument in the
+/// specified position.
+ArgumentsAdjuster getInsertArgumentAdjuster(const char *Extra,
+                                            ArgumentInsertPosition Pos);
 
-  CommandLineArguments Adjust(const CommandLineArguments &Args) override;
+/// \brief Gets an argument adjuster which adjusts the arguments in sequence
+/// with the \p First adjuster and then with the \p Second one.
+ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
+                                   ArgumentsAdjuster Second);
 
-private:
-  const CommandLineArguments Extra;
-  const Position Pos;
-};
-} // end namespace tooling
-} // end namespace clang
+} // namespace tooling
+} // namespace clang
 
 #endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H