asispts / ptscs
PSR-12 coding standard with stricter rules
Installs: 4 854
Dependents: 2
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 0
Open Issues: 2
Type:phpcodesniffer-standard
Requires
- php: >=7.2
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- slevomat/coding-standard: ^8.14
- squizlabs/php_codesniffer: ^3.7
Requires (Dev)
Conflicts
- squizlabs/php_codesniffer: >=3.12.0
README
ptscs
» PSR-12 coding standard with stricter rules «
ptscs
is a PHP_CodeSniffer ruleset based on PSR-12 with stricter rules for consistency, readability, and best practices.
Installation
composer require --dev asispts/ptscs
Usage
Create a phpcs.xml.dist
file in your project root with the following configuration (customize as needed for your project structure):
<?xml version="1.0" encoding="UTF-8"?> <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd"> <arg name="colors" /> <arg name="parallel" value="8" /> <arg value="psv" /> <arg name="extensions" value="php" /> <file>src</file> <file>tests</file> <exclude-pattern>vendor</exclude-pattern> <rule ref="ptscs" /> <!-- Example: exclude a rule --> <!-- (e.g. disable abstract/final requirement in symfony entities) --> <rule ref="SlevomatCodingStandard.Classes.RequireAbstractOrFinal"> <exclude-pattern>src/Entity</exclude-pattern> </rule> <!-- Example: add an extra rule --> <!-- (e.g. enforce namespace matches file name; useful where PHPStan falls short) --> <rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName"> <properties> <property name="rootNamespaces" type="array"> <element key="ptscs" value="Ptscs" /> <element key="tests" value="Ptscs\Tests" /> </property> </properties> </rule> </ruleset>
Notable Rules
This coding standard uses PSR-12 with some changes and stricter requirements:
declare(strict_types=1)
is required in all PHP files and must be on the same line as the opening tag:<?php declare(strict_types=1)
snake_case
is allowed in test method names:public function test_something(): void {}
- All classes must be declared as
final
orabstract
:// Not allowed class Foobar {}
- Filenames must match class names.
See the full list in RULES.md.
Contributing
Contributions are welcome! Please open an issue to discuss major changes before submitting a pull request.
License
Released under MIT License.