【问题标题】:Enable warning about unused/invalid attributes when using ppx使用 ppx 时启用有关未使用/无效属性的警告
【发布时间】:2017-01-06 18:14:01
【问题描述】:

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

let[@blaa] () = ()

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

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

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

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

【问题讨论】:

    标签: ocaml ppx


    【解决方案1】:

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

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

    # type t = Hello [@@deriving some];;
    Cannot locate deriver some
    

    【讨论】:

    • 我想编写一个可以捕获任何属性并报告它们的ppx 是不可行的?我可以认为任何剩余的属性在我的程序中都是不可取的,并应用这样的 ppx 作为我链中的最后一个转换器。
    • 是的,你可以编写一个预处理器,它会对每个未知属性发出警告(白名单除外)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2014-09-05
    • 2016-07-28
    • 2021-10-07
    • 2018-08-01
    相关资源
    最近更新 更多