From 63c1f8706ba8a57fb5d15879480c3898d387ca9d Mon Sep 17 00:00:00 2001 From: Walther Chen Date: Fri, 17 May 2024 17:07:14 -0400 Subject: fix switch/for references --- src/server/analysis.odin | 2 +- src/server/completion.odin | 2 +- src/server/requests.odin | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'src/server') diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 8562d66..73d5af4 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -2064,7 +2064,7 @@ resolve_symbol_return :: proc( } } - #partial switch v in &symbol.value { + #partial switch &v in symbol.value { case SymbolProcedureGroupValue: if symbol, ok := resolve_function_overload( ast_context, diff --git a/src/server/completion.odin b/src/server/completion.odin index 948fee5..356903e 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -2000,7 +2000,7 @@ format_to_label_details :: proc(list: ^CompletionList) { // detail = left // description = right - for item in &list.items { + for &item in list.items { // log.errorf("item:%v: %v:%v", item.kind, item.label, item.detail) #partial switch item.kind { case .Function: diff --git a/src/server/requests.odin b/src/server/requests.odin index ded6970..8af1141 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -431,7 +431,6 @@ read_ols_initialize_options :: proc( config.enable_checker_only_saved = ols_config.enable_checker_only_saved.(bool) or_else config.enable_checker_only_saved - if ols_config.odin_command != "" { config.odin_command = strings.clone( @@ -1210,8 +1209,8 @@ notification_did_save :: proc( corrected_uri := common.create_uri(fullpath, context.temp_allocator) - for k, v in &indexer.index.collection.packages { - for k2, v2 in &v.symbols { + for k, &v in indexer.index.collection.packages { + for k2, v2 in v.symbols { if corrected_uri.uri == v2.uri { free_symbol(v2, indexer.index.collection.allocator) delete_key(&v.symbols, k2) -- cgit v1.2.3 From 54c2fdf869eb534c579908f2597a3f0848dacb1b Mon Sep 17 00:00:00 2001 From: Daniel Keenan Date: Sat, 18 May 2024 22:16:53 +1000 Subject: Quote file paths when calling odin check --- src/server/check.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/check.odin b/src/server/check.odin index b18de55..9ad148a 100644 --- a/src/server/check.odin +++ b/src/server/check.odin @@ -131,7 +131,7 @@ check :: proc( if code, ok, buffer = common.run_executable( fmt.tprintf( - "%v check %s %s %s %s %s %s", + "%v check \"%s\" %s %s %s %s %s", command, path, strings.to_string(collection_builder), -- cgit v1.2.3 From e9700998497e40d61695762742d6a315353cec8f Mon Sep 17 00:00:00 2001 From: DanielGavin Date: Tue, 21 May 2024 19:25:42 +0200 Subject: Fix issues with deferred package changes. --- src/server/analysis.odin | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'src/server') diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 73d5af4..ef3c9fd 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -76,6 +76,8 @@ DocumentLocal :: struct { parameter: bool, } +DeferredDepth :: 60 + AstContext :: struct { locals: map[int]map[string][dynamic]DocumentLocal, //locals all the way to the document position globals: map[string]common.GlobalExpr, @@ -86,7 +88,8 @@ AstContext :: struct { imports: []Package, //imports for the current document current_package: string, document_package: string, - saved_package: string, + deferred_package: [DeferredDepth]string, + deferred_count: int, use_locals: bool, local_id: int, call: ^ast.Call_Expr, //used to determine the types for generics and the correct function for overloaded functions @@ -130,29 +133,42 @@ make_ast_context :: proc( } set_ast_package_deferred :: proc(ast_context: ^AstContext, pkg: string) { - ast_context.current_package = ast_context.saved_package + ast_context.deferred_count -= 1 + ast_context.current_package = + ast_context.deferred_package[ast_context.deferred_count] + assert(ast_context.deferred_count >= 0) } @(deferred_in = set_ast_package_deferred) set_ast_package_set_scoped :: proc(ast_context: ^AstContext, pkg: string) { - ast_context.saved_package = ast_context.current_package + ast_context.deferred_package[ast_context.deferred_count] = + ast_context.current_package + ast_context.deferred_count += 1 ast_context.current_package = pkg } set_ast_package_none_deferred :: proc(ast_context: ^AstContext) { - ast_context.current_package = ast_context.saved_package + ast_context.deferred_count -= 1 + ast_context.current_package = + ast_context.deferred_package[ast_context.deferred_count] + assert(ast_context.deferred_count >= 0) } @(deferred_in = set_ast_package_none_deferred) set_ast_package_scoped :: proc(ast_context: ^AstContext) { - ast_context.saved_package = ast_context.current_package + ast_context.deferred_package[ast_context.deferred_count] = + ast_context.current_package + ast_context.deferred_count += 1 } set_ast_package_from_symbol_deferred :: proc( ast_context: ^AstContext, symbol: Symbol, ) { - ast_context.current_package = ast_context.saved_package + ast_context.deferred_count -= 1 + ast_context.current_package = + ast_context.deferred_package[ast_context.deferred_count] + assert(ast_context.deferred_count >= 0) } @(deferred_in = set_ast_package_from_symbol_deferred) @@ -160,7 +176,9 @@ set_ast_package_from_symbol_scoped :: proc( ast_context: ^AstContext, symbol: Symbol, ) { - ast_context.saved_package = ast_context.current_package + ast_context.deferred_package[ast_context.deferred_count] = + ast_context.current_package + ast_context.deferred_count += 1 if symbol.pkg != "" { ast_context.current_package = symbol.pkg @@ -804,6 +822,11 @@ resolve_type_expression :: proc( Symbol, bool, ) { + //Try to prevent stack overflows and prevent indexing out of bounds. + if ast_context.deferred_count > DeferredDepth { + return {}, false + } + clear(&ast_context.recursion_map) return internal_resolve_type_expression(ast_context, node) } @@ -1294,6 +1317,11 @@ resolve_type_identifier :: proc( Symbol, bool, ) { + //Try to prevent stack overflows and prevent indexing out of bounds. + if ast_context.deferred_count > DeferredDepth { + return {}, false + } + return internal_resolve_type_identifier(ast_context, node) } -- cgit v1.2.3 From 6971f37274a6ef8a3e8fc58e9bd1bd92b1743a38 Mon Sep 17 00:00:00 2001 From: DanielGavin Date: Tue, 21 May 2024 22:00:56 +0200 Subject: Add validation when calculating the offset for token_range. --- src/common/position.odin | 7 ++++++- src/server/analysis.odin | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src/server') diff --git a/src/common/position.odin b/src/common/position.odin index b222086..739f3aa 100644 --- a/src/common/position.odin +++ b/src/common/position.odin @@ -4,6 +4,7 @@ import "core:strings" import "core:unicode/utf8" import "core:fmt" import "core:odin/ast" +import "core:log" /* This file handles the conversion between utf-16 and utf-8 offsets in the text document @@ -129,12 +130,16 @@ go_backwards_to_endline :: proc(offset: int, document_text: []u8) -> int { get_token_range :: proc(node: ast.Node, document_text: string) -> Range { range: Range - pos_offset := min(len(document_text) - 1, node.pos.offset) end_offset := min(len(document_text) - 1, node.end.offset) offset := go_backwards_to_endline(pos_offset, transmute([]u8)document_text) + if offset < 0 { + offset := 0 + log.errorf("Failed to find offset in get_token_range: %v", node) + } + range.start.line = node.pos.line - 1 range.start.character = get_character_offset_u8_to_u16( node.pos.column - 1, diff --git a/src/server/analysis.odin b/src/server/analysis.odin index ef3c9fd..e1bba37 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -88,7 +88,7 @@ AstContext :: struct { imports: []Package, //imports for the current document current_package: string, document_package: string, - deferred_package: [DeferredDepth]string, + deferred_package: [DeferredDepth]string, //When a package change happens when resolving deferred_count: int, use_locals: bool, local_id: int, -- cgit v1.2.3 From a2f333bfbdd187aa7463ae230f7a617f6bccb611 Mon Sep 17 00:00:00 2001 From: DanielGavin Date: Wed, 22 May 2024 23:57:23 +0200 Subject: Typo --- src/server/analysis.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/server') diff --git a/src/server/analysis.odin b/src/server/analysis.odin index e1bba37..90cfd70 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -76,7 +76,7 @@ DocumentLocal :: struct { parameter: bool, } -DeferredDepth :: 60 +DeferredDepth :: 100 AstContext :: struct { locals: map[int]map[string][dynamic]DocumentLocal, //locals all the way to the document position @@ -823,7 +823,7 @@ resolve_type_expression :: proc( bool, ) { //Try to prevent stack overflows and prevent indexing out of bounds. - if ast_context.deferred_count > DeferredDepth { + if ast_context.deferred_count >= DeferredDepth { return {}, false } -- cgit v1.2.3