aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/analysis.odin4
-rw-r--r--tests/objc_test.odin48
2 files changed, 50 insertions, 2 deletions
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"},
+ )
+}