Почему селектор для пользовательского правила ESLint не работает в AST? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть 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 с этим конкретным именем.

...