Emacs, ENSIMEでScala, Play開発環境を作る
複数回詰まったのでメモ.
ひっかかったところだけ書くので他は公式ドキュメント見てください.
Emacsへのインストール
ENSIMEはpackage.elでインストールできます.
scala-modeなどもついてくるのでそれ以外はインストールしなくて良いです.
依存ライブラリがオプショナルなのでバイトコンパイル時にエラーが出ますが気にしない.
プラグインのインストール
~/.sbt/0.13/plugins/plugins.sbt
に
addSbtPlugin("org.ensime" % "sbt-ensime" % "2.6.0")
と書きます.
私の環境ではまだsbt v1ではない.
ENSIMEは謎のバージョン付きディレクトリを作るので下のリンクに従って無効化しておきましょう.
ScalaをAtomで開発しやすくする | TIS NOTE
~/.sbt/0.13/global.sbt
に以下のようなものを書きます.
import org.ensime.EnsimeKeys._
ensimeIgnoreMissingDirectories := true
you have multiple scala versionsというエラーが出る
プロジェクトのScalaコンパイラとシステムに入っているScalaコンパイラのバージョンが一致しないとダメ.
プロジェクトのScalaコンパイラのバージョンを確かめて,
ensime.sbt
というファイルに以下のように書き込みます.
ensimeScalaVersion in ThisBuild := "2.11.7"
Playのテンプレート参照でエラーになる
view.html.foo
みたいなコードでエラーが出ます.
Playのテンプレートのコードへの展開でエラーになるっぽいですね.
これは色々情報が古くて苦労しました.
IDE - 2.6.xは参考になりませんでした.
sbt ensimeConfig
で作るのはどうもPlayの情報が取得できないのでだめです.
play
コマンドを使うというのはplayコマンドは廃止されているのでだめです.
activator
コマンドも廃止されているのでだめです.
gen-ensime
コマンドも廃止されています.
色々公式ページsbt · ENSIMEを見ながら動かした結果,
sbt ensimeConfig test:compile
しないと情報が作られないということが分かりました.
Scala初心者であることも手伝って一度コンパイルしないと情報が作られないということに思い当たりませんでした.
HaskellのInteroとかはそんなこと無かったので.
Flycheckに対応していない(未解決)
ENSIMEはFlycheckでエラー情報を出しません.
これは政治的問題らしいです…
flycheck is incompatible with ensime and the flycheck author stopped maintaining it a few years ago because of "political differences" with Emacs.
— Sam Halliday (@fommil) 2018年5月17日
別にFlycheckにこだわるつもりは全く無いのですが, エラー表示がリストになってないというのは普通に辛いです. 一々ポイントに移動してキーバインドでecho areaにエラー情報を表示するというのは手間がありやってられないですし, エラーを確認しながら編集して治すという作業も行えません.
政治的問題ならば私が流し込む外部プログラムを書けば解決しそうではあります. 頑張って書きますか…?
Playのテンプレートが生のHTMLを名乗っているのでシンタックスエラーになる(未解決)
Playのテンプレートはテンプレートのくせに生のHTMLを装っています. よってHTMLチェックツール(tidy-html)でエラーになります. また型チェックも行えません.