pv-docstring (VS Code)
VS Code extension для проверки docstring в Python-файлах с помощью CLI-утилиты pv-docstring.
Показывает нарушения как подчёркивания в редакторе и записи в панели Problems.
Установка
Расширение включает собранный бинарник pv-docstring в директории bin/. Дополнительная установка CLI не требуется.
Собери расширение:
npm install
npm run compile
Запусти через Extension Development Host (F5 в VS Code) или упакуй:
npm run package
code --install-extension pv-docstring-0.1.0.vsix
Пересборка бинарника
Если нужно обновить бинарник (из корня pv-tools):
cargo build --release -p pv-docstring
cp target/release/pv-docstring vscode-pv-docstring/bin/pv-docstring
Настройки
Все настройки доступны через settings.json или UI настроек (поиск по pvDocstring).
| Настройка |
Тип |
По умолчанию |
Описание |
pvDocstring.executablePath |
string |
"" (bundled) |
Путь к бинарнику. Пустая строка — использовать встроенный. |
pvDocstring.enabled |
boolean |
true |
Включить/выключить линтер. |
pvDocstring.severity |
enum |
"warning" |
Уровень серьёзности: error, warning, information, hint. |
pvDocstring.mode |
enum |
"full" |
Режим: full, staged, unstaged, untracked, all-uncommitted, base-branch. |
pvDocstring.baseBranch |
string |
"master" |
Ветка для сравнения в режиме base-branch. |
pvDocstring.args |
string[] |
[] |
Дополнительные аргументы CLI (вставляются перед подкомандой). |
pvDocstring.projectPath |
string |
"" |
Путь к корню проекта. Используется как рабочая директория. Пустая строка — использовать workspace folder. |
pvDocstring.lintTriggers |
string[] |
["open", "save"] |
Когда запускать проверку: open — при открытии файла, save — при сохранении. |
Примеры .vscode/settings.json
Полное сканирование (по умолчанию) — проверяет каждый файл целиком при открытии и сохранении:
{
"pvDocstring.mode": "full"
}
Только staged-изменения — проверяет только то, что добавлено через git add. Удобно перед коммитом, чтобы видеть проблемы только в новом коде:
{
"pvDocstring.mode": "staged"
}
Только unstaged-изменения — проверяет изменения в tracked файлах, которые ещё не git add:
{
"pvDocstring.mode": "unstaged"
}
Только untracked-файлы — проверяет новые .py файлы, которые ещё не добавлены в git:
{
"pvDocstring.mode": "untracked"
}
Сравнение с веткой — показывает нарушения только в коде, который отличается от указанной ветки. Удобно для code review:
{
"pvDocstring.mode": "base-branch",
"pvDocstring.baseBranch": "master"
}
Сравнение с main:
{
"pvDocstring.mode": "base-branch",
"pvDocstring.baseBranch": "main"
}
Всё незакоммиченное — staged + unstaged + untracked. Самый полный режим для разработки — видит вообще всё, что отличается от последнего коммита:
{
"pvDocstring.mode": "all-uncommitted"
}
Использование внешнего бинарника
Если pv-docstring установлен глобально или нужна конкретная версия:
{
"pvDocstring.executablePath": "/usr/local/bin/pv-docstring"
}
Использование CLI напрямую
Расширение использует pv-docstring CLI. Те же команды можно запускать из терминала.
Полное сканирование
# Весь проект
pv-docstring full /path/to/project
# Один файл
pv-docstring full /path/to/file.py
# JSON-вывод
pv-docstring --format json full .
# GitHub Actions annotations
pv-docstring --format github full .
Diff-режимы
# Только staged-изменения (для pre-commit хуков)
pv-docstring diff --staged
# Только unstaged-изменения (во время разработки)
pv-docstring diff --unstaged
# Сравнение с веткой (для CI)
pv-docstring diff --base-branch main
# Сравнение с веткой + фильтр по пути
pv-docstring diff --base-branch main --path src/
# JSON-вывод для diff
pv-docstring --format json diff --staged
Дополнительные аргументы (args)
Через pvDocstring.args можно передавать любые флаги CLI. Аргументы вставляются между --format json и подкомандой:
pv-docstring --format json <args...> full <file>
pv-docstring --format json <args...> diff --staged
Коды ошибок
Наличие docstring (D1xx)
| Код |
Что проверяет |
| D100 |
Отсутствует docstring у модуля |
| D101 |
Отсутствует docstring у класса |
| D102 |
Отсутствует docstring у метода |
| D103 |
Отсутствует docstring у функции |
| D104 |
Отсутствует docstring у константы |
Формат summary (D2xx)
| Код |
Что проверяет |
| D200 |
Нет строки-описания (summary) |
| D201 |
Summary должен быть на первой строке docstring |
| D202 |
Summary должен заканчиваться точкой |
| D203 |
После summary должна быть пустая строка |
Секции Args / Returns / Raises (D3xx)
| Код |
Что проверяет |
| D300 |
Отсутствует секция Args (есть параметры, но не документированы) |
| D301 |
Отсутствует секция Returns (функция возвращает значение) |
| D302 |
Отсутствует секция Raises (функция бросает исключение) |
| D310 |
Параметр не описан в docstring |
| D311 |
Тип параметра в docstring не совпадает с аннотацией |
| D312 |
В docstring описан параметр, которого нет в сигнатуре |
| D313 |
У параметра в docstring отсутствует описание |
Структура docstring (D4xx)
| Код |
Что проверяет |
| D400 |
Некорректный формат docstring (не удалось распарсить) |
| D401 |
Неправильные отступы внутри docstring |
Что пропускается по умолчанию
- Dunder-методы (
__init__, __str__, ...)
- Тестовые методы (
test_*, setUp, tearDown)
Управление триггерами
// По умолчанию — проверка при открытии и при сохранении:
{ "pvDocstring.lintTriggers": ["open", "save"] }
// Только при сохранении:
{ "pvDocstring.lintTriggers": ["save"] }
// Только при открытии (+ все уже открытые файлы при старте):
{ "pvDocstring.lintTriggers": ["open"] }
Как работает
- Триггеры настраиваются через
pvDocstring.lintTriggers: open (открытие файла + уже открытые при старте) и save (сохранение).
- В режиме
full — вызывается pv-docstring --format json full <file> на каждый файл.
- В diff-режимах (
staged, unstaged, base-branch) — вызывается pv-docstring --format json diff ... на весь репозиторий, нарушения распределяются по файлам.
- В режиме
untracked — находятся новые .py файлы через git ls-files --others и проверяются через full.
all-uncommitted — параллельно запускает staged + unstaged + untracked и мёржит с дедупликацией.
- Если бинарник не найден, показывается предупреждение (один раз за сессию).