我使用Merlin与Emacs编辑OCaml代码。它通常工作得非常好,但是我遇到了以下问题:
我需要使用由其他人构建的软件包,它会向OCaml添加一些非本地语言的关键字。因为我使用包来编译代码,所以编译效果很好。另一方面,Merlin发疯了,并认为新关键字是错误的。幸运的是,新关键字只出现在一行的开头,所以我的代码看起来像这样:
let square x = x * x;;
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
FOO "This syntax is not standard Ocaml" square fact;;
FOO
是新关键字的位置。 Merlin会抱怨并说Unbound constructor FOO
。所以问题是,我可以让Marlin忽略那条线吗?或者你能想到一个黑客将语法包含在Merlin不会抱怨的东西中吗?
答案 0 :(得分:1)
Merlin没有也不会(afaik)支持任意语法扩展,但是它们确实解析了最常用的camlp4扩展,例如pa_lwt,pa_macro等。另外最新的merlin版本将跳过未知行并恢复解析,所以“go-to-definition”和类型throwback工作在文件的其他部分没有被语法扩展修改。
答案 1 :(得分:0)
另一种选择,虽然完全不同,但它提供了Merlin功能的一部分(从库中完成和记录,在文件中导航),是ocp-index。
Ocp-index不会解释或输入您当前的文件(它只会扫描它以进行打开等),因此它不会受到任意扩展的困扰。