aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-12-05 16:53:31 +0100
committerDaniel Gavin <danielgavin5@hotmail.com>2021-12-05 16:53:31 +0100
commit6ef409e75de2d3cbb0aef2dd19e4f32a5454941d (patch)
tree02f45d3c5b4b50a2873844c32e679b8384ee64e4 /src
parent1265c9aaef3d7d266453002ba45ace3caa8b13a6 (diff)
odinfmt: Fix do in for stmt and tenary bug
Diffstat (limited to 'src')
-rw-r--r--src/index/memory_index.odin12
-rw-r--r--src/odin/printer/visit.odin72
2 files changed, 69 insertions, 15 deletions
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