Apakah ada alat refactoring elisp yang dapat mengubah nama variabel lokal dan argumen fungsi? Saya ingin dapat berbelok:
(defun my-func (s r)
...
(use s .. r))
ke:
(defun my-func (string replacement)
...
(use string .. replacement))
menggunakan metode yang tahu cara menemukan referensi variabel. Saya baik-baik saja jika tidak super-hygenic.
Jawaban:
TL; DR:
erefactor-rename-symbol-in-buffer
Anda sedang mencari fungsi ganti nama cerdas secara leksikal - yang mengubah nama variabel dengan cakupannya, bukan hanya mencari dan mengganti yang bodoh. Paket seperti ini ada untuk banyak bahasa tetapi pada saat penulisan (April 2019), sebenarnya tidak ada banyak pilihan untuk Emacs Lisp. The
erefactor
paket adalah satu-satunya yang saya tahu.erefactor-rename-symbol-in-buffer
adalah fungsi yang Anda inginkan. Ini adalah perintah find-and-replace yang cerdas yang akan menggantikan simbol dalam lingkup saat ini (termasuk dokumen). Batasan perintah ini adalah tidak akan mencari di luar buffer saat ini. Ini cerdas, tetapi tidak sempurna. Ini akan meminta Anda untuk mengkonfirmasi setiap kejadian untuk memastikan hasil akhirnya adalah sanitasi.Fungsi ganti nama lainnya adalah
erefactor-rename-symbol-in-package
. Ini tidak bekerja dengan cara yang sama - itu hanya bekerja pada simbol global. Itu bergantung pada paket Anda yang diatur dengan benar, dengan sistem pengelompokan dan awalan, dan itu membutuhkan variabel untuk mencocokkan awalan paket. Itu tidak terlalu kuat - itu akan gagal jika Anda belum mengatur segalanya seperti yang diharapkan fungsi ini. Saya pikir jika Anda mengganti nama simbol global, Anda juga dapat menggunakan penemuan dan ganti yang naif karena simbol global di Elisp tidak memiliki namespace. Manfaat dari pemahaman leksikal sangat minim. Perintah ini terlalu rapuh untuk pertukaran. Saya sarankan hanya menggunakanprojectile-replace
.Erefactor memiliki sejumlah perintah Elisp lain yang mungkin berguna bagi Anda. Daftar (tidak lengkap) tersedia di readme .
Itu tidak dijelaskan pada halaman GitHub tetapi
erefactor
tersedia di MELPA (M-x package-install RET erefactor
). Halaman MELPA dapat ditemukan di sini .sumber