lmc/coding-standard

Alma Career Czechia (LMC) 项目中使用的编码标准

4.1.1 2024-06-10 09:07 UTC

README

Latest Stable Version

Alma Career Czechia(原名 LMC)产品中使用的 PHP 编码标准。

该标准基于 PSR-12 和部分基于 PER 2.0,并添加了各种检查,以确保代码可读性、遵循相同的约定,并且不包含常见的错误。

我们使用 EasyCodingStandard 来定义和执行为 PHP-CS-FixerPHP_CodeSniffer 创建的检查。

安装

composer require --dev lmc/coding-standard

使用

  1. 在项目的根目录中创建 ecs.php 文件并导入代码风格规则
<?php declare(strict_types=1);

use Symplify\EasyCodingStandard\Config\ECSConfig;

return ECSConfig::configure()
    ->withPaths([__DIR__ . '/src', __DIR__ . '/tests']) // optionally add 'config' or other directories with PHP files
    ->withRootFiles() // to also check ecs.php and all other php files in the root directory
    ->withSets(
        [
            __DIR__ . '/vendor/lmc/coding-standard/ecs.php',
        ]
    );
  1. 运行检查命令
vendor/bin/ecs check
  1. 可选地,我们建议将此添加到 composer.jsonscripts 部分
    "scripts": {
        "analyze": [
            "vendor/bin/ecs check --ansi",
            "[... other scripts, like PHPStan etc.]"
        ],
        "fix": [
            "...",
            "vendor/bin/ecs check --ansi --fix"
        ],
    }

现在您可以使用 composer analyze 运行检查,并使用 composer fix 执行自动修复。

添加自定义检查或覆盖默认设置

除了默认的代码风格规则外,您可以自由添加来自 PHP-CS-FixerPHP_CodeSniffer 的任何规则。如果需要,您还可以覆盖任何默认设置。

下面是一些根据您的需求可能想要添加的更具观点的检查示例

<?php declare(strict_types=1);

use PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff;
use PhpCsFixer\Fixer\PhpUnit\PhpUnitTestAnnotationFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;

return ECSConfig::configure()
    /* (...) */
    ->withSets(
        [
            __DIR__ . '/vendor/lmc/coding-standard/ecs.php',
        ]
    )
    ->withRules(
        [
            // PHPUnit attributes must be used over their respective PHPDoc-based annotations. (Use with PHPUnit 10+.)
            PhpUnitAttributesFixer::class,
            // Single-line comments must have proper spacing (one space after `//`).
            SingleLineCommentSpacingFixer::class,
            // Convert multiline string to heredoc or nowdoc.
            MultilineStringToHeredocFixer::class,
        ]
    )
    // Enforce line-length to 120 characters.
    ->withConfiguredRule(LineLengthSniff::class, ['absoluteLineLimit' => 120])
    // Tests must have @test annotation.
    ->withConfiguredRule(PhpUnitTestAnnotationFixer::class, ['style' => 'annotation'])
    // Specify elements separation.
    ->withConfiguredRule(ClassAttributesSeparationFixer::class, ['elements' => ['const' => 'none', 'method' => 'one', 'property' => 'none']])
    /* (...) */

有关更多配置选项,请参阅 EasyCodingStandard 文档

排除(跳过)检查或文件

您可以配置 ecs.php 文件以完全跳过某些文件、禁用特定检查或抑制特定错误。

<?php declare(strict_types=1);

use PHP_CodeSniffer\Standards\Generic\Sniffs\PHP\ForbiddenFunctionsSniff;
use PHP_CodeSniffer\Standards\Squiz\Sniffs\Arrays\ArrayDeclarationSniff;
use Symplify\EasyCodingStandard\Config\ECSConfig;

return ECSConfig::configure()
    /* (...) */
    ->withSkip(
        [
            // Ignore specific check only in specific files
            ForbiddenFunctionsSniff::class => [__DIR__ . '/src-tests/bootstrap.php'],
            // Disable check entirely
            ArrayDeclarationSniff::class,
            // Skip one file
            __DIR__ . '/file/to/be/skipped.php',
            // Skip entire directory
            __DIR__ . '/ignored/directory/*',
        ]
    )
    /* (...) */

有关更多配置选项,请参阅 EasyCodingStandard 文档

IDE 集成

有关与 PHPStorm 和其他 IDE 集成的说明,请参阅 EasyCodingStandard README

更新日志

有关最新更改,请参阅 CHANGELOG.md 文件。此库遵循 语义版本控制

许可证

此库是开源软件,采用 MIT 许可证