J'ai un cas d'utilisation dans lequel je souhaite remplacer les appels de fonctions variables, en particulier le texte sur les nœuds foo.value.toString()
来使用辅助函数 getStringValue(foo)
。如果我找到它,我可以使用修复程序替换 CallExpression
, donc mon correctif de règle ressemble actuellement à ceci :
fixer => fixer.replaceText(node, `getStringValue(${identifierNode.getText()})`);
Le problème avec la correction automatique de cette erreur de cette façon est que getStringValue
peut ou non avoir été importé dans le fichier. Je veux que ce correctif ait le comportement suivant :
D'après ce que j'ai compris de la documentation, il n'y a pas de moyen simple de le faire en utilisant fixer
或 context
对象访问根 ESTree 节点。最接近的是 SourceCode.getText()
, ce qui signifie que je dois analyser le texte source afin d'analyser l'importation - je préfère interagir directement avec l'ensemble de l'AST. Quelle est la meilleure façon d’effectuer ce processus d’importation automatisé ?
Si vous voulez être légèrement dangereux ici, vous pouvez supposer que l'utilisateur n'a pas redéfini la fonction
getStringValue
localement dans ses fichiers (généralement une hypothèse sûre si vous possédez une base de code à laquelle cette règle s'applique).Dans ce cas, le mieux est d'utiliser un sélecteur pour vérifier l'import, par exemple :
Il s'avère qu'il existe un moyen simple de le faire à partir de
context
对象中提取 AST 根节点。它位于context.getSourceCode().ast
. J'ai réécrit mon correctif avec la logique suivante :