diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-04-28 12:55:45 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2024-04-28 12:55:45 +0200 |
| commit | 4e4cfc282501dc22fd9c2df1dca30671c037c3eb (patch) | |
| tree | a97358f8d82007f87d995fbd99eaf3110e38ef5a | |
| parent | 490c163ca462991992157268a3dcfa379add3a69 (diff) | |
Fix issues with comments in case clause
| -rw-r--r-- | src/odin/printer/visit.odin | 32 | ||||
| -rw-r--r-- | tools/odinfmt/tests/.snapshots/if.odin | 8 | ||||
| -rw-r--r-- | tools/odinfmt/tests/if.odin | 12 |
3 files changed, 43 insertions, 9 deletions
diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index c75d470..8354aab 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -529,7 +529,14 @@ is_values_nestable_assign :: proc(list: []^ast.Expr) -> bool { for expr in list { #partial switch v in expr.derived { - case ^ast.Ident, ^ast.Binary_Expr, ^ast.Index_Expr, ^ast.Selector_Expr, ^ast.Paren_Expr, ^ast.Ternary_If_Expr, ^ast.Ternary_When_Expr, ^ast.Or_Else_Expr: + case ^ast.Ident, + ^ast.Binary_Expr, + ^ast.Index_Expr, + ^ast.Selector_Expr, + ^ast.Paren_Expr, + ^ast.Ternary_If_Expr, + ^ast.Ternary_When_Expr, + ^ast.Or_Else_Expr: return true } } @@ -1157,16 +1164,14 @@ visit_stmt :: proc( if v.init != nil && is_value_decl_statement_ending_with_call(v.init) || v.init != nil && is_assign_statement_ending_with_call(v.init) || v.cond != nil && v.init == nil && is_value_expression_call(v.cond) { + break_end_document := + hang(3, end_document) if v.init != nil else end_document document = cons( document, group( cons( begin_document, - if_break_or( - end_document, - hang(3, end_document), - "init", - ), + if_break_or(end_document, break_end_document, "init"), ), ), ) @@ -1239,10 +1244,21 @@ visit_stmt :: proc( case ^Case_Clause: document = cons(document, text("case")) - if v.list != nil { + + if v.list != nil && len(v.list) > 0 { + options: List_Options = {.Add_Comma} + + if contains_comments_in_range( + p, + v.list[0].pos, + v.list[len(v.list) - 1].end, + ) { + options |= {.Enforce_Newline} + } + document = cons_with_nopl( document, - align(group(visit_exprs(p, v.list, {.Add_Comma}))), + align(group(visit_exprs(p, v.list, options))), ) } diff --git a/tools/odinfmt/tests/.snapshots/if.odin b/tools/odinfmt/tests/.snapshots/if.odin index e1c05d1..58dd01c 100644 --- a/tools/odinfmt/tests/.snapshots/if.odin +++ b/tools/odinfmt/tests/.snapshots/if.odin @@ -22,4 +22,12 @@ if_three :: proc() { position_context.position, ) { } + + if contains_comments_in_range( + p, + v.list[0].pos, + v.list[len(v.list) - 1].end, + ) { + + } } diff --git a/tools/odinfmt/tests/if.odin b/tools/odinfmt/tests/if.odin index 26ada3d..b05767e 100644 --- a/tools/odinfmt/tests/if.odin +++ b/tools/odinfmt/tests/if.odin @@ -16,4 +16,14 @@ if_three :: proc() { position_context.binary.raaaaaaaaaaaaaaaaaaaight, position_context.position) { } -}
\ No newline at end of file + + if contains_comments_in_range( + p, + v.list[0].pos, + v.list[len(v.list) - 1].end, + ) { + + } +} + + |