Description
I've been working on a custom plugin with custom rules, and for some of the rules I want to apply to all commit comments, however for other rules I want to only apply for non-WIP commits. I don't believe I can currently do this on a per rule basis.
Expected Behaviour
What I would like to do is something like this (ignore rule names since they refer to custom rules I created):
{
rules: {
[commitlintGitHubRules.issueNumberMissing]: [2, 'never-in-non-wips'],
[commitlintGitHubRules.issueNumberFormat]: [2, 'always'],
[commitlintGitHubRules.issueNumberDuplicate]: [2, 'never'],
[commitlintGitHubRules.wipAllowed]: [2, 'always'],
[commitlintGitHubRules.subjectEmpty]: [2, 'never-in-non-wips'],
[commitlintGitHubRules.subjectSeparator]: [2, 'always'],
[commitlintGitHubRules.subjectCase]: [2, 'always-in-non-wips', 'sentence-case'],
[commitlintGitHubRules.subjectFullStop]: [1, 'always-in-non-wips'],
[commitlintGitHubRules.typeCase]: [2, 'always', 'lower-case'],
},
};
Notice how some rules use some new when
values to only apply to non-WIP commits, while others apply to all commits.
As you can see, what I would like to do is specify in my configuration always-in-non-wips
or never-in-non-wips
since my custom plugin identifies whether a commit is a WIP or not and if it is a WIP and the when
value is one of these custom values, it just returns [true]
as it skips validating the WIP commit.
If the commit isn't a WIP though, then it converts the custom when
to the standard equivalent: always-in-non-wips
=> always
; never-in-non-wips
=> never
. It then proceeds to validate accordingly.
In the configuration example above, many of the custom rules delegate to the standard corresponding rules such as subject-case
, subject-full-stop
, but the custom rules short-circuit for WIP commits if the when
value stipulates to only validate non-WIPs. Otherwise it delegates to the standard rules after converting the when
to the corresponding standard always
and never
values as necessary.
Current Behaviour
This all works great with one problem I didn't anticipate - the overall commitlint linter rejects any custom when
value in a configuration and so blows everything up, so I can't do this.
Not allowing individual rules to allow for more than two different rule conditions seems quite limiting, and I'm raising this Issue to get some feedback on this.
Suggestion
My suggestion would be to update the linter to avoid globally policing the allowable when
values and instead delegate that to individual rules to allow each one to police which values it accepts.
Affected packages
- cli
- core
- prompt
- config-angular
Your Environment
Executable | Version |
---|---|
commitlint --version |
8.3.5 |
git --version |
2.25.0 |
node --version |
12.16.1 |