From 7b604e866a7589ba967ec39a22782bcd55b68b7a Mon Sep 17 00:00:00 2001 From: fanich37 Date: Sun, 10 Nov 2019 09:33:26 +0300 Subject: [PATCH 1/3] Ignore less variables (#4200) --- .../length-zero-no-unit/__tests__/index.js | 48 +++++++++++++++++++ lib/rules/length-zero-no-unit/index.js | 4 ++ 2 files changed, 52 insertions(+) diff --git a/lib/rules/length-zero-no-unit/__tests__/index.js b/lib/rules/length-zero-no-unit/__tests__/index.js index 924c9942e4..82826277c3 100644 --- a/lib/rules/length-zero-no-unit/__tests__/index.js +++ b/lib/rules/length-zero-no-unit/__tests__/index.js @@ -562,3 +562,51 @@ testRule(rule, { }, ], }); + +testRule(rule, { + ruleName, + config: [true], + fix: true, + syntax: 'less', + accept: [ + { + code: '@variable: 0px;', + description: 'ignore Less variables', + }, + { + code: '@detached-ruleset: { line-height: 0px; };', + description: 'ignore Less detached ruleset with line-height', + }, + { + code: '@detached-ruleset: { font: normal normal 400 0/0px cursive; };', + description: 'ignore Less detached ruleset with font', + }, + ], + + reject: [ + { + code: '@detached-ruleset: { font-size: 0px; };', + fixed: '@detached-ruleset: { font-size: 0; };', + + message: messages.rejected, + line: 1, + column: 34, + }, + { + code: '@detached-ruleset: { grid-template-columns: 0fr; font-size: 0px; line-height: 0px; };', + fixed: '@detached-ruleset: { grid-template-columns: 0fr; font-size: 0; line-height: 0px; };', + + message: messages.rejected, + line: 1, + column: 62, + }, + { + code: '@detached-ruleset: { font: normal normal 400 0px/0px cursive; };', + fixed: '@detached-ruleset: { font: normal normal 400 0/0px cursive; };', + + message: messages.rejected, + line: 1, + column: 47, + }, + ], +}); diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index 34ab0a0a04..33bfc9d855 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -65,6 +65,10 @@ const rule = function(actual, secondary, context) { }); root.walkAtRules((atRule) => { + if (atRule.variable && !hasBlock(atRule)) { + return; + } + const source = hasBlock(atRule) ? beforeBlockString(atRule, { noRawBefore: true }) : atRule.toString(); From 1bf1d4f98dbef36abf65f0af99f28e500f8e0aee Mon Sep 17 00:00:00 2001 From: fanich37 Date: Sun, 10 Nov 2019 15:48:16 +0300 Subject: [PATCH 2/3] Add comment --- lib/rules/length-zero-no-unit/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index 33bfc9d855..d92c67df5a 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -65,6 +65,7 @@ const rule = function(actual, secondary, context) { }); root.walkAtRules((atRule) => { + // Ignore Less variables if (atRule.variable && !hasBlock(atRule)) { return; } From 7766726fe19ff6b47b64d6ae9e78946c6ecc9a8d Mon Sep 17 00:00:00 2001 From: fanich37 Date: Mon, 11 Nov 2019 19:42:52 +0300 Subject: [PATCH 3/3] Add isLessVariable util, add tests --- lib/rules/length-zero-no-unit/index.js | 3 +- lib/utils/__tests__/isLessVariable.test.js | 46 ++++++++++++++++++++++ lib/utils/isLessVariable.js | 8 ++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 lib/utils/__tests__/isLessVariable.test.js create mode 100644 lib/utils/isLessVariable.js diff --git a/lib/rules/length-zero-no-unit/index.js b/lib/rules/length-zero-no-unit/index.js index d92c67df5a..b5acc33aaf 100644 --- a/lib/rules/length-zero-no-unit/index.js +++ b/lib/rules/length-zero-no-unit/index.js @@ -5,6 +5,7 @@ const beforeBlockString = require('../../utils/beforeBlockString'); const blurComments = require('../../utils/blurComments'); const hasBlock = require('../../utils/hasBlock'); const isCustomProperty = require('../../utils/isCustomProperty'); +const isLessVariable = require('../../utils/isLessVariable'); const isMathFunction = require('../../utils/isMathFunction'); const keywordSets = require('../../reference/keywordSets'); const optionsMatches = require('../../utils/optionsMatches'); @@ -66,7 +67,7 @@ const rule = function(actual, secondary, context) { root.walkAtRules((atRule) => { // Ignore Less variables - if (atRule.variable && !hasBlock(atRule)) { + if (isLessVariable(atRule)) { return; } diff --git a/lib/utils/__tests__/isLessVariable.test.js b/lib/utils/__tests__/isLessVariable.test.js new file mode 100644 index 0000000000..a49c83c7cc --- /dev/null +++ b/lib/utils/__tests__/isLessVariable.test.js @@ -0,0 +1,46 @@ +'use strict'; + +const isLessVariable = require('../isLessVariable'); +const less = require('postcss-less'); + +describe('isLessVariable', () => { + it('is less variable', () => { + lessAtRules('@var: 10px;', (atRule) => { + expect(isLessVariable(atRule)).toBeTruthy(); + }); + }); + + it('is less variable with function', () => { + lessAtRules('@hover-color: darken(@color, 10%);', (atRule) => { + expect(isLessVariable(atRule)).toBeTruthy(); + }); + }); + + it('@charset is not a less variable', () => { + lessAtRules('@charset UTF-8;', (atRule) => { + expect(isLessVariable(atRule)).toBeFalsy(); + }); + }); + + it('@import is not a less variable', () => { + lessAtRules('@import url("some-styles.css");', (atRule) => { + expect(isLessVariable(atRule)).toBeFalsy(); + }); + }); + + it('@media is not a less variable', () => { + lessAtRules('@media (min-width: 100px) {};', (atRule) => { + expect(isLessVariable(atRule)).toBeFalsy(); + }); + }); + + it('detached ruleset is not a less variable', () => { + lessAtRules('@detached-ruleset: { margin: 0 };', (atRule) => { + expect(isLessVariable(atRule)).toBeFalsy(); + }); + }); +}); + +function lessAtRules(css, cb) { + less.parse(css).walkAtRules(cb); +} diff --git a/lib/utils/isLessVariable.js b/lib/utils/isLessVariable.js new file mode 100644 index 0000000000..e873a4266c --- /dev/null +++ b/lib/utils/isLessVariable.js @@ -0,0 +1,8 @@ +/* @flow */ +'use strict'; + +const hasBlock = require('./hasBlock'); + +module.exports = function(atRule /*: Object*/) /*: boolean*/ { + return atRule.type === 'atrule' && atRule.variable && !hasBlock(atRule); +};