Skip to content

Commit 3ba8c11

Browse files
committed
refactor: resolve parser presets in core.load
1 parent 074f9b3 commit 3ba8c11

File tree

3 files changed

+98
-78
lines changed

3 files changed

+98
-78
lines changed

@commitlint/core/src/library/parse.test.js

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import importFrom from 'import-from';
2+
import {sync} from '@marionebl/conventional-commits-parser';
3+
import angular from 'conventional-changelog-angular';
4+
25
import test from 'ava';
36
import parse from './parse';
47

@@ -13,30 +16,40 @@ test('throws when called with empty message', async t => {
1316
});
1417

1518
test('returns object with raw message', async t => {
19+
const {parserOpts} = await angular;
1620
const message = 'type(scope): subject';
17-
const actual = await parse(message);
21+
const actual = await parse(message, sync, parserOpts);
1822
t.is(actual.raw, message);
1923
});
2024

2125
test('calls parser with message and passed options', async t => {
2226
const message = 'message';
27+
const {parserOpts} = await angular;
2328

24-
await parse(message, m => {
25-
t.is(message, m);
26-
return {};
27-
});
29+
await parse(
30+
message,
31+
m => {
32+
t.is(message, m);
33+
return {};
34+
},
35+
parserOpts
36+
);
2837
});
2938

3039
test('passes object up from parser function', async t => {
3140
const message = 'message';
41+
const {parserOpts} = await angular;
42+
3243
const result = {};
33-
const actual = await parse(message, () => result);
44+
const actual = await parse(message, () => result, parserOpts);
3445
t.is(actual, result);
3546
});
3647

