chore: adopt derive_more to reduce boilerplate - #3573
Conversation
Replace manual Display, From, Into, AsRef, Deref, Debug, and Constructor impls with derive_more derives where the implementation is a straight delegation. Adds derive_more v2 as a workspace dependency with per-feature opt-in to keep compile times minimal. Touched crates: atuin-common, atuin-client, atuin-server-database, atuin-server-sqlite, atuin-server-postgres, atuin-daemon, atuin-dotfiles, atuin-kv, atuin-scripts, atuin (CLI).
Fossier: Manual Review Requested
Score BreakdownTotal Score: 50.1/100 | Confidence: 100% | Outcome: REVIEW
|
… features Switch derive_more from per-feature opt-in to features = ["full"]. Add Constructor derives to ControlService, Theme, PermissionRequest, PermissionChecker, and ContextWindowBuilder. Add IsVariant derive to ToolRenderData, replacing manual is_remote(). Add derive_more dep to atuin-ai crate.
…nities - DbUser/DbSession/DbHistory: add Into derives (sqlite + postgres) - DbError: replace manual `impl Error` with derive_more::Error - ClientToolCall: add From + IsVariant derives, simplify is_auto_approved - AgentState: add IsVariant derive, simplify is_busy in driver
ToolState: is_resolved() now uses generated is_completed()/is_denied(). StreamPhase: cancel handler uses generated is_done().
Greptile SummaryAdopts
Confidence Score: 4/5Safe to merge after resolving the AGENTS.md / DbError inconsistency. All manual impl replacements are mechanically equivalent. The one gap is that AGENTS.md (updated in this PR) says to use thiserror for error types, yet DbError is migrated to derive_more::Error — either the code or the documented convention needs to be consistent. AGENTS.md and crates/atuin-server-database/src/lib.rs — the stated convention and the implementation are in conflict. Important Files Changed
Reviews (3): Last reviewed commit: "Merge branch 'main' into chore/remove-bo..." | Re-trigger Greptile |
taylordotfish
left a comment
There was a problem hiding this comment.
The cases where derive_more is being used to derive a trait like From or Display generally look good to me, but some of the Constructor and IsVariant uses are a little too magic for me and I could see them causing confusion.
…eatures Remove derive_more::Constructor and derive_more::IsVariant usage, restoring manual new() methods and matches!() patterns. Narrow Cargo.toml features from "full" to only the derives still in use.
9d22fd5 to
2c28d45
Compare
|
No dependency changes detected. Learn more about Socket for GitHub. 👍 No dependency changes detected in pull request |
Avoid generating a blanket impl unless it's needed; Rust doesn't play nice if you ever need two blanket impls.
…remove-boilerplate-with-derive-more Use `as_ref(str)` instead of `as_ref(forward)`
|
ty for your pr @taylordotfish |
taylordotfish
left a comment
There was a problem hiding this comment.
looks good, thanks!
### Bug Fixes - *(ai)* Dispatch skills registered in the slash command registry ([#3593](#3593)) - *(ci)* Fossier install in scan workflow ([#3485](#3485)) - *(i18n)* Fix typos in Russian localization ([#3575](#3575)) - *(nu)* Use `char -u 1b` for ESC in OSC 133 sequences ([#3530](#3530)) - *(nu)* Suppress error when `ATUIN_HISTORY_ID` is missing in `pre_prompt` hook ([#3587](#3587)) - *(pi)* Observe tool events instead of registering a bash tool ([#3557](#3557)) - *(pty-proxy)* Set `$SHELL` to the spawned shell ([#3548](#3548)) - *(search)* Fix terminal clearing with latest Ratatui ([#3578](#3578)) - *(sync)* Skip records that fail to decrypt or decode instead of failing the whole store ([#3569](#3569)) - Atuin hangs when attempting to spawn daemon from Ctrl+R invocation ([#3502](#3502)) - Capture session ID from stream headers rather than final event ([#3531](#3531)) - Doctor resiliency fo runknown platforms + openbsd warning ([#3551](#3551)) - Double input on arrow keys in AI setup prompt on Windows ([#3552](#3552)) - Exclude AI agent commands from zsh-autosuggestions ([#3567](#3567)) - Silence shellcheck SC2016 on literal `$all-user` author filter - Respect `store_failed` when using daemon ([#3571](#3571)) ### Documentation - Highlight `Ctrl-r` keybinding on docs page ([#3489](#3489)) - Document store purge workflow ([#3544](#3544)) - Fix command example typo in documentation ([#3536](#3536)) - Make commented-out lines in `config.toml` match real defaults ([#3583](#3583)) - Add fish shell cleanup step to uninstall instructions ([#3582](#3582)) ### Features - *(doctor)* Add whether daemon is enabled to `doctor` output ([#3572](#3572)) - *(pty-proxy)* Add `--shell` flag to override the spawned shell ([#3327](#3327)) - Setup fossier to stop bot slop prs ([#3482](#3482)) - Capture command output + expose to new `atuin_output` tool ([#3510](#3510)) - Cache user contexts on load until `/reload` ([#3525](#3525)) - Create database integration tests for atuin-server ([#3514](#3514)) - Add `/model` slash command for changing models ([#3576](#3576)) - Add mcp server for history tools and expand search filters ([#3581](#3581)) - Add status bar with model and usage information ([#3591](#3591)) ### Miscellaneous Tasks - *(rustdoc)* Fix Rustdoc warnings ([#3585](#3585)) - *(warnings)* Fix compile warnings with latest dependencies ([#3586](#3586)) - Vouch for all existing contributors ([#3486](#3486)) - Update GitHub app token format - Update to Rust 1.96.1 ([#3568](#3568)) - Adopt `derive_more` to reduce boilerplate across the codebase ([#3573](#3573)) ### Performance - *(search)* Scan history by recency until N unique ([#3553](#3553)) - Add `synchronous(Normal)` + `optimize_on_close` to record store SQLite ([#3577](#3577)) - Remove unnecessary clones in a hot path ([#3580](#3580)) ### Refactor - Implement `From<sqlx::Error>` and clean up `fix_error` ([#3484](#3484)) - Pull `fn into_utc` into `atuin-server-database` crate ([#3487](#3487))
This PR adds derive_more with the explicit aim of removing boilerplate from the code.
There is no obligation to merge this PR -- it's more-so just a suggestion. AI-generated, hand-reviewed.
Checks