>>> hare-lsp: Building testing/hare-lsp 0.1.0-r0 (using abuild 3.16.0-r0) started Sat, 27 Dec 2025 17:59:24 +0000 >>> hare-lsp: Validating /home/buildozer/aports/testing/hare-lsp/APKBUILD... >>> hare-lsp: Analyzing dependencies... >>> hare-lsp: Installing for build: build-base hare hare-json (1/5) Installing qbe (1.2-r3) (2/5) Installing harec (0.25.2-r0) (3/5) Installing hare (0.25.2-r1) (4/5) Installing hare-json (0.25.2.0-r0) (5/5) Installing .makedepends-hare-lsp (20251227.175925) Executing busybox-1.37.0-r30.trigger OK: 447.7 MiB in 112 packages >>> hare-lsp: Cleaning up srcdir >>> hare-lsp: Cleaning up pkgdir >>> hare-lsp: Cleaning up tmpdir >>> hare-lsp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/hare-lsp-0.1.0.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) wget: server returned error: HTTP/1.1 404 Not Found >>> hare-lsp: Fetching hare-lsp-0.1.0.tar.gz::https://git.sr.ht/~whynothugo/hare-lsp/archive/v0.1.0.tar.gz Connecting to git.sr.ht (46.23.81.155:443) saving to '/var/cache/distfiles/edge/hare-lsp-0.1.0.tar.gz.part' hare-lsp-0.1.0.tar.g 100% |********************************| 29832 0:00:00 ETA '/var/cache/distfiles/edge/hare-lsp-0.1.0.tar.gz.part' saved /var/cache/distfiles/edge/hare-lsp-0.1.0.tar.gz: OK >>> hare-lsp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/hare-lsp-0.1.0.tar.gz /var/cache/distfiles/edge/hare-lsp-0.1.0.tar.gz: OK >>> hare-lsp: Unpacking /var/cache/distfiles/edge/hare-lsp-0.1.0.tar.gz... hare build -o hare-lsp ./lsp/server/ hare test ./lsp/server Running 19/19 tests: test_cross_file_same_module.........[2025-12-27 17:59:30] Definition request for file://samples/multifile/main.ha:4:17 [2025-12-27 17:59:30] Searching same module: samples/multifile for 'helper_function' PASS in 0.001636758s test_cross_module_definition........PASS in 0.019303637s test_cursor_on_qualifier_fmt........PASS in 0.000261226s test_definition_on_definition.......PASS in 0.002345424s test_document_symbol................[2025-12-27 17:59:30] DocumentSymbol request for file://samples/simple.ha PASS in 0.004345767s test_find_fmt_module_sources........PASS in 0.000274024s test_find_fmt_println...............PASS in 0.018710162s test_find_local_variable............PASS in 0.000372693s test_find_nested_variable...........PASS in 0.000511386s test_find_parameter.................PASS in 0.000321276s test_find_qualified_ident_local.....PASS in 0.000400357s test_find_qualified_ident_println...PASS in 0.000212267s test_forward_reference_definition...PASS in 0.000457523s test_goto_module_name...............PASS in 0.000591567s test_goto_qualified_module_name.....PASS in 0.000397221s test_match_case_binding.............PASS in 0.001480810s test_match_case_binding_str.........PASS in 0.001423040s test_tuple_unpack_definition........PASS in 0.000961399s test_tuple_unpack_second_element....PASS in 0.000898954s 19 passed; 0 failed; 19 completed in 0.054905491s hare test ./lsp/client Running 8/8 tests: test_diagnostics_cleared_on_valid_file...[2025-12-27 17:59:30] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:30] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 PASS in 0.106039687s test_diagnostics_on_invalid_syntax.......[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/invalid_syntax.ha","text":"// Sample file with intentional syntax error for testing diagnostics.\n\nuse fmt;\n\nexport fn main() void = {\n\t// Missing semicolon after the string:\n\tconst message = \"hello\"\n\tfmt::println(message)!;\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/invalid_syntax.ha","text":"// Sample file with intentional syntax error for testing diagnostics.\n\nuse fmt;\n\nexport fn main() void = {\n\t// Missing semicolon after the string:\n\tconst message = \"hello\"\n\tfmt::println(message)!;\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/invalid_syntax.ha [2025-12-27 17:59:31] Parse error: samples/invalid_syntax.ha:8:9: syntax error: Unexpected 'fmt', was expecting ';' [2025-12-PASS in 0.104312628s test_goto_local_variable.................[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:12:14 [PASS in 0.108316012s test_goto_loop_variable..................[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:15:6 PASS in 0.108146965s test_goto_nested_scope_variable..........[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:26:15 PASS in 0.108334463s test_goto_on_definition..................[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:11:7 PASS in 0.107997599s test_goto_parameter......................[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:11:46 PASS in 0.108145700s test_goto_top_level_constant.............[2025-12-27 17:59:31] Listening on /tmp/test-hare-lsp.sock [2025-12-27 17:59:31] Listening for connections... [2025-12-27 17:59:31] Client connected [2025-12-27 17:59:31] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialize [2025-12-27 17:59:31] >>> Request ID: 1 [2025-12-27 17:59:31] >>> Params: {"processId":null,"capabilities":{}} [2025-12-27 17:59:31] Initializing server [2025-12-27 17:59:31] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: initialized [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {} [2025-12-27 17:59:31] >>> Incoming request: {"method":"textDocument/didOpen","params":{"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/didOpen [2025-12-27 17:59:31] >>> Request is a notification (no ID) [2025-12-27 17:59:31] >>> Params: {"textDocument":{"languageId":"hare","version":1,"uri":"file://samples/simple.ha","text":"// Sample file for testing basic symbol resolution\nuse fmt;\n\n// Top-level constant\nconst MESSAGE: str = \"Hello, world!\";\n\n// Top-level global\nlet counter: int = 0;\n\n// Function with parameters and local variables\nexport fn greet(name: str, count: int) void = {\n\tconst greeting = fmt::asprintf(\"Hello, {}!\", name)!;\n\tdefer free(greeting);\n\n\tlet i: int = 0;\n\tfor (i < count; i += 1) {\n\t\tfmt::println(greeting)!;\n\t};\n};\n\n// Function with nested scopes\nexport fn process_data() void = {\n\tlet x: int = 10;\n\n\tif (x > 5) {\n\t\tconst msg = \"x is large\";\n\t\tfmt::println(msg)!;\n\t} else {\n\t\tconst msg = \"x is small\";\n\t\tfmt::println(msg)!;\n\t};\n\n\t// Match expression with bindings\n\tconst value: (int | str) = 42;\n\tmatch (value) {\n\tcase let n: int =>\n\t\tfmt::printfln(\"Got number: {}\", n)!;\n\tcase let s: str =>\n\t\tfmt::printfln(\"Got string: {}\", s)!;\n\t};\n};\n"}} [2025-12-27 17:59:31] >>> didOpen: file://samples/simple.ha [2025-12-27 17:59:31] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}},"jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: textDocument/definition [2025-12-27 17:59:31] >>> Request ID: 2 [2025-12-27 17:59:31] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}} [2025-12-27 17:59:31] Definition request for file://samples/simple.ha:4:6 [2025-12-27 17:59:31] >>> Incoming request: {"id":3,"method":"shutdown","jsonrpc":"2.0"} [2025-12-27 17:59:31] >>> Handling method: shutdown [2025-12-27 17:59:31] >>> Request ID: 3 [2025-12-27 17:59:31] >>> No params [2025-12-27 17:59:31] Shutdown requested [2025-12-27 17PASS in 0.108247415s 8 passed; 0 failed; 8 completed in 0.859540469s >>> hare-lsp: Entering fakeroot... install -Dm755 hare-lsp -t /home/buildozer/aports/testing/hare-lsp/pkg/hare-lsp/usr/bin/ >>> hare-lsp*: Running postcheck for hare-lsp >>> hare-lsp*: Preparing package hare-lsp... >>> hare-lsp*: Stripping binaries >>> hare-lsp*: Scanning shared objects >>> hare-lsp*: Tracing dependencies... >>> hare-lsp*: Package size: 1.8 MB >>> hare-lsp*: Compressing data... >>> hare-lsp*: Create checksum... >>> hare-lsp*: Create hare-lsp-0.1.0-r0.apk >>> hare-lsp: Build complete at Sat, 27 Dec 2025 17:59:32 +0000 elapsed time 0h 0m 8s >>> hare-lsp: Cleaning up srcdir >>> hare-lsp: Cleaning up pkgdir >>> hare-lsp: Uninstalling dependencies... (1/5) Purging .makedepends-hare-lsp (20251227.175925) (2/5) Purging hare (0.25.2-r1) (3/5) Purging harec (0.25.2-r0) (4/5) Purging qbe (1.2-r3) (5/5) Purging hare-json (0.25.2.0-r0) Executing busybox-1.37.0-r30.trigger OK: 441.2 MiB in 107 packages >>> hare-lsp: Updating the testing/x86_64 repository index... >>> hare-lsp: Signing the index...