1

我使用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新关键字在哪里。梅林会抱怨说Unbound constructor FOO。所以问题是,我可以让马林忽略那条线吗?或者你能想出一个技巧来将语法包装在 Merlin 不会抱怨的东西中吗?

4

2 回答 2

1

Merlin 不会也不会(afaik)支持任意语法扩展,但它们确实对最常用的 camlp4 扩展(如 pa_lwt、pa_macro 等)具有解析技巧。此外,最新的 merlin 版本将跳过未知行并恢复解析,因此“开始” -to-definition' 和类型回退适用于文件的其他未被语法扩展修改的部分。

于 2015-06-24T19:28:53.197 回答
0

An alternative, although quite different, but that offers a subset of the functionalities of Merlin (completion and documentation from libraries, navigating around files), is ocp-index.

Ocp-index doesn't interpret or type your current file (it only scans it for opens and the like), so it won't be troubled by arbitrary extensions.

于 2016-03-04T11:58:31.817 回答