interitty / code-checker
代码检查脚本提供了检查 Interitty 代码质量的方法。
Requires
- php: ~8.3
- ext-simplexml: *
- ext-tokenizer: *
- ext-xml: *
- ext-xmlwriter: *
- dg/composer-cleaner: ~2.2
- friendsofphp/php-cs-fixer: ~3.63
- phpmd/phpmd: ~2.15
- phpstan/extension-installer: ~1.4
- phpstan/phpstan: ~1.12
- phpstan/phpstan-deprecation-rules: ~1.2
- phpstan/phpstan-nette: ~1.3
- phpstan/phpstan-phpunit: ~1.4
- phpstan/phpstan-strict-rules: ~1.6
- slevomat/coding-standard: ~8.15
- spaze/phpstan-disallowed-calls: ~3.4
- squizlabs/php_codesniffer: ~3.10
Suggests
- phpunit/php-code-coverage: Add possibility to generate PHPUnit code coverage report compatible with GitLab
- phpunit/phpunit: Run phpunit tests when the root directory of the project contains the phpunit.xml file
README
代码检查脚本提供了检查 Interitty 代码质量的方法。
要求
- PHP >= 8.3
安装
安装 interitty/code-checker 的最佳方式是使用 Composer
composer require --dev interitty/code-checker
要安装 git 钩子,只需在项目的根目录(其中包含 .git 和 vendor 文件夹)中运行以下命令
./vendor/bin/git-hook --install
对于 macOS 用户,需要通过运行以下命令将 coreutils
与 Linux 用户统一
brew install coreutils
使用
如果全局 PATH 属性包含指向 code-check
脚本文件夹的路径,则可以直接在项目文件夹中运行命令(无需任何参数)并检查代码中是否存在错误。
code-checker
可选地,可以通过相对或绝对路径指定项目文件夹
code-checker --ignore-path=./interitty/project/vendor ./interitty/project
可以通过连接 --path
参数检查多个路径。
code-checker --base-dir=./interitty/project --path=./src --path=./tests
code-checker
将返回执行过程中发生的最低退出代码。当退出代码为 0
时,项目中的所有内容都正常。这被用于 git-hook
,可以用作 git pre-commit、commit-msg、pre-push 钩子,或在 CI-CD 流程中。
用作 commit-msg 的 git 钩子还会检查提交信息,并允许跳过以 "work in progress" 开头或简单地以 .
开头的提交的检查,但不适用于推送到受保护的分支(master
、test
、develop
)。
检查器设置
在某些情况下,例如 PHP 新版本发布时,设置启用检查器的列表可能很有用。因此,存在一个可选的 --checks=<CHECKS>
参数,允许通过逗号分隔的名称列表指定启用的检查。列表的默认值包含所有检查。
code-checker --checks=static_analysis,mess_detector,code_sniffer,coding_standard_fixer,phpunit
对于 CI-CD 流程,设置 CHECKS
环境变量是另一种有用的方法。
CHECKS=static_analysis,mess_detector,code_sniffer,coding_standard_fixer,phpunit code-checker
由于 PHP8 突发令牌错误,可以通过设置全局 CHECKS
环境变量来禁用 mess_detector
等功能,例如在 ~/.bashrc 文件
中。
设置
还有一些其他设置可能需要根据您的需求进行调整。
脚本参数 | 描述 |
---|---|
--base-dir="…” | 所有路径的基础目录,也用于截断输出消息。 |
--bin-dir="…” | 包含所有可执行文件的 composer bin 目录的路径。 |
--check_arguments_phpcs="…” | PHP CodeSniffer 的可选参数。 |
--check_arguments_phpcsfixer="…” | PHP Coding Standards Fixer 的可选参数。 |
--check_arguments_phpmd="…” | PHP Mess detector 的可选参数。 |
--check_arguments_phpstan="…” | PHP 静态分析工具的可选参数。 |
--check_arguments_phpunit="…” | PHP Unit 的可选参数。 |
--checks=<CHECKS> | 逗号分隔的启用检查列表(static_analysis,mess_detector,code_sniffer,phpunit)。 |
--color | 启用彩色输出。 |
--colors="…” | 详细指定颜色输出。 |
--vv , --debug | 增加详细程度以显示调试信息。 |
--fail-fast | 发生第一个错误时停止处理其他测试。 |
--generate-baseline | 为当前项目生成PHPStan基线文件。 |
--fix | 尝试自动修复可能的问题。 |
-h , --help | 显示帮助信息。 |
--ignore-path="…" | 要排除检查的路径。 |
--memory-limit="…" | 指定与php.ini接受的格式相同的内存限制。 |
--no-color | 禁用彩色输出。 |
--no-output | 是--quiet 的别名。 |
--path="…" | 指定用于处理的文件或文件夹的路径(可选)。 |
-q , --quiet | 降低详细程度到0以隐藏所有输出。 |
-v , --verbose | 提高详细程度以显示警告信息。 |
环境变量
一些设置也可以通过环境变量来设置。
环境变量 | 描述 |
---|---|
CHECK_ARGUMENTS_PHPCS"…" | PHP CodeSniffer 的可选参数。 |
CHECK_ARGUMENTS_PHPCSFIXER"…" | PHP Coding Standards Fixer 的可选参数。 |
CHECK_ARGUMENTS_PHPMD"…" | PHP Mess detector 的可选参数。 |
CHECK_ARGUMENTS_PHPSTAN"…" | PHP 静态分析工具的可选参数。 |
CHECK_ARGUMENTS_PHPUNIT"…" | PHPUnit的可选参数。 |
CHECKS="…" | 逗号分隔的启用检查列表(static_analysis,mess_detector,code_sniffer,phpunit)。 |
CLICOLOR=1 | 启用彩色输出。 |
DEBUG=1 | 增加详细程度以显示调试信息。 |
DOCKER_ENVS="…" | 逗号分隔的环境变量名称列表,用于将其提升到Docker中。 |
GLOBAL_BASELINE="…" | PHPStan基线文件所在的路径。 |
NO_OUTPUT=1 | 降低详细程度到0以隐藏所有输出。 |
VERBOSE=1 | 提高详细程度以显示警告信息。 |
Docker支持
如果设置了全局环境变量DOCKER_DEV_CONTAINER
,并且启动了一个带有<name>
设置的docker容器,则将在其中执行code-checker
和git-hook
命令。要永久设置全局环境变量值,只需将以下命令添加到.bashrc
文件或与您使用的shell相关的类似文件中。
export DOCKER_DEV_CONTAINER="<name>"
使用docker-exec
脚本来在定义的docker容器中运行命令。
docker-exec "/path/command --some-arguments /path/to/project"
修复IDE
IDE在许多情况下都帮助开发者,但有时它们并不那么有用。在IDE和第三方应用程序的集成中,它们提供项目属性文件的位置,而不是项目地址。更简单但仍然不是很有用的是,这些应用程序从根目录而不是项目目录运行。
对于这些情况,有一个名为fix-ide
的脚本,它检测包含项目属性nbproject
文件夹的地址,并根据项目目录更改它们。
例如,以下调用将检测/path/to/project-properties/nbproject
文件夹的存在,并使用在./nbproject/project.properties
文件中定义为src.dir
属性的目录调用给定的命令。
#$PWD = /
fix-ide /path/command --some-arguments /path/to/project-properties
前面的命令将导致调用以下命令。
#$PWD = /path/to/project
/path/command --some-arguments /path/to/project
PHP Mess Detector
要从IDE在Docker容器中运行具有自定义规则集的phpmd
,请使用来自interitty/code-checker的同名phpmd
脚本,而不是原始脚本。
例如,当interitty/code-checker被克隆到/opt/srv/interitty/interitty/code-checker
文件夹中时,docker容器被命名为dev-php-fpm
,首选规则集在./src/phpmd/rulesets/interitty.xml
中,将以下字符串添加到NetBeans配置中。
/opt/srv/interitty/interitty/code-checker/bin/phpmd --color --docker-container=dev-php-fpm --fix-ide --force-ruleset=/opt/srv/interitty/interitty/code-checker/src/phpmd/rulesets/interitty.xml
PHP CodeSniffer
要从IDE在Docker容器中运行具有自定义规则集的phpcs
,请使用来自interitty/code-checker的同名phpcs
脚本,而不是原始脚本。
例如,当将 interitty/code-checker 克隆到 /opt/srv/interitty/interitty/code-checker
文件夹中时,Docker 容器名为 dev-php-fpm
,首选规则集在 ./src/phpcs/rulesets/interitty
中,请将以下字符串添加到 NetBeans 配置中。
/opt/srv/interitty/interitty/code-checker/bin/phpcs --color --docker-container=dev-php-fpm --fix-ide --force-ruleset=/opt/srv/interitty/interitty/code-checker/src/phpcs/rulesets/interitty
PHP 编码标准修复器
要从 Docker 容器中的 IDE 运行具有自定义规则集的 php-cs-fixer
,请使用来自 interitty/code-checker 的同名的 php-cs-fixer
脚本,而不是原始脚本。
例如,当将 interitty/code-checker 克隆到 /opt/srv/interitty/interitty/code-checker
文件夹中时,Docker 容器名为 dev-php-fpm
,首选规则集在 /src/php-cs-fixer/.php-cs-fixer.php
中,请将以下字符串添加到 NetBeans 配置中。
/opt/srv/interitty/interitty/code-checker/bin/php-cs-fixer
并将以下字符串添加到 默认选项
中。
--color --docker-container=dev-php-fpm --fix-ide --config=/opt/srv/interitty/interitty/code-checker/src/php-cs-fixer/.php-cs-fixer.php
PHP 静态分析工具
要从 Docker 容器中的 IDE 运行具有自定义规则集的 phpstan
,请使用来自 interitty/code-checker 的同名的 phpstan
脚本,而不是原始脚本。
例如,当将 interitty/code-checker 克隆到 /opt/srv/interitty/interitty/code-checker
文件夹中时,Docker 容器名为 dev-php-fpm
,首选规则集在 /src/phpstan/interitty.neon
中,请将以下字符串添加到 NetBeans 配置中。
/opt/srv/interitty/interitty/code-checker/bin/phpstan --color --docker-container=dev-php-fpm --fix-ide
并将以下字符串添加到 配置
中。
/opt/srv/interitty/interitty/code-checker/src/phpstan/interitty.neon
有时可能需要向 PHPStan 添加一些要忽略的内容,以便它不成为项目的一部分,因为原因已经解决,只是尚未包含在当前版本中。在这种情况下,可以在项目根目录或主目录中生成一个 PHPStan 基准 文件。