Skip to content

JBZoo/Codestyle

Repository files navigation

JBZoo / Codestyle

CI Coverage Status Psalm Coverage Psalm Level CodeFactor

Stable Version Total Downloads Dependents GitHub License

Comprehensive collection of QA tools and code quality standards for PHP 8.2+ projects. Provides configurations and wrappers for PHPStan, Psalm, PHP-CS-Fixer, PHPUnit, PHPMD, Phan and other popular code analysis tools.

Requirements

  • PHP 8.2+ - Modern PHP version with strict typing support
  • Composer - For dependency management
  • Make - Build automation tool

Installation

composer require --dev jbzoo/codestyle

Quick Start

Add the following to your project's Makefile to get access to all QA tools:

ifneq (, $(wildcard ./vendor/jbzoo/codestyle/src/init.Makefile))
    include ./vendor/jbzoo/codestyle/src/init.Makefile
endif

update: ##@Project Install/Update all 3rd party dependencies
    $(call title,"Install/Update all 3rd party dependencies")
    @echo "Composer flags: $(JBZOO_COMPOSER_UPDATE_FLAGS)"
    @composer update $(JBZOO_COMPOSER_UPDATE_FLAGS)

test-all: ##@Project Run all project tests at once
    @make test
    @make codestyle

Available Tools

This package includes configurations for:

  • PHPStan - Static analysis tool with strict rules
  • Psalm - Advanced static analysis with type coverage
  • PHP-CS-Fixer - Code style fixer with PSR-12 and custom rules
  • PHPCS - Code sniffer for PSR-12 and PHP compatibility
  • PHPMD - Mess detector for code quality issues
  • PHPUnit - Unit testing framework with coverage reporting
  • Phan - Super strict static analyzer
  • PHPMND - Magic number detector
  • PHPCPD - Copy-paste detector

Common Commands

Development

make update          # Install/update dependencies
make autoload        # Dump optimized autoloader
make clean           # Cleanup build directory

Testing

make test           # Run PHPUnit tests
make test-all       # Run all tests and code style checks
make codestyle      # Run all code style linters

Individual QA Tools

make test-phpstan        # Static analysis with PHPStan
make test-psalm          # Static analysis with Psalm
make test-phpcs          # Code sniffer (PSR-12 + compatibility)
make test-phpcsfixer     # Check PHP-CS-Fixer rules
make test-phpcsfixer-fix # Auto-fix with PHP-CS-Fixer
make test-phpmd          # Mess detector
make test-phan          # Phan static analyzer

Reports

make report-all         # Generate all reports
make report-phpmetrics  # PHP Metrics report
make report-pdepend     # PHP Depend report

Complete Command Reference

Usage:
  - `make [target]`
  - `make [target] OPTION=value`
  - `ENV_VAR=value make [target]`

Misc:
  help                          Show this text
  list                          Full list of targets

Project:
  autoload                      Dump optimized autoload file for PHP
  build-phar                    Compile phar file
  clean                         Cleanup only build directory
  clean-vendor                  Cleanup all
  test-all                      Run all project tests at once
  update                        Install/Update all 3rd party dependencies

Tests:
  codestyle                     Launch all codestyle linters at once
  test                          Launch PHPUnit Tests (alias "test-phpunit")
  test-composer                 Validates composer.json and composer.lock
  test-composer-reqs            Checks composer.json the defined dependencies against your code
  test-performance              Run benchmarks and performance tests
  test-phan                     Phan - super strict static analyzer for PHP
  test-phpcpd                   PHPcpd - Find obvious Copy&Paste
  test-phpcs                    PHPcs - Checking PHP Code Sniffer (PSR-12 + PHP Compatibility)
  test-phpcsfixer               PhpCsFixer - Check code to follow stylish standards
  test-phpcsfixer-fix           PhpCsFixer - Auto fix code to follow stylish standards
  test-phpmd                    PHPmd - Mess Detector Checker
  test-phpmd-strict             PHPmd - Mess Detector Checker (strict mode)
  test-phpmnd                   PHPmnd - Magic Number Detector
  test-phpstan                  PHPStan - Static Analysis Tool
  test-phpunit                  PHPUnit - Launch General Tests
  test-psalm                    Psalm - static analysis tool for PHP

Reports:
  report-all                    Build all reports at once
  report-composer-diff          What has changed after a composer update
  report-composer-graph         Build composer graph of dependencies
  report-coveralls              Send coverage report to coveralls.io
  report-merge-coverage         Merge all coverage reports in one clover file
  report-pdepend                Build PHP Depend Report
  report-performance            Build performance summary report
  report-phploc                 PHPloc - Show code stats
  report-phpmetrics             Build PHP Metrics Report
  update-extend                 Checks new compatible versions of 3rd party libraries

Trick: Add into your "~/.bash_aliases" the line "complete -W "\`make list\`" make" to use TAB

Integration with IDEs

The package provides configurations that work seamlessly with:

  • PhpStorm - Built-in support for all tools
  • VS Code - Extensions available for all included tools
  • Vim/Neovim - LSP support through various plugins

Advanced Usage

Custom PHP-CS-Fixer Rules

Extend the base configuration in your .php-cs-fixer.php:

use JBZoo\Codestyle\PhpCsFixer\PhpCsFixerCodingStandard;

return (new PhpCsFixerCodingStandard(__DIR__))
    ->addCustomRules([
        'your_custom_rule' => true,
    ])
    ->getFixerConfig();

PHPUnit Base Classes

Use the provided base test classes for consistent testing:

use JBZoo\Codestyle\PHPUnit\AbstractPackageTest;

class YourPackageTest extends AbstractPackageTest
{
    protected string $packageName = 'your-package-name';
}

Contributing

Contributions are welcome! Please ensure:

  1. All tests pass: make test-all
  2. Code follows our standards: make codestyle
  3. Coverage remains high: make report-all

License

MIT License. See LICENSE file for details.