staempfli / typo3-conventions-checker
强制TYPO3 CMS项目的代码质量指南
Requires
- php: ^7.0
- friendsofphp/php-cs-fixer: *
- phpmd/phpmd: *
- phpro/grumphp: *
This package is auto-updated.
Last update: 2024-09-12 00:29:29 UTC
README
它是做什么的?
此包允许您在提交更改之前自动测试任何更改后的代码,以符合TYPO3文件格式要求。它还强制您根据TYPO3贡献工作流程保持提交消息整洁。尽管如此,我们仍有一些检查未包含在内,因为提交消息结构适用于TYPO3核心贡献,而我们通常不在我们的项目中提交到核心存储库。
它通过Git钩子工作,所以每次您键入'git commit ...'时,都会触发配置的GrumPHP任务。
实际上,这个包本身并没有做什么。 :) 它提供了一些配置,并需要一些依赖关系,以便快速设置代码质量检查和约定。
它是如何做到这一点的?
很简单。它需要GrumPHP,它会针对您的每个提交调用PHP编码标准修复器以及PHP混乱检测器。只有您尝试提交的文件会被检查是否存在编码标准违规或代码混乱。
安装
先决条件 / TYPO3项目设置
此包假设您使用基于composer的TYPO3设置,拥有一个位于公共html目录外的(可能是版本化的)composer清单,名称为'web'(尽管您可以当然重新配置此目录的名称)。大致如下
- your-typo3-project/
- bin
- vendor
(...)
- composer.json
- web
- fileadmin
- typo3
- typo3conf
(...)
- 在根composer清单的"extra"部分引用GrumPHP配置文件(grumphp.yml)
(...) "extra": { "grumphp": { "config-default-path": "vendor/staempfli/typo3-conventions-checker/conf/grumphp.yml" } }
(或者,您可以在git根目录中创建一个自定义的grumphp.yml文件,这也同样有效)。
- 通过composer安装此包
composer require --dev "staempfli/typo3-conventions-checker"
- 提交项目更改。所有检查都会在提交时自动运行。
选项和自定义
默认配置
默认情况下,此包使用
- 与TYPO3核心php-cs-fixer配置相对应的php-cs-fixer配置
- Git提交消息规则,主要集成TYPO3核心提交消息格式,排除特定于TYPO3核心贡献工作流程的规则,例如'发布'和/或'Change-Id'要求
- (/conf/grumphp.yml中的完整配置)
覆盖(即'扩展')配置
为了使此操作正常工作,您需要在git根目录中创建自己的grumphp.yml,根据GrumPHP配置。在那里,您可以引用此包的grumphp配置并覆盖设置。
继承注意事项:据我所知,无法递归继承任务设置,这意味着:如果你覆盖了一个任务的属性/设置(见下例),你需要重新定义所有任务及其设置。 查看为扩展提供的grumphp配置。
示例 1:重新配置git提交消息限制
假设你想限制git提交消息长度为42个字符。将你的grumphp.yml
更新为
imports: - { resource: vendor/staempfli/typo3-conventions-checker/conf/grumphp.yml }
到类似以下内容
imports: - { resource: vendor/staempfli/typo3-conventions-checker/conf/grumphp.yml } parameters: tasks: git_commit_message: max_subject_width: 42 (other tasks' configuration with or without customization)
示例 2:自定义php-cs-fixer配置
与第一个示例类似:通过grumphp配置重新配置。不过,这次要引用不同的(你自己的)php-cs-fixer配置
imports: - { resource: vendor/staempfli/typo3-conventions-checker/conf/grumphp.yml } parameters: tasks: phpcsfixer2: config: 'your/own/PhpCsFixer/conf.php' (other tasks' configuration with or without customization)
初始化扩展
假设,你维护一个名为'mynews'的扩展,并且当然,你希望'mynews'的代码也符合某些编码标准。你正在工作的主项目中,其中'mynews'作为依赖项被包含,但你可能会在主项目的工作中修改'mynews'。但是,由于'mynews'是其自己的git仓库,如果你像上面描述的那样在主项目上初始化GrumPHP,它不会自动由GrumPHP检查。
- main-typo3-project/
- composer.json
- web
- fileadmin
- typo3
- typo3conf
- ext
- mynews <= doesn't get initialized by GrumPHP
(...)
幸运的是!你只需两步就能强制所有提交到'mynews'都由GrumPHP进行检查。
- 通过'mynews'扩展的composer清单添加对grumphp.yml配置的引用,或在扩展的根目录中创建自定义的grumphp.yml。注意,这个包已经提供了一个专门的grumphp配置,该配置尊重扩展目录的嵌套。
通过扩展的composer清单的'extra'部分
(...) "extra": { "grumphp": { "config-default-path": "./../../../../vendor/staempfli/typo3-conventions-checker/conf/grumphp-extensions.yml" } }
通过扩展根目录中的grumphp.yml
imports: - { resource: ./../../../../vendor/staempfli/typo3-conventions-checker/conf/grumphp-extensions.yml }
- 在你的根composer清单中,通过composer脚本运行'initializeExtensions'方法。比如说,每次
composer update
之后,怎么样?
(...) "scripts": { "post-update-cmd": [ "Staempfli\\Typo3ConventionsChecker\\Composer\\Grumphp::initializeExtensions", ], }, (...)
Windows用户
目前存在一个错误,当在扩展内部使用时,会导致git hooks中grumphp可执行文件的路径错误。你可能会遇到git cli响应错误,指出无法找到GrumPHP可执行文件。原因是.git/hooks/pre-commit
以及.git/hooks/commit-message
中的错误注册。
解决方案:在上面的文件中,对GrumPHP的调用可能看起来像这样
# Run GrumPHP
(cd "./" && printf "%s\n" "${DIFF}" | exec X:\path\to\your-site\web\vendor\bin\grumphp git:pre-commit '--skip-success-output')
请注意,GrumPHP可执行文件的路径没有用引号括起来,这会导致错误。只需将“X:\path (...) grumphp”用双引号括起来,你就设置好了
# Run GrumPHP
(cd "./" && printf "%s\n" "${DIFF}" | exec "X:\path\to\your-site\web\vendor\bin\grumphp" git:pre-commit '--skip-success-output')