LCOV - code coverage report
Current view: top level - clang/Tooling - CommonOptionsParser.h (source / functions) Hit Total Coverage
Test: clang.info Lines: 3 3 100.0 %
Date: 2016-01-31 12:01:00 Functions: 3 3 100.0 %

          Line data    Source code
       1             : //===- CommonOptionsParser.h - common options for clang tools -*- 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 implements the CommonOptionsParser class used to parse common
      11             : //  command-line options for clang tools, so that they can be run as separate
      12             : //  command-line applications with a consistent common interface for handling
      13             : //  compilation database and input files.
      14             : //
      15             : //  It provides a common subset of command-line options, common algorithm
      16             : //  for locating a compilation database and source files, and help messages
      17             : //  for the basic command-line interface.
      18             : //
      19             : //  It creates a CompilationDatabase and reads common command-line options.
      20             : //
      21             : //  This class uses the Clang Tooling infrastructure, see
      22             : //    http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
      23             : //  for details on setting it up with LLVM source tree.
      24             : //
      25             : //===----------------------------------------------------------------------===//
      26             : 
      27             : #ifndef LLVM_CLANG_TOOLING_COMMONOPTIONSPARSER_H
      28             : #define LLVM_CLANG_TOOLING_COMMONOPTIONSPARSER_H
      29             : 
      30             : #include "clang/Tooling/CompilationDatabase.h"
      31             : #include "llvm/Support/CommandLine.h"
      32             : 
      33             : namespace clang {
      34             : namespace tooling {
      35             : /// \brief A parser for options common to all command-line Clang tools.
      36             : ///
      37             : /// Parses a common subset of command-line arguments, locates and loads a
      38             : /// compilation commands database and runs a tool with user-specified action. It
      39             : /// also contains a help message for the common command-line options.
      40             : ///
      41             : /// An example of usage:
      42             : /// \code
      43             : /// #include "clang/Frontend/FrontendActions.h"
      44             : /// #include "clang/Tooling/CommonOptionsParser.h"
      45             : /// #include "llvm/Support/CommandLine.h"
      46             : ///
      47             : /// using namespace clang::tooling;
      48             : /// using namespace llvm;
      49             : ///
      50             : /// static cl::OptionCategory MyToolCategory("My tool options");
      51             : /// static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
      52             : /// static cl::extrahelp MoreHelp("\nMore help text...");
      53             : /// static cl::opt<bool> YourOwnOption(...);
      54             : /// ...
      55             : ///
      56             : /// int main(int argc, const char **argv) {
      57             : ///   CommonOptionsParser OptionsParser(argc, argv, MyToolCategory);
      58             : ///   ClangTool Tool(OptionsParser.getCompilations(),
      59             : ///                  OptionsParser.getSourcePathListi());
      60             : ///   return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>());
      61             : /// }
      62             : /// \endcode
      63          16 : class CommonOptionsParser {
      64             : public:
      65             :   /// \brief Parses command-line, initializes a compilation database.
      66             :   ///
      67             :   /// This constructor can change argc and argv contents, e.g. consume
      68             :   /// command-line options used for creating FixedCompilationDatabase.
      69             :   ///
      70             :   /// All options not belonging to \p Category become hidden.
      71             :   ///
      72             :   /// This constructor exits program in case of error.
      73             :   CommonOptionsParser(int &argc, const char **argv,
      74             :                       llvm::cl::OptionCategory &Category,
      75             :                       const char *Overview = nullptr);
      76             : 
      77             :   /// Returns a reference to the loaded compilations database.
      78             :   CompilationDatabase &getCompilations() {
      79          12 :     return *Compilations;
      80             :   }
      81             : 
      82             :   /// Returns a list of source file paths to process.
      83             :   std::vector<std::string> getSourcePathList() {
      84          12 :     return SourcePathList;
      85             :   }
      86             : 
      87             :   static const char *const HelpMessage;
      88             : 
      89             : private:
      90             :   std::unique_ptr<CompilationDatabase> Compilations;
      91             :   std::vector<std::string> SourcePathList;
      92             :   std::vector<std::string> ExtraArgsBefore;
      93             :   std::vector<std::string> ExtraArgsAfter;
      94             : };
      95             : 
      96             : }  // namespace tooling
      97             : }  // namespace clang
      98             : 
      99             : #endif  // LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMONOPTIONSPARSER_H

Generated by: LCOV version 1.11