aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-04-23 17:45:13 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2021-04-23 17:45:13 +0200
commit5e95c4203fe7c3128408f4e69f268850069deafc (patch)
treea3d634132a5574f40838b1b60a2a410779793b92 /src
parentf9ce5fd6cc6548bb4a1a332ea057a30be165b3d0 (diff)
semantic work
Diffstat (limited to 'src')
-rw-r--r--src/server/completion.odin3
-rw-r--r--src/server/semantic_tokens.odin16
2 files changed, 13 insertions, 6 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 4925bac..cf26b9c 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -79,6 +79,9 @@ get_completion_list :: proc(document: ^Document, position: common.Position, comp
if assign, ok := position_context.switch_type_stmt.tag.derived.(ast.Assign_Stmt); ok && assign.rhs != nil && len(assign.rhs) == 1 {
+ ast_context.use_globals = true;
+ ast_context.use_locals = true;
+
if symbol, ok := resolve_type_expression(&ast_context, assign.rhs[0]); ok {
if union_value, ok := symbol.value.(index.SymbolUnionValue); ok {
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index 86b184c..4feced5 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -182,7 +182,7 @@ resolve_and_write_ident :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder,
return;
}
-write_semantic_tokens :: proc{
+write_semantic_tokens :: proc {
write_semantic_tokens_node,
write_semantic_tokens_dynamic_array,
write_semantic_tokens_array,
@@ -208,7 +208,6 @@ write_semantic_tokens_stmt :: proc(node: ^ast.Stmt, builder: ^SemanticTokenBuild
ast_context.use_globals = true;
ast_context.use_locals = true;
builder.selector_member = false;
- builder.selector_package = false;
write_semantic_tokens_node(node, builder, ast_context);
}
@@ -542,13 +541,18 @@ write_semantic_selector :: proc(selector: ^ast.Selector_Expr, builder: ^Semantic
using ast;
- if ident, ok := selector.expr.derived.(Ident); ok {
+ if _, ok := selector.expr.derived.(Selector_Expr); !ok {
get_locals_at(builder.current_function, selector.expr, ast_context);
- builder.selector_member, builder.selector_package, ast_context.current_package = resolve_and_write_ident(selector.expr, builder, ast_context); //base
- if builder.selector_package && selector.field != nil && resolve_ident_is_variable(ast_context, selector.field^) {
- builder.selector_member = true;
+ if symbol, ok := resolve_type_expression(ast_context, selector.expr); ok {
+
+ #partial switch v in symbol.value {
+ case index.SymbolStructValue:
+ builder.selector_member = true;
+ }
+
}
+
} else {
write_semantic_tokens(selector.expr, builder, ast_context);
}