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

v1.0.1 2026-01-05 20:20 UTC

This package is auto-updated.

Last update: 2026-01-05 21:06:39 UTC


README

Beautiful, self-contained HTML output formatter for Rector PHP.

GitHub PHPUnit Action Status GitHub PHPStan Action Status GitHub PhpCsFixer Action Status

License PHP Latest Version on Packagist

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.