Включить предупреждение о неиспользуемых / недействительных атрибутах при использовании ppx

Я пытаюсь использовать некоторые расширения PPX, и я только что узнал, что OCaml не выдает предупреждение о неиспользуемых / недействительных атрибутах. Например, если я напишу что-то вроде:

let[@blaa] () = ()

Даже с -w +AOCaml ничего не скажет о том, что @blaa никогда не используется, и, возможно, опечатка.

Это особенно расстраивает, когда вы пытаетесь использовать ppx-переписчик и неправильно набираете данные атрибуты (например, @blaa вместо @bla) и не имея возможности узнать об этом. Или когда данный ppx-переписчик вообще никогда не включался, а все атрибуты просто игнорировались.

Есть ли способ включить предупреждения для таких ситуаций?

Примечание: я попробовал это с 4.03.0 и 4.04.0, и в обоих случаях не получил никаких предупреждений.

1 ответ

Решение

Ну, в общем, это невозможно, поскольку атрибуты просто добавляются в элементы дерева синтаксиса, а затем дерево обрабатывается несколько раз, и процессоры могут искать разные атрибуты и игнорировать другие. От процессоров не требуется сообщать, что они обработали атрибут или не нашли ожидаемый. Семантика атрибутов очень общая, и все атрибуты по умолчанию не нужны.

Тем не менее, вы можете создать свою семантику поверх них. Например, deriving Драйвер из JaneStreet, наложит ограничение, что препроцессор должен существовать:

# type t = Hello [@@deriving some];;
Cannot locate deriver some
Другие вопросы по тегам