diff --git a/CLAUDE.md b/CLAUDE.md index bdfa897..d45a806 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,14 +32,14 @@ refactor: extract validate() from check command ## Build & Verify ```bash -cargo build # build -cargo run # run mdvs -cargo test # run all tests -cargo clippy # lint -cargo fmt # format +cargo build # build +cargo run # run mdvs +cargo test # run all tests +cargo clippy --all-targets # lint (including test code) +cargo fmt # format ``` -**Always run `cargo fmt` after `cargo clippy`** when verifying changes. +**Always use `cargo clippy --all-targets`** — plain `cargo clippy` misses warnings in test code. **Always run `cargo fmt` after `cargo clippy`** when verifying changes. ## Architecture diff --git a/src/cmd/build.rs b/src/cmd/build.rs index 46f3728..2324559 100644 --- a/src/cmd/build.rs +++ b/src/cmd/build.rs @@ -1136,7 +1136,7 @@ mod tests { assert!(!crate::step::has_failed(&output)); // Verify no model/chunking sections (auto-flag sections are present from init) - let mut config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); + let config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); assert!(config.embedding_model.is_none()); assert!(config.chunking.is_none()); @@ -1149,7 +1149,7 @@ mod tests { ); // Verify sections were written - let mut config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); + let config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); assert_eq!(config.embedding_model.as_ref().unwrap().name, DEFAULT_MODEL); assert!(config.embedding_model.as_ref().unwrap().revision.is_none()); assert_eq!( @@ -1254,7 +1254,7 @@ mod tests { output ); - let mut config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); + let config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); assert_eq!(config.chunking.as_ref().unwrap().max_chunk_size, 512); } diff --git a/src/cmd/search.rs b/src/cmd/search.rs index 0a60831..b10f5b1 100644 --- a/src/cmd/search.rs +++ b/src/cmd/search.rs @@ -462,7 +462,7 @@ mod tests { create_test_vault(tmp.path()); init_and_build(tmp.path()).await; - let mut config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); + let config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); let backend = Backend::parquet(tmp.path()); let embedding = config.embedding_model.as_ref().unwrap(); let model_config = ModelConfig::try_from(embedding).unwrap(); @@ -488,7 +488,7 @@ mod tests { create_test_vault(tmp.path()); init_and_build(tmp.path()).await; - let mut config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); + let config = MdvsToml::read(&tmp.path().join("mdvs.toml")).unwrap(); let backend = Backend::parquet(tmp.path()); let embedding = config.embedding_model.as_ref().unwrap(); let model_config = ModelConfig::try_from(embedding).unwrap(); diff --git a/src/cmd/update.rs b/src/cmd/update.rs index fb0f68d..192367f 100644 --- a/src/cmd/update.rs +++ b/src/cmd/update.rs @@ -267,7 +267,6 @@ mod tests { use super::*; use crate::outcome::commands::UpdateOutcome; use crate::schema::config::MdvsToml; - use crate::schema::shared::{FieldTypeSerde, ScanConfig}; use std::fs; fn unwrap_update(result: &CommandResult) -> &UpdateOutcome { diff --git a/src/index/storage.rs b/src/index/storage.rs index 4b2a354..d16e1ee 100644 --- a/src/index/storage.rs +++ b/src/index/storage.rs @@ -707,7 +707,7 @@ mod tests { file_id: "id-2".into(), filename: "b.md".into(), frontmatter: Some( - serde_json::json!({"title": "hello", "count": 5, "score": 3.14, "draft": true}), + serde_json::json!({"title": "hello", "count": 5, "score": 3.15, "draft": true}), ), content_hash: "h2".into(), built_at: 1_700_000_000_000_000, @@ -756,7 +756,7 @@ mod tests { // Row 1: real values preserved assert_eq!(title.value(1), "hello"); assert_eq!(count.value(1), 5); - assert!((score.value(1) - 3.14).abs() < f64::EPSILON); + assert!((score.value(1) - 3.15).abs() < f64::EPSILON); assert!(draft.value(1)); } diff --git a/src/schema/config.rs b/src/schema/config.rs index 7c10e45..44be7da 100644 --- a/src/schema/config.rs +++ b/src/schema/config.rs @@ -366,7 +366,7 @@ mod tests { #[test] fn mdvs_toml_roundtrip() { - let mut toml_doc = MdvsToml { + let toml_doc = MdvsToml { scan: ScanConfig { glob: "**".into(), include_bare_files: false, @@ -499,7 +499,7 @@ default_limit = 10 #[test] fn empty_fields_list_roundtrip() { - let mut doc = full_toml(vec![]); + let doc = full_toml(vec![]); let toml_str = toml::to_string(&doc).unwrap(); let parsed: MdvsToml = toml::from_str(&toml_str).unwrap(); assert_eq!(parsed.fields.field.len(), 0); @@ -541,7 +541,7 @@ default_limit = 10 include_bare_files: false, skip_gitignore: false, }; - let mut toml_doc = MdvsToml::from_inferred(&schema, scan); + let toml_doc = MdvsToml::from_inferred(&schema, scan); assert_eq!(toml_doc.scan.glob, "**"); assert!(!toml_doc.scan.include_bare_files); @@ -574,7 +574,7 @@ default_limit = 10 include_bare_files: true, skip_gitignore: false, }; - let mut toml_doc = MdvsToml::from_inferred(&schema, scan); + let toml_doc = MdvsToml::from_inferred(&schema, scan); assert_eq!(toml_doc.scan.glob, "docs/**"); assert!(toml_doc.scan.include_bare_files); assert!(toml_doc.embedding_model.is_none()); @@ -589,7 +589,7 @@ default_limit = 10 include_bare_files: false, skip_gitignore: false, }; - let mut toml_doc = MdvsToml::from_inferred(&schema, scan); + let toml_doc = MdvsToml::from_inferred(&schema, scan); assert!(toml_doc.embedding_model.is_none()); assert!(toml_doc.chunking.is_none()); assert!(toml_doc.build.is_some()); @@ -676,7 +676,7 @@ default_limit = 10 #[test] fn validation_only_roundtrip() { - let mut doc = MdvsToml { + let doc = MdvsToml { scan: ScanConfig { glob: "**".into(), include_bare_files: false,