From dd1e2e693ccac03abdbbe704a4b272e0b03507fe Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Thu, 25 Jun 2026 16:32:15 +0200 Subject: [PATCH] feat(cli): print context for multiline diagnostics --- midas/cli/utils.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/midas/cli/utils.py b/midas/cli/utils.py index 38ceaee..9dc3802 100644 --- a/midas/cli/utils.py +++ b/midas/cli/utils.py @@ -68,7 +68,7 @@ class DiagnosticPrinter: loc: Location = diagnostic.location if loc.lineno != loc.end_lineno: - print(diagnostic) + self.print_multiline(lines, diagnostic, indent) return start_offset: int = loc.col_offset @@ -95,3 +95,27 @@ class DiagnosticPrinter: print(indent_str + before + subject + after) print(indent_str + cursor) print() + + def print_multiline( + self, all_lines: list[str], diagnostic: Diagnostic, indent: int = 4 + ): + loc: Location = diagnostic.location + lines: list[str] = all_lines[loc.lineno - 1 : loc.end_lineno] + + start_offset: int = loc.col_offset + end_offset: int = loc.end_col_offset or (start_offset + 1) + + indent_str: str = " " * indent + color: int = self.COLORS.get(diagnostic.type, Ansi.WHITE) + res: str = indent_str + lines[0][:start_offset] + res += Ansi.FG(color) + lines[0][start_offset:] + for line in lines[1:-1]: + res += "\n" + indent_str + line + res += "\n" + indent_str + lines[-1][:end_offset] + res += Ansi.RESET + lines[-1][end_offset:] + + print(diagnostic.location_str + ":") + print(res) + print() + print(Ansi.FG(color) + diagnostic.message + Ansi.RESET) + print()