diff options
author | Thomas Otto <th1000s@posteo.net> | 2021-10-16 14:27:01 +0200 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2021-10-18 10:41:12 -0400 |
commit | cd50d301844991da65eaf613f753296217fb4cda (patch) | |
tree | 3d0f28de5d5476ba71593cd189782fb042f770ab /src/features | |
parent | 07228cc40809911c8694b85f0bfaa764156a2a74 (diff) |
Store line number prefix/suffix as SmolStr
Diffstat (limited to 'src/features')
-rw-r--r-- | src/features/line_numbers.rs | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs index ff0a58ef..eee57b03 100644 --- a/src/features/line_numbers.rs +++ b/src/features/line_numbers.rs @@ -205,7 +205,7 @@ impl<'a> LineNumbersData<'a> { #[allow(clippy::too_many_arguments)] fn format_and_paint_line_number_field<'a>( - format_data: &[format::FormatStringPlaceholderData<'a>], + format_data: &'a [format::FormatStringPlaceholderData<'a>], style: &Style, minus_number: Option<usize>, plus_number: Option<usize>, @@ -218,7 +218,7 @@ fn format_and_paint_line_number_field<'a>( let mut ansi_strings = Vec::new(); let mut suffix = ""; for placeholder in format_data { - ansi_strings.push(style.paint(placeholder.prefix)); + ansi_strings.push(style.paint(placeholder.prefix.as_str())); let alignment_spec = placeholder.alignment_spec.unwrap_or("^"); let width = if let Some(placeholder_width) = placeholder.width { @@ -245,7 +245,7 @@ fn format_and_paint_line_number_field<'a>( None => {} Some(_) => unreachable!(), } - suffix = placeholder.suffix; + suffix = placeholder.suffix.as_str(); } ansi_strings.push(style.paint(suffix)); ansi_strings @@ -284,11 +284,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("{nm}", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "", + prefix: "".into(), placeholder: Some("nm"), alignment_spec: None, width: None, - suffix: "", + suffix: "".into(), prefix_len: 0, suffix_len: 0, }] @@ -300,11 +300,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("{np:4}", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "", + prefix: "".into(), placeholder: Some("np"), alignment_spec: None, width: Some(4), - suffix: "", + suffix: "".into(), prefix_len: 0, suffix_len: 0, }] @@ -316,11 +316,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("{np:>4}", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "", + prefix: "".into(), placeholder: Some("np"), alignment_spec: Some(">"), width: Some(4), - suffix: "", + suffix: "".into(), prefix_len: 0, suffix_len: 0, }] @@ -332,11 +332,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("{np:_>4}", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "", + prefix: "".into(), placeholder: Some("np"), alignment_spec: Some(">"), width: Some(4), - suffix: "", + suffix: "".into(), prefix_len: 0, suffix_len: 0, }] @@ -348,11 +348,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("__{np:_>4}@@", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "__", + prefix: "__".into(), placeholder: Some("np"), alignment_spec: Some(">"), width: Some(4), - suffix: "@@", + suffix: "@@".into(), prefix_len: 2, suffix_len: 2, }] @@ -368,20 +368,20 @@ pub mod tests { ), vec![ format::FormatStringPlaceholderData { - prefix: "__", + prefix: "__".into(), placeholder: Some("nm"), alignment_spec: Some("<"), width: Some(3), - suffix: "@@---{np:_>4}**", + suffix: "@@---{np:_>4}**".into(), prefix_len: 2, suffix_len: 15, }, format::FormatStringPlaceholderData { - prefix: "@@---", + prefix: "@@---".into(), placeholder: Some("np"), alignment_spec: Some(">"), width: Some(4), - suffix: "**", + suffix: "**".into(), prefix_len: 5, suffix_len: 2, } @@ -394,11 +394,11 @@ pub mod tests { assert_eq!( format::parse_line_number_format("__@@---**", &LINE_NUMBERS_PLACEHOLDER_REGEX), vec![format::FormatStringPlaceholderData { - prefix: "", + prefix: "".into(), placeholder: None, alignment_spec: None, width: None, - suffix: "__@@---**", + suffix: "__@@---**".into(), prefix_len: 0, suffix_len: 9, },] @@ -406,6 +406,27 @@ pub mod tests { } #[test] + fn test_line_number_format_long() { + let long = "line number format which is too large for SSO"; + assert!(long.len() > std::mem::size_of::<smol_str::SmolStr>()); + assert_eq!( + format::parse_line_number_format( + &format!("{long}{{nm}}{long}", long = long), + &LINE_NUMBERS_PLACEHOLDER_REGEX + ), + vec![format::FormatStringPlaceholderData { + prefix: long.into(), + prefix_len: long.len(), + placeholder: Some("nm"), + alignment_spec: None, + width: None, + suffix: long.into(), + suffix_len: long.len(), + },] + ) + } + + #[test] fn test_line_number_placeholder_width_one() { use format::parse_line_number_format; |