| Crates.io | rusty-todo-md |
| lib.rs | rusty-todo-md |
| version | 1.10.2 |
| created_at | 2025-03-04 19:49:05.541264+00 |
| updated_at | 2025-11-26 23:17:45.675407+00 |
| description | A multi-language TODO comment extractor for source code files. |
| homepage | https://github.com/simone-viozzi/rusty-todo-md |
| repository | https://github.com/simone-viozzi/rusty-todo-md |
| max_upload_size | |
| id | 1577724 |
| size | 395,198 |
Rusty TODO.md helps you find, centralize, and maintain all your TODO comments across your codebase.
It can run as a pre-commit hook or from the CLI, automatically extracting TODO-style comments into a structured TODO.md file.
Supports a wide range of languages and file types, with sectioned formatting, multi-line support, and smart sync.
When pre-commit installs a hook from a Git repo, it runs pip install . from that repo — which would normally build Rusty TODO.md from source (requiring a Rust toolchain).
The shim repository (rusty-todo-md-pre-commit) solves this by depending on the rusty_todo_md PyPI package, ensuring prebuilt wheels are used.
Add this to your .pre-commit-config.yaml:
repos:
- repo: https://github.com/simone-viozzi/rusty-todo-md-pre-commit
rev: v1.9.1 # Use the latest upstream tag (shim mirrors upstream)
hooks:
- id: rusty-todo-md
args: ["--auto-add", "--markers", "TODO", "FIXME", "HACK", "--"]
language_version: python3.11
args customise the markers to scan for and enable --auto-add to stage TODO.md automatically.language_version forces the hook to run with a specific Python interpreter.Example with exclusions:
repos:
- repo: https://github.com/simone-viozzi/rusty-todo-md-pre-commit
rev: v1.9.1
hooks:
- id: rusty-todo-md
args:
- "--auto-add"
- "--markers"
- "TODO"
- "FIXME"
- "HACK"
- "--exclude-dir"
- "node_modules"
- "--exclude-dir"
- "target"
- "--exclude"
- "**/*.test.js"
- --
language_version: python3.11
Then install the hook:
pre-commit install
✅ No Rust toolchain is required when using the shim and a supported platform.
You can also install Rusty TODO.md directly for manual CLI use:
pip install rusty_todo_md
Then run:
rusty-todo-md --help
Automatic TODO Collection
By default, Rusty TODO.md scans the files passed to it (typically staged files from pre-commit) for markers like TODO and FIXME, and updates your TODO.md with any new entries.
Sectioned TODO.md Format
The TODO.md file is now organized into sections, grouped first by marker (e.g., # TODO, # FIXME), then by file. Each marker section begins with a header (# <MARKER>), each file with a sub-header (## <file-path>), followed by a list of extracted TODO items.
Multi-line TODO Support Handles multi-line and indented TODO comments, merging them into a single entry.
Sync Mechanism
Language-Aware Parsing Supports precise parsing for Python, Rust, JavaScript, and Go out-of-the-box, with plans for additional languages such as TypeScript, PHP, and Java.
Seamless Pre-Commit Integration
Easily integrate Rusty TODO.md into your workflow by adding it to your .pre-commit-config.yaml.
Auto-stage Updated TODO.md
With the --auto-add flag, the tool can automatically stage the TODO.md file after updates.
rusty-todo-md
rusty-todo-md --markers TODO FIXME HACK
When using --markers as the last option before specifying files, use -- to separate markers from files:
rusty-todo-md --markers TODO FIXME HACK -- file1.rs file2.rs
Without the -- separator, the files would be incorrectly treated as additional markers.
rusty-todo-md --auto-add path/to/file.rs
rusty-todo-md --todo-path docs/TODOS.md
Rusty TODO.md supports glob-based exclusion patterns to filter out files and directories from TODO extraction.
# Exclude all log files
rusty-todo-md --exclude "*.log"
# Exclude specific file
rusty-todo-md --exclude "config.rs"
# Exclude files in a specific directory
rusty-todo-md --exclude "src/generated/*"
# Exclude a directory (and all files within it)
rusty-todo-md --exclude-dir "build"
# Or use --exclude with trailing slash
rusty-todo-md --exclude "build/"
# Exclude multiple directories
rusty-todo-md --exclude-dir "node_modules" --exclude-dir "target"
# Exclude all files under src/ recursively
rusty-todo-md --exclude "src/**"
# Exclude all .test.js files anywhere in the tree
rusty-todo-md --exclude "**/*.test.js"
# Exclude all 'vendor' directories at any depth
rusty-todo-md --exclude-dir "**/vendor"
# Combine multiple exclusions
rusty-todo-md \
--exclude "*.log" \
--exclude "*.tmp" \
--exclude-dir "build" \
--exclude-dir "dist" \
--markers TODO FIXME
* — matches any sequence of characters within a single path component? — matches any single character** — matches zero or more path components (recursive)/ suffix — indicates directory-only matching (when used with --exclude)Note: Patterns are matched relative to the scan root. The
--exclude-dirflag automatically ensures directory-only matching.
Rusty TODO.md detects comment syntax based on file extension:
| Language / Type | Extensions |
|---|---|
| Python | py |
| Rust | rs |
| JavaScript / JSX | js, jsx, mjs |
| TypeScript | ts, tsx |
| Java | java |
| C / C++ headers | cpp, hpp, cc, hh |
| C# | cs |
| Swift | swift |
| Kotlin | kt, kts |
| JSON | json |
| Go | go |
| Shell | sh |
| YAML | yml, yaml |
| TOML | toml |
| Dockerfile | dockerfile |
| Markdown | md |
Many extensions share the same parser (e.g., JS-style comment parsing for TS, Java, C-like languages).
Entries in TODO.md use this format:
* [path/to/file.ext:LINE](path/to/file.ext#L{LINE}): MESSAGE
This format is stable and designed for easy linking to code in hosted repos.
Example:
# TODO
## src/main.rs
* [src/main.rs:10](src/main.rs#L10): Refactor initialization logic
Prebuilt wheels are published for:
| OS / libc | Architectures |
|---|---|
| Linux (manylinux) | x86_64, x86, aarch64, armv7, ppc64le |
| Linux (musllinux) | x86_64, x86, aarch64, armv7 |
| Windows | x64, x86 |
| macOS | x86_64 (macOS 15), aarch64 (macOS 14) |
pip will try to build from source — which requires a Rust toolchain.If you want to run Rusty TODO.md directly from the main repo via pre-commit (building from source):
repos:
- repo: https://github.com/simone-viozzi/rusty-todo-md
rev: v1.7.5
hooks:
- id: rusty-todo-md
⚠️ This will compile the Rust source and requires a working Rust toolchain.
Contributions are welcome!
Licensed under the MIT License.
If you find Rusty TODO.md helpful, please consider giving it a ⭐ on GitHub to help others discover the project.