You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
// @ts-nocheck |
|
|
|
'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.includes('[') || !rule.selector.includes('=')) { |
|
return; |
|
} |
|
|
|
let hasFixed = false; |
|
const selector = rule.raws.selector ? rule.raws.selector.raw : rule.selector; |
|
|
|
const fixedSelector = parseSelector(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, operator); |
|
}); |
|
}); |
|
}); |
|
|
|
if (hasFixed) { |
|
if (!rule.raws.selector) { |
|
rule.selector = fixedSelector; |
|
} else { |
|
rule.raws.selector.raw = fixedSelector; |
|
} |
|
} |
|
|
|
function checkOperator(source, index, node, attributeNode, operator) { |
|
options.locationChecker({ |
|
source, |
|
index, |
|
err: (m) => { |
|
if (options.fix && options.fix(attributeNode)) { |
|
hasFixed = true; |
|
|
|
return; |
|
} |
|
|
|
report({ |
|
message: m.replace( |
|
options.checkBeforeOperator ? operator[0] : operator[operator.length - 1], |
|
operator, |
|
), |
|
node, |
|
index: attributeNode.sourceIndex + index, |
|
result: options.result, |
|
ruleName: options.checkedRuleName, |
|
}); |
|
}, |
|
}); |
|
} |
|
}); |
|
};
|
|
|