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 base abstract class ArgumentsAdjuster and its descendants.
11 // These classes are intended to modify command line arguments obtained from
12 // a compilation 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 <string>
20 #include <vector>
21 
22 namespace clang {
23 
24 namespace tooling {
25 
26 /// \brief A sequence of command line arguments.
27 typedef std::vector<std::string> CommandLineArguments;
28 
29 /// \brief Abstract interface for a command line adjusters.
30 ///
31 /// This abstract interface describes a command line argument adjuster,
32 /// which is responsible for command line arguments modification before
33 /// the arguments are used to run a frontend action.
34 class ArgumentsAdjuster {
35   virtual void anchor();
36 public:
37   /// \brief Returns adjusted command line arguments.
38   ///
39   /// \param Args Input sequence of command line arguments.
40   ///
41   /// \returns Modified sequence of command line arguments.
42   virtual CommandLineArguments Adjust(const CommandLineArguments &Args) = 0;
43   virtual ~ArgumentsAdjuster() {
44   }
45 };
46 
47 /// \brief Syntax check only command line adjuster.
48 ///
49 /// This class implements ArgumentsAdjuster interface and converts input
50 /// command line arguments to the "syntax check only" variant.
51 class ClangSyntaxOnlyAdjuster : public ArgumentsAdjuster {
52   virtual CommandLineArguments Adjust(const CommandLineArguments &Args);
53 };
54 
55 /// \brief An argument adjuster which removes output-related command line
56 /// arguments.
57 class ClangStripOutputAdjuster : public ArgumentsAdjuster {
58   virtual CommandLineArguments Adjust(const CommandLineArguments &Args);
59 };
60 
61 } // end namespace tooling
62 } // end namespace clang
63 
64 #endif // LLVM_CLANG_TOOLING_ARGUMENTSADJUSTERS_H
65 
66