ローカル変数と関数引数の名前を変更できるelispリファクタリングツールはありますか?向きを変えられるようにしたいと思います。
(defun my-func (s r)
...
(use s .. r))
に:
(defun my-func (string replacement)
...
(use string .. replacement))
変数参照を見つける方法を知っているメソッドを使用します。超衛生的でなくても大丈夫です。
ローカル変数と関数引数の名前を変更できるelispリファクタリングツールはありますか?向きを変えられるようにしたいと思います。
(defun my-func (s r)
...
(use s .. r))
に:
(defun my-func (string replacement)
...
(use string .. replacement))
変数参照を見つける方法を知っているメソッドを使用します。超衛生的でなくても大丈夫です。
回答:
TL; DR: erefactor-rename-symbol-in-buffer
字句的にインテリジェントな名前変更関数を探しています-単純な検索と置換ではなく、スコープによって変数の名前を変更する関数。このようなパッケージは多くの言語で存在しますが、執筆時点(2019年4月)では、Emacs Lispのオプションは実際には多くありません。erefactor
パッケージには、私の知っている唯一のものです。
erefactor-rename-symbol-in-buffer
必要な機能です。これは、現在のスコープ(docstringを含む)内のシンボルを置き換えるインテリジェントな検索と置換コマンドです。このコマンドの制限は、現在のバッファーの外側を検索しないことです。スマートですが、完璧ではありません。最終的な結果が衛生的であることを確認するために、発生ごとに確認するように求められます。
他の名前変更関数はerefactor-rename-symbol-in-package
です。これは同じようには機能しません-グローバルシンボルでのみ機能します。これは、グループ化システムと接頭辞を使用してパッケージが正しく設定されていることに依存しており、パッケージの接頭辞と一致する変数が必要です。これはあまり堅牢ではありません-この関数が期待するように設定していないと失敗します。Elispのグローバルシンボルには名前空間がないため、グローバルシンボルの名前を変更する場合は、単純な検索と置換を使用することもできます。語彙を理解するメリットはごくわずかです。このコマンドは、トレードオフには脆弱すぎます。を使用することをお勧めしprojectile-replace
ます。
Erefactorには、他にも便利なElispコマンドがいくつかあります。(不完全な)リストはreadmeにあります。
GitHubページでは説明されていませんがerefactor
、MELPA(M-x package-install RET erefactor
)で利用できます。MELPAページはここにあります。