From cad912bac0e9ff3ca6b4d23629b8490f9548d4b5 Mon Sep 17 00:00:00 2001 From: Brad Lewis <22850972+BradLewis@users.noreply.github.com> Date: Sun, 7 Sep 2025 09:26:03 -0400 Subject: Fix issue with the formatter stripping semicolons with globally scoped declarations --- src/odin/printer/printer.odin | 7 +++++++ src/odin/printer/visit.odin | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/odin/printer/printer.odin b/src/odin/printer/printer.odin index aa3a771..227f909 100644 --- a/src/odin/printer/printer.odin +++ b/src/odin/printer/printer.odin @@ -232,8 +232,12 @@ print_file :: proc(p: ^Printer, file: ^ast.File) -> string { // Keep track of the first import in a row, to sort them later. import_group_start: Maybe(int) + prev_decl: ^ast.Stmt for decl, i in file.decls { decl := cast(^ast.Decl)decl + defer { + prev_decl = decl + } if imp, is_import := decl.derived.(^ast.Import_Decl); p.config.sort_imports && is_import { // First import in this group. @@ -257,6 +261,9 @@ print_file :: proc(p: ^Printer, file: ^ast.File) -> string { import_group_start = nil } + if prev_decl != nil && prev_decl.end.line == decl.pos.line && decl.pos.line not_in p.disabled_lines { + p.document = cons(p.document, break_with("; ")) + } p.document = cons(p.document, visit_decl(p, decl)) } } diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 2eef327..96890f3 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -2016,7 +2016,7 @@ visit_block_stmts :: proc(p: ^Printer, stmts: []^ast.Stmt) -> ^Document { for stmt, i in stmts { last_index := max(0, i - 1) if stmts[last_index].end.line == stmt.pos.line && i != 0 && stmt.pos.line not_in p.disabled_lines { - document = cons(document, break_with(";")) + document = group(cons(document, break_with("; "))) } if p.force_statement_fit { -- cgit v1.2.3