valkyrja/phpcodesniffer

PHPCodeSniffer for the Valkyrja Project.

Maintainers

Package info

github.com/valkyrjaio/phpcodesniffer

Homepage

Type:project

pkg:composer/valkyrja/phpcodesniffer

Statistics

Installs: 118

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v26.1.0 2026-04-16 04:41 UTC

This package is auto-updated.

Last update: 2026-04-17 01:38:22 UTC


README

Valkyrja PHP Code Sniffer

PHP Code Sniffer rules for the Valkyrja project.

PHP Version Require Latest Stable Version License Scrutinizer Coverage Status Psalm Shepherd Maintainability Rating

Build Status

Linting PHP Code Sniffer Build Status PHP CS Fixer Build Status
Coding Rules PHPArkitect Build Status Rector Build Status
Static Analysis PHPStan Build Status Psalm Build Status
Testing PHPUnit Build Status

Usage

The ruleset is defined in .github/ci/phpcodesniffer/ruleset.xml and run via the phpcodesniffer Composer script:

composer phpcodesniffer

This runs phpcs against src/ and tests/ using the project ruleset. The src/ run suppresses warnings (-n); the tests/ run additionally shows sniff source codes (-n -s).

To see all warnings (not just errors) run:

cd .github/ci/phpcodesniffer && composer warnings

Ruleset

Excluded Paths

The following paths are excluded from all checks:

Path
.github/
.phpunit.cache/
build/
coverage-html/
docs/
functions/
pre-commit-hooks/
vendor/

Rules

SlevomatCodingStandard.Files.TypeNameMatchesFileName

Enforces that each type (class, interface, trait, enum) is declared in a file whose name matches the type name, rooted at the configured namespaces:

Root path Namespace
src/Valkyrja Valkyrja
tests/Tests Valkyrja\Tests

The following directories are skipped when resolving file paths:

.github, docs, functions, pre-commit-hooks, vendor

SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly

All referenced names must appear in use statements — fully qualified names are not permitted inline:

Property Value Effect
allowPartialUses false Partial uses (e.g. use Foo\Bar referencing Bar\Baz) are not allowed
allowFullyQualifiedNameForCollidingClasses false Colliding class names must be aliased, not referenced fully qualified
searchAnnotations true Annotations in docblocks are also checked for unimported names

Workflows

The _workflow-call.yml reusable workflow runs PHP Code Sniffer against the calling repository's source. It is designed to be called from other repositories via workflow_call.

Inputs

Input Type Default Description
paths string Required. YAML filter spec with two keys: ci (CI config files that trigger a base-branch fetch) and files (all files that trigger the check).
post-pr-comment boolean true Post a PR comment on failure and remove it on success. Disable when the calling workflow handles its own reporting.
composer-options string '' Extra flags passed to every composer install step (e.g. --ignore-platform-req=ext-openswoole).
php-version string '8.4' PHP version to use.
ci-directory string '.github/ci/phpcodesniffer' Path to the CI directory containing composer.json and the tool config.
extensions string 'mbstring, intl' PHP extensions to install via shivammathur/setup-php.

Usage

jobs:
  phpcodesniffer:
    uses: valkyrjaio/phpcodesniffer/.github/workflows/_workflow-call.yml@master
    permissions:
      pull-requests: write
      contents: read
    with:
      php-version: '8.4'
      paths: |
        ci:
          - '.github/ci/phpcodesniffer/**'
          - '.github/workflows/phpcodesniffer.yml'
        files:
          - '.github/ci/phpcodesniffer/**'
          - '.github/workflows/phpcodesniffer.yml'
          - 'src/**/*.php'
          - 'composer.json'
    secrets: inherit

secrets: inherit is required to pass the VALKYRJA_GHA_APP_ID and VALKYRJA_GHA_PRIVATE_KEY org secrets used for PR comments.