From 3dd9188bd235c90a85c939f594935fdc63be8cb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 22 May 2025 07:20:09 -0700 Subject: [PATCH 1/3] lint --- src/types.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/types.rs b/src/types.rs index 52eb869..7b716c4 100644 --- a/src/types.rs +++ b/src/types.rs @@ -963,7 +963,6 @@ impl SourceMap { } /// Turns a list of tokens into a list of ranges, using the provided `key` function to determine the order of the tokens. - #[allow(clippy::ptr_arg)] fn create_ranges( tokens: &mut [RawToken], key: fn(&RawToken) -> (u32, u32), From d8448788cba336ebddf4d1b5697239d69d425aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 22 May 2025 07:23:14 -0700 Subject: [PATCH 2/3] avoid clone --- src/types.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/types.rs b/src/types.rs index 7b716c4..7533625 100644 --- a/src/types.rs +++ b/src/types.rs @@ -963,12 +963,7 @@ impl SourceMap { } /// Turns a list of tokens into a list of ranges, using the provided `key` function to determine the order of the tokens. - fn create_ranges( - tokens: &mut [RawToken], - key: fn(&RawToken) -> (u32, u32), - ) -> Vec> { - tokens.sort_unstable_by_key(key); - + fn create_ranges(tokens: &[RawToken], key: fn(&RawToken) -> (u32, u32)) -> Vec> { let mut token_iter = tokens.iter().peekable(); let mut ranges = Vec::new(); @@ -993,9 +988,20 @@ impl SourceMap { // These line/column numbers are the `dst_line/col` for // the `self` tokens and `src_line/col` for the `adjustment` tokens. let mut self_tokens = std::mem::take(&mut self.tokens); - let original_ranges = create_ranges(&mut self_tokens, |t| (t.dst_line, t.dst_col)); - let mut adjustment_tokens = adjustment.tokens.clone(); - let adjustment_ranges = create_ranges(&mut adjustment_tokens, |t| (t.src_line, t.src_col)); + self_tokens.sort_unstable_by_key(|t| (t.dst_line, t.dst_col)); + let original_ranges = create_ranges(&self_tokens, |t| (t.dst_line, t.dst_col)); + + let adjustment_tokens = if adjustment + .tokens + .is_sorted_by_key(|t| (t.src_line, t.src_col)) + { + Cow::Borrowed(&adjustment.tokens) + } else { + let mut adjustment_tokens = adjustment.tokens.clone(); + adjustment_tokens.sort_unstable_by_key(|t| (t.src_line, t.src_col)); + Cow::Owned(adjustment_tokens) + }; + let adjustment_ranges = create_ranges(&adjustment_tokens, |t| (t.src_line, t.src_col)); let mut original_ranges_iter = original_ranges.iter(); From d4e28b103cf5e2304914ccfa20844f3b776ef94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EB=8F=99=EC=9C=A4=20=28Donny=29?= Date: Thu, 22 May 2025 07:23:39 -0700 Subject: [PATCH 3/3] fn key --- src/types.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/types.rs b/src/types.rs index 7533625..7afa2e9 100644 --- a/src/types.rs +++ b/src/types.rs @@ -987,18 +987,19 @@ impl SourceMap { // We want to compare `self` and `adjustment` tokens by line/column numbers in the "original source" file. // These line/column numbers are the `dst_line/col` for // the `self` tokens and `src_line/col` for the `adjustment` tokens. + fn key(t: &RawToken) -> (u32, u32) { + (t.dst_line, t.dst_col) + } + let mut self_tokens = std::mem::take(&mut self.tokens); - self_tokens.sort_unstable_by_key(|t| (t.dst_line, t.dst_col)); - let original_ranges = create_ranges(&self_tokens, |t| (t.dst_line, t.dst_col)); + self_tokens.sort_unstable_by_key(key); + let original_ranges = create_ranges(&self_tokens, key); - let adjustment_tokens = if adjustment - .tokens - .is_sorted_by_key(|t| (t.src_line, t.src_col)) - { + let adjustment_tokens = if adjustment.tokens.is_sorted_by_key(key) { Cow::Borrowed(&adjustment.tokens) } else { let mut adjustment_tokens = adjustment.tokens.clone(); - adjustment_tokens.sort_unstable_by_key(|t| (t.src_line, t.src_col)); + adjustment_tokens.sort_unstable_by_key(key); Cow::Owned(adjustment_tokens) }; let adjustment_ranges = create_ranges(&adjustment_tokens, |t| (t.src_line, t.src_col));