Skip to content

Commit 6def6be

Browse files
authored
fix(core): redeclared rules should always be re-enabled (#2138)
1 parent 99c3c8f commit 6def6be

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { RulesetDefinition } from '@stoplight/spectral-core';
2+
import shared from './shared';
3+
import { truthy } from '@stoplight/spectral-functions/src';
4+
5+
export default {
6+
extends: [[shared, 'off']],
7+
rules: {
8+
'overridable-rule': {
9+
given: '$.foo',
10+
then: {
11+
function: truthy,
12+
},
13+
},
14+
},
15+
} as RulesetDefinition;

packages/core/src/ruleset/__tests__/ruleset.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ describe('Ruleset', () => {
6868
expect(getEnabledRules(rules)).toEqual(['overridable-rule']);
6969
});
7070

71+
it('given ruleset with extends set to off, should disable all rules but explicitly redeclared', async () => {
72+
const { rules } = await loadRuleset(import('./__fixtures__/severity/off-redeclared'));
73+
expect(Object.keys(rules)).toEqual([
74+
'description-matches-stoplight',
75+
'title-matches-stoplight',
76+
'contact-name-matches-stoplight',
77+
'overridable-rule',
78+
]);
79+
80+
expect(getEnabledRules(rules)).toEqual(['overridable-rule']);
81+
});
82+
7183
it('given nested extends with severity set to off', async () => {
7284
const { rules } = await loadRuleset(import('./__fixtures__/severity/off-proxy'));
7385
expect(Object.keys(rules)).toEqual([

packages/core/src/ruleset/mergers/rules.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ export function mergeRule(
3939
break;
4040
case 'object':
4141
if (existingRule !== void 0) {
42-
Object.assign(existingRule, rule, { owner: existingRule.owner });
42+
Object.assign(existingRule, rule, {
43+
enabled: true,
44+
owner: existingRule.owner,
45+
});
4346
} else {
4447
assertValidRule(rule);
4548
return new Rule(name, rule, ruleset);

0 commit comments

Comments
 (0)