From 4f7d4b77252a6f5bcce6f9e81f982f1aff3852e1 Mon Sep 17 00:00:00 2001 From: agra Date: Sun, 31 May 2026 11:55:58 +0300 Subject: [PATCH] lsp/sema: analyse struct method bodies (record their references) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit analyzeTopLevelDecl skipped struct_decl entirely, so identifiers used inside method bodies were never recorded as references — find-references (and reference-based features) missed method callers. Each method body is now analysed in its own scope. Verified: references to generate_legal_moves now include game.sx's call inside update_valid_targets. --- src/sema.zig | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/sema.zig b/src/sema.zig index a7184e7..ecc967d 100644 --- a/src/sema.zig +++ b/src/sema.zig @@ -690,7 +690,20 @@ pub const Analyzer = struct { try self.analyzeNode(val); } }, - .enum_decl, .struct_decl, .union_decl, .array_type_expr, .slice_type_expr, .array_literal, .parameterized_type_expr, .index_expr, .slice_expr, .insert_expr, .ufcs_alias => {}, + .struct_decl => |sd| { + // Analyse method bodies (each in its own scope) so identifiers + // used inside them are recorded as references. + for (sd.methods) |mnode| { + if (mnode.data == .fn_decl) { + const m = mnode.data.fn_decl; + try self.pushScope(); + try self.analyzeParams(m.params); + try self.analyzeNode(m.body); + self.popScope(); + } + } + }, + .enum_decl, .union_decl, .array_type_expr, .slice_type_expr, .array_literal, .parameterized_type_expr, .index_expr, .slice_expr, .insert_expr, .ufcs_alias => {}, .namespace_decl => |ns| { try self.pushScope(); for (ns.decls) |d| {