Skip to main content

Source Code Todo — scan TODO/DONE markers in code

Project description

Source Code Todo (sct)

PyPI

Утилита для учёта задач прямо в исходниках: ищет метки TODO / DONE в коде, кэширует состояние в JSON и даёт CLI и TUI для просмотра и закрытия задач.

[!WARNING] Примечание: проект завайбкожен — большая часть кода и документации собрана с помощью ИИ (Cursor). С версии 0.2.0 добавлены тесты, CI и проверки перед правкой файлов; всё равно смотрите diff перед коммитом.

Идея

Пишешь код в редакторе (например, Neovim). Если что-то нужно доделать позже — оставляешь в файле метку с текстом задачи. sct сканирует проект, показывает список в терминале и при необходимости меняет метку в файле на DONE, сохраняя приоритет.

Приоритет кодируется буквами в маркере:

Маркер (открыто) Приоритет
TODO 1
TODOO 2
TODOOO 3

Для закрытых задач — то же с DONE / DONEE / DONEEE (столько же букв E, сколько было O).

Установка

PyPI (рекомендуется)

Пакет sctodo опубликован на PyPI; CLI-команда после установки — sct:

pip install sctodo
# или изолированно в ~/.local/bin:
pipx install sctodo

Требуется Python ≥ 3.10. Актуальная версия на PyPI: 0.2.3.

Из исходников (разработка)

cd /path/to/sct
python3 -m venv .venv
.venv/bin/pip install -r requirements-dev.txt
.venv/bin/pip install -e .

Метаданные пакета и console-script sct — в pyproject.toml.

Использование

После pip install sctodo или pipx install sctodo команда доступна как sct. Ниже — те же примеры; при разработке из исходников замените sct на .venv/bin/sct.

# TUI (нужен интерактивный терминал)
sct

# Первичная настройка каталога .sct/
sct init

# Синхронизация (по умолчанию инкрементальная)
sct sync
sct sync --full -v

# Проверка кэша и исходников
sct doctor
sct doctor --compare

# Список открытых задач (id в каждой строке)
sct list
sct list --no-id          # компактный вид
sct list --priority 2
sct list --all --json

# Закрыть / открыть: id, короткий префикс id (как git), или file:line
sct done dd5be318
sct done path/to/file.py:12
sct done --dry-run dd5be
sct reopen <id>

sct --version
python -m sct sync

Корень проекта ищется вверх по каталогам (наличие .sct/cache.json или .sct/config.json), либо задайте --root.

После обновления с 0.2.1 на 0.2.2 один раз выполните sct sync --full — схема id задач изменилась (теперь hash файла + номера строки).

Коды выхода

Код Значение
0 Успех
1 Не найдено / неоднозначный префикс id
2 Устаревший кэш / строка изменилась (doctor, done)
3 Ошибка ввода-вывода
4 Неверное использование (например, TUI без TTY)

Метки в коде

Формат: TOD + от одной до трёх O (открыто) или DON + от одной до трёх E (сделано), затем : и текст задачи.

Примеры в исходных файлах (отдельная строка комментария):

  • # TOD + O: + текст — приоритет 1, открыто
  • # TOD + OO: + текст — приоритет 2
  • # TOD + OOO: + текст — приоритет 3
  • # DON + E: + текст — закрыто, приоритет 1

(В этом README маркеры разбиты, чтобы файл документации не попадал в собственный сканер.)

Кэш и конфиг

  • Кэш: .sct/cache.json.gitignore)
  • Конфиг: .sct/config.json — создайте через sct init или скопируйте .sct/config.json.example

Какие файлы сканируются

По умолчанию — текстовые файлы с расширениями из DEFAULT_INCLUDE_SUFFIXES в sct/core/config.py:

.py, .pyi, .rs, .go, .js, .jsx, .ts, .tsx, .c, .h, .cpp, .hpp, .java, .kt, .lua, .vim, .sh, .bash, .zsh, .md, .yaml, .yml, .toml, .json, .sql, .rb, .php, .swift, .scala, .cs, .html, .css, .scss, .tf

Файлы без расширения и с другими суффиксами пропускаются. Содержимое читается как UTF-8.

Исключения по каталогам (DEFAULT_EXCLUDE_DIRS): .git, .hg, .svn, __pycache__, .venv, venv, node_modules, .mypy_cache, .pytest_cache, .ruff_cache, dist, build, .sct, tests, test.

Дополнительно не заходят в каталоги, имя которых начинается с . (например .github), даже если их нет в списке.

Настройка через .sct/config.json

{
  "include_suffixes": [".py", ".md", ".tf"],
  "exclude_dirs": ["vendor"]
}
  • include_suffixesзаменяет дефолтный список расширений целиком.
  • exclude_dirsдобавляет каталоги к дефолтному списку исключений (дефолт не убирается).

После правки конфига выполните sct sync --full.

JSON для скриптов

sct list --json
{
  "version": "0.2.3",
  "items": [ { "id": "…", "file": "…", "line": 1,  } ]
}

Удобно вызывать из Neovim через jobstart / system без отдельного плагина.

Клавиши TUI

Тёмный минималистичный интерфейс: список задач, строка деталей, статусная строка внизу.

Клавиша Действие
j / k Вниз / вверх по списку
g / G Первая / последняя строка
Ctrl+d / Ctrl+u Страница вниз / вверх
d Закрыть задачу (с подтверждением)
o Открыть снова
r Синхронизация
a Все / только открытые
/ Фильтр
? Подсказка
q Выход

При устаревшем кэше при старте показывается предупреждение.

Тесты

.venv/bin/pip install -r requirements-dev.txt
.venv/bin/pip install -e .
.venv/bin/python -m unittest discover -s tests -v

В CI то же самое (см. .github/workflows/ci.yml).

Планы

  • Плагин или рецепты для Neovim (обёртка над sct list --json, переход к file:line)
  • Создание GitHub Issues из задачи (заготовка в sct/core/github.py, пока не реализовано)

История версий

См. CHANGELOG.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sctodo-0.2.3.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sctodo-0.2.3-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file sctodo-0.2.3.tar.gz.

File metadata

  • Download URL: sctodo-0.2.3.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sctodo-0.2.3.tar.gz
Algorithm Hash digest
SHA256 e724e669927dd4a82632d52ad673153f23f2e7a30bd0b777495853d4f1bbfeef
MD5 b519987a6e052b1a97e16fdbbed02208
BLAKE2b-256 b3b9514fa7f70482202b7c5d801453672a0a877e9321b660691cb1cc7a755248

See more details on using hashes here.

File details

Details for the file sctodo-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: sctodo-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sctodo-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f93d64cbf0e7d08e5c66d8d15154dd1866b50f07ef2535cc56bb15a42e704b48
MD5 27ffa2c7b0e19839a892002abbee753c
BLAKE2b-256 7b38124c0276ccf048b56beff21d5a7e1841528a42a527f1cb9508de9a935ca9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page