1

我正在尝试使用一些 ppx 扩展,但我刚刚发现 OCaml 不会对未使用/无效的属性发出警告。例如,如果我写类似:

let[@blaa] () = ()

即使使用-w +A,OCaml 也不会说明从未使用过的事实@blaa,并且可能输入错误。

当尝试使用 ppx 重写器并错误键入给定属性(例如,@blaa而不是@bla)并且无法找到它时,这尤其令人沮丧。或者当一个给定的 ppx 重写器根本没有被启用时,所有的属性都被默默地忽略了。

有没有办法为这种情况启用警告?

注意:我用 4.03.0 和 4.04.0 都试过了,在这两种情况下都没有收到任何警告。

4

1 回答 1

2

好吧,一般来说,这是不可能的,因为属性只是添加到语法树元素中,然后对树进行多次处理,处理器可能会寻找不同的属性,而忽略其他属性。处理器不需要报告他们已经处理了一个属性,或者他们没有找到预期的属性。属性语义很笼统,默认所有属性都是不必要的。

但是,您可以在它们之上构建自己的语义。例如,来自 JaneStreet 的deriving 驱动程序将施加一个限制,即应存在预处理器:

# type t = Hello [@@deriving some];;
Cannot locate deriver some
于 2017-01-06T18:55:48.493 回答