Skip to content

Commit 3a569a7

Browse files
committed
fix(prompt): apply forced cases properly
closes #145
1 parent e08a3ce commit 3a569a7

File tree

4 files changed

+46
-56
lines changed

4 files changed

+46
-56
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import getForcedCase from './get-forced-case';
1+
import {camelCase, kebabCase, snakeCase, upperFirst, startCase} from 'lodash';
22

33
/**
44
* Get forced case for rule
@@ -7,18 +7,58 @@ import getForcedCase from './get-forced-case';
77
*/
88
export default function getForcedCaseFn(rule) {
99
const noop = input => input;
10-
const lowerCase = input => String.prototype.toLowerCase.call(input);
11-
const upperCase = input => String.prototype.toUpperCase.call(input);
1210

1311
if (!rule) {
1412
return noop;
1513
}
1614

17-
const forcedCase = getForcedCase(rule);
15+
const [config] = rule;
1816

19-
if (forcedCase === null) {
17+
if (!Array.isArray(config)) {
2018
return noop;
2119
}
2220

23-
return forcedCase === 'lowerCase' ? lowerCase : upperCase;
21+
const [level] = config;
22+
23+
if (level === 0) {
24+
return;
25+
}
26+
27+
const [, when] = config;
28+
29+
if (when === 'neve') {
30+
return;
31+
}
32+
33+
const [, , target] = config;
34+
35+
if (Array.isArray(target)) {
36+
return noop;
37+
}
38+
39+
switch (target) {
40+
case 'camel-case':
41+
return input => camelCase(input);
42+
case 'kebab-case':
43+
return input => kebabCase(input);
44+
case 'snake-case':
45+
return input => snakeCase(input);
46+
case 'pascal-case':
47+
return input => upperFirst(camelCase(input));
48+
case 'start-case':
49+
return input => startCase(input);
50+
case 'upper-case':
51+
case 'uppercase':
52+
return input => input.toUpperCase();
53+
case 'sentence-case':
54+
case 'sentencecase':
55+
return input =>
56+
`${input.charAt(0).toUpperCase()}${input.substring(1).toLowerCase()}`;
57+
case 'lower-case':
58+
case 'lowercase':
59+
case 'lowerCase': // Backwards compat config-angular v4
60+
return input => input.toLowerCase() === input;
61+
default:
62+
throw new TypeError(`Unknown target case "${rule[2]}"`);
63+
}
2464
}

@commitlint/prompt/src/library/get-forced-case.js

-23
This file was deleted.

@commitlint/prompt/src/library/get-forced-case.js-fn.js

-24
This file was deleted.

@commitlint/prompt/src/library/get-prompt.js

-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import chalk from 'chalk';
22

33
import enumRuleIsActive from './enum-rule-is-active';
44
import format from './format';
5-
import getForcedCase from './get-forced-case';
65
import getForcedCaseFn from './get-forced-case-fn';
76
import getForcedLeadingFn from './get-forced-leading-fn';
87
import getHasName from './get-has-name';
@@ -78,7 +77,6 @@ function getPrompt(type, context = {}) {
7877

7978
const caseRule = rules.filter(getHasName('case'))[0];
8079

81-
const forcedCase = getForcedCase(caseRule);
8280
const forceCaseFn = getForcedCaseFn(caseRule);
8381

8482
const leadingBlankRule = rules.filter(getHasName('leading-blank'))[0];
@@ -219,7 +217,6 @@ function getPrompt(type, context = {}) {
219217
required: mayNotBeEmpty,
220218
'tab-completion': typeof enumRule !== 'undefined',
221219
header: typeof settings.header !== 'undefined',
222-
case: forcedCase,
223220
'multi-line': settings.multiline
224221
})}`
225222
);

0 commit comments

Comments
 (0)