From ac0452e4cc15c22b83b9651617b00a04de0d6fe8 Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Wed, 2 Nov 2022 09:47:44 +0100 Subject: Fix disabled comment issues --- src/odin/printer/visit.odin | 10 ++++++---- tools/odinfmt/tests/.snapshots/comments.odin | 16 ++++++++++++++++ tools/odinfmt/tests/comments.odin | 16 ++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 85ab6b7..e02f1a0 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -194,7 +194,6 @@ visit_comments :: proc(p: ^Printer, pos: tokenizer.Pos) -> (^Document, int) { @(private) visit_disabled :: proc(p: ^Printer, node: ^ast.Node) -> ^Document { - if node.pos.line not_in p.disabled_lines { return empty() } @@ -209,7 +208,10 @@ visit_disabled :: proc(p: ^Printer, node: ^ast.Node) -> ^Document { return empty() } - move := move_line(p, node.pos) + pos_one_line_before := node.pos + pos_one_line_before.line -= 1 + + move := cons(move_line(p, pos_one_line_before), escape_nest(move_line(p, node.pos))) for comment_before_or_in_line(p, node.end.line) { next_comment_group(p) @@ -218,7 +220,7 @@ visit_disabled :: proc(p: ^Printer, node: ^ast.Node) -> ^Document { p.source_position = node.end p.disabled_until_line = disabled_info.end_line - return cons(escape_nest(move), text(disabled_info.text)) + return cons(move, text(disabled_info.text)) } @(private) @@ -2208,7 +2210,7 @@ visit_block_stmts :: proc( for stmt, i in stmts { last_index := max(0, i - 1) - if stmts[last_index].end.line == stmt.pos.line && i != 0 { + if stmts[last_index].end.line == stmt.pos.line && i != 0 && stmt.pos.line not_in p.disabled_lines { document = cons(document, break_with(";")) } diff --git a/tools/odinfmt/tests/.snapshots/comments.odin b/tools/odinfmt/tests/.snapshots/comments.odin index 5d7ffb7..7063971 100644 --- a/tools/odinfmt/tests/.snapshots/comments.odin +++ b/tools/odinfmt/tests/.snapshots/comments.odin @@ -46,3 +46,19 @@ empty_odin_fmt_block :: proc() { //a := 10 //odinfmt: enable } + + +disabled_comment_after_normal_comments :: proc() { + // comment + // hello + + //odinfmt: disable + return true + //odinfmt: enable +} + +disabled_comments_with_multiple_statements_one_lined :: proc() { + //odinfmt: disable + i:int;b:int + //odinfmt: enable +} diff --git a/tools/odinfmt/tests/comments.odin b/tools/odinfmt/tests/comments.odin index 6d0eb6f..0d5e547 100644 --- a/tools/odinfmt/tests/comments.odin +++ b/tools/odinfmt/tests/comments.odin @@ -46,3 +46,19 @@ empty_odin_fmt_block :: proc() { //a := 10 //odinfmt: enable } + + +disabled_comment_after_normal_comments :: proc() { + // comment + // hello + + //odinfmt: disable + return true + //odinfmt: enable +} + +disabled_comments_with_multiple_statements_one_lined :: proc() { + //odinfmt: disable + i:int;b:int + //odinfmt: enable +} \ No newline at end of file -- cgit v1.2.3