todos-lsp is a clean-room Rust TODO scanner with two supported operator surfaces:
- a CLI that targets MVP behavioral parity with
ianlewis/todosv0.14.0 - an additive Language Server Protocol entrypoint exposed as
todos-lsp serve
The MVP parity goal is intentionally version-pinned and finite. After the bootstrap release, this project evolves independently rather than tracking upstream feature-for-feature.
Install from crates.io after the package is published:
cargo install todos-lspThe MVP release is not published until maintainers merge the release-please release PR and the tagged publish workflow succeeds.
For local development or release validation, build from the repository:
cargo build --release
./target/release/todos-lsp --helpScan the current directory:
todos-lspScan one or more paths and emit JSON lines:
todos-lsp -o json src testsCommon parity-oriented flags include:
todos-lsp --labels owner -o json .
todos-lsp --charset detect .
todos-lsp --follow .
todos-lsp --blame .
todos-lsp --no-error-on-unsupported tests/fixtures/unsupported/plain.txtTODO comments are reported through one shared internal finding model used by both the CLI and LSP paths. That model is an implementation boundary inside this single package, not a public Rust library API.
The bootstrap CLI parity target is ianlewis/todos v0.14.0 only. The parity harness compares observable behavior against a pinned upstream binary for the documented MVP rows, including recursive scans, unsupported input handling, JSON shape, labels, charset fallback, symlink traversal, representative language support, blame output, and multi-line block comment comment_line behavior.
CI and release validation require the pinned upstream binary and run the parity suite fail-closed. Missing parity tooling must block validation rather than silently skipping evidence.
The current parity matrix and provenance workflow are documented in docs/parity/matrix.md and docs/parity/provenance.md.
Start the LSP server over stdio with:
todos-lsp serveThe server supports diagnostics for open buffers, overlay-aware workspace symbols, and the todos-lsp.listTodos execute-command surface. Open-buffer scans resolve paths relative to the initialized workspace root so CLI and LSP relative paths remain equivalent.
Releases are managed with release-please. The publish workflow validates before publishing:
cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets
cargo package
cargo publish --dry-runPublishing uses Cargo's CARGO_REGISTRY_TOKEN environment variable. Tokens are not passed on the command line.
Release notes are maintained in CHANGELOG.md. A crates.io install command in this README is an installation path, not evidence that the current version has already been published.
This repository is a clean-room Rust rewrite. ianlewis/todos v0.14.0 is used as a black-box behavioral reference for MVP parity only. Do not copy upstream source, tests, fixtures, prose, regexes, or language tables. Record parity fixture provenance in docs/parity/ and recreate any tainted work rather than editing around contamination.
Recommended local verification:
cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets
cargo llvm-cov --all-targets --summary-onlyWhen running parity tests locally, provide .tmp/todos-upstream or set UPSTREAM_TODOS_BIN to the pinned upstream v0.14.0 binary.