flycheck-smlsharpをつくった


2017年末に作っていて記事にしとこうと思ったのに忘れてた。

GitHubレポジトリ

flycheck-smlsharp

これは何?

EmacsのflycheckでSML#コンパイラを使うパッケージ。
ファイルを保存したときに、SML#コンパイラを呼び出して静的解析の結果を得る。

flymake-smlsharpを作っているκeenさんがいたので、自分が使っているflycheckでも欲しいと思って作った。

インストール方法

GitHubを見て。

leaf.elを使ってれば、楽ちんでインストールできる。

(leaf flycheck-smlsharp :require t
  :el-get (flycheck-smlsharp
           :url "https://github.com/yonta/flycheck-smlsharp.git"))

制限

ファイルを変更するたびにflycheckが走る、オンザフライの静的解析を実現できなかった
flycheckはオンザフライのチェックを行うとき、ソースファイルをコピーした一時ファイルを作って静的解析を行おうとする。
一方で、SML#のコンパイラがソースファイルを静的解析するためには、ソースファイル(.sml)以外にもインタフェースファイル(.smi)が必要である。
普通は、このソースファイルとインタフェースファイルの名前が一致する必要がある。1
よって、オンザフライのチェックを実現するには、一時ファイルの名前を取得して、同じ名前のインタフェースファイルをコピーして作る必要がある。
今回はそこまで行っていない。

参考文献

作るにあたって参考にしたサイトや記事など。
これを紹介したくて、この記事を書いた。


  1. C言語のソースとヘッダーの関係のように、ソースファイルの中で自身のインタフェースファイルの指定もできる。指定がなかった場合は、コンパイラは同じ名前のインタフェースファイルを探す。指定しないほうが他SMLコンパイラとの互換性もあるため、指定してないSML#ソースファイルが多いのが実情である。