У меня есть AST:
https://astexplorer.net/#/gist/4876725d1019dd6f4aec8f2f120ec56d/2f8f40858b5524b6b6c9dbd427dc86e68e902a50
И я хочу ограничить строковые литералы в качестве аргументов функции classname
.
Я создал правило:
create: function(context) {
return {
"CallExpression": function (node) {
const argument = node.arguments && node.arguments.find(element => (element.type === 'Literal'));
if (
(node.callee.name === 'classnames')
&& ( argument !== undefined)
){
context.report({
node,
message: "You should use css modules instead of {{identifier}}",
data: {
identifier: argument.raw,
}
})
}
},
}
}
, что хорошо, но если я попытаюсь использовать более сложный селектор, такой как
create: function(context) {
return {
"CallExpression[callee.name='classnames']": function (node) {...}
}
}
, это с треском провалится.Я думаю, что я селекторы идея как-то не так.Можете ли вы уточнить, как правильно их использовать?
Также есть ли способ сделать запрос внутри функции?Например, проверьте, был ли импортирован пакет 'classnames', получите имя переменной, в которую он был импортирован, а затем запросите ast для CallExpression с этим конкретным именем.