From 8f0595081b2b5a22363c7ae9786460aefdc97499 Mon Sep 17 00:00:00 2001 From: Swastik Date: Thu, 2 Nov 2023 19:50:18 +0530 Subject: [PATCH 1/4] checker: warn on unused imported functions used via `import math { sin, cos }` --- vlib/v/checker/checker.v | 3 +++ .../checker/tests/import_sym_fn_unused_warning_err.out | 10 ++++++++++ .../checker/tests/import_sym_fn_unused_warning_err.vv | 3 +++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/checker/tests/import_sym_fn_unused_warning_err.out create mode 100644 vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 26c656d6ec2d82..3c364c099de95b 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2801,6 +2801,9 @@ fn (mut c Checker) import_stmt(node ast.Import) { if !func.is_pub { c.error('module `${node.mod}` function `${sym.name}()` is private', sym.pos) } + if func.usages != 1 { + c.warn('module `${node.mod}` function `${sym.name}()` is unused', sym.pos) + } continue } if _ := c.file.global_scope.find_const(name) { diff --git a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out new file mode 100644 index 00000000000000..d0bb2c363db71a --- /dev/null +++ b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out @@ -0,0 +1,10 @@ +vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv:1:15: warning: module `math` function `sin()` is unused + 1 | import math { sin, cos } + | ~~~ + 2 | + 3 | fn main() {} +vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv:1:20: warning: module `math` function `cos()` is unused + 1 | import math { sin, cos } + | ~~~ + 2 | + 3 | fn main() {} diff --git a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv new file mode 100644 index 00000000000000..e5a7d32933c895 --- /dev/null +++ b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv @@ -0,0 +1,3 @@ +import math { sin, cos } + +fn main() {} From 2b0d05ae1f4e625a03db5545ebbe305ad7b0c695 Mon Sep 17 00:00:00 2001 From: Swastik Date: Thu, 2 Nov 2023 19:50:42 +0530 Subject: [PATCH 2/4] Revert "checker: warn on unused imported functions used via `import math { sin, cos }`" This reverts commit ddf0468f1c4f9af54ada162712c212214e58ca56. --- vlib/v/checker/checker.v | 3 --- .../checker/tests/import_sym_fn_unused_warning_err.out | 10 ---------- .../checker/tests/import_sym_fn_unused_warning_err.vv | 3 --- 3 files changed, 16 deletions(-) delete mode 100644 vlib/v/checker/tests/import_sym_fn_unused_warning_err.out delete mode 100644 vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 3c364c099de95b..26c656d6ec2d82 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2801,9 +2801,6 @@ fn (mut c Checker) import_stmt(node ast.Import) { if !func.is_pub { c.error('module `${node.mod}` function `${sym.name}()` is private', sym.pos) } - if func.usages != 1 { - c.warn('module `${node.mod}` function `${sym.name}()` is unused', sym.pos) - } continue } if _ := c.file.global_scope.find_const(name) { diff --git a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out deleted file mode 100644 index d0bb2c363db71a..00000000000000 --- a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.out +++ /dev/null @@ -1,10 +0,0 @@ -vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv:1:15: warning: module `math` function `sin()` is unused - 1 | import math { sin, cos } - | ~~~ - 2 | - 3 | fn main() {} -vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv:1:20: warning: module `math` function `cos()` is unused - 1 | import math { sin, cos } - | ~~~ - 2 | - 3 | fn main() {} diff --git a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv b/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv deleted file mode 100644 index e5a7d32933c895..00000000000000 --- a/vlib/v/checker/tests/import_sym_fn_unused_warning_err.vv +++ /dev/null @@ -1,3 +0,0 @@ -import math { sin, cos } - -fn main() {} From 7f0cb2394c4db9468236bd5590741a9e1ae71632 Mon Sep 17 00:00:00 2001 From: Swastik Date: Fri, 21 Feb 2025 00:53:12 +0530 Subject: [PATCH 3/4] checker: allow generic operators to be called in fn --- vlib/v/checker/infix.v | 5 +++-- .../generics/generic_alias_fn_op_call_test.v | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/generics/generic_alias_fn_op_call_test.v diff --git a/vlib/v/checker/infix.v b/vlib/v/checker/infix.v index e79528e0d1f359..71196871ec8e29 100644 --- a/vlib/v/checker/infix.v +++ b/vlib/v/checker/infix.v @@ -112,8 +112,8 @@ fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { } } mut right_sym := c.table.sym(right_type) - right_final_sym := c.table.final_sym(right_type) - left_final_sym := c.table.final_sym(left_type) + right_final_sym := c.table.final_sym(c.unwrap_generic(right_type)) + left_final_sym := c.table.final_sym(c.unwrap_generic(left_type)) left_pos := node.left.pos() right_pos := node.right.pos() left_right_pos := left_pos.extend(right_pos) @@ -344,6 +344,7 @@ fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { return_type = left_type } else if !c.pref.translated && left_sym.info is ast.Alias && !left_final_sym.is_primitive() { + println('${left_final_sym}') if left_sym.has_method(op_str) { if method := left_sym.find_method(op_str) { return_type = method.return_type diff --git a/vlib/v/tests/generics/generic_alias_fn_op_call_test.v b/vlib/v/tests/generics/generic_alias_fn_op_call_test.v new file mode 100644 index 00000000000000..1d50f12c2a53dd --- /dev/null +++ b/vlib/v/tests/generics/generic_alias_fn_op_call_test.v @@ -0,0 +1,15 @@ +module main + +type MyAlias = f32 + +const two = MyAlias(2) + +fn mul[T](a T, b T) T { + return a * b +} + +fn test_generic_alias_fn_op_call() { + assert mul[MyAlias](two, two) == f32(4.0) + assert mul[f32](two, two) == f32(4.0) + assert two * two == f32(4.0) +} From fa5b52612197f8b09cd5eb216d382acd04797cb2 Mon Sep 17 00:00:00 2001 From: Swastik Date: Fri, 21 Feb 2025 00:55:29 +0530 Subject: [PATCH 4/4] remove print --- vlib/v/checker/infix.v | 1 - 1 file changed, 1 deletion(-) diff --git a/vlib/v/checker/infix.v b/vlib/v/checker/infix.v index 71196871ec8e29..de8f02c363c19a 100644 --- a/vlib/v/checker/infix.v +++ b/vlib/v/checker/infix.v @@ -344,7 +344,6 @@ fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { return_type = left_type } else if !c.pref.translated && left_sym.info is ast.Alias && !left_final_sym.is_primitive() { - println('${left_final_sym}') if left_sym.has_method(op_str) { if method := left_sym.find_method(op_str) { return_type = method.return_type