diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-06-29 18:46:23 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-06-29 18:46:23 +0200 |
| commit | 86e35a09c3c2e18e7cd4c73b7300f5236c9aa17e (patch) | |
| tree | a313831731f2effd31b5b47d73536f88d3a58505 /src | |
| parent | 7b166968f34b077850699ff5d4aa5f604615cbee (diff) | |
odinfmt: Add breaking support for lhs
Diffstat (limited to 'src')
| -rw-r--r-- | src/odin/printer/visit.odin | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 98ab030..411a6b4 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -308,7 +308,7 @@ visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) -> ^Do } if len(v.values) > 0 { - if is_values_binary(p, v.values) { + if is_values_nestable_assign(v.values) { return cons(document, nest(p.indentation_count, group(cons_with_opl(group(lhs), group(rhs))))) } else { return cons(document, group(cons_with_nopl(group(lhs), group(rhs)))) @@ -324,10 +324,11 @@ visit_decl :: proc(p: ^Printer, decl: ^ast.Decl, called_in_stmt := false) -> ^Do } @(private) -is_values_binary :: proc(p: ^Printer, list: []^ast.Expr) -> bool { +is_values_nestable_assign :: proc(list: []^ast.Expr) -> bool { for expr in list { - if _, bin := expr.derived.(^ast.Binary_Expr); bin { - return true + #partial switch v in expr.derived { + case ^ast.Ident, ^ast.Binary_Expr, ^ast.Index_Expr, ^ast.Call_Expr, ^ast.Ternary_If_Expr, ^ast.Ternary_When_Expr, ^ast.Or_Else_Expr, ^ast.Or_Return_Expr: + return true } } return false @@ -705,19 +706,13 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener case ^Assign_Stmt: assign_document := group(cons_with_nopl(visit_exprs(p, v.lhs, {.Add_Comma, .Glue}), text(v.op.text))) - if block_stmt { - if is_values_binary(p, v.rhs) { - document = group(nest(p.indentation_count, cons_with_opl(assign_document, group(visit_exprs(p, v.rhs, {.Add_Comma}, .Assignment_Stmt))))) - } else { - document = cons_with_nopl(assign_document, group(visit_exprs(p, v.rhs, {.Add_Comma}, .Assignment_Stmt))) - } + rhs := visit_exprs(p, v.rhs, {.Add_Comma}, .Assignment_Stmt) + if is_values_nestable_assign(v.rhs) { + document = group(nest(p.indentation_count, cons_with_opl(assign_document, group(rhs)))) } else { - if is_values_binary(p, v.rhs) { - document = group(nest(p.indentation_count, cons_with_opl(assign_document, group(visit_exprs(p, v.rhs, {.Add_Comma}, .Assignment_Stmt))))) - } else { - document = cons_with_nopl(assign_document, group(visit_exprs(p, v.rhs, {.Add_Comma}, .Assignment_Stmt))) - } + document = group(cons_with_nopl(assign_document, group(rhs))) } + case ^Expr_Stmt: document = cons(document, visit_expr(p, v.expr)) case ^For_Stmt: @@ -1048,7 +1043,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = document = cons_with_nopl(document, text("{")) document = cons(document, text("}")) } else { - document = cons_with_opl(document, visit_begin_brace(p, v.pos, .Generic)) + document = cons_with_nopl(document, visit_begin_brace(p, v.pos, .Generic)) set_source_position(p, v.variants[0].pos) document = cons(document, nest(p.indentation_count, cons(newline_position(p, 1, v.pos), visit_union_exprs(p, v^, {.Add_Comma, .Trailing, .Enforce_Newline})))) set_source_position(p, v.end) @@ -1177,7 +1172,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = document = text_token(p, v.tok) if len(v.args) != 0 { - document = cons_with_opl(document, visit_begin_brace(p, v.pos, .Generic)) + document = cons_with_nopl(document, visit_begin_brace(p, v.pos, .Generic)) set_source_position(p, v.args[0].pos) document = cons(document, nest(p.indentation_count, cons(newline_position(p, 1, v.args[0].pos), visit_exprs(p, v.args, {.Add_Comma, .Trailing, .Enforce_Newline})))) document = cons(document, visit_end_brace(p, v.end, 1)) @@ -1195,7 +1190,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = document = cons_with_nopl(document, visit_expr(p, v.type)) if matrix_type, ok := v.type.derived.(^ast.Matrix_Type); ok && len(v.elems) > 0 && is_matrix_type_constant(matrix_type) { - document = cons_with_opl(document, visit_begin_brace(p, v.pos, .Generic)) + document = cons_with_nopl(document, visit_begin_brace(p, v.pos, .Generic)) set_source_position(p, v.open) document = cons(document, nest(p.indentation_count, cons(newline_position(p, 1, v.elems[0].pos), visit_matrix_comp_lit(p, v, matrix_type)))) @@ -1208,13 +1203,13 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = } if (should_align_comp_lit(p, v^) || contains_comments_in_range(p, v.pos, v.end)) && (called_from == .Value_Decl || called_from == .Assignment_Stmt) && len(v.elems) != 0 { - document = cons_with_opl(document, visit_begin_brace(p, v.pos, .Generic)) + document = cons_with_nopl(document, visit_begin_brace(p, v.pos, .Generic)) set_source_position(p, v.open) document = cons(document, nest(p.indentation_count, cons(newline_position(p, 1, v.elems[0].pos), visit_comp_lit_exprs(p, v^, {.Add_Comma, .Trailing, .Enforce_Newline})))) set_source_position(p, v.end) - document = cons(document, cons(newline(1), text_position(p, "}", v.end))) + document = cons(document, cons(newline(1), text_position(p, "}", v.end))) } else { document = cons(document, text("{")) document = cons(document, nest(p.indentation_count, cons(break_with(""), visit_exprs(p, v.elems, {.Add_Comma, .Group})))) |