diff --git a/crates/core/src/inline_snippets.rs b/crates/core/src/inline_snippets.rs index da8f9409e..f231b342b 100644 --- a/crates/core/src/inline_snippets.rs +++ b/crates/core/src/inline_snippets.rs @@ -234,28 +234,12 @@ pub(crate) fn inline_sorted_snippets_with_offset( } } - let mut trailing_comma_lines = vec![]; - for (range, snippet) in replacements { let range = adjust_range(&range.effective_range(), offset, &code)?; if range.start > code.len() || range.end > code.len() { bail!("Range {:?} is out of bounds for code:\n{}\n", range, code); } - code.replace_range(range.clone(), snippet); - - // Check if the replacement results in any lines containing just a single comma - let line_start = code[..range.start].rfind('\n').map_or(0, |pos| pos + 1); - let line_end = code[range.start..].find('\n').map_or(code.len(), |pos| range.start + pos); - - let line_content = code[line_start..line_end].trim(); - if line_content == "," { - trailing_comma_lines.push(line_start..line_end+1); - } - } - - // Remove lines containing a trailing comma - for range in trailing_comma_lines { - code.replace_range(range, ""); + code.replace_range(range, snippet); } Ok((code, output_ranges, original_ranges)) @@ -316,6 +300,27 @@ fn delete_hanging_comma( replacements: &mut [(EffectRange, String)], offset: usize, ) -> Result<(String, Vec)> { + // Handle the case when after applying replacements, a single comma + // gets left behind on a single line + let mut temp_code = code.to_string(); + for (range, snippet) in replacements.iter_mut() { + let adjusted_range = adjust_range(&range.effective_range(), offset, &temp_code)?; + if adjusted_range.start > temp_code.len() || adjusted_range.end > temp_code.len() { + bail!("Range {:?} is out of bounds for code:\n{}\n", adjusted_range, temp_code); + } + + temp_code.replace_range(adjusted_range.clone(), snippet); + + let line_start = temp_code[..adjusted_range.start].rfind('\n').map_or(0, |pos| pos + 1); + let line_end = temp_code[adjusted_range.start..].find('\n').map_or(temp_code.len(), |pos| adjusted_range.start + pos); + let line_content = temp_code[line_start..line_end].trim(); + + if line_content == "," { + // inclusion of "," index in replacements + range.range.end += 1; + } + } + let deletion_ranges = replacements .iter() .filter_map(|r| { diff --git a/crates/core/src/test.rs b/crates/core/src/test.rs index 6dfb908e7..a47e47bb7 100644 --- a/crates/core/src/test.rs +++ b/crates/core/src/test.rs @@ -12094,6 +12094,7 @@ fn trailing_comma_after_argument_removal() { main_score="f1", domains=["News"], text_creation="created", + reference="https://huggingface.co/datasets/jupyterjazz/tbilisi-city-hall-titles", date=("2024-05-02", "2024-05-03"), form=["written"],