| //===--- StandaloneExecution.h - Standalone execution. -*- C++ ----------*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines standalone execution of clang tools. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |
| #define LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |
| |
| #include "clang/Tooling/ArgumentsAdjusters.h" |
| #include "clang/Tooling/Execution.h" |
| |
| namespace clang { |
| namespace tooling { |
| |
| /// A standalone executor that runs FrontendActions on a given set of |
| /// TUs in sequence. |
| /// |
| /// By default, this executor uses the following arguments adjusters (as defined |
| /// in `clang/Tooling/ArgumentsAdjusters.h`): |
| /// - `getClangStripOutputAdjuster()` |
| /// - `getClangSyntaxOnlyAdjuster()` |
| /// - `getClangStripDependencyFileAdjuster()` |
| class StandaloneToolExecutor : public ToolExecutor { |
| public: |
| static const char *ExecutorName; |
| |
| /// Init with \p CompilationDatabase and the paths of all files to be |
| /// proccessed. |
| StandaloneToolExecutor( |
| const CompilationDatabase &Compilations, |
| llvm::ArrayRef<std::string> SourcePaths, |
| IntrusiveRefCntPtr<vfs::FileSystem> BaseFS = vfs::getRealFileSystem(), |
| std::shared_ptr<PCHContainerOperations> PCHContainerOps = |
| std::make_shared<PCHContainerOperations>()); |
| |
| /// Init with \p CommonOptionsParser. This is expected to be used by |
| /// `createExecutorFromCommandLineArgs` based on commandline options. |
| /// |
| /// The executor takes ownership of \p Options. |
| StandaloneToolExecutor( |
| CommonOptionsParser Options, |
| std::shared_ptr<PCHContainerOperations> PCHContainerOps = |
| std::make_shared<PCHContainerOperations>()); |
| |
| StringRef getExecutorName() const override { return ExecutorName; } |
| |
| using ToolExecutor::execute; |
| |
| llvm::Error |
| execute(llvm::ArrayRef< |
| std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>> |
| Actions) override; |
| |
| /// Set a \c DiagnosticConsumer to use during parsing. |
| void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) { |
| Tool.setDiagnosticConsumer(DiagConsumer); |
| } |
| |
| ExecutionContext *getExecutionContext() override { return &Context; }; |
| |
| ToolResults *getToolResults() override { return &Results; } |
| |
| llvm::ArrayRef<std::string> getSourcePaths() const { |
| return Tool.getSourcePaths(); |
| } |
| |
| void mapVirtualFile(StringRef FilePath, StringRef Content) override { |
| Tool.mapVirtualFile(FilePath, Content); |
| } |
| |
| /// Returns the file manager used in the tool. |
| /// |
| /// The file manager is shared between all translation units. |
| FileManager &getFiles() { return Tool.getFiles(); } |
| |
| private: |
| // Used to store the parser when the executor is initialized with parser. |
| llvm::Optional<CommonOptionsParser> OptionsParser; |
| // FIXME: The standalone executor is currently just a wrapper of `ClangTool`. |
| // Merge `ClangTool` implementation into the this. |
| ClangTool Tool; |
| ExecutionContext Context; |
| InMemoryToolResults Results; |
| ArgumentsAdjuster ArgsAdjuster; |
| }; |
| |
| } // end namespace tooling |
| } // end namespace clang |
| |
| #endif // LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |