From 5a6a4a833cdbde3d7589ed110f2e993b2bfa86b8 Mon Sep 17 00:00:00 2001 From: Ingmar Hergst Date: Sun, 27 Jan 2019 20:52:06 +0100 Subject: [PATCH] fix: `sentence-case` allow upper-case characters in first word (#531) 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 31e1b6a166..d400b080d9 100644 --- a/@commitlint/ensure/src/case.js +++ b/@commitlint/ensure/src/case.js @@ -37,13 +37,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 d19847abbf..b3e1cb04a2 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 => {