1 //===--- StandaloneExecution.h - Standalone execution. -*- C++ ----------*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file defines standalone execution of clang tools.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H
14 #define LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H
16 #include "clang/Tooling/ArgumentsAdjusters.h"
17 #include "clang/Tooling/Execution.h"
22 /// A standalone executor that runs FrontendActions on a given set of
25 /// By default, this executor uses the following arguments adjusters (as defined
26 /// in `clang/Tooling/ArgumentsAdjusters.h`):
27 /// - `getClangStripOutputAdjuster()`
28 /// - `getClangSyntaxOnlyAdjuster()`
29 /// - `getClangStripDependencyFileAdjuster()`
30 class StandaloneToolExecutor : public ToolExecutor {
32 static const char *ExecutorName;
34 /// Init with \p CompilationDatabase and the paths of all files to be
36 StandaloneToolExecutor(
37 const CompilationDatabase &Compilations,
38 llvm::ArrayRef<std::string> SourcePaths,
39 IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS =
40 llvm::vfs::getRealFileSystem(),
41 std::shared_ptr<PCHContainerOperations> PCHContainerOps =
42 std::make_shared<PCHContainerOperations>());
44 /// Init with \p CommonOptionsParser. This is expected to be used by
45 /// `createExecutorFromCommandLineArgs` based on commandline options.
47 /// The executor takes ownership of \p Options.
48 StandaloneToolExecutor(
49 CommonOptionsParser Options,
50 std::shared_ptr<PCHContainerOperations> PCHContainerOps =
51 std::make_shared<PCHContainerOperations>());
53 StringRef getExecutorName() const override { return ExecutorName; }
55 using ToolExecutor::execute;
58 execute(llvm::ArrayRef<
59 std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
62 /// Set a \c DiagnosticConsumer to use during parsing.
63 void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) {
64 Tool.setDiagnosticConsumer(DiagConsumer);
67 ExecutionContext *getExecutionContext() override { return &Context; };
69 ToolResults *getToolResults() override { return &Results; }
71 llvm::ArrayRef<std::string> getSourcePaths() const {
72 return Tool.getSourcePaths();
75 void mapVirtualFile(StringRef FilePath, StringRef Content) override {
76 Tool.mapVirtualFile(FilePath, Content);
79 /// Returns the file manager used in the tool.
81 /// The file manager is shared between all translation units.
82 FileManager &getFiles() { return Tool.getFiles(); }
85 // Used to store the parser when the executor is initialized with parser.
86 llvm::Optional<CommonOptionsParser> OptionsParser;
87 // FIXME: The standalone executor is currently just a wrapper of `ClangTool`.
88 // Merge `ClangTool` implementation into the this.
90 ExecutionContext Context;
91 InMemoryToolResults Results;
92 ArgumentsAdjuster ArgsAdjuster;
95 } // end namespace tooling
96 } // end namespace clang
98 #endif // LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H