54 lines
1.2 KiB
Markdown
54 lines
1.2 KiB
Markdown
# Contributing
|
|
|
|
## Prerequisites
|
|
|
|
- rust 1.85+ (edition 2024)
|
|
- sqlite development libraries
|
|
|
|
install the rust toolchain via [rustup](https://rustup.rs/) and make sure
|
|
sqlite headers are available for your platform.
|
|
|
|
## Development
|
|
|
|
```sh
|
|
cargo build
|
|
cargo test
|
|
cargo clippy
|
|
cargo fmt
|
|
```
|
|
|
|
run all checks before submitting changes:
|
|
|
|
```sh
|
|
cargo fmt && cargo clippy && cargo test && cargo build
|
|
```
|
|
|
|
### Database
|
|
|
|
data is stored in a sqlite file at `$XDG_DATA_HOME/todo/todos.db` (override
|
|
with `TODO_DB`). migrations in `migrations/` are applied automatically at
|
|
startup.
|
|
|
|
## Project layout
|
|
|
|
```
|
|
src/
|
|
main.rs - entry point
|
|
cli.rs - clap argument definitions
|
|
commands.rs - command handlers
|
|
db.rs - database access layer
|
|
model.rs - data types
|
|
display.rs - output formatting
|
|
mcp.rs - mcp server
|
|
tests/ - integration tests
|
|
migrations/ - sqlite migrations
|
|
build.rs - shell completion generation
|
|
```
|
|
|
|
## Submitting changes
|
|
|
|
1. create a feature branch from `main`
|
|
2. keep commits small and focused
|
|
3. ensure `cargo fmt`, `cargo clippy`, and `cargo test` all pass
|
|
4. open a merge request with a clear description of what changed and why
|