diff --git a/formatter/general.go b/formatter/general.go index 892649d..68e30d7 100644 --- a/formatter/general.go +++ b/formatter/general.go @@ -31,18 +31,40 @@ func (f *GeneralIssueFormatter) Format( ) string { var result strings.Builder + lineIndex := issue.Start.Line - 1 + if lineIndex < 0 { + lineIndex = 0 + } + if lineIndex >= len(snippet.Lines) { + lineIndex = len(snippet.Lines) - 1 + } + lineNumberStr := fmt.Sprintf("%d", issue.Start.Line) padding := strings.Repeat(" ", len(lineNumberStr)-1) result.WriteString(lineStyle.Sprintf(" %s|\n", padding)) - line := expandTabs(snippet.Lines[issue.Start.Line-1]) - result.WriteString(lineStyle.Sprintf("%d | ", issue.Start.Line)) - result.WriteString(line + "\n") + // line := expandTabs(snippet.Lines[issue.Start.Line-1]) + // result.WriteString(lineStyle.Sprintf("%d | ", issue.Start.Line)) + // result.WriteString(line + "\n") + + // visualColumn := calculateVisualColumn(line, issue.Start.Column) + // result.WriteString(lineStyle.Sprintf(" %s| ", padding)) + // result.WriteString(strings.Repeat(" ", visualColumn)) + // result.WriteString(messageStyle.Sprintf("^ %s\n\n", issue.Message)) + + if len(snippet.Lines) > 0 { + line := expandTabs(snippet.Lines[lineIndex]) + result.WriteString(lineStyle.Sprintf("%d | ", issue.Start.Line)) + result.WriteString(line + "\n") - visualColumn := calculateVisualColumn(line, issue.Start.Column) - result.WriteString(lineStyle.Sprintf(" %s| ", padding)) - result.WriteString(strings.Repeat(" ", visualColumn)) - result.WriteString(messageStyle.Sprintf("^ %s\n\n", issue.Message)) + visualColumn := calculateVisualColumn(line, issue.Start.Column) + result.WriteString(lineStyle.Sprintf(" %s| ", padding)) + result.WriteString(strings.Repeat(" ", visualColumn)) + result.WriteString(messageStyle.Sprintf("^ %s\n\n", issue.Message)) + } else { + result.WriteString(messageStyle.Sprintf("Unable to display line. File might be empty.\n")) + result.WriteString(messageStyle.Sprintf("Issue: %s\n\n", issue.Message)) + } return result.String() }