diff options
Diffstat (limited to 'include/clang/Tooling/CommandLineClangTool.h')
-rw-r--r-- | include/clang/Tooling/CommandLineClangTool.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/include/clang/Tooling/CommandLineClangTool.h b/include/clang/Tooling/CommandLineClangTool.h new file mode 100644 index 0000000..c29c302 --- /dev/null +++ b/include/clang/Tooling/CommandLineClangTool.h @@ -0,0 +1,80 @@ +//===- CommandLineClangTool.h - command-line clang tools driver -*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the CommandLineClangTool class used to run clang +// tools as separate command-line applications with a consistent common +// interface for handling compilation database and input files. +// +// It provides a common subset of command-line options, common algorithm +// for locating a compilation database and source files, and help messages +// for the basic command-line interface. +// +// It creates a CompilationDatabase, initializes a ClangTool and runs a +// user-specified FrontendAction over all TUs in which the given files are +// compiled. +// +// This class uses the Clang Tooling infrastructure, see +// http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html +// for details on setting it up with LLVM source tree. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H +#define LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H + +#include "llvm/Support/CommandLine.h" +#include "clang/Tooling/CompilationDatabase.h" + +namespace clang { + +namespace tooling { + +class CompilationDatabase; +class FrontendActionFactory; + +/// \brief A common driver for command-line Clang tools. +/// +/// Parses a common subset of command-line arguments, locates and loads a +/// compilation commands database, runs a tool with user-specified action. It +/// also contains a help message for the common command-line options. +/// An example of usage: +/// @code +/// int main(int argc, const char **argv) { +/// CommandLineClangTool Tool; +/// cl::extrahelp MoreHelp("\nMore help text..."); +/// Tool.initialize(argc, argv); +/// return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>()); +/// } +/// @endcode +/// +class CommandLineClangTool { +public: + /// Sets up command-line options and help messages. + /// Add your own help messages after constructing this tool. + CommandLineClangTool(); + + /// Parses command-line, initializes a compilation database. + /// This method exits program in case of error. + void initialize(int argc, const char **argv); + + /// Runs a clang tool with an action created by \c ActionFactory. + int run(FrontendActionFactory *ActionFactory); + +private: + llvm::OwningPtr<CompilationDatabase> Compilations; + llvm::cl::opt<std::string> BuildPath; + llvm::cl::list<std::string> SourcePaths; + llvm::cl::extrahelp MoreHelp; +}; + +} // namespace tooling + +} // namespace clang + +#endif // LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H |