diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-07-31 19:38:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-31 19:38:44 +0200 |
| commit | bf0723a5e439e7f94842d02fbf9b77008264aaf0 (patch) | |
| tree | fb3ac5c695020ec4a078f3b9d6ff4bedfeb29872 /src/server | |
| parent | bf97dfbc6f660b52957e965ce4b80ddeba405b2b (diff) | |
| parent | 7d188d00fc6ba0e45a94bef18dd44e4f1767652e (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.odin | 18 | ||||
| -rw-r--r-- | src/server/completion.odin | 2 | ||||
| -rw-r--r-- | src/server/file_resolve.odin | 14 | ||||
| -rw-r--r-- | src/server/semantic_tokens.odin | 2 |
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: |