Ich habe einen Anwendungsfall, in dem ich variable Funktionsaufrufe ersetzen möchte, insbesondere Text auf foo.value.toString()
来使用辅助函数 getStringValue(foo)
。如果我找到它,我可以使用修复程序替换 CallExpression
Knoten, daher sieht meine Regelkorrektur derzeit so aus:
fixer => fixer.replaceText(node, `getStringValue(${identifierNode.getText()})`);
Das Problem bei der automatischen Behebung dieses Fehlers auf diese Weise besteht darin, dass getStringValue
möglicherweise in die Datei importiert wurde oder nicht. Ich möchte, dass sich dieser Fix wie folgt verhält:
Soweit ich der Dokumentation entnehme, gibt es keine einfache Möglichkeit, dies mit fixer
或 context
对象访问根 ESTree 节点。最接近的是 SourceCode.getText()
zu tun, was bedeutet, dass ich den Quelltext analysieren muss, um den Import zu analysieren – ich würde lieber direkt mit dem gesamten AST interagieren. Wie lässt sich dieser automatisierte Importvorgang am besten durchführen?
如果您想在这里稍微不安全,您可以假设用户没有在其文件中本地重新定义
getStringValue
函数(如果您拥有此规则所适用的代码库,通常是一个安全的假设)。在这种情况下,最好的方法是使用选择器来检查导入,例如:
事实证明,有一种简单的方法可以从
context
对象中提取 AST 根节点。它位于context.getSourceCode().ast
。我用以下逻辑重写了我的修复程序: