diff --git a/cmd/cmd.go b/cmd/cmd.go index 4ef258c..af10f62 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -237,7 +237,7 @@ func fix(fixer *keepsorted.Fixer, filenames []string, modifiedLines []keepsorted if warn.Lines.Start == warn.Lines.End { log = log.Int("line", warn.Lines.Start) } else { - log = log.Int("start", warn.Lines.Start).Int("end", warn.Lines.End) + log = log.Ints("[start,end]", []int{warn.Lines.Start, warn.Lines.End}) } log.Msg(warn.Message) } diff --git a/goldens/skip_lines.err b/goldens/skip_lines.err new file mode 100644 index 0000000..b407181 --- /dev/null +++ b/goldens/skip_lines.err @@ -0,0 +1,4 @@ +WRN block start is at or after end, possibly due to skip_lines [6+1,7-0] [start,end]=[6,7] +WRN block start is at or after end, possibly due to skip_lines [10+0,11-1] [start,end]=[10,11] +WRN block start is at or after end, possibly due to skip_lines [23+10,27-0] [start,end]=[23,27] +exit status 1 diff --git a/goldens/skip_lines.in b/goldens/skip_lines.in index a01443e..f28fc5f 100644 --- a/goldens/skip_lines.in +++ b/goldens/skip_lines.in @@ -1,7 +1,15 @@ -Skip lines with an empty block: +Skip no lines with an empty block is ok: +keep-sorted-test start skip_lines=0 +keep-sorted-test end + +Skip lines at start with an empty block: keep-sorted-test start skip_lines=1 keep-sorted-test end +Skip lines at end with an empty block: +keep-sorted-test start skip_lines=-1 +keep-sorted-test end + Skip two lines: // keep-sorted-test start skip_lines=2 foo @@ -11,7 +19,7 @@ b a // keep-sorted-test end -Number of skipped lines is greater than block size, so block is ignored: +Number of skipped lines is greater than block size, so skip_lines causes warning: // keep-sorted-test start skip_lines=10 z y diff --git a/goldens/skip_lines.out b/goldens/skip_lines.out index 1c3405b..b0e12c5 100644 --- a/goldens/skip_lines.out +++ b/goldens/skip_lines.out @@ -1,7 +1,15 @@ -Skip lines with an empty block: +Skip no lines with an empty block is ok: +keep-sorted-test start skip_lines=0 +keep-sorted-test end + +Skip lines at start with an empty block: keep-sorted-test start skip_lines=1 keep-sorted-test end +Skip lines at end with an empty block: +keep-sorted-test start skip_lines=-1 +keep-sorted-test end + Skip two lines: // keep-sorted-test start skip_lines=2 foo @@ -11,7 +19,7 @@ b c // keep-sorted-test end -Number of skipped lines is greater than block size, so block is ignored: +Number of skipped lines is greater than block size, so skip_lines causes warning: // keep-sorted-test start skip_lines=10 z y diff --git a/keepsorted/block.go b/keepsorted/block.go index 35a5148..9ff284b 100644 --- a/keepsorted/block.go +++ b/keepsorted/block.go @@ -15,6 +15,7 @@ package keepsorted import ( + "fmt" "slices" "strings" @@ -116,6 +117,10 @@ func (f *Fixer) newBlocks(filename string, lines []string, offset int, include f start.index += opts.startOffset() endIndex += opts.endOffset() if start.index >= endIndex { + warnings = append(warnings, finding(filename, start.index-opts.startOffset()+offset, endIndex-opts.endOffset()+offset, + fmt.Sprintf("block start is at or after end, possibly due to skip_lines [%d+%d,%d-%d]", + start.index-opts.startOffset()+offset, opts.startOffset(), endIndex-opts.endOffset()+offset, -opts.endOffset())), + ) continue }