Skip to content

Commit

Permalink
Refactor getting and setting declaration values into utils (#5183)
Browse files Browse the repository at this point in the history
* Create utils for getting and setting declaration values

This change adds two utility functions, `getDeclarationValue` and
`setDeclarationValue`, that replace a pattern found across many rule
files.
  • Loading branch information
Dru89 committed Mar 5, 2021
1 parent 67ef0a3 commit 7b894ba
Show file tree
Hide file tree
Showing 21 changed files with 109 additions and 146 deletions.
17 changes: 4 additions & 13 deletions lib/rules/alpha-value-notation/index.js
Expand Up @@ -6,10 +6,12 @@ const _ = require('lodash');
const valueParser = require('postcss-value-parser');

const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const isStandardSyntaxValue = require('../../utils/isStandardSyntaxValue');
const optionsMatches = require('../../utils/optionsMatches');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');

const ruleName = 'alpha-value-notation';
Expand Down Expand Up @@ -43,7 +45,7 @@ function rule(primary, options, context) {

root.walkDecls((decl) => {
let needsFix = false;
const parsedValue = valueParser(getValue(decl));
const parsedValue = valueParser(getDeclarationValue(decl));

parsedValue.walk((node) => {
let alpha;
Expand Down Expand Up @@ -105,7 +107,7 @@ function rule(primary, options, context) {
});

if (needsFix) {
setValue(decl, parsedValue.toString());
setDeclarationValue(decl, parsedValue.toString());
}
});
};
Expand Down Expand Up @@ -153,17 +155,6 @@ function isNumber(value) {
return unit === '';
}

function getValue(decl) {
return decl.raws.value ? decl.raws.value.raw : decl.value;
}

function setValue(decl, value) {
if (decl.raws.value) decl.raws.value.raw = value;
else decl.value = value;

return decl;
}

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
17 changes: 4 additions & 13 deletions lib/rules/color-function-notation/index.js
Expand Up @@ -5,8 +5,10 @@
const valueParser = require('postcss-value-parser');

const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');

const ruleName = 'color-function-notation';
Expand All @@ -29,7 +31,7 @@ function rule(primary, secondary, context) {

root.walkDecls((decl) => {
let needsFix = false;
const parsedValue = valueParser(getValue(decl));
const parsedValue = valueParser(getDeclarationValue(decl));

parsedValue.walk((node) => {
const { value, type, sourceIndex, nodes } = node;
Expand Down Expand Up @@ -83,7 +85,7 @@ function rule(primary, secondary, context) {
});

if (needsFix) {
setValue(decl, parsedValue.toString());
setDeclarationValue(decl, parsedValue.toString());
}
});
};
Expand All @@ -101,17 +103,6 @@ function hasCommas(node) {
return node.nodes && node.nodes.some((childNode) => isComma(childNode));
}

function getValue(decl) {
return decl.raws.value ? decl.raws.value.raw : decl.value;
}

function setValue(decl, value) {
if (decl.raws.value) decl.raws.value.raw = value;
else decl.value = value;

return decl;
}

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
15 changes: 4 additions & 11 deletions lib/rules/color-hex-case/index.js
Expand Up @@ -5,8 +5,10 @@
const valueParser = require('postcss-value-parser');

const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');

const ruleName = 'color-hex-case';
Expand All @@ -30,7 +32,7 @@ function rule(expectation, options, context) {
}

root.walkDecls((decl) => {
const parsedValue = valueParser(getValue(decl));
const parsedValue = valueParser(getDeclarationValue(decl));
let needsFix = false;

parsedValue.walk((node) => {
Expand Down Expand Up @@ -61,7 +63,7 @@ function rule(expectation, options, context) {
});

if (needsFix) {
setValue(decl, parsedValue.toString());
setDeclarationValue(decl, parsedValue.toString());
}
});
};
Expand All @@ -75,15 +77,6 @@ function isHexColor({ type, value }) {
return type === 'word' && HEX.test(value);
}

function getValue(decl) {
return decl.raws.value ? decl.raws.value.raw : decl.value;
}

function setValue(decl, value) {
if (decl.raws.value) decl.raws.value.raw = value;
else decl.value = value;
}

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
15 changes: 4 additions & 11 deletions lib/rules/color-hex-length/index.js
Expand Up @@ -5,8 +5,10 @@
const valueParser = require('postcss-value-parser');

const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');

const ruleName = 'color-hex-length';
Expand All @@ -30,7 +32,7 @@ function rule(expectation, _, context) {
}

root.walkDecls((decl) => {
const parsedValue = valueParser(getValue(decl));
const parsedValue = valueParser(getDeclarationValue(decl));
let needsFix = false;

parsedValue.walk((node) => {
Expand Down Expand Up @@ -68,7 +70,7 @@ function rule(expectation, _, context) {
});

if (needsFix) {
setValue(decl, parsedValue.toString());
setDeclarationValue(decl, parsedValue.toString());
}
});
};
Expand Down Expand Up @@ -113,15 +115,6 @@ function isHexColor({ type, value }) {
return type === 'word' && HEX.test(value);
}

function getValue(decl) {
return decl.raws.value ? decl.raws.value.raw : decl.value;
}

function setValue(decl, value) {
if (decl.raws.value) decl.raws.value.raw = value;
else decl.value = value;
}

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
10 changes: 4 additions & 6 deletions lib/rules/declaration-bang-space-after/index.js
Expand Up @@ -4,7 +4,9 @@

const declarationBangSpaceChecker = require('../declarationBangSpaceChecker');
const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const whitespaceChecker = require('../../utils/whitespaceChecker');

Expand Down Expand Up @@ -36,7 +38,7 @@ function rule(expectation, options, context) {
fix: context.fix
? (decl, index) => {
let bangIndex = index - declarationValueIndex(decl);
const value = decl.raws.value ? decl.raws.value.raw : decl.value;
const value = getDeclarationValue(decl);
let target;
let setFixed;

Expand All @@ -45,11 +47,7 @@ function rule(expectation, options, context) {
// TODO: Issue #4985
// eslint-disable-next-line no-shadow
setFixed = (value) => {
if (decl.raws.value) {
decl.raws.value.raw = value;
} else {
decl.value = value;
}
setDeclarationValue(decl, value);
};
} else if (decl.important) {
target = decl.raws.important || ' !important';
Expand Down
10 changes: 4 additions & 6 deletions lib/rules/declaration-bang-space-before/index.js
Expand Up @@ -4,7 +4,9 @@

const declarationBangSpaceChecker = require('../declarationBangSpaceChecker');
const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const whitespaceChecker = require('../../utils/whitespaceChecker');

Expand Down Expand Up @@ -36,18 +38,14 @@ function rule(expectation, options, context) {
fix: context.fix
? (decl, index) => {
let bangIndex = index - declarationValueIndex(decl);
const value = decl.raws.value ? decl.raws.value.raw : decl.value;
const value = getDeclarationValue(decl);
let target;
let setFixed;

if (bangIndex < value.length) {
target = value;
setFixed = (val) => {
if (decl.raws.value) {
decl.raws.value.raw = val;
} else {
decl.value = val;
}
setDeclarationValue(decl, val);
};
} else if (decl.important) {
target = decl.raws.important || ' !important';
Expand Down
12 changes: 5 additions & 7 deletions lib/rules/declaration-block-semicolon-space-before/index.js
Expand Up @@ -3,8 +3,10 @@
'use strict';

const blockString = require('../../utils/blockString');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const whitespaceChecker = require('../../utils/whitespaceChecker');

Expand Down Expand Up @@ -48,15 +50,13 @@ function rule(expectation, options, context) {
lineCheckStr: blockString(parentRule),
err: (m) => {
if (context.fix) {
const value = decl.raws.value ? decl.raws.value.raw : decl.value;
const value = getDeclarationValue(decl);

if (expectation.startsWith('always')) {
if (decl.important) {
decl.raws.important = ' !important ';
} else if (decl.raws.value) {
decl.raws.value.raw = value.replace(/\s*$/, ' ');
} else {
decl.value = value.replace(/\s*$/, ' ');
setDeclarationValue(decl, value.replace(/\s*$/, ' '));
}

return;
Expand All @@ -65,10 +65,8 @@ function rule(expectation, options, context) {
if (expectation.startsWith('never')) {
if (decl.important) {
decl.raws.important = decl.raws.important.replace(/\s*$/, '');
} else if (decl.raws.value) {
decl.raws.value.raw = value.replace(/\s*$/, '');
} else {
decl.value = value.replace(/\s*$/, '');
setDeclarationValue(decl, value.replace(/\s*$/, ''));
}

return;
Expand Down
10 changes: 4 additions & 6 deletions lib/rules/function-max-empty-lines/index.js
Expand Up @@ -3,8 +3,10 @@
'use strict';

const _ = require('lodash');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const valueParser = require('postcss-value-parser');

Expand Down Expand Up @@ -41,7 +43,7 @@ function rule(max, options, context) {
return;
}

const stringValue = decl.raws.value ? decl.raws.value.raw : decl.value;
const stringValue = getDeclarationValue(decl);
const splittedValue = [];
let sourceIndexStart = 0;

Expand Down Expand Up @@ -88,11 +90,7 @@ function rule(max, options, context) {
splittedValue.reduce((acc, curr) => acc + curr[0] + curr[1], '') +
stringValue.slice(sourceIndexStart);

if (decl.raws.value) {
decl.raws.value.raw = updatedValue;
} else {
decl.value = updatedValue;
}
setDeclarationValue(decl, updatedValue);
}
});
};
Expand Down
12 changes: 4 additions & 8 deletions lib/rules/function-name-case/index.js
Expand Up @@ -4,11 +4,13 @@

const _ = require('lodash');
const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction');
const keywordSets = require('../../reference/keywordSets');
const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const valueParser = require('postcss-value-parser');

Expand Down Expand Up @@ -48,7 +50,7 @@ function rule(expectation, options, context) {

root.walkDecls((decl) => {
let needFix = false;
const parsed = valueParser(decl.raws.value ? decl.raws.value.raw : decl.value);
const parsed = valueParser(getDeclarationValue(decl));

parsed.walk((node) => {
if (node.type !== 'function' || !isStandardSyntaxFunction(node)) {
Expand Down Expand Up @@ -98,13 +100,7 @@ function rule(expectation, options, context) {
});

if (context.fix && needFix) {
const statement = parsed.toString();

if (decl.raws.value) {
decl.raws.value.raw = statement;
} else {
decl.value = statement;
}
setDeclarationValue(decl, parsed.toString());
}
});
};
Expand Down
11 changes: 4 additions & 7 deletions lib/rules/function-parentheses-newline-inside/index.js
Expand Up @@ -2,12 +2,13 @@

'use strict';

const _ = require('lodash');
const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
const isSingleLineString = require('../../utils/isSingleLineString');
const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
const validateOptions = require('../../utils/validateOptions');
const valueParser = require('postcss-value-parser');

Expand Down Expand Up @@ -39,7 +40,7 @@ function rule(expectation, options, context) {
}

let hasFixed = false;
const declValue = _.get(decl, 'raws.value.raw', decl.value);
const declValue = getDeclarationValue(decl);
const parsedValue = valueParser(declValue);

parsedValue.walk((valueNode) => {
Expand Down Expand Up @@ -124,11 +125,7 @@ function rule(expectation, options, context) {
});

if (hasFixed) {
if (!decl.raws.value) {
decl.value = parsedValue.toString();
} else {
decl.raws.value.raw = parsedValue.toString();
}
setDeclarationValue(decl, parsedValue.toString());
}

function complain(message, offset) {
Expand Down

0 comments on commit 7b894ba

Please sign in to comment.