🔖

Lem Advent Calendar 2023 - Lisp Mode - Find definitionsとUtopian

2023/12/10に公開

これは Lem Advent Calendar の記事です。

Find definitions Command

Lisp Modeではカーソル位置にあるシンボル上でM-. (M-x find-definitions)を実行することでシンボルの定義位置に移動することが出来ます。
この機能は変数 lem-lisp-mode:*find-definitions* に新しい関数を加えることで拡張可能です。

Lemではこの拡張を使ってWebフレームワークのUtopianのコントローラの定義への移動に対応しています。
以下はその拡張の定義です。

https://github.com/lem-project/lem/blob/main/extensions/lisp-mode/utopian.lisp

Utopian

https://github.com/fukamachi/utopian/

Utopianではconfig/routes.lisproute関数の第三引数にcontrollerの定義を指定します。
https://github.com/fukamachi/utopian/blob/master/examples/myblog/config/routes.lisp#L10-L12
controllerを表す引数が文字列の場合、ファイル名:関数名という意味になります、ここからコントローラの関数の定義位置が分かります。
例えばentries:listingの場合は、../controllers/entries.lispの位置の(defun listing ...)を探すと見つかります。

https://github.com/fukamachi/utopian/blob/8c0ec6b1c4d43eb60c58f38f67f51bc637968a35/examples/myblog/controllers/entries.lisp#L12-L15

地味な機能ですが業務でwebアプリケーションを開発してる時は便利でよく使います。
ドッグフーディングをしていると、こういう点で便利になってくるのが楽しいところです。

Discussion