ここは俺の備忘録だ

少なくとも日本語での言及が少ない話をするつもりです

merilnの補完パッケージ初期化スクリプト

merilnは便利だがプロジェクト毎に一々書くのもだるい。 そう思って前に調べたら調度良いタイミングでそういうスクリプトを書いてくれている人が居た。

Create .merlin file for a project with all your ocamlfind packages and .opam sources in there · GitHub

このgistのスクリプトはopam内のパッケージ全てを入れてしまうので、コメントにて他の方が手を加えてくれた指定版を用いると良い。 埋もれてしまうには勿体無いので、分散としてここでも言及しておく。

#!/bin/sh

# Add PKG's:
ocamlfind list \
    | awk '{ print "PKG "$1 }'

# See https://github.com/the-lambda-church/merlin/wiki/Letting-merlin-locate-go-to-stuff-in-.opam
find ~/.opam -name '*.cmt' -print0 \
    | xargs -0 -I{} dirname '{}' \
    | sort -u \
    | awk '{ print "S "$0"\nB "$0 }'

# e.g.) merlin-init.sh | grep batteries > .merlin

私の環境では以下のようになる。

PKG batteries
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/build
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/build
S /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/src
B /Users/nnwww/.opam/4.02.3/build/batteries.2.4.0/_build/src

単純な方法なのでこれでcoreを指定するとppx_core等も対象に入れてしまうが、実用には十分だろう。