/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Tooling/StandaloneExecution.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===--- StandaloneExecution.h - Standalone execution. -*- C++ ----------*-===// |
2 | | // |
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 |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | // |
9 | | // This file defines standalone execution of clang tools. |
10 | | // |
11 | | //===----------------------------------------------------------------------===// |
12 | | |
13 | | #ifndef LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |
14 | | #define LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |
15 | | |
16 | | #include "clang/Tooling/ArgumentsAdjusters.h" |
17 | | #include "clang/Tooling/Execution.h" |
18 | | |
19 | | namespace clang { |
20 | | namespace tooling { |
21 | | |
22 | | /// A standalone executor that runs FrontendActions on a given set of |
23 | | /// TUs in sequence. |
24 | | /// |
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 { |
31 | | public: |
32 | | static const char *ExecutorName; |
33 | | |
34 | | /// Init with \p CompilationDatabase and the paths of all files to be |
35 | | /// proccessed. |
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>()); |
43 | | |
44 | | /// Init with \p CommonOptionsParser. This is expected to be used by |
45 | | /// `createExecutorFromCommandLineArgs` based on commandline options. |
46 | | /// |
47 | | /// The executor takes ownership of \p Options. |
48 | | StandaloneToolExecutor( |
49 | | CommonOptionsParser Options, |
50 | | std::shared_ptr<PCHContainerOperations> PCHContainerOps = |
51 | | std::make_shared<PCHContainerOperations>()); |
52 | | |
53 | 1 | StringRef getExecutorName() const override { return ExecutorName; } |
54 | | |
55 | | using ToolExecutor::execute; |
56 | | |
57 | | llvm::Error |
58 | | execute(llvm::ArrayRef< |
59 | | std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>> |
60 | | Actions) override; |
61 | | |
62 | | /// Set a \c DiagnosticConsumer to use during parsing. |
63 | 0 | void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) { |
64 | 0 | Tool.setDiagnosticConsumer(DiagConsumer); |
65 | 0 | } |
66 | | |
67 | 2 | ExecutionContext *getExecutionContext() override { return &Context; }; |
68 | | |
69 | 3 | ToolResults *getToolResults() override { return &Results; } |
70 | | |
71 | 0 | llvm::ArrayRef<std::string> getSourcePaths() const { |
72 | 0 | return Tool.getSourcePaths(); |
73 | 0 | } |
74 | | |
75 | 3 | void mapVirtualFile(StringRef FilePath, StringRef Content) override { |
76 | 3 | Tool.mapVirtualFile(FilePath, Content); |
77 | 3 | } |
78 | | |
79 | | /// Returns the file manager used in the tool. |
80 | | /// |
81 | | /// The file manager is shared between all translation units. |
82 | 0 | FileManager &getFiles() { return Tool.getFiles(); } |
83 | | |
84 | | private: |
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. |
89 | | ClangTool Tool; |
90 | | ExecutionContext Context; |
91 | | InMemoryToolResults Results; |
92 | | ArgumentsAdjuster ArgsAdjuster; |
93 | | }; |
94 | | |
95 | | } // end namespace tooling |
96 | | } // end namespace clang |
97 | | |
98 | | #endif // LLVM_CLANG_TOOLING_STANDALONEEXECUTION_H |