Включить предупреждение о неиспользуемых / недействительных атрибутах при использовании ppx
Я пытаюсь использовать некоторые расширения PPX, и я только что узнал, что OCaml не выдает предупреждение о неиспользуемых / недействительных атрибутах. Например, если я напишу что-то вроде:
let[@blaa] () = ()
Даже с -w +A
OCaml ничего не скажет о том, что @blaa
никогда не используется, и, возможно, опечатка.
Это особенно расстраивает, когда вы пытаетесь использовать ppx-переписчик и неправильно набираете данные атрибуты (например, @blaa
вместо @bla
) и не имея возможности узнать об этом. Или когда данный ppx-переписчик вообще никогда не включался, а все атрибуты просто игнорировались.
Есть ли способ включить предупреждения для таких ситуаций?
Примечание: я попробовал это с 4.03.0 и 4.04.0, и в обоих случаях не получил никаких предупреждений.
1 ответ
Ну, в общем, это невозможно, поскольку атрибуты просто добавляются в элементы дерева синтаксиса, а затем дерево обрабатывается несколько раз, и процессоры могут искать разные атрибуты и игнорировать другие. От процессоров не требуется сообщать, что они обработали атрибут или не нашли ожидаемый. Семантика атрибутов очень общая, и все атрибуты по умолчанию не нужны.
Тем не менее, вы можете создать свою семантику поверх них. Например, deriving
Драйвер из JaneStreet, наложит ограничение, что препроцессор должен существовать:
# type t = Hello [@@deriving some];;
Cannot locate deriver some