aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/analysis/analysis.odin2
-rw-r--r--src/common/ast.odin2
-rw-r--r--src/common/config.odin1
-rw-r--r--src/common/sha1.odin9
-rw-r--r--src/index/build.odin2
-rw-r--r--src/index/collector.odin2
-rw-r--r--src/index/symbol.odin2
-rw-r--r--src/odin/printer/printer.odin1
-rw-r--r--src/odin/printer/visit.odin53
-rw-r--r--src/server/check.odin4
-rw-r--r--src/server/completion.odin2
-rw-r--r--src/server/definition.odin2
-rw-r--r--src/server/document_symbols.odin2
-rw-r--r--src/server/documents.odin2
-rw-r--r--src/server/hover.odin2
-rw-r--r--src/server/requests.odin3
-rw-r--r--src/server/signature.odin2
-rw-r--r--src/server/types.odin1
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 {