igeek / rector-html-output
Beautiful HTML output formatter for Rector PHP
Installs: 57
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/igeek/rector-html-output
Requires
- php: ^8.3
- rector/rector: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.92
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.5
This package is auto-updated.
Last update: 2026-01-05 21:06:39 UTC
README
Beautiful, self-contained HTML output formatter for Rector PHP.
Features
- Beautiful HTML Reports - Modern, responsive design with dark/light mode
- Zero External Dependencies - No CDN CSS/JS libraries required
- Easy Setup - Simple helper function for
rector.php - Auto-increment - Never overwrite existing reports
- Statistics - Lines added/removed, files changed
- Dark Mode - Automatic theme with localStorage persistence
- Searchable - Filter files by name in sidebar
- Collapsible - Expand/collapse individual file diffs
Installation
composer require --dev igeek/rector-html-output
Usage
IMPORTANT: This package requires the callback-style rector.php because the fluent RectorConfigBuilder::registerService() only accepts class names, not factory closures needed for custom configuration.
Basic Configuration
Add to your rector.php:
<?php use Rector\Config\RectorConfig; use function Igeek\RectorHtmlOutput\withHtmlOutput; return function (RectorConfig $rectorConfig): void { // Standard Rector configuration $rectorConfig->paths([__DIR__ . '/app']); // Register HTML output formatter withHtmlOutput($rectorConfig, __DIR__ . '/rector-reports'); };
Run Rector with HTML Output
# Dry run with HTML report vendor/bin/rector process --dry-run --output-format=html # Apply changes with HTML report vendor/bin/rector process --output-format=html # Specific paths vendor/bin/rector process src/Services --output-format=html
Advanced Configuration
<?php use Rector\Config\RectorConfig; use function Igeek\RectorHtmlOutput\withHtmlOutput; return function (RectorConfig $rectorConfig): void { $rectorConfig->paths([__DIR__ . '/app']); withHtmlOutput( rectorConfig: $rectorConfig, outputDirectory: __DIR__ . '/reports', // Auto-created if missing filename: 'my-custom-report', // Without .html extension autoIncrement: true, // Auto-increment if file exists skipEmpty: true, // Skip report if no changes ); };
Manual Registration (Advanced)
For users who need full control:
<?php use Rector\Config\RectorConfig; use Igeek\RectorHtmlOutput\HtmlOutputFormatter; use Igeek\RectorHtmlOutput\Config\HtmlOutputConfig; use Igeek\RectorHtmlOutput\Template\TemplateRenderer; use Igeek\RectorHtmlOutput\Template\PlaceholderReplacer; use Rector\ChangesReporting\Contract\Output\OutputFormatterInterface; return function (RectorConfig $rectorConfig): void { $rectorConfig->paths([__DIR__ . '/app']); $rectorConfig->singleton(HtmlOutputConfig::class, fn() => new HtmlOutputConfig( outputDirectory: __DIR__ . '/rector-reports', filename: 'my-report', )); $rectorConfig->singleton(PlaceholderReplacer::class); $rectorConfig->singleton(TemplateRenderer::class, fn($c) => new TemplateRenderer( $c->get(HtmlOutputConfig::class)->getTemplatePath(), $c->get(PlaceholderReplacer::class) )); $rectorConfig->singleton(HtmlOutputFormatter::class); $rectorConfig->tag(HtmlOutputFormatter::class, OutputFormatterInterface::class); };
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
outputDirectory |
string | required | Directory where reports will be saved (auto-created) |
filename |
string | 'rector-report' |
Base filename (without extension) |
autoIncrement |
bool | true |
Auto-increment filename if exists |
skipEmpty |
bool | true |
Skip report generation if no changes |
Output Example
Reports include:
- Summary statistics (files changed, lines added/removed)
- Searchable file list sidebar
- Syntax-highlighted diffs with line numbers
- Dark/light mode toggle (persisted via localStorage)
- Collapsible file sections
- Collapse/expand all button
Requirements
- PHP 8.3 or higher
- Rector ^2.0
License
MIT License - see LICENSE file
Credits
Created by Amit Gupta
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.