Saya mempunyai kes penggunaan di mana saya ingin menggantikan panggilan fungsi berubah-ubah, khususnya teks pada foo.value.toString()
来使用辅助函数 getStringValue(foo)
。如果我找到它,我可以使用修复程序替换 CallExpression
nod, jadi pembetulan peraturan saya pada masa ini kelihatan seperti ini:
fixer => fixer.replaceText(node, `getStringValue(${identifierNode.getText()})`);
Masalah dengan membetulkan ralat ini secara automatik dengan cara ini ialah getStringValue
mungkin telah diimport ke dalam fail atau tidak. Saya mahu pembetulan ini mempunyai tingkah laku berikut:
Setakat yang saya faham daripada dokumentasi, tiada cara mudah untuk melakukan ini menggunakan fixer
或 context
对象访问根 ESTree 节点。最接近的是 SourceCode.getText()
, yang bermaksud saya perlu menghuraikan teks sumber untuk menghuraikan import - Saya lebih suka berinteraksi dengan keseluruhan AST secara langsung. Apakah cara terbaik untuk melaksanakan proses import automatik ini?
Jika anda ingin menjadi sedikit tidak selamat di sini, anda boleh menganggap bahawa pengguna tidak mentakrifkan semula fungsi
getStringValue
secara setempat dalam fail mereka (biasanya andaian selamat jika anda memiliki pangkalan kod yang digunakan oleh peraturan ini).Dalam kes ini, cara terbaik ialah menggunakan pemilih untuk menyemak import, contohnya:
Ternyata, ada cara mudah untuk melakukannya dari
context
对象中提取 AST 根节点。它位于context.getSourceCode().ast
. Saya menulis semula pembetulan saya dengan logik berikut: