From 5dd28cf941cd814da644407dd6441fdc8e592ac0 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 18 Jan 2025 05:29:52 -0300 Subject: [PATCH] markused: fix markused auto str detection (fix #23501) (#23503) --- vlib/v/checker/used_features.v | 4 +++- vlib/v/tests/skip_unused/auto_str.run.out | 3 +++ .../skip_unused/auto_str.skip_unused.run.out | 3 +++ vlib/v/tests/skip_unused/auto_str.vv | 20 +++++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/skip_unused/auto_str.run.out create mode 100644 vlib/v/tests/skip_unused/auto_str.skip_unused.run.out create mode 100644 vlib/v/tests/skip_unused/auto_str.vv diff --git a/vlib/v/checker/used_features.v b/vlib/v/checker/used_features.v index d024da99b..4a73831c1 100644 --- a/vlib/v/checker/used_features.v +++ b/vlib/v/checker/used_features.v @@ -125,7 +125,9 @@ fn (mut c Checker) markused_call_expr(mut node ast.CallExpr) { fn (mut c Checker) markused_fn_call(mut node ast.CallExpr) { if !c.is_builtin_mod && c.mod != 'math.bits' && node.args[0].expr !is ast.StringLiteral { - if !c.table.sym(c.unwrap_generic(node.args[0].typ)).has_method('str') { + if (node.args[0].expr is ast.CallExpr && node.args[0].expr.is_method + && node.args[0].expr.name == 'str') + || !c.table.sym(c.unwrap_generic(node.args[0].typ)).has_method('str') { c.table.used_features.auto_str = true } else { if node.args[0].typ.has_option_or_result() { diff --git a/vlib/v/tests/skip_unused/auto_str.run.out b/vlib/v/tests/skip_unused/auto_str.run.out new file mode 100644 index 000000000..9e932fecc --- /dev/null +++ b/vlib/v/tests/skip_unused/auto_str.run.out @@ -0,0 +1,3 @@ +&TreeTwo{ + Tree: +} diff --git a/vlib/v/tests/skip_unused/auto_str.skip_unused.run.out b/vlib/v/tests/skip_unused/auto_str.skip_unused.run.out new file mode 100644 index 000000000..9e932fecc --- /dev/null +++ b/vlib/v/tests/skip_unused/auto_str.skip_unused.run.out @@ -0,0 +1,3 @@ +&TreeTwo{ + Tree: +} diff --git a/vlib/v/tests/skip_unused/auto_str.vv b/vlib/v/tests/skip_unused/auto_str.vv new file mode 100644 index 000000000..8989ce3af --- /dev/null +++ b/vlib/v/tests/skip_unused/auto_str.vv @@ -0,0 +1,20 @@ +module main + +pub struct Tree {} + +pub fn (tree &Tree) str() string { + return '' +} + +pub struct TreeTwo { + Tree +} + +pub fn TreeTwo.from_string(tree_string string) !&TreeTwo { + return &TreeTwo{} +} + +fn main() { + tree := TreeTwo.from_string('') or { panic(err) } + println(tree.str()) +} -- 2.39.5