without slash:
โ cra-rewired-starter git:(master) โ gc -m "feat(store-modules): add runtime"
husky > npm run -s precommit (node v8.11.1)
โ Running tasks for {src,config}/**/*.{js,jsx,json}
โ Running tasks for src/**/*.{css,less} [skipped]
โ No staged files match src/**/*.{css,less}
husky > npm run -s commitmsg (node v8.11.1)
โง input: feat(store-modules): add runtime
โ found 0 problems, 0 warnings
Cli-test:
โ cra-rewired-starter git:(master) โ echo "feat(components, component): subject" | ./node_modules/.bin/commitlint
โง input: feat(components, component): subject
โ found 0 problems, 0 warnings
โ cra-rewired-starter git:(master) โ echo "feat(components/component): subject" | ./node_modules/.bin/commitlint
โง input: feat(components/component): subject
โ found 0 problems, 0 warnings
Looks like there's an extra new-line before my commit message:
โ cra-rewired-starter git:(master) โ gc -m "feat(store/modules): add runtime"
husky > npm run -s precommit (node v8.11.1)
โ Running tasks for {src,config}/**/*.{js,jsx,json}
โ Running tasks for src/**/*.{css,less} [skipped]
โ No staged files match src/**/*.{css,less}
husky > npm run -s commitmsg (node v8.11.1)
โง input:
feat(store/modules): add runtime
โ message may not be empty [subject-empty]
โ type may not be empty [type-empty]
โ scope may not be empty [scope-empty]
โ found 3 problems, 0 warnings
https://github.com/Stupidism/cra-rewired-starter/tree/3a1c47cdcda5f585c529f78b246bc470ce64c526
commitlint.config.js
โ cra-rewired-starter git:(master) โ node -v
v8.11.1
โ cra-rewired-starter git:(master) npm -v
6.0.0
โ cra-rewired-starter git:(master) โ grep 'version' node_modules/@commitlint/cli/package.json
"type": "version",
"version": "6.2.0",
| Executable | Version |
| ---: | :--- |
| commitlint --version | VERSION |
| git --version | VERSION |
| node --version | VERSION |
I suspect this is caused by the additional newline, not the / in commit scopes
The errors you see and the diverging behaviour if direct CLI / stdin usage are consistent with the newline showing up in the commitlint output of your failing example - the commit parser we use assigns special meaning to the first line of a commit.
I don't see any way how commitlint could cause this, any idea what might add the newline on your side?
@marionebl Did you try my repo?
same behavior with #
Do you have a workarround ?
@aguacongas I could only use dot instead of hash or slash or comma
Ran into the same issue and tried to dig into it a bit.
If I understood correctly, commitlint falls back to conventional-changelog-angular's presetOpts when none are provided.
The headerPatterns specified there would allow special chars to be used in scopes: /^(\w*)(?:\((.*)\))?: (.*)$/
However, presetOpts does not appear to be empty, because it already contains { commentChar: '#' }, hence the angular fallback is not used. Instead it seems that conventional-commits-parser default headerPattern is used, which does not allow special chars in scopes. /^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)$/
Thanks for reporting and the analysis, folks.
The appropriate is to be more granular about defaulting to conventional-changelog-angular and fall back to the angular preset values for all keys (if missing in parserOpts), e.g.
const changelogOpts = await defaultChangelogOpts;
parserOpts = merge(changelogOpts, parserOpts);
Want to lend a hand @robin-drexler?
All of this "stuff" should make its way into the documentation as well. It is very confusing to figure out what options are available. Even if the docs just have links pointing to other repo options.
Most helpful comment
Ran into the same issue and tried to dig into it a bit.
If I understood correctly,
commitlintfalls back to conventional-changelog-angular's presetOpts when none are provided.The
headerPatternsspecified there would allow special chars to be used in scopes:/^(\w*)(?:\((.*)\))?: (.*)$/However, presetOpts does not appear to be empty, because it already contains
{ commentChar: '#' }, hence the angular fallback is not used. Instead it seems that conventional-commits-parser defaultheaderPatternis used, which does not allow special chars in scopes./^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)$/