>>> hare-lsp: Building community/hare-lsp 0.2.1-r0 (using abuild 3.18.0_rc3-r1) started Fri, 17 Jul 2026 21:56:50 +0000 >>> hare-lsp: Validating /home/buildozer/aports/community/hare-lsp/APKBUILD... >>> hare-lsp: Analyzing dependencies... >>> hare-lsp: Installing for build: build-base hare hare-json (1/6) Installing qbe (1.3-r1) (2/6) Installing harec (0.26.0-r0) (3/6) Installing hare (0.26.0.1-r0) (4/6) Installing hare-json (0.26.0.0-r0) (5/6) Installing .makedepends-hare-lsp (20260717.215652) (6/6) Installing hare-vim (0_git20241209-r0) Executing busybox-1.38.0-r1.trigger OK: 400.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.2.1.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) saving to '/var/cache/distfiles/edge/hare-lsp-0.2.1.tar.gz.part' hare-lsp-0.2.1.tar.g 100% |********************************| 37380 0:00:00 ETA '/var/cache/distfiles/edge/hare-lsp-0.2.1.tar.gz.part' saved /var/cache/distfiles/edge/hare-lsp-0.2.1.tar.gz: OK >>> hare-lsp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/hare-lsp-0.2.1.tar.gz /var/cache/distfiles/edge/hare-lsp-0.2.1.tar.gz: OK >>> hare-lsp: Unpacking /var/cache/distfiles/edge/hare-lsp-0.2.1.tar.gz... hare build -a riscv64 -Ro hare-lsp ./lsp/server/ hare build -Ro hare-lsp ./lsp/server/ hare test ./lsp/server Running 9/9 tests: test_document_symbols.................[2026-07-17 21:57:13] DocumentSymbol request for file://samples/simple.ha PASS in 0.064144575s test_find_identifiers.................PASS in 0.002954797s test_find_in_ast......................PASS in 0.057435282s test_find_module_sources..............PASS in 0.000502379s test_find_symbol_in_external_module...PASS in 0.029628830s test_handle_definition................[2026-07-17 21:57:13] Definition request for file://samples/multifile/main.ha:4:17 [2026-07-17 21:57:13] Searching same module: samples/multifile for 'helper_function' PASS in 0.002428097s test_inlay_hints......................[2026-07-17 21:57:13] InlayHint request for file://samples/simple.ha range 10:0-17:0 [2026-07-17 21:57:13] InlayHint request for file://samples/simple.ha range 22:0-31:0 [2026-07-17 21:57:13] InlayHint request for file://samples/simple.ha range 32:0-40:0 PASS in 0.189789047s test_tagged_definition................[2026-07-17 21:57:14] Definition request for file://samples/tagged/main+test.ha:3:12 [2026-07-17 21:57:14] Searching same module: samples/tagged for 'test_config' [2026-07-17 21:57:14] Definition request for file://samples/tagged/untagged.ha:4:12 [2026-07-17 21:57:14] Searching same module: samples/tagged for 'test_config' [2026-07-17 21:57:14] Symbol not found: test_config [2026-07-17 21:57:14] Definition request for file://samples/tagged/+test/helper_test.ha:3:16 [2026-07-17 21:57:14] Searching same module: samples/tagged for 'helper_add' PASS in 0.007842112s test_type_definition..................[2026-07-17 21:57:14] Type definition request for file://samples/field_access.ha:15:17 [2026-07-17 21:57:14] Type definition request for file://samples/field_access.ha:20:18 [2026-07-17 21:57:14] Type definition request for file://samples/field_access.ha:12:19 [2026-07-17 21:57:14] Type definition request for file://samples/imports.ha:7:7 [2026-07-17 21:57:14] Cannot extract type name from type_info: [2026-07-17 21:57:14] Type definition request for file://samples/type_annotation.ha:9:9 PASS in 0.010089470s 9 passed; 0 failed; 9 completed in 0.364814589s hare test ./lsp/client Running 2/2 tests: test_diagnostics.......[2026-07-17 21:57:16] Listening on /tmp/test-hare-lsp.sock [2026-07-17 21:57:16] Listening for connections... [2026-07-17 21:57:16] Client connected [2026-07-17 21:57:16] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2026-07-17 21:57:16] >>> Handling method: initialize [2026-07-17 21:57:16] >>> Request ID: 1 [2026-07-17 21:57:16] >>> Params: {"processId":null,"capabilities":{}} [2026-07-17 21:57:16] Initializing server [2026-07-17 21:57:16] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2026-07-17 21:57:16] >>> Handling method: initialized [2026-07-17 21:57:16] >>> Request is a notification (no ID) [2026-07-17 21:57:16] >>> Params: {} [2026-07-17 21:57:16] >>> 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-07-17 21:57:16] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:16] >>> Request is a notification (no ID) [2026-07-17 21:57:16] >>> 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-07-17 21:57:16] >>> didOpen: file://samples/invalid_syntax.ha [2026-07-17 21:57:16] Parse error: samples/invalid_syntax.ha:8:9: syntax error: Unexpected 'fmt', was expecting ';' [2026-07-17 21:57:16] >>> 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-07-17 21:57:16] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:16] >>> Request is a notification (no ID) [2026-07-17 21:57:16] >>> 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-07-17 21:57:16] >>> didOpen: file://samples/simple.ha [PASS in 0.207821769s test_goto_definition...[2026-07-17 21:57:16] Listening on /tmp/test-hare-lsp.sock [2026-07-17 21:57:16] Listening for connections... [2026-07-17 21:57:17] Client connected [2026-07-17 21:57:17] >>> Incoming request: {"id":1,"method":"initialize","params":{"processId":null,"capabilities":{}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: initialize [2026-07-17 21:57:17] >>> Request ID: 1 [2026-07-17 21:57:17] >>> Params: {"processId":null,"capabilities":{}} [2026-07-17 21:57:17] Initializing server [2026-07-17 21:57:17] >>> Incoming request: {"method":"initialized","params":{},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: initialized [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> Params: {} [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":2,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 2 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":12,"character":14}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:12:14 [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":3,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 3 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":46}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:11:46 [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":4,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 4 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":11,"character":7}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:11:7 [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":5,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 5 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":15,"character":6}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:15:6 [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":6,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 6 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":26,"character":15}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:26:15 [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> Handling method: textDocument/didOpen [2026-07-17 21:57:17] >>> Request is a notification (no ID) [2026-07-17 21:57:17] >>> 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-07-17 21:57:17] >>> didOpen: file://samples/simple.ha [2026-07-17 21:57:17] >>> Incoming request: {"id":7,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}},"jsonrpc":"2.0"} [2026-07-17 21:57:17] >>> Handling method: textDocument/definition [2026-07-17 21:57:17] >>> Request ID: 7 [2026-07-17 21:57:17] >>> Params: {"textDocument":{"uri":"file://samples/simple.ha"},"position":{"line":4,"character":6}} [2026-07-17 21:57:17] Definition request for file://samples/simple.ha:4:6 [PASS in 0.168607688s 2 passed; 0 failed; 2 completed in 0.376429457s >>> hare-lsp: Entering fakeroot... install -Dm755 hare-lsp -t /home/buildozer/aports/community/hare-lsp/pkg/hare-lsp/usr/bin/ install -Dm644 LICENCE -t /home/buildozer/aports/community/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: 3.5 MB >>> hare-lsp*: Compressing data... >>> hare-lsp*: Create checksum... >>> hare-lsp*: Create hare-lsp-0.2.1-r0.apk >>> hare-lsp: Build complete at Fri, 17 Jul 2026 21:57:17 +0000 elapsed time 0h 0m 27s >>> hare-lsp: Cleaning up srcdir >>> hare-lsp: Cleaning up pkgdir >>> hare-lsp: Cleaning up tmpdir >>> hare-lsp: Uninstalling dependencies... (1/6) Purging .makedepends-hare-lsp (20260717.215652) (2/6) Purging hare-vim (0_git20241209-r0) (3/6) Purging hare (0.26.0.1-r0) (4/6) Purging harec (0.26.0-r0) (5/6) Purging qbe (1.3-r1) (6/6) Purging hare-json (0.26.0.0-r0) Executing busybox-1.38.0-r1.trigger OK: 392.0 MiB in 106 packages >>> hare-lsp: Updating the community/riscv64 repository index... >>> hare-lsp: Signing the index...