From 903bed931dddc8b3f7ad1fa87e57eca13375dd32 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Mon, 16 May 2022 19:42:08 +0200 Subject: [PATCH] report better error for package not found in stage2 --- src/Sema.zig | 15 +++++++++++++++ .../compile_errors/import_of_missing_package.zig | 10 ++++++++++ 2 files changed, 25 insertions(+) create mode 100644 test/cases/compile_errors/import_of_missing_package.zig diff --git a/src/Sema.zig b/src/Sema.zig index db3cfa6d40..2bacec01ff 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9839,6 +9839,21 @@ fn zirImport(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air. error.ImportOutsidePkgPath => { return sema.fail(block, operand_src, "import of file outside package path: '{s}'", .{operand}); }, + error.PackageNotFound => { + const cur_pkg = block.getFileScope().pkg; + const parent = if (cur_pkg == sema.mod.main_pkg or cur_pkg == sema.mod.root_pkg) + "root" + else if (cur_pkg.parent) |parent| blk: { + var it = parent.table.iterator(); + while (it.next()) |pkg| { + if (pkg.value_ptr.* == cur_pkg) { + break :blk pkg.key_ptr.*; + } + } + unreachable; + } else unreachable; + return sema.fail(block, operand_src, "no package named '{s}' available within package '{s}'", .{ operand, parent }); + }, else => { // TODO: these errors are file system errors; make sure an update() will // retry this and not cache the file system error, which may be transient. diff --git a/test/cases/compile_errors/import_of_missing_package.zig b/test/cases/compile_errors/import_of_missing_package.zig new file mode 100644 index 0000000000..d2a64638e8 --- /dev/null +++ b/test/cases/compile_errors/import_of_missing_package.zig @@ -0,0 +1,10 @@ +const foo = @import("foo"); +comptime { + _ = foo; +} + +// error +// backend=stage2 +// target=native +// +// :1:21: error: no package named 'foo' available within package 'root'