Skip to content

Коды предупреждений ​

В этом документе перечислены коды предупреждений, которые может генерировать компилятор YaoXiang. Предупреждения не останавливают компиляцию, но могут указывать на потенциальные проблемы в коде.

Конфигурация ​

Поведение предупреждений можно настроить через yaoxiang.toml:

toml
[lint]
# Уровень предупреждений о мёртвом коде: off | warn | deny
dead-code = "warn"
  • off: отключить предупреждения
  • warn: показывать предупреждения (по умолчанию)
  • deny: считать предупреждения ошибками

Список предупреждений ​

W1001: Неиспользуемая экспортируемая функция ​

Причина: экспортируемая функция никогда не вызывается ни одним кодом.

yaoxiang
pub dead_function: () -> Void = { }  // W1001: неиспользуемая экспортируемая функция

main: () -> Void = {
    // dead_function никогда не вызывается
}

Рекомендация:

  • Если функция не предназначена для внешнего использования, удалите модификатор pub
  • Если функцию нужно сохранить, но она пока не используется, можно установить dead-code = "off" в конфигурации

W1002: Неиспользуемый экспортируемый тип ​

Причина: экспортируемый тип (type-псевдоним или пользовательский тип) никогда не используется.

Пример:

yaoxiang
DeadType: Type = Int  // W1002: неиспользуемый экспортируемый тип

main: () -> Void = {
    x = 42
}

Рекомендация:

  • Если тип нужно экспортировать, но он пока не используется, проигнорируйте это предупреждение

W1003: Неиспользуемый импорт ​

Причина: модуль или символ, импортированный через use, никогда не используется.

yaoxiang
use std.json  // W1003: неиспользуемый импорт

main: () -> Void = {
    // модуль json никогда не используется
}

Рекомендация:

  • Удалите неиспользуемые импорты для поддержания чистоты кода
  • Если импорт нужно сохранить (для побочных эффектов), рассмотрите использование use std.json.* или добавьте комментарий с пояснением

W1004: Неиспользуемая экспортируемая переменная ​

Причина: переменная, экспортированная с pub, никогда не читается.

Пример:

yaoxiang
pub dead_var = 42  // W1004: неиспользуемая экспортируемая переменная

main: () -> Void = {
    // dead_var никогда не читается
}

Рекомендация:

  • Удалите ненужный модификатор pub
  • Если переменную нужно экспортировать, но она пока не используется, проигнорируйте это предупреждение

W1005: Неиспользуемый экспортируемый метод ​

Причина: метод, экспортированный на типе, никогда не вызывается.

Пример:

yaoxiang
Foo: Type = { value: Int }

pub Foo.dead_method: (self: Foo) -> Void = { }  // W1005: неиспользуемый экспортируемый метод

main: () -> Void = {
    foo = Foo(1)
    // dead_method никогда не вызывается
}

Рекомендация:

  • Удалите ненужный модификатор pub
  • Если метод нужно сохранить, но он пока не используется, проигнорируйте это предупреждение

W1063: const-ограничение для дженериков не может быть вычислено ​

Причина: ограничение значения const-параметра дженерика не может быть вычислено во время компиляции.

Сообщение: const-ограничение для дженериков не может быть вычислено: `{constraint}` ({var} = {value})

yaoxiang
BadArray(Int, n)  // n не является константой времени компиляции

Рекомендация:

  • Убедитесь, что const-параметр является константой времени компиляции

W1080: Понижение уровня доказательства времени компиляции ​

Причина: ограничение не может быть доказано во время компиляции и было понижено до проверки во время выполнения.

Сообщение: Ограничение не может быть доказано во время компиляции, понижено до проверки во время выполнения

Рекомендация:

  • Рассмотрите добавление доказывающей функции для повышения безопасности

Подробное описание уровней предупреждений ​

УровеньЭффект
offПолностью отключить это предупреждение
warnПоказывать предупреждение, но продолжать компиляцию (по умолчанию)
denyСчитать предупреждение ошибкой, блокировать компиляцию

Сценарии использования ​

  • В процессе разработки: используйте уровень warn, чтобы узнать о потенциальных проблемах в коде
  • Перед релизом: используйте уровень deny, чтобы убедиться в отсутствии неиспользуемого кода
  • Устаревший код: используйте уровень off, чтобы временно игнорировать предупреждения

Отличие от кодов ошибок ​

Коды предупреждений используют префикс W (например, W1001), коды ошибок используют префикс E (например, E1001).

  • Ошибка (Error): блокирует компиляцию, должна быть исправлена
  • Предупреждение (Warning): указывает на потенциальную проблему, исправление по желанию