zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3fcb4408a55f3d0fb27f69555c62da81b6e9339c (tree)
parent 055969b1015ec574b985a29f0b3af8a77fabff20
Author: mlugg <mlugg@mlugg.co.uk>
Date:   Mon, 24 Feb 2025 14:37:18 +0000

AstGen: improve 'file cannot be a tuple' source location

Instead of just reporting this on token 0, report it on the first
tuple-like field.

Diffstat:
Mlib/std/zig/AstGen.zig | 18++++++++----------
Atest/cases/compile_errors/file_level_tuple_with_decls.zig | 7+++++++
2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig @@ -5097,18 +5097,16 @@ fn structDeclInner( const gpa = astgen.gpa; const tree = astgen.tree; - { - const is_tuple = for (container_decl.ast.members) |member_node| { + is_tuple: { + const tuple_field_node = for (container_decl.ast.members) |member_node| { const container_field = tree.fullContainerField(member_node) orelse continue; - if (container_field.ast.tuple_like) break true; - } else false; + if (container_field.ast.tuple_like) break member_node; + } else break :is_tuple; - if (is_tuple) { - if (node == 0) { - return astgen.failTok(0, "file cannot be a tuple", .{}); - } else { - return tupleDecl(gz, scope, node, container_decl, layout, backing_int_node); - } + if (node == 0) { + return astgen.failNode(tuple_field_node, "file cannot be a tuple", .{}); + } else { + return tupleDecl(gz, scope, node, container_decl, layout, backing_int_node); } } diff --git a/test/cases/compile_errors/file_level_tuple_with_decls.zig b/test/cases/compile_errors/file_level_tuple_with_decls.zig @@ -0,0 +1,7 @@ +const std = @import("std"); + +u8, + +// error +// +// :3:1: error: file cannot be a tuple