aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-08-22 23:01:17 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2021-08-22 23:01:17 +0200
commit085f3afa1b43557223a70866b3adeb1b7315abba (patch)
treed3fbd2ddf510f1a12998eb8b5be7ebc238d4b788 /src
parentad647e5e56aa029f61f86752d7f04ad22f3eefd8 (diff)
Fix odin changes
Diffstat (limited to 'src')
-rw-r--r--src/analysis/analysis.odin26
-rw-r--r--src/common/ast.odin2
-rw-r--r--src/common/config.odin1
-rw-r--r--src/common/pool.odin2
-rw-r--r--src/index/clone.odin3
-rw-r--r--src/main.odin2
-rw-r--r--src/server/documents.odin2
-rw-r--r--src/server/requests.odin3
-rw-r--r--src/server/types.odin15
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 {