aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-08-19 01:12:14 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2021-08-19 01:12:14 +0200
commit022ab04147c5a0e98b2e5d20497a95cfb5164172 (patch)
tree71a21bb7762e078797613ddfbcbfeeee9664ab15 /src/server
parenta9381e228bad1fee86a14936f48d70562c96d469 (diff)
fix some defer free bugs and fix new json api
Diffstat (limited to 'src/server')
-rw-r--r--src/server/documents.odin2
-rw-r--r--src/server/requests.odin147
-rw-r--r--src/server/unmarshal.odin4
3 files changed, 90 insertions, 63 deletions
diff --git a/src/server/documents.odin b/src/server/documents.odin
index 2e658b4..b5e7c1b 100644
--- a/src/server/documents.odin
+++ b/src/server/documents.odin
@@ -93,8 +93,6 @@ document_open :: proc(uri_string: string, text: string, config: ^common.Config,
uri, parsed_ok := common.parse_uri(uri_string, context.allocator);
- log.infof("document_open: %v", uri_string);
-
if !parsed_ok {
log.error("Failed to parse uri");
return .ParseError;
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 0adedc3..602757a 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -202,7 +202,7 @@ handle_error :: proc (err: common.Error, id: RequestId, writer: ^Writer) {
handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Writer) -> bool {
- root, ok := request.value.(json.Object);
+ root, ok := request.(json.Object);
if !ok {
log.error("No root object");
@@ -215,7 +215,7 @@ handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Wr
if ok {
- #partial switch v in id_value.value {
+ #partial switch v in id_value {
case json.String:
id = v;
case json.Integer:
@@ -225,7 +225,7 @@ handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Wr
}
}
- method := root["method"].value.(json.String);
+ method := root["method"].(json.String);
request_type: RequestType;
request_type, ok = request_map[method];
@@ -302,7 +302,7 @@ handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Wr
task_proc(&task);
case .Completion,.Definition,.Hover,.FormatDocument:
- uri := root["params"].value.(json.Object)["textDocument"].value.(json.Object)["uri"].value.(json.String);
+ uri := root["params"].(json.Object)["textDocument"].(json.Object)["uri"].(json.String);
document := document_get(uri);
@@ -317,7 +317,7 @@ handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Wr
case .DidClose,.DidChange,.DidOpen,.DidSave:
- uri := root["params"].value.(json.Object)["textDocument"].value.(json.Object)["uri"].value.(json.String);
+ uri := root["params"].(json.Object)["textDocument"].(json.Object)["uri"].(json.String);
document := document_get(uri);
@@ -337,7 +337,7 @@ handle_request :: proc (request: json.Value, config: ^common.Config, writer: ^Wr
task_proc(&task);
case .SignatureHelp,.SemanticTokensFull,.SemanticTokensRange,.DocumentSymbol:
- uri := root["params"].value.(json.Object)["textDocument"].value.(json.Object)["uri"].value.(json.String);
+ uri := root["params"].(json.Object)["textDocument"].(json.Object)["uri"].(json.String);
document := document_get(uri);
@@ -371,10 +371,10 @@ request_initialize :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
defer free(info);
-
- params_object, ok := params.value.(json.Object);
+ defer json.destroy_value(info.root);
+
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -422,7 +422,7 @@ request_initialize :: proc (task: ^common.Task) {
}
if ok := "" in config.collections; !ok {
- config.collections[""] = uri.path;
+ config.collections[""] = strings.clone(uri.path);
}
} else {
log.errorf("Failed to unmarshal %v", file);
@@ -556,8 +556,10 @@ request_shutdown :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
response := make_response_message(
params = nil,
@@ -572,11 +574,13 @@ request_definition :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer free(info);
- defer json.destroy_value(root);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -609,11 +613,13 @@ request_completion :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -649,11 +655,13 @@ request_signature_help :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -688,11 +696,13 @@ request_format_document :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -725,8 +735,10 @@ notification_exit :: proc (task: ^common.Task) {
info := get_request_info(task);
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
config.running = false;
}
@@ -737,10 +749,12 @@ notification_did_open :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
log.error("Failed to parse open document notification");
@@ -767,10 +781,12 @@ notification_did_change :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -793,10 +809,12 @@ notification_did_close :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -821,10 +839,12 @@ notification_did_save :: proc (task: ^common.Task) {
using info;
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -895,11 +915,14 @@ request_semantic_token_full :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -941,11 +964,13 @@ request_semantic_token_range :: proc (task: ^common.Task) {
using info;
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
if !ok {
handle_error(.ParseError, id, writer);
@@ -978,11 +1003,13 @@ request_document_symbols :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
- params_object, ok := params.value.(json.Object);
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
@@ -1011,11 +1038,13 @@ request_hover :: proc (task: ^common.Task) {
using info;
- defer document_release(document);
- defer json.destroy_value(root);
- defer free(info);
-
- params_object, ok := params.value.(json.Object);
+ defer {
+ document_release(document);
+ json.destroy_value(root);
+ free(info);
+ }
+
+ params_object, ok := params.(json.Object);
if !ok {
handle_error(.ParseError, id, writer);
diff --git a/src/server/unmarshal.odin b/src/server/unmarshal.odin
index 1776b07..fac57da 100644
--- a/src/server/unmarshal.odin
+++ b/src/server/unmarshal.odin
@@ -20,13 +20,13 @@ unmarshal :: proc(json_value: json.Value, v: any, allocator: mem.Allocator) -> j
return .None;
}
- if json_value.value == nil {
+ if json_value == nil {
return .None;
}
type_info := type_info_base(type_info_of(v.id));
- #partial switch j in json_value.value {
+ #partial switch j in json_value {
case json.Object:
#partial switch variant in type_info.variant {
case Type_Info_Struct: