From 6ef409e75de2d3cbb0aef2dd19e4f32a5454941d Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Sun, 5 Dec 2021 16:53:31 +0100 Subject: odinfmt: Fix do in for stmt and tenary bug --- src/index/memory_index.odin | 12 ++++---- src/odin/printer/visit.odin | 72 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 69 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/index/memory_index.odin b/src/index/memory_index.odin index 5cc8831..1e60ec7 100644 --- a/src/index/memory_index.odin +++ b/src/index/memory_index.odin @@ -38,10 +38,6 @@ memory_index_fuzzy_search :: proc(index: ^MemoryIndex, name: string, pkgs: []str top := 20; - if name == "" { - top = 10000 - } - for _, symbol in index.collection.symbols { if !exists_in_scope(symbol.pkg, pkgs) { @@ -59,8 +55,12 @@ memory_index_fuzzy_search :: proc(index: ^MemoryIndex, name: string, pkgs: []str } sort.sort(fuzzy_sort_interface(&symbols)); - - return symbols[:min(top, len(symbols))], true; + strings.clone_to_cstring + if name == "" { + return symbols[:], true; + } else { + return symbols[:min(top, len(symbols))], true; + } } exists_in_scope :: proc(symbol_scope: string, scope: []string) -> bool { diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 4a0ef35..3f7b2de 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -507,8 +507,8 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener uses_do := false - if check_stmt, ok := v.body.derived.(Block_Stmt); ok && check_stmt.uses_do { - uses_do = true + if check_stmt, ok := v.body.derived.(Block_Stmt); ok { + uses_do = check_stmt.uses_do } if uses_do && !p.config.convert_do { @@ -641,7 +641,25 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener } document = cons(document, group(hang(4, for_document))) - document = cons_with_nopl(document, visit_stmt(p, v.body)) + + uses_do := false + + if check_stmt, ok := v.body.derived.(Block_Stmt); ok { + uses_do = check_stmt.uses_do + } + + if uses_do && !p.config.convert_do { + document = cons_with_nopl(document, cons_with_nopl(text("do"), visit_stmt(p, v.body, {}, true))) + } else { + if uses_do { + document = cons(document, newline(1)) + } + + set_source_position(p, v.body.pos) + document = cons_with_nopl(document, visit_stmt(p, v.body)) + set_source_position(p, v.body.end) + } + return document case Inline_Range_Stmt: document := move_line(p, v.pos) @@ -662,7 +680,25 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener document = cons_with_nopl(document, text("in")) document = cons_with_nopl(document, visit_expr(p, v.expr)) - document = cons_with_nopl(document, visit_stmt(p, v.body)) + + uses_do := false + + if check_stmt, ok := v.body.derived.(Block_Stmt); ok { + uses_do = check_stmt.uses_do + } + + if uses_do && !p.config.convert_do { + document = cons_with_nopl(document, cons_with_nopl(text("do"), visit_stmt(p, v.body, {}, true))) + } else { + if uses_do { + document = cons(document, newline(1)) + } + + set_source_position(p, v.body.pos) + document = cons_with_nopl(document, visit_stmt(p, v.body)) + set_source_position(p, v.body.end) + } + return document case Range_Stmt: document := move_line(p, v.pos) @@ -684,7 +720,25 @@ visit_stmt :: proc(p: ^Printer, stmt: ^ast.Stmt, block_type: Block_Type = .Gener document = cons_with_opl(document, text("in")) document = cons_with_opl(document, visit_expr(p, v.expr)) - document = cons_with_nopl(document, visit_stmt(p, v.body)) + + uses_do := false + + if check_stmt, ok := v.body.derived.(Block_Stmt); ok { + uses_do = check_stmt.uses_do + } + + if uses_do && !p.config.convert_do { + document = cons_with_nopl(document, cons_with_nopl(text("do"), visit_stmt(p, v.body, {}, true))) + } else { + if uses_do { + document = cons(document, newline(1)) + } + + set_source_position(p, v.body.pos) + document = cons_with_nopl(document, visit_stmt(p, v.body)) + set_source_position(p, v.body.end) + } + return document case Return_Stmt: document := move_line(p, v.pos) @@ -786,16 +840,16 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, options := List_Options{}) -> ^ case Auto_Cast: return cons(text_token(p, v.op), visit_expr(p, v.expr)) case Ternary_If_Expr: - document := visit_expr(p, v.x) + document := visit_expr(p, v.cond) document = cons_with_opl(document, text_token(p, v.op1)) - document = cons_with_opl(document, visit_expr(p, v.cond)) + document = cons_with_opl(document, visit_expr(p, v.x)) document = cons_with_opl(document, text_token(p, v.op2)) document = cons_with_opl(document, visit_expr(p, v.y)) return document case Ternary_When_Expr: - document := visit_expr(p, v.x) + document := visit_expr(p, v.cond) document = cons_with_opl(document, text_token(p, v.op1)) - document = cons_with_opl(document, visit_expr(p, v.cond)) + document = cons_with_opl(document, visit_expr(p, v.x)) document = cons_with_opl(document, text_token(p, v.op2)) document = cons_with_opl(document, visit_expr(p, v.y)) return document -- cgit v1.2.3