Как отключить Ошибка (предупреждение 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.

Как я могу отключить это предупреждение и фатальную ошибку?

1 ответ

Решение

FAQ по дюне объясняет, как настроить предупреждения так, чтобы они были "нефатальными" (позволяя продолжить сборку). Тем не менее, это все равно оставит предупреждения, загромождающие результаты вашей сборки. Для разработчиков, использующих open! Foo идиома, чтобы установить контекст, это раздражает. Лучшее решение - просто отключить это предупреждение для проекта:

  • Создать dune файл в корне вашего проекта
  • Добавьте следующую строфу

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

Эта строфа инструктирует dune пройти -w флаг с -66 аргумент компилятору OCaml при сборке под dev профиль. 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.
Другие вопросы по тегам