From 0140f7a8d4c3e6dd5bcb070b2f532412af1d2344 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 14 Apr 2026 12:45:26 +0300 Subject: [PATCH] parser: import : warning err (fixes #24110) --- ...mported_symbol_named_arg_unused_import.out | 1 + .../foo/middleware/logger.v | 5 +++++ .../main.v | 20 +++++++++++++++++++ .../middleware/logger.v | 5 +++++ vlib/v/parser/module.v | 20 +++++++++++++------ 5 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import.out create mode 100644 vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/foo/middleware/logger.v create mode 100644 vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/main.v create mode 100644 vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/middleware/logger.v diff --git a/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import.out b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import.out new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import.out @@ -0,0 +1 @@ + diff --git a/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/foo/middleware/logger.v b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/foo/middleware/logger.v new file mode 100644 index 000000000..d1dc93314 --- /dev/null +++ b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/foo/middleware/logger.v @@ -0,0 +1,5 @@ +module middleware + +pub fn aliased_logger_middleware() bool { + return true +} diff --git a/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/main.v b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/main.v new file mode 100644 index 000000000..36ef0bb5d --- /dev/null +++ b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/main.v @@ -0,0 +1,20 @@ +module main + +import middleware { logger_middleware } +import foo.middleware as mw { aliased_logger_middleware } + +struct UseConfig { + handler fn () bool = unsafe { nil } +} + +struct App {} + +fn (app App) use(config UseConfig) bool { + return config.handler() +} + +fn main() { + app := App{} + assert app.use(handler: logger_middleware) + assert app.use(handler: aliased_logger_middleware) +} diff --git a/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/middleware/logger.v b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/middleware/logger.v new file mode 100644 index 000000000..a1054c35c --- /dev/null +++ b/vlib/v/checker/tests/modules/imported_symbol_named_arg_unused_import/middleware/logger.v @@ -0,0 +1,5 @@ +module middleware + +pub fn logger_middleware() bool { + return true +} diff --git a/vlib/v/parser/module.v b/vlib/v/parser/module.v index 9977aae88..0f6aaad5f 100644 --- a/vlib/v/parser/module.v +++ b/vlib/v/parser/module.v @@ -12,6 +12,15 @@ fn (p &Parser) known_import(mod string) bool { return mod in p.imports } +fn (p &Parser) import_alias_for_mod(mod string) ?string { + for alias, imported_mod in p.imports { + if imported_mod == mod { + return alias + } + } + return none +} + fn (p &Parser) prepend_mod(name string) string { // println('prepend_mod() name=${name} p.mod=${p.mod} expr_mod=${p.expr_mod}') if p.expr_mod != '' { @@ -34,16 +43,15 @@ fn (mut p Parser) register_used_import(alias string) { } fn (mut p Parser) register_used_import_for_symbol_name(sym_name string) { - short_import_name := sym_name.all_before_last('.').all_after_last('.') + mod_name := sym_name.all_before_last('.') + short_import_name := mod_name.all_after_last('.') short_symbol_name := sym_name.all_after_last('.') if p.is_imported_symbol(short_symbol_name) { p.imported_symbols_used[short_symbol_name] = true } - for alias, mod in p.imports { - if mod == short_import_name { - p.register_used_import(alias) - return - } + if alias := p.import_alias_for_mod(mod_name) { + p.register_used_import(alias) + return } p.register_used_import(short_import_name) } -- 2.39.5