如何禁用错误(警告66):未打开!在沙丘

时间:2019-07-20 00:39:38

标签: ocaml ocaml-dune

根据https://github.com/ocaml/ocaml/pull/1110,OCaml 4.08及更高版本会针对未使用的模块打开发出警告,即使它们已用open!打开。这与使用open! Foo来建立以下代码要在模块Foo的上下文中的惯例产生冲突(无论是否从Foo内部使用任何东西) 。此外,由于默认情况下dune将所有警告均视为致命错误,因此这将导致默认dev配置文件中的沙丘构建失败,并出现诸如

之类的错误
$ dune build
File "lib/mylib.ml", line 1, characters 0-10:
1 | open! Core
    ^^^^^^^^^^
Error (warning 66): unused open! Core.

如何禁用此警告和致命错误?

1 个答案:

答案 0 :(得分:1)

dune FAQ解释了如何配置警告以使它们“不致命”(让构建继续进行)。但是,这仍然会使警告混乱,使您的构建输出混乱。对于使用open! Foo惯用法来建立上下文的开发人员,这很烦人。最好的解决方案是为项目有选择地禁用此警告

  • 在项目的根目录下创建一个dune文件
  • 添加以下节

    (env
      (dev
        (flags (:standard -w -66))))
    

dune配置文件下进行构建时,此节指示-w将带有-66参数的dev标志传递给OCaml编译器。 man ocamlc解释了此标志的工作方式:

       -w warning-list
          Enable, disable, or mark as fatal the warnings specified by the argument warning-list.
          ...
          -num   Disable warning number num.
          ...
          The warning numbers are as follows.
          ...
          66   Unused open! statement.