F# Syntax on Sublime Text

More than 5 years have passed since last update.

使っているのは、Sublime Text 2。F# のファイルを開くと、シングルクォート(') が文字列だと解釈して、以下みたく残念な感じになる。

syntacs_ng.png

ちなみに、上のコードは How to write a financial contract | F# Snippets ママ。

Sublime Text での F# のシンタックスは、/Users/[username]/Library/Application Support/Sublime Text 2/Packages/F#/F#.tmLanguage が制御しているらしい。F# の文字列は、ダブルクォート(") か @+ダブルクォート(@") のみなので、シングルクォートは思い切ってコメントアウト。

    <key>strings</key>

<dict>
<key>patterns</key>
<array>
(省略)
<!--<dict>
<key>begin</key>
<string>(?=[^\\])(')</string>
(省略)
</dict>-->

</array>
</dict>

これでもいいんだけど、このままだと、Char型のハイライトがうまく行かない。OCaml のシンタックスを参考にして、つまり OCaml.tmLanguage を参考にして、以下の定義を F#.tmLanguage に足す。

    <key>constants</key>

<dict>
<key>patterns</key>
<array>
(省略)
<!-- char pattern include unicode -->
<dict>
<key>match</key>
<string>'(.|\\(u\h{4}|U\h{8}|[bnrt'"\\]))'</string>
<key>name</key>
<string>constant.character.fsharp</string>
</dict>
</array>
</dict>

これで、文字リテラルの色が変わった。

syntacs_char_ok.png

もちろん、上で残念な感じにハイライトされていたファイルの以下の通り。

syntacs_ok.png

…… OCaml のハイライトに比べると貧弱だ。。。変数名や型名とかもハイライトさせたいけど、軽くファイル弄るだけじゃできなさそうだったので、いつか。本当は、JSON で定義して Sublime Text用にビルドするのが正しいらしい。

他にも、of の色も変わっていないので、keywords に足したりした。全文は以下のgistへ

F# Syntax on Sublime Text 2