SKLint (sklint) — быстрый линтер, форматировщик и статический анализатор Python-кода для проектных требований StableKite, написанный на Rust.
Автор: StableKite
Сайт: https://stablekite.com
Email: stablekite@stablekite.com
SKLint не заменяет Ruff, Pyright, Pylint, wemake, flake8 и pydoclint.
Его задача — добавлять только те проверки, которые нужны проекту и не закрываются существующими инструментами полностью.
Все основные правила, suppressions, автоисправления и форматтер реализованы в Rust-ядре sklint-core, а CLI, Python wrapper и VSCode расширение вызывают одно и то же API.
Файлы проекта имеют следующую структуру:
sklint/
├── 📁 crates/ # Rust workspace: core + CLI
├── 📁 docs/ # Русская документация проекта и правил
├── 📁 examples/ # Файлы для ручной проверки и VSCode smoke test
├── 📁 python/ # Python wrapper для установки через pip/pipx
├── 📁 scripts/ # Проверочные скрипты
├── 📁 vscode/ # исходники VSCode extension
├── Cargo.toml
├── pyproject.toml
├── setup.py
└── README.md
Подробная документация по проекту: docs/README.ru.md
Примеры использования: docs/examples.ru.md
Документация предупреждений: docs/rules.ru.md
python -m pip install .
sklint --version
python -m sklint --versionДля изолированной CLI-установки:
pipx install .Сборка wheel:
python -m pip wheel . -w dist --no-deps
python -m pip install dist/sklint-*.whlsklint check examples
sklint check --format json examples/bad.py
sklint check --fix examples/bad.py
sklint format --check examples
sklint format examples/bad.py
sklint rules
sklint explain SK601[tool.sklint]
strict = false
select = []
ignore = []
[tool.ruff.lint]
external = ["SK"]external = ["SK"] нужен, если Ruff используется вместе со SKLint и в коде встречаются suppressions вида # noqa: SKxxx.
Расширение находится в папке vscode/. VSIX собирается в dist/ командой python scripts/package-vscode.py. Release-архив содержит готовый vscode/out/extension.js, поэтому для упаковки VSIX Node.js/npm не нужны, пока TypeScript-часть не менялась.
Для ручной проверки Windows, WSL, CLI, Python wheel и VSCode используется:
.\scripts\check-windows.ps1Минимальные настройки VSCode (путь к CLI обычно не нужен: расширение использует bundled binary и автоопределение):
{
"sklint.strict": false,
"sklint.select": [],
"sklint.ignore": [],
"sklint.run": "onType",
"sklint.formatting.enabled": false,
"ruff.configuration": {
"lint": {
"external": ["SK"]
}
}
}Расширение не требует обязательной настройки пути к sklint. Оно ищет исполняемый файл в таком порядке:
- валидный
sklint.executablePathили устаревший aliassklint.path, если они явно заданы; target/release/sklint(.exe)иtarget/debug/sklint(.exe)в текущем workspace;.venv/venvвнутри workspace;- bundled binary внутри установленного VSIX;
- команда
sklintизPATH.
Если в настройках остался старый абсолютный путь и файл больше не существует, расширение игнорирует его и продолжает автоопределение.
value = build_value() # noqa: SK601, SK900
value = build_value() # sklint: ignore SK601, SK900
value = build_value() # pyright: ignore[reportAny] # noqa: SK401В strict-режиме глобальные подавления в прологе файла запрещены правилом SK805. Это касается не только SKLint, но и распространённых директив других анализаторов: # ruff: noqa, # flake8: noqa, # pylint: disable=..., # pyright: report...=false, # type: ignore, # mypy: ignore-errors и аналогичных file-wide suppressions. Локальные подавления на конкретных строках кода остаются допустимыми.
Для докстрингов SK6xx подавление ставится на последней строке докстринга:
def parse_value(raw: str) -> int:
"""
Ожидание преобразования строки в число
""" # noqa: SK601
return int(raw)В VSCode расширенная markdown-справка показывается при наведении на SKxxx внутри # noqa: SKxxx или # sklint: ignore SKxxx.
Текущий релиз проверяется для Windows, Linux/WSL, Python 3.8+, Rust stable, VSCode, Ruff и Pylance/Pyright.
SKLint поставляется как релизный CLI, Python-пакет и VSCode-расширение. Публичные команды CLI, формат suppressions и конфигурация поддерживаются как стабильный интерфейс; новые правила добавляются отдельными релизами.