From 0cf39f65e17b7aff4d44e73a0d9fddbe4510447e Mon Sep 17 00:00:00 2001 From: Aleks Hudochenkov Date: Sat, 28 Dec 2019 12:30:04 +0100 Subject: [PATCH 1/4] Remove unused condition --- lib/assignDisabledRanges.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index a60a23b296..5ddbea9173 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -157,12 +157,7 @@ module.exports = function(root, result) { /** @type {number} */ (comment.source && comment.source.end && comment.source.end.line); if (ruleToEnable === ALL_RULES) { - if ( - Object.values(disabledRanges).every( - // @ts-ignore https://github.com/stylelint/stylelint/issues/4328 - (ranges) => _.isEmpty(ranges) || Boolean(_.last(ranges.end)), - ) - ) { + if (Object.values(disabledRanges).every((ranges) => _.isEmpty(ranges))) { throw comment.error('No rules have been disabled', { plugin: 'stylelint', }); From 4bcd8334560b7480131705e2b7202c658cc1ca53 Mon Sep 17 00:00:00 2001 From: Aleks Hudochenkov Date: Sun, 5 Jan 2020 00:47:25 +0100 Subject: [PATCH 2/4] Add test --- lib/__tests__/disableRanges.test.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/__tests__/disableRanges.test.js b/lib/__tests__/disableRanges.test.js index 58549d3088..28d9308390 100644 --- a/lib/__tests__/disableRanges.test.js +++ b/lib/__tests__/disableRanges.test.js @@ -238,6 +238,24 @@ it('disable single line multiple rules', () => { ); }); +it('disable single line one rule and re-enable all', () => { + return testDisableRanges( + 'a {} /* stylelint-disable-line block-no-empty */\n/* stylelint-enable */', + ).then((result) => { + expect(result.stylelint.disabledRanges).toEqual({ + all: [], + 'block-no-empty': [ + { + start: 1, + end: 1, + strictStart: true, + strictEnd: true, + }, + ], + }); + }); +}); + it('disable next line all rules', () => { return testDisableRanges('/* stylelint-disable-next-line */\na {} ').then((result) => { expect(result.stylelint.disabledRanges).toEqual( From cf2ba9a39781a12ae2329dfc80268aab9a77eafd Mon Sep 17 00:00:00 2001 From: Ivan Kopeykin Date: Sun, 5 Jan 2020 15:21:10 +0300 Subject: [PATCH 3/4] fix(assignDisabledRanges): change condition logic --- lib/__tests__/disableRanges.test.js | 17 +++++------------ lib/assignDisabledRanges.js | 6 +++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/__tests__/disableRanges.test.js b/lib/__tests__/disableRanges.test.js index 28d9308390..9ea5a77cd4 100644 --- a/lib/__tests__/disableRanges.test.js +++ b/lib/__tests__/disableRanges.test.js @@ -241,18 +241,11 @@ it('disable single line multiple rules', () => { it('disable single line one rule and re-enable all', () => { return testDisableRanges( 'a {} /* stylelint-disable-line block-no-empty */\n/* stylelint-enable */', - ).then((result) => { - expect(result.stylelint.disabledRanges).toEqual({ - all: [], - 'block-no-empty': [ - { - start: 1, - end: 1, - strictStart: true, - strictEnd: true, - }, - ], - }); + () => { + throw new Error('should have errored'); + }, + ).catch((err) => { + expect(err.reason).toBe('No rules have been disabled'); }); }); diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 5ddbea9173..7717a9bfdf 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -157,7 +157,11 @@ module.exports = function(root, result) { /** @type {number} */ (comment.source && comment.source.end && comment.source.end.line); if (ruleToEnable === ALL_RULES) { - if (Object.values(disabledRanges).every((ranges) => _.isEmpty(ranges))) { + if ( + Object.values(disabledRanges).every( + (ranges) => ranges.length === 0 || typeof ranges[ranges.length - 1].end === 'number', + ) + ) { throw comment.error('No rules have been disabled', { plugin: 'stylelint', }); From 67940fd2dc4d1b152c63b1467d9cd51c6549abfe Mon Sep 17 00:00:00 2001 From: Ivan Kopeykin Date: Sun, 5 Jan 2020 15:51:55 +0300 Subject: [PATCH 4/4] fix(assignDisabledRanges): fix bug when extra range is assigned --- lib/__tests__/needlessDisables.test.js | 2 +- lib/assignDisabledRanges.js | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/__tests__/needlessDisables.test.js b/lib/__tests__/needlessDisables.test.js index 4d333d4163..98377c0237 100644 --- a/lib/__tests__/needlessDisables.test.js +++ b/lib/__tests__/needlessDisables.test.js @@ -81,7 +81,7 @@ it('needlessDisables complex case', () => { ranges: [ { start: 5, end: 5, unusedRule: 'color-named' }, { start: 6, end: 6, unusedRule: 'block-no-empty' }, - { start: 8, unusedRule: 'block-no-empty' }, + { start: 8, end: 10, unusedRule: 'block-no-empty' }, ], }, ]); diff --git a/lib/assignDisabledRanges.js b/lib/assignDisabledRanges.js index 7717a9bfdf..c298de02b2 100644 --- a/lib/assignDisabledRanges.js +++ b/lib/assignDisabledRanges.js @@ -95,20 +95,22 @@ module.exports = function(root, result) { }); } - if (ruleIsDisabled(ruleName)) { - throw comment.error(`"${ruleName}" has already been disabled`, { - plugin: 'stylelint', - }); - } - if (ruleName === ALL_RULES) { Object.keys(disabledRanges).forEach((disabledRuleName) => { + if (ruleIsDisabled(disabledRuleName)) return; + const strict = disabledRuleName === ALL_RULES; startDisabledRange(line, disabledRuleName, strict); endDisabledRange(line, disabledRuleName, strict); }); } else { + if (ruleIsDisabled(ruleName)) { + throw comment.error(`"${ruleName}" has already been disabled`, { + plugin: 'stylelint', + }); + } + startDisabledRange(line, ruleName, true); endDisabledRange(line, ruleName, true); }