我有一個用例,我想替換變數函數調用,特別是 foo.value.toString()
來使用輔助函數 getStringValue(foo)
。如果我找到它,我可以使用修復程式替換 CallExpression
節點上的文本,因此我的規則修復程式目前如下所示:
fixer => fixer.replaceText(node, `getStringValue(${identifierNode.getText()})`);
以這種方式自動修復此錯誤的問題是 getStringValue
可能已匯入到檔案中,也可能尚未匯入到檔案中。我希望這個修復程式具有以下行為:
據我從文件中了解到,沒有簡單的方法可以使用 fixer
或 context
物件來存取根 ESTree 節點。最接近的是 SourceCode.getText()
,這意味著我必須解析原始文字才能解析導入 - 我寧願直接與整個 AST 互動。執行此自動導入過程的最佳方法是什麼?
如果您想在這裡稍微不安全,您可以假設使用者沒有在其文件中本地重新定義
getStringValue
函數(如果您擁有此規則所適用的程式碼庫,通常是一個安全的假設)。在這種情況下,最好的方法是使用選擇器來檢查導入,例如:
事實證明,有一個簡單的方法可以從
context
物件中提取 AST 根節點。它位於context.getSourceCode().ast
。我用以下邏輯重寫了我的修復: