Skip to content

Commit 5861d29

Browse files
committed
fix: leading comma panic
1 parent 94da74d commit 5861d29

File tree

2 files changed

+31
-11
lines changed
  • crates/lib

2 files changed

+31
-11
lines changed

crates/lib/src/rules/layout/lt08.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ SELECT a FROM plop
157157
}
158158
}
159159
} else if comma_style == "leading" {
160-
fix_point = forward_slice[comma_seg_idx].clone().into();
160+
if comma_seg_idx < forward_slice.len() {
161+
fix_point = forward_slice[comma_seg_idx].clone().into();
162+
}
161163
} else {
162164
let mut offset = 1;
163165

@@ -186,16 +188,22 @@ SELECT a FROM plop
186188
1
187189
};
188190

189-
let fixes = vec![LintFix {
190-
edit_type: fix_type,
191-
anchor: fix_point.unwrap(),
192-
edit: std::iter::repeat_n(
193-
SegmentBuilder::newline(context.tables.next_id(), "\n"),
194-
num_newlines,
195-
)
196-
.collect_vec(),
197-
source: Vec::new(),
198-
}];
191+
// Only create fixes if we have a valid fix point
192+
let fixes = if let Some(anchor) = fix_point {
193+
vec![LintFix {
194+
edit_type: fix_type,
195+
anchor,
196+
edit: std::iter::repeat_n(
197+
SegmentBuilder::newline(context.tables.next_id(), "\n"),
198+
num_newlines,
199+
)
200+
.collect_vec(),
201+
source: Vec::new(),
202+
}]
203+
} else {
204+
// Skip generating a fix if we don't have a valid anchor point
205+
Vec::new()
206+
};
199207

200208
error_buffer.push(LintResult::new(
201209
forward_slice[seg_idx].clone().into(),

crates/lib/test/fixtures/rules/std_rule_cases/LT08.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,18 @@ test_pass_column_name_definition_multiple:
205205
cte_2.var
206206
FROM cte_1, cte_2;
207207
208+
test_pass_edge_case_leading_comma:
209+
# Regression test for panic with leading comma CTE
210+
pass_str: |
211+
with x as (
212+
select 1 as a
213+
)
214+
215+
, b as ( select 2 as e)
216+
217+
select *
218+
from x, b;
219+
208220
test_fail_column_name_definition_newline:
209221
fail_str: |
210222
WITH

0 commit comments

Comments
 (0)