aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-07-31 19:38:44 +0200
committerGitHub <noreply@github.com>2024-07-31 19:38:44 +0200
commitbf0723a5e439e7f94842d02fbf9b77008264aaf0 (patch)
treefb3ac5c695020ec4a078f3b9d6ff4bedfeb29872 /src/server
parentbf97dfbc6f660b52957e965ce4b80ddeba405b2b (diff)
parent7d188d00fc6ba0e45a94bef18dd44e4f1767652e (diff)
Merge pull request #454 from thetarnav/or-branch-expr-hover
Resolve type in assignments with or_else, or_continue and or_break
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin18
-rw-r--r--src/server/completion.odin2
-rw-r--r--src/server/file_resolve.odin14
-rw-r--r--src/server/semantic_tokens.odin2
4 files changed, 21 insertions, 15 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 8cc5bee..7a970f2 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -3203,6 +3203,10 @@ get_generic_assignment :: proc(
#partial switch v in value.derived {
case ^Or_Return_Expr:
get_generic_assignment(file, v.expr, ast_context, results, calls)
+ case ^Or_Else_Expr:
+ get_generic_assignment(file, v.x, ast_context, results, calls)
+ case ^Or_Branch_Expr:
+ get_generic_assignment(file, v.expr, ast_context, results, calls)
case ^Call_Expr:
old_call := ast_context.call
ast_context.call = cast(^ast.Call_Expr)value
@@ -5229,22 +5233,22 @@ get_document_position_node :: proc(
position_context.implicit = true
position_context.implicit_selector_expr = n
get_document_position(n.field, position_context)
- case ^ast.Or_Else_Expr:
+ case ^Or_Else_Expr:
get_document_position(n.x, position_context)
get_document_position(n.y, position_context)
- case ^ast.Or_Return_Expr:
+ case ^Or_Return_Expr:
+ get_document_position(n.expr, position_context)
+ case ^Or_Branch_Expr:
+ get_document_position_label(n.label, position_context)
get_document_position(n.expr, position_context)
- case ^ast.Bit_Field_Type:
+ case ^Bit_Field_Type:
position_context.bit_field_type = n
get_document_position(n.backing_type, position_context)
get_document_position(n.fields, position_context)
- case ^ast.Bit_Field_Field:
+ case ^Bit_Field_Field:
get_document_position(n.name, position_context)
get_document_position(n.type, position_context)
get_document_position(n.bit_size, position_context)
- case ^ast.Or_Branch_Expr:
- get_document_position_label(n.label, position_context)
- get_document_position(n.expr, position_context)
case:
}
}
diff --git a/src/server/completion.odin b/src/server/completion.odin
index be8b9ab..030a361 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -2284,6 +2284,8 @@ language_keywords: []string = {
"using",
"or_return",
"or_else",
+ "or_continue",
+ "or_break"
}
swizzle_color_map: map[u8]bool = {
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index 09da787..588d7e3 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -510,22 +510,22 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) {
case ^Map_Type:
resolve_node(n.key, data)
resolve_node(n.value, data)
- case ^ast.Or_Else_Expr:
+ case ^Or_Else_Expr:
resolve_node(n.x, data)
resolve_node(n.y, data)
- case ^ast.Or_Return_Expr:
+ case ^Or_Return_Expr:
resolve_node(n.expr, data)
- case ^ast.Bit_Field_Type:
+ case ^Or_Branch_Expr:
+ resolve_node(n.expr, data)
+ resolve_node(n.label, data)
+ case ^Bit_Field_Type:
data.position_context.bit_field_type = n
resolve_node(n.backing_type, data)
resolve_nodes(n.fields, data)
- case ^ast.Bit_Field_Field:
+ case ^Bit_Field_Field:
resolve_node(n.name, data)
resolve_node(n.type, data)
resolve_node(n.bit_size, data)
- case ^ast.Or_Branch_Expr:
- resolve_node(n.expr, data)
- resolve_node(n.label, data)
case:
}
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index 4edb6ea..8b97946 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -374,7 +374,7 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder) {
case ^Or_Else_Expr:
visit_node(n.x, builder)
visit_node(n.y, builder)
- case ^ast.Or_Branch_Expr:
+ case ^Or_Branch_Expr:
visit_node(n.expr, builder)
visit_node(n.label, builder)
case ^Ternary_If_Expr: