commitlint icon indicating copy to clipboard operation
commitlint copied to clipboard

Support Infix Numerals in case restriction

Open thomasmost opened this issue 6 years ago • 1 comments

Expected Behavior

It would be nice to be able to configure the case restrictions to allow 'infix numerals'. For example: 'type-case': [2, 'always', 'snake-case', 'allow-infix-numerals'], so that oauth2 is considered valid snake_case.

Current Behavior

Currently, oauth_2 is considered valid snake_case but oauth2 is not; in other words, numeral characters are considered 'new words'

Affected packages

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

Possible Solution

I mention this in what I would 'expect' but it would be nice to make this configurable for all case restrictions with an 'allow-infix-numerals' property.

I would also be happy to contribute/open a PR with this change if someone can point me in the right direction

Steps to Reproduce (for bugs)

  1. Define any case restriction, say type-case
  2. Make a commit message with a numeral directly following or embedded with alphabetical letters.
  3. The case restriction throws!
commitlint.config.js
'use strict';

const fs = require('fs');
const commitTagsFile = fs.readFileSync('./commit-tags.txt', 'utf8');
const commitTags = commitTagsFile.split('\n');
const AbacusConfig = require('./config');
const features = Object.keys(AbacusConfig.features);
const allTags = commitTags.concat(features);
allTags.forEach((tag) => tag.trim());
const filteredCommitTags = allTags.filter((tag) => tag);
module.exports = {
  parserPreset: './commitlint-parser',
  rules: {
    'body-leading-blank': [1, 'always'],
    'footer-leading-blank': [1, 'always'],
    'header-max-length': [1, 'always', 255],
    'subject-empty': [2, 'never'],
    'type-case': [2, 'always', 'snake-case'],
    'type-empty': [2, 'never'],
    'type-enum': [
      2,
      'always',
      filteredCommitTags
    ]
  }
};

Context

Seems like oauth2 is arguably valid snake_case...

Your Environment

Don't believe this is environment-specific.

Executable Version
commitlint --version 8.1.0
git --version 2.17.2
node --version 8.15.1

thomasmost avatar Oct 31 '19 15:10 thomasmost

Hey @thomasmost, great if you want to fiddle around with it. Not completely sure, but I feel like this might be place to start:

  • https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/ensure/src/case.ts#L38-L63
  • https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/ensure/src/case.test.ts

Have a look and let us know if you need more support or feedback.

escapedcat avatar Nov 18 '19 11:11 escapedcat