Коды предупреждений
В этом документе перечислены коды предупреждений, которые может генерировать компилятор YaoXiang. Предупреждения не останавливают компиляцию, но могут указывать на потенциальные проблемы в коде.
Конфигурация
Поведение предупреждений можно настроить через yaoxiang.toml:
[lint]
# Уровень предупреждений о мёртвом коде: off | warn | deny
dead-code = "warn"off: отключить предупрежденияwarn: показывать предупреждения (по умолчанию)deny: считать предупреждения ошибками
Список предупреждений
W1001: Неиспользуемая экспортируемая функция
Причина: экспортируемая функция никогда не вызывается ни одним кодом.
pub dead_function: () -> Void = { } // W1001: неиспользуемая экспортируемая функция
main: () -> Void = {
// dead_function никогда не вызывается
}Рекомендация:
- Если функция не предназначена для внешнего использования, удалите модификатор
pub - Если функцию нужно сохранить, но она пока не используется, можно установить
dead-code = "off"в конфигурации
W1002: Неиспользуемый экспортируемый тип
Причина: экспортируемый тип (type-псевдоним или пользовательский тип) никогда не используется.
Пример:
DeadType: Type = Int // W1002: неиспользуемый экспортируемый тип
main: () -> Void = {
x = 42
}Рекомендация:
- Если тип нужно экспортировать, но он пока не используется, проигнорируйте это предупреждение
W1003: Неиспользуемый импорт
Причина: модуль или символ, импортированный через use, никогда не используется.
use std.json // W1003: неиспользуемый импорт
main: () -> Void = {
// модуль json никогда не используется
}Рекомендация:
- Удалите неиспользуемые импорты для поддержания чистоты кода
- Если импорт нужно сохранить (для побочных эффектов), рассмотрите использование
use std.json.*или добавьте комментарий с пояснением
W1004: Неиспользуемая экспортируемая переменная
Причина: переменная, экспортированная с pub, никогда не читается.
Пример:
pub dead_var = 42 // W1004: неиспользуемая экспортируемая переменная
main: () -> Void = {
// dead_var никогда не читается
}Рекомендация:
- Удалите ненужный модификатор
pub - Если переменную нужно экспортировать, но она пока не используется, проигнорируйте это предупреждение
W1005: Неиспользуемый экспортируемый метод
Причина: метод, экспортированный на типе, никогда не вызывается.
Пример:
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})
BadArray(Int, n) // n не является константой времени компиляцииРекомендация:
- Убедитесь, что const-параметр является константой времени компиляции
W1080: Понижение уровня доказательства времени компиляции
Причина: ограничение не может быть доказано во время компиляции и было понижено до проверки во время выполнения.
Сообщение: Ограничение не может быть доказано во время компиляции, понижено до проверки во время выполнения
Рекомендация:
- Рассмотрите добавление доказывающей функции для повышения безопасности
Подробное описание уровней предупреждений
| Уровень | Эффект |
|---|---|
off | Полностью отключить это предупреждение |
warn | Показывать предупреждение, но продолжать компиляцию (по умолчанию) |
deny | Считать предупреждение ошибкой, блокировать компиляцию |
Сценарии использования
- В процессе разработки: используйте уровень
warn, чтобы узнать о потенциальных проблемах в коде - Перед релизом: используйте уровень
deny, чтобы убедиться в отсутствии неиспользуемого кода - Устаревший код: используйте уровень
off, чтобы временно игнорировать предупреждения
Отличие от кодов ошибок
Коды предупреждений используют префикс W (например, W1001), коды ошибок используют префикс E (например, E1001).
- Ошибка (Error): блокирует компиляцию, должна быть исправлена
- Предупреждение (Warning): указывает на потенциальную проблему, исправление по желанию
