Another attempt at invisible delim fixes

fix_python_re_indent
Wilfred Hughes 2025-03-18 00:22:14 +07:00
parent af3c659a93
commit e101e76cb1
2 changed files with 64 additions and 6 deletions

@ -92,7 +92,7 @@ sample_files/hcl_1.hcl sample_files/hcl_2.hcl
7c2aaa3a8b401bc007817f5dd608946d -
sample_files/hello_world_1.smali sample_files/hello_world_2.smali
c9acab2700d02e2898431523e2a581b9 -
c3b7b48ed080cf8a6ccc4777e26cfeda -
sample_files/helpful_1.el sample_files/helpful_2.el
056471124ae2e582942e214ce9222477 -
@ -137,7 +137,7 @@ sample_files/julia_1.jl sample_files/julia_2.jl
55aa779597d1f6afa681af267706c9b6 -
sample_files/load_1.js sample_files/load_2.js
8defc3cea4d10a8db826973352abe2a1 -
c67bbb87220ab67056cead6ff97bb1ca -
sample_files/long_line_1.txt sample_files/long_line_2.txt
7fc50bd547f0c20fda89a1931e5eb61e -
@ -167,7 +167,7 @@ sample_files/multiline_string_eof_1.yml sample_files/multiline_string_eof_2.yml
ba8a8e7ed2f4b519feaa391fd05c95fe -
sample_files/nest_1.rs sample_files/nest_2.rs
d3a799fe2cd9d81aa251c96af5cd9711 -
46755317312db800a54edd6dbad0d4be -
sample_files/nested_slider_1.el sample_files/nested_slider_2.el
f68f8b8c09afb86965d5e54519f2d881 -
@ -248,7 +248,7 @@ sample_files/slider_at_end_1.json sample_files/slider_at_end_2.json
cb370f1c0ccc5e155743330629f899f0 -
sample_files/slow_1.rs sample_files/slow_2.rs
7a74881e854d68763769991c6445698a -
010d036c12f3ca262131d7e29a2c67ba -
sample_files/small_1.js sample_files/small_2.js
42506285003bb4eacdb2f8d3bd1b07bb -
@ -290,13 +290,13 @@ sample_files/typescript_1.ts sample_files/typescript_2.ts
fee7ee33d2037ad1941ba6bb5532a1db -
sample_files/typing_1.ml sample_files/typing_2.ml
975a97f2a6798abd1e4c0ce219e183fd -
f28741fa8ff709875f84561724efa240 -
sample_files/utf16_1.py sample_files/utf16_2.py
3bcee785d4cebc38a42eafe49a198b52 -
sample_files/vhdl_1.vhd sample_files/vhdl_2.vhd
ca98b4d14fc21e0f04cf24aeb3d2526c -
a40f478f9fd358189b60cb6f9f905e81 -
sample_files/whitespace_1.tsx sample_files/whitespace_2.tsx
ac8b1a89ac26333f2d4e9433b2ca3958 -

@ -47,6 +47,64 @@ pub(crate) fn fix_all_sliders<'a>(
fix_all_sliders_one_step(nodes, change_map);
fix_all_nested_sliders(language, nodes, change_map);
fix_invisible_delims(nodes, change_map);
}
/// Handle lists with no visible delimiters, where we still want to
/// highlighting something when a parent's node is moved into us. This
/// occurs the most when diffing python.
fn fix_invisible_delims<'a>(nodes: &[&'a Syntax<'a>], change_map: &mut ChangeMap<'a>) {
for node in nodes {
let List {
open_content,
children,
close_content,
..
} = node
else {
continue;
};
let Some(change_kind) = change_map.get(node) else {
continue;
};
if open_content == "" && close_content == "" && matches!(change_kind, Novel) {
let mut all_children_unchanged = true;
for child in children {
let Some(child_change) = change_map.get(child) else {
continue;
};
if !matches!(child_change, Unchanged(_)) {
all_children_unchanged = false;
break;
}
}
if let Some(child) = children.first() {
if let Atom { is_named, .. } = child {
if !*is_named && all_children_unchanged {
change_unchanged_to_novel(child, change_map);
}
}
}
}
fix_invisible_delims(children, change_map);
}
}
fn change_unchanged_to_novel<'a>(node: &'a Syntax<'a>, change_map: &mut ChangeMap<'a>) {
let Some(change) = change_map.get(node) else {
return;
};
let Unchanged(opposite_node) = change else {
return;
};
change_map.insert(node, Novel);
change_map.insert(opposite_node, Novel);
}
/// Should nester slider correction prefer the inner or outer