From a5fa6034532da62881f747a74e2bbc1f58886265 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 3 Sep 2025 14:39:41 -0500 Subject: [PATCH] refactor(cli): Extract snippet creation --- crates/typos-cli/src/bin/typos-cli/report.rs | 33 ++++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/crates/typos-cli/src/bin/typos-cli/report.rs b/crates/typos-cli/src/bin/typos-cli/report.rs index 70552679..38679031 100644 --- a/crates/typos-cli/src/bin/typos-cli/report.rs +++ b/crates/typos-cli/src/bin/typos-cli/report.rs @@ -4,6 +4,7 @@ use std::borrow::Cow; use std::io::Write as _; use std::sync::{atomic, Mutex}; +use annotate_snippets::Annotation; use annotate_snippets::AnnotationKind; use annotate_snippets::Group; use annotate_snippets::Level; @@ -162,15 +163,11 @@ fn typo_to_group<'t>(msg: &'t Typo<'t>) -> Group<'t> { Some(Context::File(context)) => { let path = context.path.as_os_str().to_string_lossy(); let line = String::from_utf8_lossy(msg.buffer.as_ref()); - let span_start = msg.byte_offset; - let span_end = span_start + msg.typo.len(); - let span = span_start..span_end; - group.element( - Snippet::source(line) - .path(path) - .line_start(context.line_num) - .annotation(AnnotationKind::Primary.span(span)), - ) + let snippet = Snippet::source(line) + .path(path) + .line_start(context.line_num); + let snippet = append_corrections(msg, 0, snippet); + group.element(snippet) } Some(Context::Path(context)) => { let path = context @@ -180,16 +177,26 @@ fn typo_to_group<'t>(msg: &'t Typo<'t>) -> Group<'t> { .join(""); let path = path.as_os_str().to_string_lossy(); let line = context.path.as_os_str().to_string_lossy(); - let span_start = msg.byte_offset + path.len(); - let span_end = span_start + msg.typo.len(); - let span = span_start..span_end; - group.element(Snippet::source(line).annotation(AnnotationKind::Primary.span(span))) + let snippet = Snippet::source(line); + let snippet = append_corrections(msg, path.len(), snippet); + group.element(snippet) } Some(_) | None => group, }; group } +fn append_corrections<'t>( + msg: &'t Typo<'t>, + offset: usize, + snippet: Snippet<'t, Annotation<'t>>, +) -> Snippet<'t, Annotation<'t>> { + let span_start = msg.byte_offset + offset; + let span_end = span_start + msg.typo.len(); + let span = span_start..span_end; + snippet.annotation(AnnotationKind::Primary.span(span)) +} + fn error_to_group<'e>(error: &'e Error<'e>) -> Group<'e> { let group = Group::with_title(Level::ERROR.primary_title(&error.msg)); match &error.context {