From 01e247bb7a4142713fba8ac2c60fb0085816078d Mon Sep 17 00:00:00 2001 From: Brad Lewis <22850972+BradLewis@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:14:01 -0400 Subject: Correct implicit selector expressions within binary expressions --- src/server/analysis.odin | 8 +++++--- tests/hover_test.odin | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 856f0ae..113f913 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -2275,10 +2275,12 @@ resolve_implicit_selector :: proc( } if position_context.binary != nil { - if position_in_node(position_context.binary.left, position_context.position) { + if position_in_node(position_context.binary, position_context.position) { + // We resolve whichever is not the implicit_selector + if implicit, ok := position_context.binary.left.derived.(^ast.Implicit_Selector_Expr); ok { + return resolve_type_expression(ast_context, position_context.binary.right) + } return resolve_type_expression(ast_context, position_context.binary.left) - } else if position_in_node(position_context.binary.left, position_context.position) { - return resolve_type_expression(ast_context, position_context.binary.right) } } diff --git a/tests/hover_test.odin b/tests/hover_test.odin index 3f6bb3b..402e38a 100644 --- a/tests/hover_test.odin +++ b/tests/hover_test.odin @@ -4802,6 +4802,25 @@ ast_hover_proc_group_with_generic_type_from_proc_param :: proc(t: ^testing.T) { } test.expect_hover(t, &source, "test.append: proc(array: ^$T/[dynamic]$E, arg: E)") } + +@(test) +ast_hover_enum_implicit_if_statement :: proc(t: ^testing.T) { + source := test.Source { + main = `package test + Foo :: enum { + A, + B, + } + + main :: proc() { + foo: Foo + if foo == .A{*} { + } + } + `, + } + test.expect_hover(t, &source, "test.Foo: .A") +} /* Waiting for odin fix -- cgit v1.2.3