Clojureリファクタリングまとめ
リファクタリングにはエディタサポートが必須である.
現状, Emacsのみ利用しているのでノウハウはとりあえずEmacsに閉じているかも.
clj-refactor.el
CIDERの拡張で多様なリファクタリング機能を提供.
よく使うものを抜粋する.
- cljr-thread-first-all: -> に表記を変換.
- cljr-thread-last-all: ->> に表記を変換.
- cljr-unwind-all: スレッディングマクロ表記をネストした()に分解.
とくにこれらはprint-debugで便利. スレッディングマクロはきれいに書けるけど途中経過をみたいときは一旦unwindして部分的にいじってまたもとに戻す.
ref: Clojure: Threading Macros
- cljr-clean-ns: 不要なnamespaceのモジュールを取り除く.
- cljr-destructure-keys
- cljr-rename-file: namespaceを配慮してfileをリネーム.
逆引きHOWTO
ref. clj-refactorでできるリファクタリング一覧
シンボルを名前変更をするには?
cljr-rename-symbol をつかう.
レコードを名前変更するには?
recordに対してcljr-rename-symbolをつかうとエラーする. 内部でJava Classを生成しているのでそれに対応できないのかな?
Emacsの機能で名前変更で使えそうなものを利用.
grep拡張のag/ripgrepで絞り込んで修正とか.
projectile-replace をつかうとプロジェクト(大抵はgitの管理範囲)での文字列の出現を置換できる.
✅Emacs consult+embarkで置換
Emacsの絞り込み検索consultで絞り込んだものをembarkでbufferに書き出して編集して保存することで置換をする技.
Emacsの次世代ミニバッファ補完UI | 日々、とんは語る。
これがClojure, というよりもEmacsでのテキスト操作でよく利用されるけど, 知らないと置換はきついかもしれない.
References
- Clojure LSP · Clojure development with Spacemacs & Cider
- practialiさんのテクニック集(LSPだけど).