From 34dc6495d51d8525bd2bc1059a31a27588b08e0c Mon Sep 17 00:00:00 2001 From: DanielGavin Date: Sat, 6 Apr 2024 10:57:25 +0200 Subject: Fix issues with -> not being parsed correctly with call expression --- src/server/analysis.odin | 4 ++-- tests/objc_test.odin | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 tests/objc_test.odin diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 81f2df9..7ffc177 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -4460,10 +4460,10 @@ fallback_position_context_completion :: proc( } else if c == '[' && bracket_count == 0 { start = i + 1 break - } else if c == ']' && !last_dot { + } else if c == ']' && !last_dot && !last_arrow { start = i + 1 break - } else if c == ')' && !last_dot { + } else if c == ')' && !last_dot && !last_arrow { start = i + 1 break } else if c == ')' { diff --git a/tests/objc_test.odin b/tests/objc_test.odin new file mode 100644 index 0000000..c1b38bc --- /dev/null +++ b/tests/objc_test.odin @@ -0,0 +1,48 @@ +package tests + +import "core:fmt" +import "core:testing" + +import test "src:testing" + + +@(test) +cobj_return_type_with_selector_expression :: proc(t: ^testing.T) { + packages := make([dynamic]test.Package) + + append( + &packages, + test.Package { + pkg = "my_package", + source = `package my_package + @(objc_class="NSWindow") + Window :: struct { dummy: int} + + @(objc_type=Window, objc_name="alloc", objc_is_class_method=true) + Window_alloc :: proc "c" () -> ^Window { + } + @(objc_type=Window, objc_name="initWithContentRect") + Window_initWithContentRect :: proc (self: ^Window, contentRect: Rect, styleMask: WindowStyleMask, backing: BackingStoreType, doDefer: BOOL) -> ^Window { + } + `, + }, + ) + + source := test.Source { + main = `package test + import "my_package" + + main :: proc() { + window := my_package.Window.alloc()->{*} + } + `, + packages = packages[:], + } + + test.expect_completion_details( + t, + &source, + "->", + {"Window.initWithContentRect: my_package.Window_initWithContentRect"}, + ) +} -- cgit v1.2.3