自定义 commitlint header 格式

Customise commitlint header format

我正在使用 Husky 来设置我的 git 挂钩,并且正在尝试更改为 Commitlint 所期望的 header 的默认格式:

type(scope?): subject

我特别想尝试这种格式:

:gitmoji:? [scope] subject

:gitmoji:Gitmoji 的表情符号之一并且是可选的,范围内有方括号(不是可选的)而不是圆括号,并且没有 :将类型+范围与主题分开。此外,我希望 scope 具有类似于 TCKT-666 的格式(例如引用 Jira 的票证),

现在,我一直在使用 commitlint.config.jsparserPresetparserOptsheaderPatternheaderCorrespondence 属性尝试很多事情,但我遇到了几个问题:

这应该适用于 :gitmoji:? [scope] subject

module.exports = {
  parserPreset: {
    parserOpts: {
      headerPattern: /^(?:(:\w+:)\s)?\[(\w+)\] (.+)/,
      headerCorrespondence: ["type", "scope", "subject"],
    },
  },
  plugins: [
    {
      rules: {
        "header-match-team-pattern": (parsed) => {
          const { type, scope, subject } = parsed;
          if (type === null && scope === null && subject === null) {
            return [
              false,
              "header must be in format ':gitmoji:? [scope] subject'",
            ];
          }
          return [true, ""];
        },
        "gitmoji-type-enum": (parsed, _when, expectedValue) => {
          const { type } = parsed;
          if (type && !expectedValue.includes(type)) {
            return [
              false,
              `type must be one of ${expectedValue}
    see https://gitmoji.dev`,
            ];
          }
          return [true, ""];
        },
      },
    },
  ],
  rules: {
    // "type-empty": [2, "never"],
    "header-match-team-pattern": [2, "always"],
    "gitmoji-type-enum": [2, "always", [":bug:", ":sparkle:"]], // custom rule defined in plugins
    // "subject-case": [2, "always", "sentence-case"],
  },
};

看起来需要像 header-match-team-pattern 这样的自定义规则来确保 RegExp 匹配。