首页 > 解决方案 > 如何禁用错误(警告 66):未使用打开!在沙丘

问题描述

根据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.

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

标签: ocamlocaml-dune

解决方案


沙丘常见问题解答解释了如何配置警告以使其“非致命”(让构建继续进行)。但是,这仍然会使您的构建输出混乱。对于使用该open! Foo成语建立上下文的开发人员来说,这很烦人。最好的解决方案是选择性地为项目禁用此警告

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

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

本节指示在配置文件下构建时将带有参数的标志dune传递给 OCaml 编译器。解释了这个标志是如何工作的:-w-66devman 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.

推荐阅读