62 lines
1.4 KiB
JavaScript
62 lines
1.4 KiB
JavaScript
|
let stylelint = require('stylelint');
|
||
|
let checkAlphabeticalOrder = require('../checkAlphabeticalOrder');
|
||
|
let { isStandardSyntaxProperty, isCustomProperty, vendor } = require('../../utils');
|
||
|
|
||
|
// eslint-disable-next-line max-params
|
||
|
module.exports = function checkNode(node, result, ruleName, messages) {
|
||
|
let allPropData = [];
|
||
|
|
||
|
node.each(function processEveryNode(child) {
|
||
|
if (child.type !== 'decl') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let { prop } = child;
|
||
|
|
||
|
if (!isStandardSyntaxProperty(prop)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (isCustomProperty(prop)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let unprefixedPropName = vendor.unprefixed(prop);
|
||
|
|
||
|
// Hack to allow -moz-osx-font-smoothing to be understood
|
||
|
// just like -webkit-font-smoothing
|
||
|
if (unprefixedPropName.startsWith('osx-')) {
|
||
|
unprefixedPropName = unprefixedPropName.slice(4);
|
||
|
}
|
||
|
|
||
|
let propData = {
|
||
|
name: prop,
|
||
|
unprefixedName: unprefixedPropName,
|
||
|
index: allPropData.length,
|
||
|
node: child,
|
||
|
};
|
||
|
|
||
|
let previousPropData = allPropData[allPropData.length - 1]; // eslint-disable-line unicorn/prefer-at -- Need to support older Node.js
|
||
|
|
||
|
allPropData.push(propData);
|
||
|
|
||
|
// Skip first decl
|
||
|
if (!previousPropData) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let isCorrectOrder = checkAlphabeticalOrder(previousPropData, propData);
|
||
|
|
||
|
if (isCorrectOrder) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
stylelint.utils.report({
|
||
|
message: messages.expected(propData.name, previousPropData.name),
|
||
|
node: child,
|
||
|
result,
|
||
|
ruleName,
|
||
|
});
|
||
|
});
|
||
|
};
|