Skip to content

Commit 333181f

Browse files
hyperpolymathclaude
andcommitted
fix(rust): replace .expect("TODO") in parser.rs (1 prod + 6 tests)
7 .expect("TODO: handle error") sites in src/parser.rs cleared. Prod (1 site, line 453 in is_thematic_break): trimmed.chars().next() is statically Some because trimmed.len() >= 3 is guarded immediately above. Documented invariant: "trimmed.len() >= 3 was guarded immediately above, so chars().next() is always Some". SPARK proof candidate. Tests (6 sites): all parse(...) calls inside #[cfg(test)] mod revert to .unwrap() — panicking on Err is the test verdict. cargo test --lib: 11/11 green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 73da811 commit 333181f

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

src/parser.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,8 @@ fn is_thematic_break(line: &str) -> bool {
450450
if trimmed.len() < 3 {
451451
return false;
452452
}
453-
let first = trimmed.chars().next().expect("TODO: handle error");
453+
let first = trimmed.chars().next()
454+
.expect("trimmed.len() >= 3 was guarded immediately above, so chars().next() is always Some");
454455
(first == '-' || first == '*' || first == '_') && trimmed.chars().all(|c| c == first)
455456
}
456457

@@ -496,21 +497,21 @@ mod tests {
496497

497498
#[test]
498499
fn parse_empty_document() {
499-
let doc = parse("").expect("TODO: handle error");
500+
let doc = parse("").unwrap();
500501
assert!(doc.title.is_none());
501502
assert!(doc.blocks.is_empty());
502503
}
503504

504505
#[test]
505506
fn parse_heading_and_paragraph() {
506-
let doc = parse("# Title\n\nSome text here.").expect("TODO: handle error");
507+
let doc = parse("# Title\n\nSome text here.").unwrap();
507508
assert_eq!(doc.title.as_deref(), Some("Title"));
508509
assert_eq!(doc.blocks.len(), 2);
509510
}
510511

511512
#[test]
512513
fn parse_directive() {
513-
let doc = parse("@version 1.0").expect("TODO: handle error");
514+
let doc = parse("@version 1.0").unwrap();
514515
assert_eq!(doc.directives.len(), 1);
515516
assert_eq!(doc.directives[0].name, "version");
516517
assert_eq!(doc.directives[0].value, "1.0");
@@ -519,7 +520,7 @@ mod tests {
519520
#[test]
520521
fn parse_attestation_block() {
521522
let input = "!attest identity=Alice role=author trust=reviewed";
522-
let doc = parse(input).expect("TODO: handle error");
523+
let doc = parse(input).unwrap();
523524
assert_eq!(doc.attestations.len(), 1);
524525
assert_eq!(doc.attestations[0].identity, "Alice");
525526
assert_eq!(doc.attestations[0].trust_level, TrustLevel::Reviewed);
@@ -528,7 +529,7 @@ mod tests {
528529
#[test]
529530
fn parse_code_block() {
530531
let input = "```rust\nfn main() {}\n```";
531-
let doc = parse(input).expect("TODO: handle error");
532+
let doc = parse(input).unwrap();
532533
assert_eq!(doc.blocks.len(), 1);
533534
if let Block::CodeBlock { language, content } = &doc.blocks[0] {
534535
assert_eq!(language.as_deref(), Some("rust"));
@@ -546,7 +547,7 @@ mod tests {
546547

547548
#[test]
548549
fn parse_thematic_break() {
549-
let doc = parse("---").expect("TODO: handle error");
550+
let doc = parse("---").unwrap();
550551
assert_eq!(doc.blocks.len(), 1);
551552
assert_eq!(doc.blocks[0], Block::ThematicBreak);
552553
}

0 commit comments

Comments
 (0)