Source edit generation relies on a WPASuite result produced by an earlier whole-program analysis. It runs alongside the normal compile and emits two per-translation-unit artifacts:
--ssaf-src-edit-file=) containing clang::tooling::Replacement records ready for clang-apply-replacements,--ssaf-transformation-report-file=) containing diagnostic-style findings.Five options control the pipeline; they are all both --ssaf-… driver options and cc1 options. The compilation-unit identifier is shared with the summary extraction step. A given compilation unit needs to receive the same identifier for both summary extraction and source edit generation. The link-unit identifier must match the identifier of the link unit that this compilation unit was linked into.
.. list-table:: :header-rows: 1 * - Option - Purpose * - ``--ssaf-source-transformation=<name>`` - Name of the transformation to run. * - ``--ssaf-global-scope-analysis-result=<path>.<format>`` - WPASuite input. The extension selects the serialization format. * - ``--ssaf-src-edit-file=<path>`` - Source-edit output. Always written as a ``clang-apply-replacements``-compatible YAML document; the file extension is not interpreted. * - ``--ssaf-transformation-report-file=<path>`` - Transformation-report output. Always written as a SARIF JSON document; the file extension is not interpreted. * - ``--ssaf-compilation-unit-id=<id>`` - Stable identifier for this translation unit (also required by the summary extraction). * - ``--ssaf-link-unit-id=<id>`` - Stable identifier of the link unit this translation unit was linked into.
When --ssaf-source-transformation= is non-empty the framework wraps the active FrontendAction in a SourceTransformationFrontendAction; otherwise the compile is byte-for-byte unchanged.
Apply the source edits with clang-apply-replacements:
$ clang -c foo.cpp \ --ssaf-source-transformation=my-transformation \ --ssaf-global-scope-analysis-result=wpa.json \ --ssaf-src-edit-file=foo.yaml \ --ssaf-transformation-report-file=foo.sarif \ --ssaf-compilation-unit-id=cu-foo \ --ssaf-link-unit-id=lu-foo $ clang-apply-replacements --remove-change-desc-files <dir-with-yaml>
The transformation report can be consumed by any SARIF viewer.