staempfli/typo3-conventions-checker

强制TYPO3 CMS项目的代码质量指南

0.4.0 2018-07-10 06:30 UTC

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"
  • 提交项目更改。所有检查都会在提交时自动运行。

选项和自定义

默认配置

默认情况下,此包使用

覆盖(即'扩展')配置

为了使此操作正常工作,您需要在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进行检查。

  1. 通过'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 }
  1. 在你的根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')