From 03e36a13ae9b26cb5f9162365e68d9396b672415 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Tue, 12 Mar 2024 15:08:32 +0100 Subject: [PATCH] feat: Warn about unreferenced imports closes #272 --- CHANGELOG.md | 1 + example.png | Bin 44166 -> 44081 bytes src/Parser.zig | 108 ++++++++++++++++++-- src/Reporter.zig | 1 + src/ext/clap | 2 +- tests/009-gc.buzz | 3 +- tests/032-debug.buzz | 5 +- tests/058-ffi.buzz | 1 - tests/066-object-generics.buzz | 1 - tests/069-named-expr.buzz | 1 - tests/compile_errors/028-unused-import.buzz | 7 ++ 11 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 tests/compile_errors/028-unused-import.buzz diff --git a/CHANGELOG.md b/CHANGELOG.md index 5743dd5b..3bee95cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ var value = from { ``` - `recursive_call_limit` build option limit recursive calls (default to 200) - Compiler will warn about code after a `return` statement +- Compiler will warn about unreferenced imports (https://github.com/buzz-language/buzz/issues/272) - `namespace` (https://github.com/buzz-language/buzz/issues/271): if a script exports at least one symbol, it has to define a namespace for the script with `namespace mynamespace` - By default, imported symbols from another script will be under `libprefix.XXXX` - When importing something, you can still redefine its namespace prefix with `import "..." as mynewnamespace` or remove it altogether with `import "..." _` diff --git a/example.png b/example.png index 441fe1c1bace01efb777892e77f06677682f39ec..fb407fd20606e2c8e941ffea6eb2223e3b73b00d 100644 GIT binary patch literal 44081 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

