Cocoa Emacs で Flutter


Flutter の公式ページ にも紹介されてるけど、 emacs-lsp/lsp-dart を導入すると結構快適な Flutter 環境が Emacs 上で実現できる。

実際に動かしてみるとこんな感じ。コードジャンプもちゃんと動くし、Debug 中に出る Step Over などのフローティングメニューなど、VSCode に近い体験が得られる。

設定はとりあえず lsp-dart の README にもあるものを書いておけば OK。

(use-package lsp-mode)
(use-package lsp-dart
  :hook (dart-mode . lsp))

(with-eval-after-load 'projectile
  (add-to-list 'projectile-project-root-files-bottom-up "pubspec.yaml")
  (add-to-list 'projectile-project-root-files-bottom-up "BUILD"))

(use-package projectile)
(use-package lsp-ui)
(use-package company)

開発に使う便利なコマンドも数々用意されていて、とりあえずここら辺があれば最低限のことはできる。

  • M-x lsp-dart-pub-get
  • M-x lsp-dart-show-outline
  • dap-debug

Flavor はプロジェクトごとに設定したいので、 .dir-locals.el をリポジトリ root に設置した。dir-locals 初めて使ったんだけど、記法がちょっと独特なのでこんな感じに。init.el を書くノリで (eval-after-load ‘lsp-dart …) みたいな書き方をしても動かないしエラーも出ないので注意。

;; .dir-locals.el
((dart-mode . ((eval . (dap-register-debug-template "Flutter :: MyApp Development"
						    (list :type "flutter"
							  :args '("--flavor" "development" "--dart-define" "ENVIRONMENT=dev"))))
	       (eval . (dap-register-debug-template "Flutter :: Itoyokado Local"
						    (list :type "flutter"
							  :args '("--flavor" "local" "--dart-define" "ENVIRONMENT=local"))))
	       )))