III.4 Статический анализатор
Выполняется в oxl check, oxl build и LSP. Ошибки (E) отменяют сборку; предупреждения (W) настраиваются в [lint].
| Код | Уровень | Проверка |
|---|---|---|
schema-break | E | ломающее изменение схемы (§9.2) |
send | E | непередаваемое значение уходит в другую задачу (§7.3) |
effects | E | вызов функции с недопустимым эффектом (§6.2) |
unhandled-error | E | необработанный результат с ошибкой (§6.5) |
retry-unsafe | E | @retry без @idempotent/@readonly |
saga-idempotency | E | шаг или компенсация саги без @idempotent |
missing-policy | E | rpc никому не доступен: нет allow/@public/@internal и внутренних вызовов (§13.4) |
unhosted | E | сервис, актор, топик или сага без роли (§12.1) |
magic-literal | W | одинаковый литерал длительности, размера, числа повторов или лимита встречается в атрибутах или аргументах 2+ раз — вынести в const (часть IV) |
n-plus-one | W | запрос в цикле по результату другого запроса |
scatter-gather | W | запрос к шардированной таблице без ключа шарда |
durable-non-idempotent | W | надёжный шаг пайплайна вызывает неидемпотентный rpc |
actor-cycle | W | возможное циклическое ожидание акторов |
secret-leak | E | secret.reveal() попадает в лог, строку или ответ |
blocking-in-task | W | блокирующий FFI-вызов без blocking |
time-mix | E | смешение видов времени (§17.2) |
unused | W | неиспользуемые импорты, переменные, dep |
| must-close | E | значение типа с @must_close может выйти из области видимости без close() или передачи владения (§4.3) |
Пользовательские правила — comptime-функции над AST (std.comptime), подключаются в [lint] plugins.
Подавление на объявлении: @allow(lint: правило, reason: "причина") на любом объявлении (элемент, метод, поле, вариант, rpc, msg) отключает правило для всего объявления (атрибуты, сигнатура, тело). правило — имя из таблицы выше, код диагностики или правило плагина; reason обязателен и непуст (bad-allow); неизвестное правило — unknown-lint; правило, нарушение которого — ошибка (E), подавить нельзя (bad-allow) (D-8064; D-7830).
Определяется реализацией. Плагины анализатора (D-8056; DIV-043; HANDOFF §3). Эта реализация показывает плагинам выражения плоско, без вычисленных типов.
Связанные диагностики
bad-allow, lint-plugin, missing-policy, n-plus-one, unknown-lint, unused
Исходник: docs/spec/oxl-standard.md