Перейти к основному содержимому

Диагностика ошибок

Компилятор Wave выводит ошибки вместе с кодом ошибки (E####), указанием источника/местоположения/решением подсказки все за один раз.

Формат вывода

Основной формат выглядит следующим образом.

error[E3001]: semantic validation failed: use of undeclared identifier `x`
--> file.wave:2:18
1 | fun main() {
2 | println("{}", x);
| ^ not found in this scope
= context: semantic validation
= help: fix mutability, scope, and expression validity issues

Элементы вывода:

  • --> file:line:column: код ошибки и сводка
  • ^: расположение проблемы
  • Блок кода + выделение кареткой(^
  • контекст, ожидалось, найдено, замечание, помощь, предложение

Коды ошибок директорий

  • E1002 неожиданный символ
  • E1003 незакрытый блочный комментарий
  • E1004 Незамкнутая строка
  • E1005 неправильный escape в строке
  • E1006 Неправильный символьный литерал
  • E2001 Неправильный формат числового литерала
  • E3001 Ошибка синтаксического анализаб
  • E3001 Ошибка семантической проверки
  • E3102 Присвоение null непредназначенного для этого указателя
  • E9001 Запрет отрицательного целочисленного уменьшения
  • E9001 Внутренняя ошибка генерации кода в бэкенде

Ошибки бэкенда также указывают на местоположение исходного кода

Даже если паника компилятора происходит на уровне генерации кода (LLVM), возможное место вызова/объявления указывается в случае возможности.

error[E9001]: compiler internal error during code generation (llvm-ir-generation)
--> test.wave:12:9
= found: Function 'foo' not found
= note: source position inferred from unresolved function name in backend panic

В случае невозможности предположить местоположение используется резервное, это указано в разделе note.