3748
test('returns object with expected keys', async t => {
3849
const message = 'message';
39-
const actual = await parse(message);
50+
const {parserOpts} = await angular;
51+
52+
const actual = await parse(message, sync, parserOpts);
4053
const expected = {
4154
body: null,
4255
footer: null,
@@ -56,7 +69,9 @@ test('returns object with expected keys', async t => {
5669

5770
test('uses angular grammar', async t => {
5871
const message = 'type(scope): subject';
59-
const actual = await parse(message);
72+
const {parserOpts} = await angular;
73+
74+
const actual = await parse(message, sync, parserOpts);
6075
const expected = {
6176
body: null,
6277
footer: null,
@@ -100,14 +115,18 @@ test('uses custom opts parser', async t => {
100115

101116
test('supports scopes with /', async t => {
102117
const message = 'type(some/scope): subject';
103-
const actual = await parse(message);
118+
const {parserOpts} = await angular;
119+
120+
const actual = await parse(message, sync, parserOpts);
104121
t.is(actual.scope, 'some/scope');
105122
t.is(actual.subject, 'subject');
106123
});
107124

108125
test('ignores comments', async t => {
109126
const message = 'type(some/scope): subject\n# some comment';
110-
const actual = await parse(message);
127+
const {parserOpts} = await angular;
128+
129+
const actual = await parse(message, sync, parserOpts);
111130
t.is(actual.body, null);
112131
t.is(actual.footer, null);
113132
t.is(actual.subject, 'subject');
@@ -116,7 +135,8 @@ test('ignores comments', async t => {
116135
test('registers inline #', async t => {
117136
const message =
118137
'type(some/scope): subject #reference\n# some comment\nthings #reference';
119-
const actual = await parse(message);
138+
const {parserOpts} = await angular;
139+
const actual = await parse(message, sync, parserOpts);
120140
t.is(actual.subject, 'subject #reference');
121141
t.is(actual.body, 'things #reference');
122142
});

@commitlint/core/src/load.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import resolveFrom from 'resolve-from';
66
import executeRule from './library/execute-rule';
77
import resolveExtends from './library/resolve-extends';
88

9+
const DEFAULT_NAME = 'conventional-changelog-angular';
10+
const DEFAULT_RESOLVED = require.resolve(DEFAULT_NAME);
11+
const DEFAULT_PRESET = require(DEFAULT_RESOLVED);
12+
913
const w = (a, b) => (Array.isArray(b) ? b : undefined);
1014
const valid = input => pick(input, 'extends', 'rules', 'parserPreset');
1115

@@ -45,6 +49,15 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => {
4549
preset.parserPreset.opts = await preset.parserPreset.opts;
4650
}
4751

52+
// Resolve to default preset if none set
53+
if (typeof preset.parserPreset === 'undefined') {
54+
preset.parserPreset = {
55+
name: DEFAULT_NAME,
56+
path: DEFAULT_RESOLVED,
57+
opts: DEFAULT_PRESET
58+
};
59+
}
60+
4861
// Execute rule config functions if needed
4962
const executed = await Promise.all(
5063
['rules']

@commitlint/core/src/load.test.js

Lines changed: 54 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ test('uses seed with parserPreset', async t => {
3333
});
3434
});
3535

36+
test('defaults to expected preset', async t => {
37+
const cwd = await git.bootstrap('fixtures/extends-empty');
38+
const actual = await load({}, {cwd});
39+
t.is(actual.parserPreset.name, 'conventional-changelog-angular');
40+
});
41+
3642
test('invalid extend should throw', async t => {
3743
const cwd = await git.bootstrap('fixtures/extends-invalid');
3844
await t.throws(load({}, {cwd}));
@@ -53,81 +59,70 @@ test('empty file should extend nothing', async t => {
5359
test('respects cwd option', async t => {
5460
const cwd = await git.bootstrap('fixtures/recursive-extends/first-extended');
5561
const actual = await load({}, {cwd});
56-
t.deepEqual(actual, {
57-
extends: ['./second-extended'],
58-
rules: {
59-
one: 1,
60-
two: 2
61-
}
62+
t.deepEqual(actual.extends, ['./second-extended']);
63+
t.deepEqual(actual.rules, {
64+
one: 1,
65+
two: 2
6266
});
6367
});
6468

6569
test('recursive extends', async t => {
6670
const cwd = await git.bootstrap('fixtures/recursive-extends');
6771
const actual = await load({}, {cwd});
68-
t.deepEqual(actual, {
69-
extends: ['./first-extended'],
70-
rules: {
71-
zero: 0,
72-
one: 1,
73-
two: 2
74-
}
72+
73+
t.deepEqual(actual.extends, ['./first-extended']);
74+
t.deepEqual(actual.rules, {
75+
zero: 0,
76+
one: 1,
77+
two: 2
7578
});
7679
});
7780

7881
test('recursive extends with json file', async t => {
7982
const cwd = await git.bootstrap('fixtures/recursive-extends-json');
8083
const actual = await load({}, {cwd});
8184

82-
t.deepEqual(actual, {
83-
extends: ['./first-extended'],
84-
rules: {
85-
zero: 0,
86-
one: 1,
87-
two: 2
88-
}
85+
t.deepEqual(actual.extends, ['./first-extended']);
86+
t.deepEqual(actual.rules, {
87+
zero: 0,
88+
one: 1,
89+
two: 2
8990
});
9091
});
9192

9293
test('recursive extends with yaml file', async t => {
9394
const cwd = await git.bootstrap('fixtures/recursive-extends-yaml');
9495
const actual = await load({}, {cwd});
9596

96-
t.deepEqual(actual, {
97-
extends: ['./first-extended'],
98-
rules: {
99-
zero: 0,
100-
one: 1,
101-
two: 2
102-
}
97+
t.deepEqual(actual.extends, ['./first-extended']);
98+
t.deepEqual(actual.rules, {
99+
zero: 0,
100+
one: 1,
101+
two: 2
103102
});
104103
});
105104

106105
test('recursive extends with js file', async t => {
107106
const cwd = await git.bootstrap('fixtures/recursive-extends-js');
108107
const actual = await load({}, {cwd});
109108

110-
t.deepEqual(actual, {
111-
extends: ['./first-extended'],
112-
rules: {
113-
zero: 0,
114-
one: 1,
115-
two: 2
116-
}
109+
t.deepEqual(actual.extends, ['./first-extended']);
110+
t.deepEqual(actual.rules, {
111+
zero: 0,
112+
one: 1,
113+
two: 2
117114
});
118115
});
119116

120117
test('recursive extends with package.json file', async t => {
121118
const cwd = await git.bootstrap('fixtures/recursive-extends-package');
122119
const actual = await load({}, {cwd});
123120

124-
t.deepEqual(actual, {
125-
extends: ['./first-extended'],
126-
rules: {
127-
zero: 0,
128-
one: 1,
129-
two: 2
130-
}
121+
t.deepEqual(actual.extends, ['./first-extended']);
122+
t.deepEqual(actual.rules, {
123+
zero: 0,
124+
one: 1,
125+
two: 2
131126
});
132127
});
133128

@@ -161,25 +156,21 @@ test('ignores unknow keys', async t => {
161156
const cwd = await git.bootstrap('fixtures/trash-file');
162157
const actual = await load({}, {cwd});
163158

164-
t.deepEqual(actual, {
165-
extends: [],
166-
rules: {
167-
foo: 'bar',
168-
baz: 'bar'
169-
}
159+
t.deepEqual(actual.extends, []);
160+
t.deepEqual(actual.rules, {
161+
foo: 'bar',
162+
baz: 'bar'
170163
});
171164
});
172165

173166
test('ignores unknow keys recursively', async t => {
174167
const cwd = await git.bootstrap('fixtures/trash-extend');
175168
const actual = await load({}, {cwd});
176169

177-
t.deepEqual(actual, {
178-
extends: ['./one'],
179-
rules: {
180-
zero: 0,
181-
one: 1
182-
}
170+
t.deepEqual(actual.extends, ['./one']);
171+
t.deepEqual(actual.rules, {
172+
zero: 0,
173+
one: 1
183174
});
184175
});
185176

@@ -190,13 +181,11 @@ test('find up from given cwd', async t => {
190181

191182
const actual = await load({}, {cwd});
192183

193-
t.deepEqual(actual, {
194-
extends: [],
195-
rules: {
196-
child: true,
197-
inner: false,
198-
outer: false
199-
}
184+
t.deepEqual(actual.extends, []);
185+
t.deepEqual(actual.rules, {
186+
child: true,
187+
inner: false,
188+
outer: false
200189
});
201190
});
202191

@@ -205,12 +194,10 @@ test('find up config from outside current git repo', async t => {
205194
const cwd = await git.init(path.join(outer, 'inner-scope'));
206195
const actual = await load({}, {cwd});
207196

208-
t.deepEqual(actual, {
209-
extends: [],
210-
rules: {
211-
child: false,
212-
inner: false,
213-
outer: true
214-
}
197+
t.deepEqual(actual.extends, []);
198+
t.deepEqual(actual.rules, {
199+
child: false,
200+
inner: false,
201+
outer: true
215202
});
216203
});

0 commit comments

Comments
 (0)