assert! теперь указывает на само условие, а не на весь вызов

15.08.2025

Изменилось раскрытие макроса assert!: он раскрывается в выражение match вместо if !cond. Из-за этого в сообщении об ошибке указывается на само условие и исчезает упоминание трейта Not.

Что изменилось на практике

Раньше при передаче в assert! значения неподходящего типа компилятор указывал на весь вызов и добавлял отдельное сообщение о том, что выражению нужно реализовать Not. Теперь указка стоит точно на условии, а лишнее сообщение исчезает — диагностика получается короче и указывает на то место, где действительно ошибка.

Второй эффект: assert! больше не требует от условия реализации Not, поскольку match проверяет сам факт совпадения с true. Это снимает ограничение для типов, у которых Not реализовывать неудобно.

Изменение — estebank.

Оригинал

Change the desugaring of assert! for better error output

Упоминаний: 1 · Просмотров: 3