stylelint
Version:
A mighty, modern CSS linter.
69 lines (61 loc) • 1.77 kB
JavaScript
;
const isStandardSyntaxRule = require("../utils/isStandardSyntaxRule");
const parseSelector = require("../utils/parseSelector");
const report = require("../utils/report");
const styleSearch = require("style-search");
module.exports = function(options) {
options.root.walkRules(rule => {
if (!isStandardSyntaxRule(rule)) {
return;
}
if (
rule.selector.indexOf("[") === -1 ||
rule.selector.indexOf("=") === -1
) {
return;
}
parseSelector(rule.selector, options.result, rule, selectorTree => {
selectorTree.walkAttributes(attributeNode => {
const operator = attributeNode.operator;
if (!operator) {
return;
}
const attributeNodeString = attributeNode.toString();
styleSearch(
{ source: attributeNodeString, target: operator },
match => {
const index = options.checkBeforeOperator
? match.startIndex
: match.endIndex - 1;
checkOperator(
attributeNodeString,
index,
rule,
attributeNode.sourceIndex,
operator
);
}
);
});
});
function checkOperator(source, index, node, attributeIndex, operator) {
options.locationChecker({
source,
index,
err: m =>
report({
message: m.replace(
options.checkBeforeOperator
? operator[0]
: operator[operator.length - 1],
operator
),
node,
index: attributeIndex + index,
result: options.result,
ruleName: options.checkedRuleName
})
});
}
});
};