feat: MVP — move files, rewrite imports, atomically
- core: gitignore-aware index (ignore crate), forward/reverse import graph,
relative-specifier math, pure-data move plans
- apply: rewrite-first + rename-last with fsync, temp+rename, full rollback
(incl. stale-plan detection before any write); unified diff for dry-run
- cli: mv + check commands, human output, --json envelope with stable error
codes (SOURCE_NOT_FOUND, TARGET_EXISTS, ...) and hints; exit codes 0/1/2
- parser/core split into submodules to keep files <=250 lines
- tests: 37 unit + 10 e2e + 2 doctests; fixtures tests/typescript/{basic,normal,complex}
- docs: SKILL.md synced (no --force in Phase 1), EXAMPLES.md
- plan: AI/agent support done; Phase 1.5 = Java niche
This commit is contained in:
parent
9d8f1e0bba
commit
55670030c3
37 changed files with 1851 additions and 139 deletions
52
todo.md
52
todo.md
|
|
@ -10,30 +10,54 @@
|
|||
- Запрещён mёртвый код: unused code удаляется или реализуется; `#[allow(dead_code)]` не использовать.
|
||||
|
||||
## MVP (Phase 1)
|
||||
- [ ] CLI skeleton (clap) — команды: mv, index, check, --dry-run
|
||||
- [ ] Сканер файлов проекта (уважать .gitignore через `ignore` крейт)
|
||||
- [ ] Парсер импортов для TypeScript/JS через tree-sitter
|
||||
- [ ] Построение графа зависимостей (файл → что импортирует)
|
||||
- [ ] Инвертированный граф (файл → кто его импортирует)
|
||||
- [ ] Вычисление нового относительного пути после mv
|
||||
- [ ] Rewrite импортов в файлах
|
||||
- [ ] Атомарный apply (сначала rewrite, потом mv) + rollback при ошибке
|
||||
- [ ] Dry-run режим с diff выводом
|
||||
- [x] CLI skeleton (clap) — команды: mv, check, --dry-run, --json
|
||||
- [x] Сканер файлов проекта (уважать .gitignore через `ignore` крейт)
|
||||
- [x] Парсер импортов для TypeScript/JS через tree-sitter
|
||||
- [x] Разрешение путей: extension guessing (.ts/.tsx/.js/...), index.* (в MVP — без этого инструмент игрушка)
|
||||
- [x] Построение графа зависимостей (файл → что импортирует)
|
||||
- [x] Инвертированный граф (файл → кто его импортирует)
|
||||
- [x] Вычисление нового относительного пути после mv
|
||||
- [x] Rewrite импортов в файлах (трогаем только specifier-строку, никогда не реформатим statement)
|
||||
- [x] Атомарный apply (сначала rewrite, потом mv) + rollback при ошибке
|
||||
- [x] Dry-run режим с diff выводом
|
||||
- [x] Команда check (битые импорты, exit code 2) — self-test инструмента
|
||||
- [x] Тесты: unit (parser, core) + e2e (CLI на фикстурах)
|
||||
|
||||
## AI / Agent support
|
||||
- [x] --json флаг на всех командах (status ok|dry_run|error)
|
||||
- [x] --dry-run + --json (preview без записи на диск)
|
||||
- [x] Стабильные error codes (TARGET_EXISTS, SOURCE_NOT_FOUND, ...) + hint поле
|
||||
- [x] Exit codes: 0 ok / 1 error / 2 broken imports
|
||||
- [x] docs/SKILL.md — машиночитаемая документация для AI агентов
|
||||
- [x] docs/EXAMPLES.md — примеры для людей и агентов
|
||||
|
||||
## Phase 1.5 — Java (наша ниша, аналогов в CLI нет)
|
||||
- [ ] tree-sitter Java грамматика: package + import extraction
|
||||
- [ ] Детект source root (src/main/java, src/) и соответствие package ⇄ директория
|
||||
- [ ] mv = три синхронных правки: package, все import в проекту, физический перенос
|
||||
- [ ] e2e фикстуры tests/java/
|
||||
|
||||
## Phase 2
|
||||
- [ ] Кэш индекса на диске (bincode/rkyv) → .jmove/index
|
||||
- [ ] Инкрементальная переиндексация (только изменённые файлы)
|
||||
- [ ] Поддержка tsconfig paths / алиасов (@/...)
|
||||
- [ ] Параллельная индексация через rayon
|
||||
- [ ] --git интеграция (git mv для stage/истории)
|
||||
- [ ] Перенос директорий целиком (mv папки)
|
||||
- [ ] Предупреждения о не-import ссылках: package.json exports, jest mocks, tsconfig includes, markdown links
|
||||
- [ ] prettier интеграция после rewrite (по желанию)
|
||||
|
||||
## Phase 3
|
||||
- [ ] Поддержка Python
|
||||
- [ ] Поддержка Java
|
||||
- [ ] Поддержка Go
|
||||
- [ ] Поддержка Python (from/import, относительные точки)
|
||||
- [ ] Поддержка Go (per-file, НЕ whole-package как refac)
|
||||
- [ ] Команда split (авто-разбивка файла на несколько)
|
||||
- [ ] Команда check (найти все битые импорты)
|
||||
- [ ] Windows-пути (camino/normalize) — CI matrix
|
||||
|
||||
## Идеи на потом
|
||||
- [ ] LSP интеграция
|
||||
- [ ] LSP интеграция (jmove сам как LSP server)
|
||||
- [ ] Watch mode
|
||||
- [ ] VS Code расширение как обёртка над CLI
|
||||
|
||||
## Конкуренты (см. docs/PLAN.md)
|
||||
- refac / ai_refac (jav-ed): TS/Py/Rust/Go/Dart, но без dry-run, лимит 30 файлов в TS,
|
||||
Go = весь пакет, Java нет. Наш edge: dry-run+атомарность, Java, split, скорость (без LSP), UX.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue