aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2021-02-12 23:12:47 +0100
committerDanielGavin <danielgavin5@hotmail.com>2021-02-12 23:12:47 +0100
commit9f0e4500777dba0ffa4c38432c7a5d8854d9c8df (patch)
tree8332dcad82b6d7728be63a1625cc96a20ae5daa1 /src
parent9e1e61b0ed208bf857ad136f39a1739ffed3320a (diff)
adding required changes for linux support
Diffstat (limited to 'src')
-rw-r--r--src/common/uri.odin18
-rw-r--r--src/index/collector.odin2
-rw-r--r--src/main.odin11
-rw-r--r--src/server/documents.odin2
-rw-r--r--src/server/log.odin21
-rw-r--r--src/server/requests.odin6
-rw-r--r--src/server/writer.odin1
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) {