我正在尝试使用一些ppx扩展,我刚刚发现OCaml不会对未使用/无效的属性发出警告。例如,如果我写的东西是:
let[@blaa] () = ()即使使用-w +A,OCaml也不会说@blaa从未被使用过,而且可能被错误地输入了。
当尝试使用ppx重写器和错误输入给定的属性(例如@blaa而不是@bla)时,这尤其令人沮丧,而且无法找到它。或者当一个给定的ppx重写器根本没有被启用,并且所有的属性都被默默地忽略了。
是否有办法为这种情况启用警告?
注意:我尝试了4.03.0和4.04.0,在这两种情况下都没有收到任何警告。
发布于 2017-01-06 18:55:48
一般情况下,这是不可能的,因为属性只是添加到语法树元素中,然后对树进行多次处理,处理器可能会查找不同的属性,而忽略其他属性。处理器不需要报告它们已经处理了一个属性,或者没有找到预期的属性。属性语义非常通用,默认情况下所有属性都是不必要的。
但是,您可以在它们之上构建自己的语义。例如,来自deriving 司机的JaneStreet将施加一个限制,即预处理器应该存在:
# type t = Hello [@@deriving some];;
Cannot locate deriver somehttps://stackoverflow.com/questions/41511783
复制相似问题