--- /dev/null
+"use strict";
+
+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
+ })
+ });
+ }
+ });
+};