commitlint icon indicating copy to clipboard operation
commitlint copied to clipboard

[Proposal] additional features for type-enum scope-enum

Open xCykrix opened this issue 6 years ago • 7 comments

Proposal

Hello! I was recently working with commitlint and noticed that "scope-enum" did not offer everything I would have liked. I made a PoC for the suggestion at https://www.npmjs.com/package/commitlint-scope .

The idea is to essentially allow each type to only allow specific scopes, and each scope to only allow specific values inside the brackets. Allowing each scope to have a blob or path to restrict which files may be commit-ed to the valu inside the brackets.

If this is something your team would be up to supporting natively, I would be more then willing to help where I can to integrate it.

"Addon" commitlint.config.js

module.exports = {
  extends: [ '@commitlint/config-conventional' ],
  scopes: {
    'yarn': { files: [ 'package.json', 'yarn.lock', '.yarnclean' ] },
    'lint': { files: [ '.eslintrc', '.huskyrc.js', '.editorconfig', 'commitlint.config.js' ] },
    'repo': { files: [ '*.md', 'LICENSE', '.gitignore' ] },
    'source': { files: [ 'src/*', 'src/**' ] },
    'engine': { files: [ 'index.js' ] },
    'staged': { files: [ '**', '**/*' ] }
  }
}

"Addon" Behavior

Good Commit

git add package.json
git commit -m "chore(yarn): updating package.json"

â§—   input: chore(yarn): updating package.json
✔   found 0 problems, 0 warnings
    (Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )

Bad Commit

git add eslintrc package.json
git commit -m "chore(yarn): updating package.json"

â§—   input: chore(yarn): update package.json
✖   file '.eslintrc' was not allowed in selected scope [file-forbidden]
✖   found 1 problems, 0 warnings
    (Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint 

Unconfigured Scope

git add package.json
git commit -m "chore(bla): updating package.json"

â§—   input: chore(bla): update package.json
✖   detected commit scope not found in commitlint.config.js [no-detect]
✖   found 1 problems, 0 warnings
    (Need help? -> https://github.com/conventional-changelog/commitlint#what-is-commitlint )

Affected packages

  • [x] cli
  • [x] core
  • [x] prompt
  • [ ] config-angular

Context

I created this PoC to allow more control over the specific components that commitlint will control by allowing globs and paths to be used to restrict which files can be commit-ed in which type and scopes. Executing git diff --name-only --cached will allow you to fetch the current staged list of files to be commit-ed. Which is the main leverage for the PoC to be available.

#395 may be applicable to improving to the request too, allowing dynamic building of the lerna packages

xCykrix avatar Apr 20 '19 14:04 xCykrix

Hey @xCykrix , thx for your efforts! I could imagine to add this to the core. Let's see what @marionebl @byCedric think about it.

escapedcat avatar Apr 24 '19 04:04 escapedcat

@escapedcat thanks! I wanted a little more fine tuned control and couldn't find a way to restrict the exact files allowed. I figured an official feature set would be more suitable and used over one that just hooks into the config and API with another CLI program. Would also allow it not to have a duplicate prompt output, so it is all contained in one nice and neat one.

xCykrix avatar Apr 24 '19 20:04 xCykrix

@escapedcat i'm working on building a better proof of concept that will actually integrate to the rules, perhaps to give a better idea to anyone else and to allow it to be easier to integrate since it will use the official shareable config loader.

xCykrix avatar Apr 26 '19 22:04 xCykrix

@xCykrix plugins just got merged: https://github.com/conventional-changelog/commitlint/pull/588
I feel like that we might tend to not move this into core but let people use a plugin to achieve such rule. Let me confirm with the others.

escapedcat avatar Apr 27 '19 04:04 escapedcat

@escapedcat alright, let me know! I'd be more then happy to create it as a plugin and maintain it.

xCykrix avatar Apr 28 '19 20:04 xCykrix

love to have that as well.

bobbui avatar Nov 08 '19 17:11 bobbui

@thangbn I've just been getting back into using commit linting on my projects. I'll end up taking a look at the API for plugins and work from there. When I get started I'll pass a link regarding the plugin if does not already exist. :slightly_smiling_face:

xCykrix avatar Nov 14 '19 18:11 xCykrix