diff --git a/crates/organize/src/import.rs b/crates/organize/src/import.rs index 79013ed9..b5fe841d 100644 --- a/crates/organize/src/import.rs +++ b/crates/organize/src/import.rs @@ -562,6 +562,7 @@ fn add_outline(doc: &mut Document, marks: &[Mark<'_>]) -> Result<(), OrganizeErr } let outlines = doc.add(Object::Null); let items: Vec = marks.iter().map(|_| doc.add(Object::Null)).collect(); + let (Some(&first_item), Some(&last_item)) = (items.first(), items.last()) else { return Ok(()) }; for (i, ((title, page, src, page_map), r)) in marks.iter().zip(&items).enumerate() { let mut d = Dict::new(); d.set(b"Title".to_vec(), Object::String(printcraft_cos::PdfString::text(title))); @@ -589,8 +590,8 @@ fn add_outline(doc: &mut Document, marks: &[Mark<'_>]) -> Result<(), OrganizeErr } let mut o = Dict::new(); o.set(b"Type".to_vec(), Object::name("Outlines")); - o.set(b"First".to_vec(), Object::Ref(items[0])); - o.set(b"Last".to_vec(), Object::Ref(*items.last().expect("non-empty"))); + o.set(b"First".to_vec(), Object::Ref(first_item)); + o.set(b"Last".to_vec(), Object::Ref(last_item)); o.set(b"Count".to_vec(), Object::Int(items.len() as i64)); doc.set(outlines, Object::Dict(o)); let root = doc.root().ok_or(OrganizeError::NoPageTree)?; diff --git a/crates/organize/src/labels.rs b/crates/organize/src/labels.rs index 50a0eed0..8f406c0b 100644 --- a/crates/organize/src/labels.rs +++ b/crates/organize/src/labels.rs @@ -212,7 +212,8 @@ pub fn number_pages(doc: &mut Document, from: usize, to: usize, style: LabelStyl if old.first().is_none_or(|r| r.start > 0) { old.insert(0, default_range()); } - let at = |p: usize| old.iter().rev().find(|r| r.start <= p).cloned().expect("a range starts at 0"); + // `old` starts at page 0, so a range is always found. + let at = |p: usize| old.iter().rev().find(|r| r.start <= p).cloned().unwrap_or_else(default_range); let mut ranges: Vec = old.iter().filter(|r| r.start < from).cloned().collect(); ranges.push(LabelRange { start: from, style, prefix: prefix.to_string(), first: first.max(1) }); if to + 1 < n { diff --git a/crates/organize/src/lib.rs b/crates/organize/src/lib.rs index 9f57f9cd..6d34d797 100644 --- a/crates/organize/src/lib.rs +++ b/crates/organize/src/lib.rs @@ -9,6 +9,8 @@ //! save drops them; an incremental save leaves them untouched). Flat trees are valid for any //! page count and are what most producers write for small documents. +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] + use printcraft_cos::{Dict, Document, ObjRef, Object, PdfString}; mod boxes; diff --git a/crates/organize/src/outline.rs b/crates/organize/src/outline.rs index 82e78195..50a4d2d4 100644 --- a/crates/organize/src/outline.rs +++ b/crates/organize/src/outline.rs @@ -112,7 +112,8 @@ fn resolve_path(doc: &Document, path: &[usize]) -> Result<(ObjRef, ObjRef)> { } parent = r; } - unreachable!("the loop returns on the last index") + // The loop returns on the last index. + Err(OutlineError::NoSuchBookmark(path.to_vec())) } /// The object that holds children at `parent_path` (`[]` = the outline root, created if needed).