conventional-commitsconventional-changelog

Commitlint - Allow '/' in scope-enum


In my Angular project, I want to extend @commitlint/config-conventional with some pre-defined scopes.

The Angular project has a library for UI components (generated via ng generate library) and a default app which consumes the UI library.

In commitlint.config.js I've added the following lines:

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'scope-enum': [
        2,
        'always',
        [
          'ui-components',
          'ui-components/badge',
          'ui-components/button',
          'ui-components/tooltip',
          'core',
          'account',
          'plugins',
          'settings',
          'projects',
          'shared',
          'styles'
        ]
    ]
  }
};

However, when I try to commit something with the scope: 'ui-components/tooltip':

fix(ui-components/tooltip): fix border

I get a commitlint error, saying that:

⧗   input: fix(ui-components/tooltip): fix border
✖   scope must be one of [ui-components, ui-components/badge, ui/button, ui-components/tooltip, core, account, plugins, settings, projects, shared, styles] [scope-enum]

✖   found 1 problems, 0 warnings

Solution

  • Unfortunately slashes aren't allowed in scopes.

    To get around this I replace / with two dashes (--).

    I wrote a script to grab subfolders and return an array:

    https://gist.github.com/trevor-coleman/51f1730044e14081faaff098618aba36

    [
      'ui-components',
      'ui-components--badge',
      'ui-components--button',
      'ui-components--tooltip',
       ...
    ]