diff --git a/Cargo.lock b/Cargo.lock index 563a70d..3fdc389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1576,6 +1576,7 @@ dependencies = [ "typos-vars", "unicase", "unicode-segmentation", + "unicode-width", "varcon-core", "yansi", ] diff --git a/Cargo.toml b/Cargo.toml index 4756e6d..7b6c86c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,6 +91,7 @@ encoding = "0.2" kstring = { version = "2.0.0", features = ["serde"] } typed-arena = "2.0.1" maplit = "1.0" +unicode-width = "0.1.9" [dev-dependencies] assert_fs = "1.0" diff --git a/src/bin/typos-cli/report.rs b/src/bin/typos-cli/report.rs index 1eb6318..87e7e75 100644 --- a/src/bin/typos-cli/report.rs +++ b/src/bin/typos-cli/report.rs @@ -3,6 +3,8 @@ use std::io::{self, Write}; use std::sync::atomic; +use unicode_width::UnicodeWidthStr; + use typos_cli::report::{Context, Message, Report, Typo}; #[derive(Copy, Clone, Debug)] @@ -218,8 +220,11 @@ fn print_long_correction(msg: &Typo, palette: Palette) -> Result<(), std::io::Er let line_num = context.line_num.to_string(); let line_indent: String = itertools::repeat_n(" ", line_num.len()).collect(); - let hl_indent: String = itertools::repeat_n(" ", column).collect(); - let hl: String = itertools::repeat_n("^", msg.typo.len()).collect(); + let visible_column = UnicodeWidthStr::width(start.as_ref()); + let visible_len = UnicodeWidthStr::width(msg.typo); + + let hl_indent: String = itertools::repeat_n(" ", visible_column).collect(); + let hl: String = itertools::repeat_n("^", visible_len).collect(); writeln!(handle, "{} |", line_indent)?; writeln!(