!c(GE&*N;AeE>7_ZsYWky@X3 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 literal 44166 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 diff --git a/src/Parser.zig b/src/Parser.zig index 05354a82..77ec928c 100644 --- a/src/Parser.zig +++ b/src/Parser.zig @@ -189,14 +189,14 @@ pub const Global = struct { name_token: Ast.TokenIndex, location: Ast.TokenIndex, type_def: *obj.ObjTypeDef, + export_alias: ?[]const u8 = null, + imported_from: ?[]const u8 = null, + initialized: bool = false, exported: bool = false, - export_alias: ?[]const u8 = null, hidden: bool = false, constant: bool, referenced: bool = false, - // When resolving a placeholder, the start of the resolution is the global - // If `constant` is true, we can search for any `.Assignment` link and fail then. pub fn isReferenced(self: Global) bool { const function_type = if (self.type_def.def_type == .Function) @@ -266,6 +266,11 @@ pub const ScriptImport = struct { absolute_path: *obj.ObjString, }; +const LocalScriptImport = struct { + referenced: bool = false, + location: Ast.TokenIndex, +}; + pub var user_library_paths: ?[][]const u8 = null; pub const DeclarationTerminator = enum { @@ -473,8 +478,10 @@ script_name: []const u8 = undefined, imported: bool = false, // True when parsing a declaration inside an export statement exporting: bool = false, -// Cached imported functions +// Cached imported functions (shared across instances of Parser) imports: *std.StringHashMap(ScriptImport), +// Keep track of things imported by the current script +script_imports: std.StringHashMap(LocalScriptImport), test_count: u64 = 0, // FIXME: use SinglyLinkedList instead of heap allocated ptrs current: ?*Frame = null, @@ -497,6 +504,7 @@ pub fn init( var self = Self{ .gc = gc, .imports = imports, + .script_imports = std.StringHashMap(LocalScriptImport).init(gc.allocator), .imported = imported, .globals = std.ArrayList(Global).init(gc.allocator), .flavor = flavor, @@ -515,6 +523,7 @@ pub fn init( pub fn deinit(self: *Self) void { self.globals.deinit(); + self.script_imports.deinit(); if (self.opt_jumps) |jumps| { jumps.deinit(); } @@ -893,6 +902,21 @@ pub fn parse(self: *Self, source: []const u8, file_name: []const u8) !?Ast { } } + // Check there's no unreferenced imports + var it = self.script_imports.iterator(); + while (it.next()) |kv| { + if (!kv.value_ptr.*.referenced) { + const location = self.ast.tokens.get(kv.value_ptr.*.location); + + self.reporter.warnFmt( + .unused_import, + location, + "Unused import", + .{}, + ); + } + } + self.ast.nodes.items(.components)[function_node].Function.entry = entry; self.ast.root = if (self.reporter.had_error) null else self.endFrame(); @@ -2956,8 +2980,22 @@ fn parseUserType(self: *Self, instance: bool) Error!Ast.Node.Index { // Search for a global with that name if (try self.resolveGlobal(null, self.ast.tokens.items(.lexeme)[user_type_name])) |slot| { - var_type = self.globals.items[slot].type_def; + const global = self.globals.items[slot]; + + var_type = global.type_def; global_slot = @intCast(slot); + + if (global.imported_from != null and self.script_imports.get(global.imported_from.?) != null) { + const imported_from = global.imported_from.?; + + try self.script_imports.put( + imported_from, + .{ + .location = self.script_imports.get(imported_from).?.location, + .referenced = true, + }, + ); + } } // If none found, create a placeholder @@ -4729,10 +4767,24 @@ fn namedVariable(self: *Self, name: Ast.TokenIndex, can_assign: bool) Error!Ast. slot_type = .UpValue; slot_constant = self.current.?.enclosing.?.locals[self.current.?.upvalues[uslot].index].constant; } else if (try self.resolveGlobal(null, self.ast.tokens.items(.lexeme)[name])) |uslot| { - var_def = self.globals.items[uslot].type_def; + const global = self.globals.items[uslot]; + + var_def = global.type_def; slot = uslot; slot_type = .Global; - slot_constant = self.globals.items[uslot].constant; + slot_constant = global.constant; + + if (global.imported_from != null and self.script_imports.get(global.imported_from.?) != null) { + const imported_from = global.imported_from.?; + + try self.script_imports.put( + imported_from, + .{ + .location = self.script_imports.get(imported_from).?.location, + .referenced = true, + }, + ); + } } else { slot = try self.declarePlaceholder(name, null); var_def = self.globals.items[slot].type_def; @@ -5794,10 +5846,22 @@ fn exportStatement(self: *Self) Error!Ast.Node.Index { // Search for a global with that name if (try self.resolveGlobal(null, self.ast.tokens.items(.lexeme)[identifier])) |slot| { const global = &self.globals.items[slot]; - global.referenced = true; - var alias: ?Ast.TokenIndex = null; + global.referenced = true; global.exported = true; + if (global.imported_from != null and self.script_imports.get(global.imported_from.?) != null) { + const imported_from = global.imported_from.?; + + try self.script_imports.put( + imported_from, + .{ + .location = self.script_imports.get(imported_from).?.location, + .referenced = true, + }, + ); + } + + var alias: ?Ast.TokenIndex = null; if (try self.match(.As)) { try self.consume(.Identifier, "Expected identifier after `as`."); @@ -7123,6 +7187,7 @@ fn readScript(self: *Self, file_name: []const u8) !?[2][]const u8 { fn importScript( self: *Self, + path_token: Ast.TokenIndex, file_name: []const u8, prefix: ?[]const u8, imported_symbols: *std.StringHashMap(Ast.Node.Index), @@ -7178,6 +7243,12 @@ fn importScript( } try self.imports.put(file_name, import.?); + try self.script_imports.put( + file_name, + .{ + .location = path_token, + }, + ); } // Caught up this parser with the import parser status @@ -7219,6 +7290,8 @@ fn importScript( prefix orelse global.prefix; } + global.imported_from = file_name; + // TODO: we're forced to import all and hide some because globals are indexed and not looked up by name at runtime // Only way to avoid this is to go back to named globals at runtime. Then again, is it worth it? try self.globals.append(global); @@ -7414,6 +7487,7 @@ fn importStatement(self: *Self) Error!Ast.Node.Index { const import = if (!self.reporter.had_error) try self.importScript( + path_token, file_name, if (prefix) |pr| self.ast.tokens.items(.lexeme)[pr] @@ -7618,7 +7692,21 @@ fn userVarDeclaration(self: *Self, _: bool, constant: bool) Error!Ast.Node.Index // Search for a global with that name if (var_type == null) { if (try self.resolveGlobal(null, self.ast.tokens.items(.lexeme)[user_type_name])) |slot| { - var_type = self.globals.items[slot].type_def; + const global = self.globals.items[slot]; + + var_type = global.type_def; + + if (global.imported_from != null and self.script_imports.get(global.imported_from.?) != null) { + const imported_from = global.imported_from.?; + + try self.script_imports.put( + imported_from, + .{ + .location = self.script_imports.get(imported_from).?.location, + .referenced = true, + }, + ); + } } } diff --git a/src/Reporter.zig b/src/Reporter.zig index 938b9965..d5c00905 100644 --- a/src/Reporter.zig +++ b/src/Reporter.zig @@ -107,6 +107,7 @@ pub const Error = enum(u8) { empty_import = 91, import_already_exists = 92, code_after_return = 93, + unused_import = 94, }; // Inspired by https://github.com/zesterer/ariadne diff --git a/src/ext/clap b/src/ext/clap index 9c23bcb5..209ba4da 160000 --- a/src/ext/clap +++ b/src/ext/clap @@ -1 +1 @@ -Subproject commit 9c23bcb5aebe0c2542b4de4472f60959974e2222 +Subproject commit 209ba4da76e46412acfe18f711cb0b041ff37f10 diff --git a/tests/009-gc.buzz b/tests/009-gc.buzz index 2dfe110f..94f7cddd 100644 --- a/tests/009-gc.buzz +++ b/tests/009-gc.buzz @@ -1,6 +1,5 @@ import "std"; -import "gc" as gc; -import "debug"; +import "gc"; bool collectorCalled = false; diff --git a/tests/032-debug.buzz b/tests/032-debug.buzz index 959b61b1..d5276338 100644 --- a/tests/032-debug.buzz +++ b/tests/032-debug.buzz @@ -1,6 +1,5 @@ -import "std"; -import "debug" as debug; -import "serialize"; +import "debug"; +| import "serialize"; | TODO: put back one debug.ast is reactivated | test "Get AST" { diff --git a/tests/058-ffi.buzz b/tests/058-ffi.buzz index 0e1c435b..32d388d3 100644 --- a/tests/058-ffi.buzz +++ b/tests/058-ffi.buzz @@ -1,6 +1,5 @@ import "std"; import "buffer" as _; -import "debug"; import "ffi"; | TODO: one zdef for one lib and multiple declarations diff --git a/tests/066-object-generics.buzz b/tests/066-object-generics.buzz index 209e5f43..72743e9d 100644 --- a/tests/066-object-generics.buzz +++ b/tests/066-object-generics.buzz @@ -1,5 +1,4 @@ import "std"; -import "debug"; object Payload:: { {K: V} data, diff --git a/tests/069-named-expr.buzz b/tests/069-named-expr.buzz index f6795702..0266077c 100644 --- a/tests/069-named-expr.buzz +++ b/tests/069-named-expr.buzz @@ -1,5 +1,4 @@ import "std"; -import "debug"; object Person { str name, diff --git a/tests/compile_errors/028-unused-import.buzz b/tests/compile_errors/028-unused-import.buzz new file mode 100644 index 00000000..d040807f --- /dev/null +++ b/tests/compile_errors/028-unused-import.buzz @@ -0,0 +1,7 @@ +| Unused import +import "math"; +import "std"; + +test "Doing nothing with the math import" { + std.print("hello"); +} \ No newline at end of file