From cb85cb90074f92a7784055d97a14669973029487 Mon Sep 17 00:00:00 2001 From: ilevyor Date: Fri, 5 Apr 2024 11:37:54 -0400 Subject: [PATCH 1/2] test --- crates/core/src/test.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crates/core/src/test.rs b/crates/core/src/test.rs index 304529e7e..18367133c 100644 --- a/crates/core/src/test.rs +++ b/crates/core/src/test.rs @@ -13509,3 +13509,34 @@ remove_unused_imports()"# }) .unwrap(); } + +#[test] +fn preserves_python_blocks() { + run_test_expected({ + TestArgExpected { + pattern: r#" + |engine marzano(0.1) + |language python + | + |`def $method($args): $body` => `def $method($args): $body` + |"# + .trim_margin() + .unwrap(), + source: r#" + |def foo(args): + | print("bar") + | print("thing") + |"# + .trim_margin() + .unwrap(), + expected: r#" + |def foo(args): + | print("bar") + | print("thing") + |"# + .trim_margin() + .unwrap(), + } + }) + .unwrap(); +} From de81c7b005d3369dcf22e20212f3c713b698af1e Mon Sep 17 00:00:00 2001 From: ilevyor Date: Mon, 8 Apr 2024 10:05:02 -0400 Subject: [PATCH 2/2] preserve newlines when padding snippets --- crates/core/src/binding.rs | 12 +++++++++++- crates/core/src/test.rs | 4 ++-- vendor/tree-sitter-facade | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/crates/core/src/binding.rs b/crates/core/src/binding.rs index f0f7d2d66..13e83f48d 100644 --- a/crates/core/src/binding.rs +++ b/crates/core/src/binding.rs @@ -137,12 +137,22 @@ pub(crate) fn adjust_padding<'a>( }; let mut result = String::new(); let snippet = &src[range.start as usize..range.end as usize]; - let mut lines = snippet.split('\n'); + let mut lines = snippet.split('\n').peekable(); // assumes codebase uses spaces for indentation let delta: isize = (new_padding as isize) - (pad_strip_amount as isize); let padding = " ".repeat(pad_strip_amount); let new_padding = " ".repeat(new_padding); let mut index = offset; + if src[newline_index.unwrap_or_default()..range.start as usize] + .trim() + .is_empty() + && lines.peek().is_some() + { + result.push('\n'); + result.push_str(&new_padding); + adjust_ranges(substitutions, index, new_padding.len() as isize + 1); + } + result.push_str(lines.next().unwrap_or_default()); index += result.len(); for line in lines { diff --git a/crates/core/src/test.rs b/crates/core/src/test.rs index a84590188..d4a4e3767 100644 --- a/crates/core/src/test.rs +++ b/crates/core/src/test.rs @@ -13630,8 +13630,8 @@ fn preserves_python_blocks() { .unwrap(), expected: r#" |def foo(args): - | print("bar") - | print("thing") + | print("bar") + | print("thing") |"# .trim_margin() .unwrap(), diff --git a/vendor/tree-sitter-facade b/vendor/tree-sitter-facade index a26c147ce..89e307176 160000 --- a/vendor/tree-sitter-facade +++ b/vendor/tree-sitter-facade @@ -1 +1 @@ -Subproject commit a26c147cea7049a5d2c42006499371b346b52648 +Subproject commit 89e307176a1e99504a2516ee6fdc066826aa7bfd