使用ppx时启用有关未使用/无效属性的警告

时间:2017-01-06 18:14:01

标签: ocaml ppx

我试图使用一些ppx扩展,我发现OCaml没有发出未使用/无效属性的警告。例如,如果我写了类似的东西:

let[@blaa] () = ()

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

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

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

注意:我尝试使用4.03.0和4.04.0,并且在两种情况下都没有收到任何警告。

1 个答案:

答案 0 :(得分:2)

通常情况下,这是不可能的,因为属性只是添加到语法树元素中,然后树被多次处理,处理器可能会查找不同的属性,而忽略其他属性。处理器不需要报告他们已经处理了属性,或者他们没有找到预期的属性。属性语义非常通用,默认情况下所有属性都是不必要的。

但是,您可以在它们之上构建自己的语义。例如,JaneStreet中的WHERE a.Last_Name = 'Duncan' AND a.First_name = 'Andrew' GROUP BY b.ID HAVING COUNT(*) = 1 driver会施加限制,预处理器应该存在:

deriving