flycheck-smlsharpをつくった
2017年末に作っていて記事にしとこうと思ったのに忘れてた。
GitHubレポジトリ
これは何?
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
よって、オンザフライのチェックを実現するには、一時ファイルの名前を取得して、同じ名前のインタフェースファイルをコピーして作る必要がある。
今回はそこまで行っていない。
参考文献
作るにあたって参考にしたサイトや記事など。
これを紹介したくて、この記事を書いた。
-
flycheck公式 - Githubソース
- flycheckの公式開発ドキュメントとGithubにあるソース。
- 開発ドキュメントは簡単な例しかなく、Gihubソースのコメントドキュメントを頑張って読んだ。
- ソースコードが1万行を越えるためか、Firefoxが重たくなるのに耐えながらgrepした。
-
rx EmacsWiki - Github
- flycheckが使っている正規表現。
- SRE(S-expression Regular Expression)互換の表現も多い。
- 独自表現が多く、途中にある例を参考に手探りで調べた。
-
κeenのHappy Hacκing Blog | Lispエイリアンの狂想曲 -
SMLSharpを使ってSMLのon-the-flyエラーチェック
- SML# + flymakeなcheckerを作成している。
- 基本方針はこれと同じで、SML#コンパイラのオプション機能を利用してつくった。
- flymakeはコンパイラの複数行メッセージ取得が難しいとのこと。
-
へびやんず・てすと・だいありぃ - Standard ML のコードをリアルタイムにチェックする (Emacs + Flycheck + MLton)
- MLton + flycheckなcheckerを作成している。
- flycheckで複数行を取得する方法がめちゃくちゃ参考になった。
- MLtonへの依存があり、MLtonのコンパイル速度が遅いことが問題点になる。
-
nrnrnrさんによるflycheck-sml
- MLton + flycheckなcheckerを作成している。
- へびやんさんより簡易版。
-
- OCamlプログラミングサポートMerlin + flycheckなcheckerを作成している。
- flycheckの拡張の作り方の大雑把な把握に役立った。
-
みずぴー日記 - SML# + annot: 式の型を表示するコンパイラ拡張をリリースしました
- SML#(古い) + 独自elispな型情報出力を作成している
- SML#コンパイラ自体に工夫を加える必要があるため、コンパイラバージョンアップへの追従が難しい。
- 型推論結果を使って変数の型を知れるのは強力なため、今後のコンパイラサポートを期待したい。
- 他にもファイルのアウトラインなど、コンパイラのサポートによって実現できる機能はたくさんあると思われる。
-
C言語のソースとヘッダーの関係のように、ソースファイルの中で自身のインタフェースファイルの指定もできる。指定がなかった場合は、コンパイラは同じ名前のインタフェースファイルを探す。指定しないほうが他SMLコンパイラとの互換性もあるため、指定してないSML#ソースファイルが多いのが実情である。 ↩
Author And Source
この問題について(flycheck-smlsharpをつくった), 我々は、より多くの情報をここで見つけました https://qiita.com/keita44_f4/items/2a3864f53f14ae25cd2b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .