>>> hare-lsp: Building testing/hare-lsp 0.2.0-r0 (using abuild 3.16.0-r0) started Sat, 14 Feb 2026 22:51:32 +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.26.0-r0) (3/5) Installing hare (0.26.0-r1) (4/5) Installing hare-json (0.25.2.0-r0) (5/5) Installing .makedepends-hare-lsp (20260214.225134) Executing busybox-1.37.0-r31.trigger OK: 448.1 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.2.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.2.0.tar.gz::https://git.sr.ht/~whynothugo/hare-lsp/archive/v0.2.0.tar.gz Connecting to git.sr.ht (46.23.81.155:443) saving to '/var/cache/distfiles/edge/hare-lsp-0.2.0.tar.gz.part' hare-lsp-0.2.0.tar.g 100% |********************************| 28648 0:00:00 ETA '/var/cache/distfiles/edge/hare-lsp-0.2.0.tar.gz.part' saved /var/cache/distfiles/edge/hare-lsp-0.2.0.tar.gz: OK >>> hare-lsp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/hare-lsp-0.2.0.tar.gz /var/cache/distfiles/edge/hare-lsp-0.2.0.tar.gz: OK >>> hare-lsp: Unpacking /var/cache/distfiles/edge/hare-lsp-0.2.0.tar.gz... hare build -o hare-lsp ./lsp/server/ hare build -o hare-lsp ./lsp/server/ hare test ./lsp/server Running 6/6 tests: test_document_symbols.................[2026-02-14 22:51:38] DocumentSymbol request for file://samples/simple.ha PASS in 0.004813871s test_find_identifiers.................PASS in 0.002442797s test_find_in_ast......................PASS in 0.010964921s test_find_module_sources..............PASS in 0.000325364s test_find_symbol_in_external_module...PASS in 0.020478012s test_handle_definition................[2026-02-14 22:51:38] Definition request for file://samples/multifile/main.ha:4:17 [2026-02-14 22:51:38] Searching same module: samples/multifile for 'helper_function' PASS in 0.001495563s 6 passed; 0 failed; 6 completed in 0.040520528s hare test ./lsp/client Running 2/2 tests: test_diagnostics.......[2026-02-14 22:51:39] Listening on /tmp/test-hare-lsp.sock [2026-02-14 22:51:39] Listening for connections... [2026-02-14 22:51:39] Client connected [2026-02-14 22:51:39] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: initialize [2026-02-14 22:51:39] >>> Request ID: 1 [2026-02-14 22:51:39] >>> Params: {"processId":null,"capabilities":{}} [2026-02-14 22:51:39] Initializing server [2026-02-14 22:51:39] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: initialized [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> Params: {} [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/invalid_syntax.ha [2026-02-14 22:51:39] Parse error: samples/invalid_syntax.ha:8:9: syntax error: Unexpected 'fmt', was expecting ';' [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha PASS in 0.108687070s test_goto_definition...[2026-02-14 22:51:39] Listening on /tmp/test-hare-lsp.sock [2026-02-14 22:51:39] Listening for connections... [2026-02-14 22:51:39] Client connected [2026-02-14 22:51:39] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: initialize [2026-02-14 22:51:39] >>> Request ID: 1 [2026-02-14 22:51:39] >>> Params: {"processId":null,"capabilities":{}} [2026-02-14 22:51:39] Initializing server [2026-02-14 22:51:39] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: initialized [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> Params: {} [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 2 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:12:14 [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":3,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 3 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:11:46 [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":4,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 4 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:11:7 [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":5,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 5 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:15:6 [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":6,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 6 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:26:15 [2026-02-14 22:51:39] >>> 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"} [2026-02-14 22:51:39] >>> Handling method: textDocument/didOpen [2026-02-14 22:51:39] >>> Request is a notification (no ID) [2026-02-14 22:51:39] >>> 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"}} [2026-02-14 22:51:39] >>> didOpen: file://samples/simple.ha [2026-02-14 22:51:39] >>> Incoming request: {"id":7,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}},"jsonrpc":"2.0"} [2026-02-14 22:51:39] >>> Handling method: textDocument/definition [2026-02-14 22:51:39] >>> Request ID: 7 [2026-02-14 22:51:39] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}} [2026-02-14 22:51:39] Definition request for file://samples/simple.ha:4:6 PASS in 0.142278193s 2 passed; 0 failed; 2 completed in 0.250965263s >>> hare-lsp: Entering fakeroot... install -Dm755 hare-lsp -t /home/buildozer/aports/testing/hare-lsp/pkg/hare-lsp/usr/bin/ install -Dm644 LICENCE -t /home/buildozer/aports/testing/hare-lsp/pkg/hare-lsp/usr/share/licenses/hare-lsp/ >>> 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.2.0-r0.apk >>> hare-lsp: Build complete at Sat, 14 Feb 2026 22:51:39 +0000 elapsed time 0h 0m 7s >>> hare-lsp: Cleaning up srcdir >>> hare-lsp: Cleaning up pkgdir >>> hare-lsp: Cleaning up tmpdir >>> hare-lsp: Uninstalling dependencies... (1/5) Purging .makedepends-hare-lsp (20260214.225134) (2/5) Purging hare (0.26.0-r1) (3/5) Purging harec (0.26.0-r0) (4/5) Purging qbe (1.2-r3) (5/5) Purging hare-json (0.25.2.0-r0) Executing busybox-1.37.0-r31.trigger OK: 441.3 MiB in 107 packages >>> hare-lsp: Updating the testing/x86_64 repository index... >>> hare-lsp: Signing the index...