diff options
| -rw-r--r-- | src/analysis/analysis.odin | 2 | ||||
| -rw-r--r-- | src/common/ast.odin | 2 | ||||
| -rw-r--r-- | src/common/config.odin | 1 | ||||
| -rw-r--r-- | src/common/sha1.odin | 9 | ||||
| -rw-r--r-- | src/index/build.odin | 2 | ||||
| -rw-r--r-- | src/index/collector.odin | 2 | ||||
| -rw-r--r-- | src/index/symbol.odin | 2 | ||||
| -rw-r--r-- | src/odin/printer/printer.odin | 1 | ||||
| -rw-r--r-- | src/odin/printer/visit.odin | 53 | ||||
| -rw-r--r-- | src/server/check.odin | 4 | ||||
| -rw-r--r-- | src/server/completion.odin | 2 | ||||
| -rw-r--r-- | src/server/definition.odin | 2 | ||||
| -rw-r--r-- | src/server/document_symbols.odin | 2 | ||||
| -rw-r--r-- | src/server/documents.odin | 2 | ||||
| -rw-r--r-- | src/server/hover.odin | 2 | ||||
| -rw-r--r-- | src/server/requests.odin | 3 | ||||
| -rw-r--r-- | src/server/signature.odin | 2 | ||||
| -rw-r--r-- | src/server/types.odin | 1 |
18 files changed, 63 insertions, 31 deletions
diff --git a/src/analysis/analysis.odin b/src/analysis/analysis.odin index 5d50e50..801d4cd 100644 --- a/src/analysis/analysis.odin +++ b/src/analysis/analysis.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/common/ast.odin b/src/common/ast.odin index 0bc789f..69f35e0 100644 --- a/src/common/ast.odin +++ b/src/common/ast.odin @@ -5,7 +5,7 @@ import "core:log" import "core:mem" import "core:fmt" import "core:strings" -import "core:path" +import path "core:path/slashpath" keyword_map: map[string]bool = { "int" = true, diff --git a/src/common/config.odin b/src/common/config.odin index e3da120..c7bf2da 100644 --- a/src/common/config.odin +++ b/src/common/config.odin @@ -19,6 +19,7 @@ Config :: struct { file_log: bool, formatter: Format_Config, odin_command: string, + checker_args: string, } Format_Config :: struct { diff --git a/src/common/sha1.odin b/src/common/sha1.odin index 8e90da6..4516467 100644 --- a/src/common/sha1.odin +++ b/src/common/sha1.odin @@ -178,7 +178,6 @@ sha1_hash_block :: proc (state_context: ^Sha1context) { } sha1_add_uncounted :: proc (state_context: ^Sha1context, data: byte) { - when ODIN_ENDIAN == .Big { state_context.buf.c[state_context.buf_offset] = data; } else @@ -201,7 +200,6 @@ sha1_write_byte :: proc (state_context: ^Sha1context, data: byte) { } sha1_update :: proc (state_context: ^Sha1context, data: []byte) { - state_context.byte_count += cast(u32)len(data); current_data := data; @@ -242,7 +240,6 @@ sha1_update :: proc (state_context: ^Sha1context, data: []byte) { } sha1_pad :: proc (state_context: ^Sha1context) { - sha1_add_uncounted(state_context, 0x80); for state_context.buf_offset != 56 { @@ -263,13 +260,10 @@ sha1_final :: proc (state_context: ^Sha1context, result: ^[5]u32) { sha1_pad(state_context); when ODIN_ENDIAN == .Big { - for i := 0; i < 5; i += 1 { result[i] = state_context.state[i]; } - } else - - { + } else { for i := 0; i < 5; i += 1 { result[i] = (((state_context.state[i]) << 24) & 0xff000000) | (((state_context.state[i]) << 8) & 0x00ff0000) | @@ -280,7 +274,6 @@ sha1_final :: proc (state_context: ^Sha1context, result: ^[5]u32) { } sha1_hash :: proc (data: []byte) -> [20]byte { - sha1_context: Sha1context; sha1_init(&sha1_context); sha1_update(&sha1_context, data); diff --git a/src/index/build.odin b/src/index/build.odin index f04f7ce..c8b1996 100644 --- a/src/index/build.odin +++ b/src/index/build.odin @@ -1,7 +1,7 @@ package index import "core:path/filepath" -import "core:path" +import path "core:path/slashpath" import "core:os" import "core:fmt" import "core:odin/parser" diff --git a/src/index/collector.odin b/src/index/collector.odin index 91a5419..d1d6fa0 100644 --- a/src/index/collector.odin +++ b/src/index/collector.odin @@ -6,7 +6,7 @@ import "core:strings" import "core:mem" import "core:fmt" import "core:path/filepath" -import "core:path" +import path "core:path/slashpath" import "core:log" import "core:strconv" diff --git a/src/index/symbol.odin b/src/index/symbol.odin index 385663b..3ee808f 100644 --- a/src/index/symbol.odin +++ b/src/index/symbol.odin @@ -5,7 +5,7 @@ import "core:hash" import "core:strings" import "core:mem" import "core:path/filepath" -import "core:path" +import path "core:path/slashpath" import "core:slice" import "shared:common" diff --git a/src/odin/printer/printer.odin b/src/odin/printer/printer.odin index a855384..cedf3a2 100644 --- a/src/odin/printer/printer.odin +++ b/src/odin/printer/printer.odin @@ -154,6 +154,7 @@ print :: proc(p: ^Printer, file: ^ast.File) -> string { build_disabled_lines_info(p) p.source_position.line = 1; + p.source_position.column = 1; p.document = move_line(p, file.pkg_token.pos); p.document = cons(p.document, cons_with_nopl(text(file.pkg_token.text), text(file.pkg_name))) diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index da36311..7e0eb91 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -110,7 +110,7 @@ visit_comment :: proc(p: ^Printer, comment: tokenizer.Token, end_newline := true if comment.pos.line in p.disabled_lines { p.source_position = comment.pos return 1, empty() - } else if comment.pos.line == p.source_position.line { + } else if comment.pos.line == p.source_position.line && p.source_position.column != 1 { p.source_position = comment.pos return newlines_before_comment, cons_with_nopl(document, text(comment.text)) } else { @@ -124,7 +124,7 @@ visit_comment :: proc(p: ^Printer, comment: tokenizer.Token, end_newline := true p.source_position = comment.pos p.source_position.line += newlines return 1, empty() - } else if comment.pos.line == p.source_position.line { + } else if comment.pos.line == p.source_position.line && p.source_position.column != 1 { p.source_position = comment.pos p.source_position.line += newlines return newlines_before_comment+newlines, cons_with_opl(document, text(comment.text)) @@ -883,7 +883,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = document = cons(document, text(")")) return document case Ellipsis: - return cons_with_opl(text(".."), visit_expr(p, v.expr)) + return cons(text(".."), visit_expr(p, v.expr)) case Relative_Type: return cons_with_opl(visit_expr(p, v.tag), visit_expr(p, v.type)) case Slice_Expr: @@ -1058,7 +1058,7 @@ visit_expr :: proc(p: ^Printer, expr: ^ast.Expr, called_from: Expr_Called_Type = case Index_Expr: document := visit_expr(p, v.expr) document = cons(document, text("[")) - document = cons(document, visit_expr(p, v.index)) + document = cons(document, fill_group(align(visit_expr(p, v.index)))) document = cons(document, text("]")) return document case Proc_Group: @@ -1281,7 +1281,6 @@ visit_field_list :: proc(p: ^Printer, list: ^ast.Field_List, options := List_Opt } visit_proc_type :: proc(p: ^Printer, proc_type: ast.Proc_Type) -> ^Document { - document := text("proc") explicit_calling := false @@ -1371,14 +1370,50 @@ visit_call_exprs :: proc(p: ^Printer, list: []^ast.Expr, ellipsis := false) -> ^ return document } +visit_field_flag :: proc(p: ^Printer, flags: ast.Field_Flags) -> ^Document { + + /* + Ellipsis, + Using, + No_Alias, + C_Vararg, + Auto_Cast, + Any_Int, + + Results, + Tags, + Default_Parameters, + Typeid_Token, + */ + + + document := empty() + + if .Auto_Cast in flags { + document = cons_with_nopl(document, text("#auto_cast")) + } + + if .Any_Int in flags { + document = cons_with_nopl(document, text("#any_int")) + } + + if .C_Vararg in flags { + document = cons_with_nopl(document, text("#c_vararg")) + } + + if .Using in flags { + document = cons_with_nopl(document, text("using")) + } + + return document +} + visit_signature_list :: proc(p: ^Printer, list: ^ast.Field_List, remove_blank := true) -> ^Document { document := empty() for field, i in list.list { - if .Using in field.flags { - document = cons(document, cons(text("using"), break_with_no_newline())) - } + flag := visit_field_flag(p, field.flags); named := false @@ -1395,7 +1430,7 @@ visit_signature_list :: proc(p: ^Printer, list: ^ast.Field_List, remove_blank := } if named { - document = cons(document, visit_exprs(p, field.names, {.Add_Comma})) + document = cons(document, cons_with_nopl(flag, visit_exprs(p, field.names, {.Add_Comma}))) if len(field.names) != 0 && field.type != nil { document = cons(document, cons(text(":"), break_with_no_newline())) diff --git a/src/server/check.odin b/src/server/check.odin index 574227e..ab6dfb2 100644 --- a/src/server/check.odin +++ b/src/server/check.odin @@ -8,7 +8,7 @@ import "core:strings" import "core:slice" import "core:strconv" import "core:encoding/json" -import "core:path" +import path "core:path/slashpath" import "core:runtime" import "core:thread" import "core:sync" @@ -49,7 +49,7 @@ when ODIN_OS == "windows" { command = "odin"; } - if code, ok, buffer = common.run_executable(fmt.tprintf("%v check %s %s -no-entry-point", command, path.dir(uri.path, context.temp_allocator), strings.to_string(collection_builder)), &data); !ok { + if code, ok, buffer = common.run_executable(fmt.tprintf("%v check %s %s -no-entry-point %s", command, path.dir(uri.path, context.temp_allocator), strings.to_string(collection_builder), config.checker_args), &data); !ok { log.errorf("Odin check failed with code %v for file %v", code, uri.path); return; } diff --git a/src/server/completion.odin b/src/server/completion.odin index 590f36d..e869006 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/server/definition.odin b/src/server/definition.odin index 01641b4..52e09dd 100644 --- a/src/server/definition.odin +++ b/src/server/definition.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/server/document_symbols.odin b/src/server/document_symbols.odin index db18e56..3d3a296 100644 --- a/src/server/document_symbols.odin +++ b/src/server/document_symbols.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/server/documents.odin b/src/server/documents.odin index da7bcb5..94c0cd6 100644 --- a/src/server/documents.odin +++ b/src/server/documents.odin @@ -7,7 +7,7 @@ import "core:os" import "core:odin/parser" import "core:odin/ast" import "core:odin/tokenizer" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:intrinsics" diff --git a/src/server/hover.odin b/src/server/hover.odin index 7c2d9c4..1a45b8c 100644 --- a/src/server/hover.odin +++ b/src/server/hover.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/server/requests.odin b/src/server/requests.odin index c4bd7b9..4fc4b48 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -8,7 +8,7 @@ import "core:strings" import "core:slice" import "core:strconv" import "core:encoding/json" -import "core:path" +import path "core:path/slashpath" import "core:runtime" import "core:thread" import "core:sync" @@ -423,6 +423,7 @@ request_initialize :: proc (task: ^common.Task) { config.file_log = ols_config.file_log; config.formatter = ols_config.formatter; config.odin_command = strings.clone(ols_config.odin_command, context.allocator); + config.checker_args = ols_config.checker_args; for p in ols_config.collections { diff --git a/src/server/signature.odin b/src/server/signature.odin index 3dcbacd..03d9ce7 100644 --- a/src/server/signature.odin +++ b/src/server/signature.odin @@ -6,7 +6,7 @@ import "core:odin/tokenizer" import "core:fmt" import "core:log" import "core:strings" -import "core:path" +import path "core:path/slashpath" import "core:mem" import "core:strconv" import "core:path/filepath" diff --git a/src/server/types.odin b/src/server/types.odin index 4a36d82..1dbcbe1 100644 --- a/src/server/types.odin +++ b/src/server/types.odin @@ -302,6 +302,7 @@ OlsConfig :: struct { file_log: bool, formatter: common.Format_Config, odin_command: string, + checker_args: string, } OlsConfigCollection :: struct { |