HomePhabricator

[Tooling] A new framework for executing clang frontend actions.

Authored by ioeric on Oct 26 2017, 3:38 AM.

Description

[Tooling] A new framework for executing clang frontend actions.

Summary:
This defines a clang::tooling::ToolExecutor interface that can be extended to support different execution plans including standalone execution on a given set of TUs or parallel execution on all TUs in a codebase.

In order to enable multiprocessing execution, tool actions are expected to output result into a ToolResults interface provided by executors. The ToolResults interface abstracts how results are stored e.g. in-memory for standalone executions or on-disk for large-scale execution.

New executors can be registered as ToolExecutorPlugins via the ToolExecutorPluginRegistry. CLI tools can use createExecutorFromCommandLineArgs to create a specific registered executor according to the command-line arguments.

This patch also implements StandaloneToolExecutor which has the same behavior as the current ClangTool interface, i.e. execute frontend actions on a given set of TUs. At this point, it's simply a wrapper around ClangTool at this point.

This is still experimental but expected to replace the existing ClangTool interface so that specific tools would not need to worry about execution.

Reviewers: klimek, arphaman, hokein, sammccall

Reviewed By: klimek

Subscribers: cfe-commits, djasper, mgorny, omtcyfz

Differential Revision: https://reviews.llvm.org/D34272

llvm-svn: 316653

Details

Committed
ioericOct 26 2017, 3:38 AM
Reviewer
klimek
Differential Revision
D34272: [Tooling] A new framework for executing clang frontend actions.
Parents
rGb560a9a1b835: [clangd] Don't crash on empty textDocument/didChange.
Branches
Unknown
Tags
Unknown