clang 20.0.0git
StandaloneExecution.cpp
Go to the documentation of this file.
1//===- lib/Tooling/Execution.cpp - Standalone clang action execution. -----===//
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
11
12namespace clang {
13namespace tooling {
14
15static llvm::Error make_string_error(const llvm::Twine &Message) {
16 return llvm::make_error<llvm::StringError>(Message,
17 llvm::inconvertibleErrorCode());
18}
19
20const char *StandaloneToolExecutor::ExecutorName = "StandaloneToolExecutor";
21
23 return combineAdjusters(
27}
28
30 const CompilationDatabase &Compilations,
33 std::shared_ptr<PCHContainerOperations> PCHContainerOps)
34 : Tool(Compilations, SourcePaths, std::move(PCHContainerOps),
35 std::move(BaseFS)),
36 Context(&Results), ArgsAdjuster(getDefaultArgumentsAdjusters()) {
37 // Use self-defined default argument adjusters instead of the default
38 // adjusters that come with the old `ClangTool`.
40}
41
43 CommonOptionsParser Options,
44 std::shared_ptr<PCHContainerOperations> PCHContainerOps)
45 : OptionsParser(std::move(Options)),
46 Tool(OptionsParser->getCompilations(), OptionsParser->getSourcePathList(),
47 std::move(PCHContainerOps)),
48 Context(&Results), ArgsAdjuster(getDefaultArgumentsAdjusters()) {
50}
51
54 std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
55 Actions) {
56 if (Actions.empty())
57 return make_string_error("No action to execute.");
58
59 if (Actions.size() != 1)
60 return make_string_error(
61 "Only support executing exactly 1 action at this point.");
62
63 auto &Action = Actions.front();
64 Tool.appendArgumentsAdjuster(Action.second);
65 Tool.appendArgumentsAdjuster(ArgsAdjuster);
66 if (Tool.run(Action.first.get()))
67 return make_string_error("Failed to run action.");
68
69 return llvm::Error::success();
70}
71
73public:
75 create(CommonOptionsParser &OptionsParser) override {
76 if (OptionsParser.getSourcePathList().empty())
77 return make_string_error(
78 "[StandaloneToolExecutorPlugin] No positional argument found.");
79 return std::make_unique<StandaloneToolExecutor>(std::move(OptionsParser));
80 }
81};
82
83static ToolExecutorPluginRegistry::Add<StandaloneToolExecutorPlugin>
84 X("standalone", "Runs FrontendActions on a set of files provided "
85 "via positional arguments.");
86
87// This anchor is used to force the linker to link in the generated object file
88// and thus register the plugin.
90
91} // end namespace tooling
92} // end namespace clang
#define X(type, name)
Definition: Value.h:143
int run(ToolAction *Action)
Runs an action over all files specified in the command line.
Definition: Tooling.cpp:517
void appendArgumentsAdjuster(ArgumentsAdjuster Adjuster)
Append a command line arguments adjuster to the adjuster chain.
Definition: Tooling.cpp:496
void clearArgumentsAdjusters()
Clear the command line arguments adjuster chain.
Definition: Tooling.cpp:500
A parser for options common to all command-line Clang tools.
const std::vector< std::string > & getSourcePathList() const
Returns a list of source file paths to process.
Interface for compilation databases.
llvm::Expected< std::unique_ptr< ToolExecutor > > create(CommonOptionsParser &OptionsParser) override
Create an ToolExecutor.
StandaloneToolExecutor(const CompilationDatabase &Compilations, llvm::ArrayRef< std::string > SourcePaths, IntrusiveRefCntPtr< llvm::vfs::FileSystem > BaseFS=llvm::vfs::getRealFileSystem(), std::shared_ptr< PCHContainerOperations > PCHContainerOps=std::make_shared< PCHContainerOperations >())
Init with CompilationDatabase and the paths of all files to be proccessed.
llvm::Error execute(llvm::ArrayRef< std::pair< std::unique_ptr< FrontendActionFactory >, ArgumentsAdjuster > > Actions) override
Executes each action with a corresponding arguments adjuster.
Interface for factories that create specific executors.
Definition: Execution.h:151
volatile int StandaloneToolExecutorAnchorSource
ArgumentsAdjuster getClangSyntaxOnlyAdjuster()
Gets an argument adjuster that converts input command line arguments to the "syntax check only" varia...
static ArgumentsAdjuster getDefaultArgumentsAdjusters()
ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First, ArgumentsAdjuster Second)
Gets an argument adjuster which adjusts the arguments in sequence with the First adjuster and then wi...
ArgumentsAdjuster getClangStripDependencyFileAdjuster()
Gets an argument adjuster which removes dependency-file related command line arguments.
std::function< CommandLineArguments(const CommandLineArguments &, StringRef Filename)> ArgumentsAdjuster
A prototype of a command line adjuster.
static llvm::Error make_string_error(const llvm::Twine &Message)
ArgumentsAdjuster getClangStripOutputAdjuster()
Gets an argument adjuster which removes output-related command line arguments.
The JSON file list parser is used to communicate input to InstallAPI.