diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2021-08-22 23:01:17 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2021-08-22 23:01:17 +0200 |
| commit | 085f3afa1b43557223a70866b3adeb1b7315abba (patch) | |
| tree | d3fbd2ddf510f1a12998eb8b5be7ebc238d4b788 /src | |
| parent | ad647e5e56aa029f61f86752d7f04ad22f3eefd8 (diff) | |
Fix odin changes
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/analysis.odin | 26 | ||||
| -rw-r--r-- | src/common/ast.odin | 2 | ||||
| -rw-r--r-- | src/common/config.odin | 1 | ||||
| -rw-r--r-- | src/common/pool.odin | 2 | ||||
| -rw-r--r-- | src/index/clone.odin | 3 | ||||
| -rw-r--r-- | src/main.odin | 2 | ||||
| -rw-r--r-- | src/server/documents.odin | 2 | ||||
| -rw-r--r-- | src/server/requests.odin | 3 | ||||
| -rw-r--r-- | src/server/types.odin | 15 |
9 files changed, 43 insertions, 13 deletions
diff --git a/src/analysis/analysis.odin b/src/analysis/analysis.odin index 8219e3a..a367f1a 100644 --- a/src/analysis/analysis.odin +++ b/src/analysis/analysis.odin @@ -1222,7 +1222,6 @@ resolve_ident_is_package :: proc(ast_context: ^AstContext, node: ast.Ident) -> b if strings.contains(node.name, "/") { return true; } else { - for imp in ast_context.imports { if imp.base == node.name { @@ -2294,6 +2293,29 @@ get_signature :: proc(ast_context: ^AstContext, ident: ast.Ident, symbol: index. return ""; } +position_in_proc_decl :: proc(position_context: ^DocumentPositionContext) -> bool { + + if position_context.value_decl == nil { + return false; + } + + if len(position_context.value_decl.values) != 1 { + return false; + } + + if _, ok := position_context.value_decl.values[0].derived.(ast.Proc_Type); ok { + return true; + } + + if proc_lit, ok := position_context.value_decl.values[0].derived.(ast.Proc_Lit); ok { + if proc_lit.type != nil && position_in_node(proc_lit.type, position_context.position) { + return true; + } + } + + return false; +} + is_lhs_comp_lit :: proc(position_context: ^DocumentPositionContext) -> bool { @@ -2776,7 +2798,7 @@ get_document_position_node :: proc(node: ^ast.Node, position_context: ^DocumentP if position_in_node(n.body, position_context.position) { position_context.function = cast(^Proc_Lit)node; get_document_position(n.body, position_context); - } + } case Comp_Lit: //only set this for the parent comp literal, since we will need to walk through it to infer types. if position_context.parent_comp_lit == nil { diff --git a/src/common/ast.odin b/src/common/ast.odin index d541f57..ceda09c 100644 --- a/src/common/ast.odin +++ b/src/common/ast.odin @@ -396,6 +396,8 @@ free_ast_node :: proc(node: ^ast.Node, allocator: mem.Allocator) { case Map_Type: free_ast(n.key, allocator); free_ast(n.value, allocator); + case Multi_Pointer_Type: + free_ast(n.elem, allocator); case: panic(fmt.aprintf("free Unhandled node kind: %T", n)); } diff --git a/src/common/config.odin b/src/common/config.odin index 8bb7dc6..df12845 100644 --- a/src/common/config.odin +++ b/src/common/config.odin @@ -13,6 +13,7 @@ Config :: struct { enable_hover: bool, enable_document_symbols: bool, enable_semantic_tokens: bool, + enable_procedure_context: bool, thread_count: int, } diff --git a/src/common/pool.odin b/src/common/pool.odin index 2efed98..d1e5641 100644 --- a/src/common/pool.odin +++ b/src/common/pool.odin @@ -1,6 +1,6 @@ package common -import "intrinsics" +import "core:intrinsics" import "core:sync" import "core:mem" import "core:thread" diff --git a/src/index/clone.odin b/src/index/clone.odin index ffee65e..8a1d0cc 100644 --- a/src/index/clone.odin +++ b/src/index/clone.odin @@ -245,6 +245,9 @@ clone_node :: proc(node: ^ast.Node, allocator: mem.Allocator, unique_strings: ^m r := cast(^Index_Expr)res; r.expr = clone_type(r.expr, allocator, unique_strings); r.index = clone_type(r.index, allocator, unique_strings); + case Multi_Pointer_Type: + r := cast(^Multi_Pointer_Type)res; + r.elem = clone_type(r.elem, allocator, unique_strings); case: panic(fmt.aprintf("Clone type Unhandled node kind: %T", node.derived)); } diff --git a/src/main.odin b/src/main.odin index b752b04..fd39745 100644 --- a/src/main.odin +++ b/src/main.odin @@ -11,7 +11,7 @@ import "core:thread" import "core:encoding/json" import "core:reflect" -import "intrinsics" +import "core:intrinsics" import "shared:index" import "shared:server" diff --git a/src/server/documents.odin b/src/server/documents.odin index f1427ac..2dc1685 100644 --- a/src/server/documents.odin +++ b/src/server/documents.odin @@ -10,7 +10,7 @@ import "core:odin/tokenizer" import "core:path" import "core:mem" -import "intrinsics" +import "core:intrinsics" import "shared:common" diff --git a/src/server/requests.odin b/src/server/requests.odin index 602757a..c6841e8 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -13,7 +13,7 @@ import "core:runtime" import "core:thread" import "core:sync" import "core:path/filepath" -import "intrinsics" +import "core:intrinsics" import "core:odin/ast" import "core:odin/parser" @@ -408,6 +408,7 @@ request_initialize :: proc (task: ^common.Task) { config.enable_hover = ols_config.enable_hover; config.enable_format = ols_config.enable_format; config.enable_semantic_tokens = ols_config.enable_semantic_tokens; + config.enable_procedure_context = ols_config.enable_procedure_context; config.verbose = ols_config.verbose; for p in ols_config.collections { diff --git a/src/server/types.odin b/src/server/types.odin index df78906..03da6f4 100644 --- a/src/server/types.odin +++ b/src/server/types.odin @@ -261,13 +261,14 @@ TextDocumentSyncOptions :: struct { } OlsConfig :: struct { - collections: [dynamic]OlsConfigCollection, - thread_pool_count: int, - enable_semantic_tokens: bool, - enable_document_symbols: bool, - enable_hover: bool, - enable_format: bool, - verbose: bool, + collections: [dynamic]OlsConfigCollection, + thread_pool_count: int, + enable_semantic_tokens: bool, + enable_document_symbols: bool, + enable_hover: bool, + enable_format: bool, + enable_procedure_context: bool, + verbose: bool, } OlsConfigCollection :: struct { |