From e216d8a27b14d92ca0f7fc76ecb755c82e509952 Mon Sep 17 00:00:00 2001 From: Ingmar Hergst Date: Sat, 29 Dec 2018 21:03:56 +0100 Subject: [PATCH] fix: `sentence-case` doesn't allow upper-case characters in first word This changes the `sentence-case` rule to also accept upper-case characters in the first word, allowing the use of acronyms (e.g. "HTML", "JSX") and words which include upper-case characters (e.g. "JavaScript") at the beginning of a `sentence-case` input. For example, with `'subject-case': [2, 'always', ['sentence-case']]`, the following commit messages were rejected (ESLint commit message style): - `Fix: VAT note not properly displayed` - `Upgrade: ESLint dev dependency` Related: #211 --- @commitlint/ensure/src/case.js | 9 ++------- @commitlint/ensure/src/case.test.js | 8 ++++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/@commitlint/ensure/src/case.js b/@commitlint/ensure/src/case.js index db0f1b1ed5..818ba5ab37 100644 --- a/@commitlint/ensure/src/case.js +++ b/@commitlint/ensure/src/case.js @@ -33,13 +33,8 @@ function toCase(input, target) { case 'uppercase': return input.toUpperCase(); case 'sentence-case': - case 'sentencecase': { - const [word] = input.split(' '); - return `${toCase(word.charAt(0), 'upper-case')}${toCase( - word.slice(1), - 'lower-case' - )}${input.slice(word.length)}`; - } + case 'sentencecase': + return input.charAt(0).toUpperCase() + input.slice(1); case 'lower-case': case 'lowercase': case 'lowerCase': // Backwards compat config-angular v4 diff --git a/@commitlint/ensure/src/case.test.js b/@commitlint/ensure/src/case.test.js index ec517ee88d..f04fccc0d1 100644 --- a/@commitlint/ensure/src/case.test.js +++ b/@commitlint/ensure/src/case.test.js @@ -61,16 +61,16 @@ test('false for lowercase on sentencecase', t => { t.is(ensure('sentence case', 'sentence-case'), false); }); -test('false for UPPERCASE on sentencecase', t => { - t.is(ensure('UPPERCASE', 'sentence-case'), false); +test('true for UPPERCASE on sentencecase', t => { + t.is(ensure('UPPERCASE', 'sentence-case'), true); }); test('true for Start Case on sentencecase', t => { t.is(ensure('Start Case', 'sentence-case'), true); }); -test('false for PascalCase on sentencecase', t => { - t.is(ensure('PascalCase', 'sentence-case'), false); +test('true for PascalCase on sentencecase', t => { + t.is(ensure('PascalCase', 'sentence-case'), true); }); test('false for kebab-case on sentencecase', t => {