From 566d6be6e35194c6b50cebdb9aa1be53b4f63844 Mon Sep 17 00:00:00 2001 From: Yoni Feng <32789876+YoniFeng@users.noreply.github.com> Date: Thu, 30 Mar 2023 06:21:40 +0300 Subject: [PATCH] misc(perf): nit perf improvements (#244) --- src/handlers/graphical.rs | 2 +- src/source_impls.rs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/handlers/graphical.rs b/src/handlers/graphical.rs index 7c8685d..71df2cb 100644 --- a/src/handlers/graphical.rs +++ b/src/handlers/graphical.rs @@ -316,7 +316,7 @@ impl GraphicalReportHandler { }) .collect::>>, MietteError>>() .map_err(|_| fmt::Error)?; - let mut contexts = Vec::new(); + let mut contexts = Vec::with_capacity(contents.len()); for (right, right_conts) in labels.iter().cloned().zip(contents.iter()) { if contexts.is_empty() { contexts.push((right, right_conts)); diff --git a/src/source_impls.rs b/src/source_impls.rs index 52187cb..e43a665 100644 --- a/src/source_impls.rs +++ b/src/source_impls.rs @@ -3,6 +3,7 @@ Default trait implementations for [`SourceCode`]. */ use std::{ borrow::{Cow, ToOwned}, + collections::VecDeque, fmt::Debug, sync::Arc, }; @@ -19,7 +20,7 @@ fn context_info<'a>( let mut line_count = 0usize; let mut start_line = 0usize; let mut start_column = 0usize; - let mut before_lines_starts = Vec::new(); + let mut before_lines_starts = VecDeque::new(); let mut current_line_start = 0usize; let mut end_lines = 0usize; let mut post_span = false; @@ -34,10 +35,10 @@ fn context_info<'a>( if offset < span.offset() { // We're before the start of the span. start_column = 0; - before_lines_starts.push(current_line_start); + before_lines_starts.push_back(current_line_start); if before_lines_starts.len() > context_lines_before { start_line += 1; - before_lines_starts.remove(0); + before_lines_starts.pop_front(); } } else if offset >= span.offset() + span.len().saturating_sub(1) { // We're after the end of the span, but haven't necessarily @@ -73,7 +74,7 @@ fn context_info<'a>( } if offset >= (span.offset() + span.len()).saturating_sub(1) { - let starting_offset = before_lines_starts.first().copied().unwrap_or_else(|| { + let starting_offset = before_lines_starts.front().copied().unwrap_or_else(|| { if context_lines_before == 0 { span.offset() } else {