Although defined in my commitlint.config.js file as '$', parserOpts.commentChar is superseded by '#'
In the commit messages of my repository, references to issues starts with a '#' character.
I have also set the commentChar for git to '$' since older (before I setup commitlint) commit messages could start with a '#' for such references : git config --local core.commentChar '$'
E.g. of old commit : #123456 - double API now really doubles the passed number
// commitlint.config.js
const ERROR = 2;
const WARNING = 1;
module.exports = {
extends: ['@commitlint/config-conventional'],
parserPreset: {
parserOpts: {
referenceActions: null,
commentChar: '$' // <------ SEE HERE
}
},
rules: {
'body-max-line-length': [ERROR, 'always', 130],
'footer-max-line-length': [ERROR, 'always', 130],
'header-max-length': [ERROR, 'always', 130],
'references-empty': [ERROR, 'never'],
'subject-case': [ERROR, 'never', ['start-case', 'pascal-case', 'upper-case']],
'subject-full-stop': [WARNING, 'never', '.'],
'type-enum': [ERROR, 'always', ['build', 'chore', 'deploy', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'test']]
}
};
// package.json :
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS --help-url='https://some.url'"
}
},
Now with such a config (see my commmitlint.config.js below in details section), I run the following git commit -am "..." commands :
git commit -am "fix: #233601"
git commit -am "foo #123456"
git commit -a then in the editor opened for the message, I write a single line #123456
git commit -am "#123456"
Expected Behavior
- should succeed
- should fail because no type is provided
- should fail because no type is provided
- should fail because no type is provided
Current Behavior
- does succeed ✅
- does fail ✅
- does fail ✅
- does succeed ❌
Affected packages
Possible Solution / Observations
We can observe that :
- commitlint corrrectly discard the message "#123456" when
git commit command is used (I guess because it wrongly thinks the message is empty)
- commitlint somehow wrongly accepts the same message when
git commit -m "#123456" command is used, despite there are no more lines after wrongly stripping the comments => first bug ?
Also : The logic behind how flags.edit is set to '.git/COMMIT_EDITMSG' from my commitlint -E HUSKY_GIT_PARAMS command in husky pre-commit hook is not clear for me, but for sure this line is very suspicious to me :
|
opts.parserOpts.commentChar = '#'; |
How can commitlint CLI hardcode the comment char as # ?? This does not work for anyone using a different Git commentChar... Somehow commitlint HAS to take into account my commentChar option set in my commitlint.config.js (another option would be to get it from git config, but I guess that's not the purpose of commitlint)
This logic has been introduced by this commit FYI :
35d0ca5
Environment
Reproduced on MacOs and Windows machines.
| Executable |
Version |
commitlint --version |
@commitlint/[email protected] |
git --version |
git version 2.20.1 (Apple Git-117) |
node --version |
v14.8.0 |
Although defined in my commitlint.config.js file as '$', parserOpts.commentChar is superseded by '#'
In the commit messages of my repository, references to issues starts with a '#' character.
I have also set the commentChar for git to '$' since older (before I setup commitlint) commit messages could start with a '#' for such references :
git config --local core.commentChar '$'E.g. of old commit :
#123456 - double API now really doubles the passed number// commitlint.config.js
// package.json :
Now with such a config (see my commmitlint.config.js below in details section), I run the following
git commit -am "..."commands :git commit -am "fix: #233601"git commit -am "foo #123456"git commit -athen in the editor opened for the message, I write a single line#123456git commit -am "#123456"Expected Behavior
Current Behavior
Affected packages
Possible Solution / Observations
We can observe that :
git commitcommand is used (I guess because it wrongly thinks the message is empty)git commit -m "#123456"command is used, despite there are no more lines after wrongly stripping the comments => first bug ?Also : The logic behind how flags.edit is set to
'.git/COMMIT_EDITMSG'from mycommitlint -E HUSKY_GIT_PARAMScommand in husky pre-commit hook is not clear for me, but for sure this line is very suspicious to me :commitlint/@commitlint/cli/src/cli.ts
Line 177 in 59667b3
How can commitlint CLI hardcode the comment char as
#?? This does not work for anyone using a different Git commentChar... Somehow commitlint HAS to take into account mycommentCharoption set in my commitlint.config.js (another option would be to get it from git config, but I guess that's not the purpose of commitlint)This logic has been introduced by this commit FYI :
35d0ca5
Environment
Reproduced on MacOs and Windows machines.
commitlint --versiongit --versionnode --version