diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2021-02-12 23:12:47 +0100 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2021-02-12 23:12:47 +0100 |
| commit | 9f0e4500777dba0ffa4c38432c7a5d8854d9c8df (patch) | |
| tree | 8332dcad82b6d7728be63a1625cc96a20ae5daa1 /src | |
| parent | 9e1e61b0ed208bf857ad136f39a1739ffed3320a (diff) | |
adding required changes for linux support
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/uri.odin | 18 | ||||
| -rw-r--r-- | src/index/collector.odin | 2 | ||||
| -rw-r--r-- | src/main.odin | 11 | ||||
| -rw-r--r-- | src/server/documents.odin | 2 | ||||
| -rw-r--r-- | src/server/log.odin | 21 | ||||
| -rw-r--r-- | src/server/requests.odin | 6 | ||||
| -rw-r--r-- | src/server/writer.odin | 1 |
7 files changed, 26 insertions, 35 deletions
diff --git a/src/common/uri.odin b/src/common/uri.odin index 411173c..c1d5bfd 100644 --- a/src/common/uri.odin +++ b/src/common/uri.odin @@ -27,13 +27,19 @@ parse_uri :: proc(value: string, allocator: mem.Allocator) -> (Uri, bool) { starts := "file:///"; + start_index := len(starts); + if !starts_with(decoded, starts) { return uri, false; } + when ODIN_OS != "windows" { + start_index -= 1; + } + uri.uri = strings.clone(value, allocator); uri.decode_full = decoded; - uri.path = decoded[len(starts):]; + uri.path = decoded[start_index:]; return uri, true; } @@ -41,12 +47,18 @@ parse_uri :: proc(value: string, allocator: mem.Allocator) -> (Uri, bool) { //Note(Daniel, Again some really incomplete and scuffed uri writer) create_uri :: proc(path: string, allocator: mem.Allocator) -> Uri { - path_forward, _ := filepath.to_slash(path, context.temp_allocator); builder := strings.make_builder(allocator); - strings.write_string(&builder, "file:///"); + //bad + when ODIN_OS == "windows" { + strings.write_string(&builder, "file:///"); + } + else { + strings.write_string(&builder, "file://"); + } + strings.write_string(&builder, encode_percent(path_forward, context.temp_allocator)); uri: Uri; diff --git a/src/index/collector.odin b/src/index/collector.odin index 52d6ceb..f0d8c12 100644 --- a/src/index/collector.odin +++ b/src/index/collector.odin @@ -404,7 +404,7 @@ get_package_mapping :: proc(file: ast.File, config: ^common.Config, uri: string) name: string; - full := path.join(elems = {dir, p}, allocator = context.temp_allocator); + full := path.join(elems = {strings.to_lower(dir, context.temp_allocator), p}, allocator = context.temp_allocator); if imp.name.text != "" { name = imp.name.text; diff --git a/src/main.odin b/src/main.odin index 552b70a..9cfc3bf 100644 --- a/src/main.odin +++ b/src/main.odin @@ -19,14 +19,15 @@ import "shared:common" os_read :: proc(handle: rawptr, data: [] byte) -> (int, int) { - //ERROR can't go to os.Handle - a, b := os.read(cast(os.Handle)handle, data); + ptr := cast(^os.Handle)handle; + a, b := os.read(ptr^, data); return a, cast(int)b; } os_write :: proc(handle: rawptr, data: [] byte) -> (int, int) { - a, b := os.write(cast(os.Handle)handle, data); + ptr := cast(^os.Handle)handle; + a, b := os.write(ptr^, data); return a, cast(int)b; } @@ -104,8 +105,8 @@ end :: proc() { main :: proc() { - reader := server.make_reader(os_read, cast(rawptr)os.stdin); - writer := server.make_writer(os_write, cast(rawptr)os.stdout); + reader := server.make_reader(os_read, cast(rawptr)&os.stdin); + writer := server.make_writer(os_write, cast(rawptr)&os.stdout); verbose_logger := server.create_lsp_logger(&writer, log.Level.Error); diff --git a/src/server/documents.odin b/src/server/documents.odin index fdf99f9..dd4ef85 100644 --- a/src/server/documents.odin +++ b/src/server/documents.odin @@ -425,7 +425,7 @@ parse_document :: proc(document: ^Document, config: ^common.Config) -> ([] Parse } import_: Package; - import_.name = strings.clone(path.join(elems = {dir, p}, allocator = context.temp_allocator)); + import_.name = strings.clone(path.join(elems = {strings.to_lower(dir, context.temp_allocator), p}, allocator = context.temp_allocator)); if imp.name.text != "" { import_.base = imp.name.text; diff --git a/src/server/log.odin b/src/server/log.odin index 071fc59..d84a38d 100644 --- a/src/server/log.odin +++ b/src/server/log.odin @@ -5,8 +5,6 @@ import "core:strings"; import "core:os"; import "core:time"; import "core:log"; -import "core:sync" - Default_Console_Logger_Opts :: log.Options{ .Level, @@ -19,13 +17,11 @@ Default_Console_Logger_Opts :: log.Options{ Lsp_Logger_Data :: struct { writer: ^Writer, - mutex: sync.Mutex, } create_lsp_logger :: proc(writer: ^Writer, lowest := log.Level.Debug, opt := Default_Console_Logger_Opts) -> log.Logger { data := new(Lsp_Logger_Data); data.writer = writer; - sync.mutex_init(&data.mutex); return log.Logger{lsp_logger_proc, data, lowest, opt}; } @@ -36,23 +32,6 @@ destroy_lsp_logger :: proc(log: ^log.Logger) { lsp_logger_proc :: proc(logger_data: rawptr, level: log.Level, text: string, options: log.Options, location := #caller_location) { data := cast(^Lsp_Logger_Data)logger_data; - sync.mutex_lock(&data.mutex); - defer sync.mutex_unlock(&data.mutex); - - backing: [1024]byte; //NOTE(Hoej): 1024 might be too much for a header backing, unless somebody has really long paths. - buf := strings.builder_from_slice(backing[:]); - - when time.IS_SUPPORTED { - if log.Full_Timestamp_Opts & options != nil { - fmt.sbprint(&buf, "["); - t := time.now(); - y, m, d := time.date(t); - h, min, s := time.clock(t); - if .Date in options { fmt.sbprintf(&buf, "%d-%02d-%02d ", y, m, d); } - if .Time in options { fmt.sbprintf(&buf, "%02d:%02d:%02d", h, min, s); } - fmt.sbprint(&buf, "] "); - } - } message := fmt.tprintf("%s", text); diff --git a/src/server/requests.odin b/src/server/requests.odin index ff80425..05356dd 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -439,14 +439,14 @@ request_initialize :: proc(task: ^common.Task) { for p in ols_config.collections { - forward_path, _ := filepath.to_slash(p.path, context.temp_allocator); + forward_path, _ := filepath.to_slash(p.path, context.temp_allocator); if filepath.is_abs(p.path) { - config.collections[strings.clone(p.name)] = strings.to_lower(forward_path); + config.collections[strings.clone(p.name)] = strings.clone(forward_path); } else { - config.collections[strings.clone(p.name)] = strings.to_lower(path.join(elems = {uri.path, forward_path}, allocator = context.temp_allocator)); + config.collections[strings.clone(p.name)] = path.join(elems = {uri.path, forward_path}, allocator = context.allocator); } } diff --git a/src/server/writer.odin b/src/server/writer.odin index ef511c9..3edc4ab 100644 --- a/src/server/writer.odin +++ b/src/server/writer.odin @@ -25,7 +25,6 @@ write_sized :: proc(writer: ^Writer, data: []byte) -> bool { sync.mutex_lock(&writer.writer_mutex); defer sync.mutex_unlock(&writer.writer_mutex); - written, err := writer.writer_fn(writer.writer_context, data); if(err != 0) { |