Перейти к основному содержимому
Разделы документации

SWIFT ANALYZER / КАТАЛОГ

Проблема. Доказательство. Исправление.

138 правил о поведении Swift-программ. От устаревшего состояния после await до лишних обходов коллекции и утечки секрета в лог.

138 правил141 условие33 принято в узких областях10 направлений

Найдено правил: 138 · условий: 141

ARCHПринят subset

Избыточная доступность API

[email protected]

Лишняя публичность создаёт обязательства совместимости и позволяет внешнему коду зависеть от деталей реализации.

V-ARCH-04Возможность улучшения
ARCHПринят subset

Лишняя product dependency

[email protected]

Лишняя product dependency расширяет граф сборки и поддержки. Для удаления нужно исключить не только вызовы, но и линковку, ресурсы и регистрацию.

V-ARCH-05Возможность улучшения
ARCHПринят subset

Необъявленный прямой provider

[email protected]

Код может случайно компилироваться через транзитивную зависимость и ломаться после безобидного изменения промежуточного пакета.

V-ARCH-06Нарушение контракта
ARCHПринят subset

Недопустимый цикл компонентов

[email protected]

Запрещённый цикл связывает жизненный цикл компонентов и мешает независимой сборке или изменению. Цикл важен относительно политики, а не сам по себе.

V-ARCH-07Нарушение контракта
ARCHПринят subset

Утечка implementation type через API

[email protected]

Внутренний тип в публичной сигнатуре заставляет пользователей API знать о реализации и может нарушать границы модулей.

V-ARCH-08Нарушение контракта
ARCHПринят subset

Избыточный протокол или conformance

[email protected]

Conformance может быть частью dispatch или framework-контракта без очевидного вызова метода. Удалять его допустимо только при отсутствии всех значимых ролей.

V-ARCH-13Возможность улучшения
ARCHПринят subset

Семантически лишний import

[email protected]

Import меняет доступный набор extensions и overloads. Успешная компиляция после удаления ещё не означает сохранение привязок вызовов.

V-ARCH-14Возможность улучшения
EXECТребует восстановления

Вызов через несовместимую изоляцию

[email protected]

Код обращается к состоянию из контекста, которому это состояние не принадлежит. Особенно опасны границы legacy API, скрывающие изоляцию от компилятора.

V-EXEC-01Дефект
EXECТребует восстановления

Thread-affine значение переживает suspension

[email protected]

После await задача может продолжиться на другом потоке даже при сохранённой actor isolation. Thread-local ресурс нельзя считать автоматически сохранённым.

V-EXEC-07Дефект
EXECТребует восстановления

Устранимая scheduling boundary

[email protected]

Лишняя граница планирования добавляет задержку и меняет порядок событий. Удалять её можно лишь при сохранении наблюдаемой семантики.

V-EXEC-11Возможность улучшения
EXECТребует восстановления

Усиление стоимости из-за actor crossings

[email protected]

Поэлементные обращения к actor многократно оплачивают переход и открывают промежутки для interleaving. Пакетный метод иногда дешевле и точнее выражает операцию.

V-EXEC-12Возможность улучшения
ASYNCТребует восстановления

Continuation остаётся без resume

[email protected]

Не возобновлённая continuation навсегда оставляет ожидающую задачу suspended. Типичный источник — пропущенная ветка ошибки.

V-ASYNC-06Дефект
ASYNCТребует восстановления

Priority inversion через непрозрачное ожидание

[email protected]

Высокоприоритетная задача может ждать низкоприоритетную работу через непрозрачный bridge без нужного механизма donation или ограничения задержки.

V-ASYNC-17Возможность улучшения
LIFEТребует восстановления

Borrowed pointer или view выходит за lifetime

[email protected]

Указатель на временно заимствованную память становится недействительным за пределами области borrow, даже если его тип позволяет сохранить адрес.

V-LIFE-01Дефект
LIFEТребует восстановления

Нарушение Unmanaged ownership balance

[email protected]

Unmanaged переносит ответственность за retain/release на код. Несбалансированная передача приводит к утечке или преждевременному освобождению.

V-LIFE-05Дефект
LIFEТребует восстановления

Не выполнена cleanup obligation

[email protected]

Ошибка или ранний return может пропустить обязательное закрытие файла, дескриптора или другого ресурса.

V-LIFE-09Дефект
PERFТребует восстановления

Повторная потребляемая materialization / Материализация растущего префикса

[email protected]

Материализация полностью потребляемого промежуточного результата на каждом шаге может многократно копировать растущий объём данных.

V-PERF-03 · V-PERF-11Возможность улучшения
PERFТребует восстановления

Полная сортировка для extremum или top-k

[email protected]

Полная сортировка требует больше работы, чем поиск одного экстремума; для малого top-k тоже существуют специализированные алгоритмы.

V-PERF-06Возможность улучшения
PERFТребует восстановления

Повторный физический CoW detach

[email protected]

Изменение разделяемого CoW-буфера может физически скопировать весь storage. Частые snapshots перед мутацией делают стоимость неожиданной.

V-PERF-09Возможность улучшения
PERFТребует восстановления

Get-copy-modify-set усиливает стоимость

[email protected]

Getter, локальная мутация и setter могут извлекать и возвращать большую коллекцию на каждом шаге вместо изменения на месте.

V-PERF-10Возможность улучшения
PERFТребует восстановления

Повторная дорогая hash/equality работа

[email protected]

Дорогой hash или equality многократно исполняется при lookup и может скрыть линейную или более высокую стоимость за API словаря.

V-PERF-14Возможность улучшения
SECТребует восстановления

Чувствительные данные попадают в логи / Чувствительные данные достигают запрещённого получателя

[email protected]

Секрет, попавший в лог, может стать доступен гораздо более широкому кругу систем и людей, чем исходное хранилище.

V-SEC-01 · V-SEC-02Дефект / Нарушение контракта
SECТребует восстановления

SQL injection

[email protected]

Интерполяция недоверенного значения в SQL смешивает данные и структуру запроса.

V-SEC-03Дефект
SECТребует восстановления

Shell injection

[email protected]

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

V-SEC-04Дефект
SECТребует восстановления

Format-string injection

[email protected]

Недоверенная format string управляет интерпретацией аргументов, а в низкоуровневых API может нарушить безопасность памяти.

V-SEC-05Дефект
SECТребует восстановления

JS/HTML context injection

[email protected]

Недоверенный текст в HTML или JavaScript может стать исполняемым кодом вместо содержимого.

V-SEC-07Дефект
SECТребует восстановления

Predicate injection

[email protected]

Формирование predicate из строки с пользовательским вводом позволяет изменить структуру условия.

V-SEC-09Дефект
SECТребует восстановления

Regex injection

[email protected]

Недоверенное значение внутри regex меняет смысл поиска: данные становятся метасимволами регулярного выражения.

V-SEC-10Дефект
SECТребует восстановления

Обход security validator или sanitizer

[email protected]

Значение может попасть к чувствительной операции по обходному пути, не проходящему обязательную проверку.

V-SEC-20Дефект
CORПринят subset

Нарушены законы ordering

[email protected]

Алгоритм сортировки требует определённых законов сравнения. Их нарушение может давать нестабильный или неверный результат.

V-COR-06Дефект
CHANGEТребует восстановления

ABI change нарушает binary compatibility

[email protected]

Бинарный consumer может стать несовместим с новой библиотекой без перекомпиляции, даже когда исходники выглядят похожими.

V-CHANGE-02Дефект

Один RuleID может объединять несколько условий. Вид результата не задаёт severity, а стратегия первого результата не означает готовность. Обзор направлений →