Skip to content

Commit eba35b0

Browse files
committed
feat: allow scope-enum to also config delimiter
fix conventional-changelog#2108
1 parent baf1082 commit eba35b0

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

@commitlint/rules/src/scope-enum.test.ts

+10
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ const messages = {
66
superfluous: 'foo(): baz',
77
empty: 'foo: baz',
88
multiple: 'foo(bar,baz): qux',
9+
scoped: 'foo(@a/b): test',
910
};
1011

1112
const parsed = {
1213
plain: parse(messages.plain),
1314
superfluous: parse(messages.superfluous),
1415
empty: parse(messages.empty),
1516
multiple: parse(messages.multiple),
17+
scoped: parse(messages.scoped),
1618
};
1719

1820
test('scope-enum with plain message and always should succeed empty enum', async () => {
@@ -21,6 +23,14 @@ test('scope-enum with plain message and always should succeed empty enum', async
2123
expect(actual).toEqual(expected);
2224
});
2325

26+
test('scope-enum allows custom delimiters', async () => {
27+
const [actual] = scopeEnum(await parsed.scoped, 'always', {
28+
values: [],
29+
});
30+
const expected = true;
31+
expect(actual).toEqual(expected);
32+
});
33+
2434
test('scope-enum with plain message and never should error empty enum', async () => {
2535
const [actual] = scopeEnum(await parsed.plain, 'never', []);
2636
const expected = false;

@commitlint/rules/src/scope-enum.ts

+15-6
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,27 @@ import * as ensure from '@commitlint/ensure';
22
import message from '@commitlint/message';
33
import {SyncRule} from '@commitlint/types';
44

5-
export const scopeEnum: SyncRule<string[]> = (
6-
parsed,
7-
when = 'always',
8-
value = []
9-
) => {
5+
export const scopeEnum: SyncRule<
6+
string[] | {delimiter?: RegExp; values?: string[]}
7+
> = (parsed, when = 'always', config = []) => {
108
if (!parsed.scope) {
119
return [true, ''];
1210
}
1311

12+
let delimiters = /\/|\\|,/g;
13+
let value: string[] = [];
14+
if (!Array.isArray(config)) {
15+
if (config.delimiter) {
16+
delimiters = config.delimiter;
17+
}
18+
value = config.values || [];
19+
} else {
20+
value = config;
21+
}
22+
1423
// Scopes may contain slash or comma delimiters to separate them and mark them as individual segments.
1524
// This means that each of these segments should be tested separately with `ensure`.
16-
const delimiters = /\/|\\|,/g;
25+
1726
const scopeSegments = parsed.scope.split(delimiters);
1827

1928
const negated = when === 'never';

0 commit comments

Comments
 (0)