commitlint
commitlint copied to clipboard
Enforcing a single whitespace between colon and commit subject
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.
i found the question
i found the question
Question to what?
@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;
},
},
},