どうも、Flutterを始めてみようと思っている、たくチャレ(@takuchalle)です。

今回はEmacs Advent Calendar 2018の13日目の記事です。

昨日は @tadsan さんの Emacsからの安全なシェルコマンド実行でした!外部コマンドを使うときは参考にしたいと思います!

さて、みなさんDartを使ってますか?

僕はいきなりFlutterを使う前にDartの勉強をしてました。A Tour of the Dart Language一通り読み進めました。 その時にサンプルを手元で動かしたかったので、Emacsで開発環境をセットアップしてみました。

dart-mode の導入

dart-modeが便利機能のすべてを提供してくれます。

An Emacs mode for the Dart language. Contribute to bradyt/dart-mode development by creating an accou

僕はパッケージ管理に package.el を使っているので、次のような設定になります。

(package-install 'dart-mode)
(setq dart-enable-analysis-server t)
(add-hook 'dart-mode-hook 'flycheck-mode)
  • シンタックスハイライト
  • エラーチェック
  • コードフォーマット
  • 定義元ジャンプ
  • 参照元ジャンプ

あたりをすべてやってくれそうです。それぞれ簡単に使い方を紹介していこうと思います。

シンタックスハイライト

dart-modeを有効にしたらシンタックスハイライトも自動で有効になります。

カラースキームによって雰囲気は異なると思いますが、僕の場合はこんな感じです。

dracula-theme を使っています。あまり色がつかないですね…別のカラースキームだともっと色がつくのかな…

エラーチェック

flycheck-modeと連携してエラーチェックを行っています。

セミコロン漏れなどの文法上のエラーはもちろん、クラスにないメソッドを呼んでいる箇所でも指摘してくれます。背後で Static Analyzer が動いてるんだと思います。

エラーが起きている箇所にアンダーラインが入って、そこにカーソルを合わせると具体的なエラーを出してくれます。 下の例だとdoAnythingというメソッドがEffectiveDoerにありません、というエラーが出ています。

Ubuntu で撮ったからさっきとは少し色合いが違います。

コードフォーマット

dartfmtを使って、開いているバッファのコードフォーマットを行ってくれます。Flutterではまた異なるフォーマッタがあるようです。

C-c C-oを打つと開いているバッファに適用されます。dartfmtがガチガチのフォーマッタではないようで、空行の入り形とかでフォーマット結果が変わります。

下記の設定をしておくと、バッファの保存時にフォーマットを行ってくれるようになります。

(setq dart-format-on-save t)

僕はauto-save-buffers-enhancedを使って 0.5 秒アイドルがあれば保存するようにしていて、書いてる途中にフォーマットされると邪魔なのでこれは有効にしていません。

定義元ジャンプ

dart-gotoという関数でデフォルトの設定で、C-c C-gでカーソルがある変数や関数の定義元にジャンプします。ちゃんとスコープに応じてジャンプしてくれました。プログラムの規模が大きくなった時に正しく動いてくれるかは謎です。

参照元ジャンプ

こちらは参照している箇所にジャンプする方法で、C-c C-fでカーソルがある変数や関数を参照している箇所のリストを表示します。dart-find-refsという関数で定義されています。そのリストから選択すると参照元にジャンプします。

個人的にはジャンプ系は gtags を使っているので Dart でも使いたいのですが、gtagsDart には対応していないみたいなので dart-mode のジャンプを使います。

まとめ

今回は dart-mode の使い方を簡単に紹介しました。これで開発が捗りますね!

ちなみにA Tour of the Dart Languageを読み進めた時のコードはGitHubにあるので同じように勉強中の人は参考にしてみてください!

Contribute to takuyaohashi/dart-sandbox development by creating an account on GitHub.

Emacs Advent Calendar 2018の14日目は、@conao3さんの「org-publishを使ってorgでブログを書く話」です!

同じカテゴリの記事