Coverage Report

Created: 2020-09-19 12:23

/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