VSCodeでOCaml周りの設定をしていた話

1

以前はAtomとNuclidを使っていたんだけどこの前の初期化の際にVSCodeにしてから設定していなかったのでしようとした

今の設定は以下のようになっていて

github.com

使おうとしているpluginは reasonml-editor/vscode-reasonm

github.com

nix-darwinで諸々の依存を入れたので、

    "reason.diagnostics.tools": [
        "bsb"
    ],
    "reason.path.ocamlmerlin": "/run/current-system/sw/bin/ocamlmerlin",
    "reason.path.ocamlfind": "/run/current-system/sw/bin/ocamlfind",
    "reason.path.ocpindent": "/run/current-system/sw/bin/ocp-indent",
    "reason.codelens.enabled": true

という感じの設定にした。

2

しかしBuckleScript周りが悲しいことに以下のようになる

f:id:hiroqn:20181222233641p:plain

これはIssueに上がっているみたいだった

github.com

最初merlinの設定がおかしいのかと思ったが、

Merlin doesn't provide syntax highlighting nor indentation.

どうやら非対応らしい

自分の認識ではBuckleScript中のjsとの間をいい感じにしてくれる [@@bs.deriving abstract]などはppxの構文の範囲だと認識しているのでいい感じにやって欲しい

ここら辺Atom+Nuclidでは問題がなかったように記憶しているので少し悲しい。

BuckleScriptのweb上でのPlaygroundはbsc.exeをjs_of_ocamlコンパイルしたものが使われていたはずで、同じようなノリでbsc中のparser部分だけどpluginに持ってくることは可能に思えるがかなりめんどくさそうだ。

ていうかreasonだと問題起きなさそうなのが悲しい。

3

実はまだファイルをまたいだ依存関係がうまく設定できていない。

Module A中でModule Bに飛びたい時に同一ファイルでは飛べるのにファイルをまたいでは飛べない。

ハイライトがぶっ壊れているのは関係はなさそう

f:id:hiroqn:20181222235245p:plain

####{BSB GENERATED: NO EDIT
FLG -ppx /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/bsppx.exe
S /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/ocaml
B /Users/hiroqn/.dev/bs-winston/node_modules/bs-platform/lib/ocaml
FLG -nostdlib -color always
FLG -w -30-40+6+7+27+32..39+44+45+101
S src
B lib/bs/src
####BSB GENERATED: NO EDIT}

merlinの設定がおかしい可能性もあるがatom時に問題が起きたことはなかったのと .merlin自体が自動生成なのでその可能性は低そうである。

4

という感じでいまいち設定がうまくいかなかったのでAtomに戻ることになってしまいそう。

5 追記

今さっき.merlinがどのコンパイラを使うか指定がないことに気づき、急いでmerlinなどをbucklescriptにあるocamlでビルドし直したところ動きましたわ〜

{
  "reason.path.ocamlfind": "/nix/store/jgd4fwcg1d58kghgmfdfdck5fqn0mwi0-ocaml-findlib-1.8.0/bin/ocamlfind",
  "reason.path.ocpindent": "/nix/store/hg8rvg4x6hd2058wcfnwprs9d379gdv3-ocaml4.02.3-ocp-indent-1.6.1/bin/ocp-indent",
  "reason.path.ocamlmerlin": "/nix/store/bz5qmz0d8gqlvhv7m9x8yi5c7dr94bfk-ocaml4.02.3-merlin-3.2.2/bin/ocamlmerlin"
}

こんな感じね

まだハイライトぶっ壊れたままだけど