commitlint icon indicating copy to clipboard operation
commitlint copied to clipboard

Enforcing a single whitespace between colon and commit subject

Open x87 opened this issue 4 years ago • 3 comments

Hey there!

Commitlint's recommended rules include subject-case checking that the subject is not sentence-case, start-case, pascal-case, upper-case. However this rule is easy to bypass by adding a leading whitespace in the subject. From the user perspective it's almost impossible to see if there are one or two whitespaces:

feat: MY SUBJECT // two whitespaces between feat: and MY, bypassing subject-case

and it discards the benefits of the subject-case rule.

Please consider adding an extra rule that enforces that subject must not start with a whitespace.

x87 avatar May 18 '20 15:05 x87

i found the question

Relsoul avatar Apr 13 '22 11:04 Relsoul

i found the question

Question to what?

escapedcat avatar Apr 14 '22 05:04 escapedcat

@escapedcat I mean found the problem of consent. But I have now found a solution The default parser of commitlint is that there must be a space after the type, and then the subject will be read

//  node_modules/conventional-commits-parser/index.js
headerPattern: /^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$/,

If you want to solve this problem, you only need to configure @x87

//commitlint.config.ts

 parserPreset: {
    parserOpts: {
      headerPattern: /^(\w*)(?:\(([\w$.\-*/ ]*)\))?:(.*)$/,
    },
  },

and I suggest you to customize the rules

rules: {
    'header-type-aliflow': [2, 'always'],
  },
  plugins: [
    {
      rules: {
        'header-type-aliflow'(arg) {
          const { raw } = arg;
          let pass = true;
          const msg =
            ' ^(feat|fix):\\#[A-Z]+\\-[0-9]+.*|^(docs|test|style|refactor|chore):\\S+|(Merge branch.*)。     ';
          const reg =
            /^(feat|fix):#[A-Z]+\-[0-9]+.*|^(docs|test|style|refactor|chore):\S+|(Merge branch.*)/;
          if (!reg.test(raw)) {
            pass = false;
          }
          const resdata: RuleOutcome = [pass, msg];
          return resdata;
        },
      },
    },

Relsoul avatar Apr 18 '22 07:04 Relsoul