diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index 30c3bbedf2..5b8ceda74d 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -251,6 +251,11 @@ pub fn (mut f Fmt) mark_types_import_as_used(typ ast.Type) { f.mark_types_import_as_used(map_info.value_type) return } + if sym.info is ast.GenericInst { + for concrete_typ in sym.info.concrete_types { + f.mark_types_import_as_used(concrete_typ) + } + } name := sym.name.split('<')[0] // take `Type` from `Type` f.mark_import_as_used(name) } diff --git a/vlib/v/fmt/tests/import_selective_expected.vv b/vlib/v/fmt/tests/import_selective_expected.vv index 8e21735f66..8beb6dd9e0 100644 --- a/vlib/v/fmt/tests/import_selective_expected.vv +++ b/vlib/v/fmt/tests/import_selective_expected.vv @@ -9,8 +9,12 @@ import mod { Enum, FnArg, FnArgGeneric, + FnArgTypeParam1, + FnArgTypeParam2, FnRet, FnRetGeneric, + FnRetTypeParam1, + FnRetTypeParam2, InterfaceField, InterfaceMethodArg, InterfaceMethodRet, @@ -57,6 +61,8 @@ fn f(v FnArg) FnRet { return FnRet{} } +fn f2(v Generic) Generic {} + fn f_generic(v FnArgGeneric) FnRetGeneric { return FnRetGeneric{} } diff --git a/vlib/v/fmt/tests/import_selective_input.vv b/vlib/v/fmt/tests/import_selective_input.vv index 1433b0e6c3..a5c8217f53 100644 --- a/vlib/v/fmt/tests/import_selective_input.vv +++ b/vlib/v/fmt/tests/import_selective_input.vv @@ -22,8 +22,12 @@ import mod { FnArg, FnArgGeneric + FnArgTypeParam1 + FnArgTypeParam2 FnRet, FnRetGeneric + FnRetTypeParam1, + FnRetTypeParam2, RightOfIs, RightOfAs, @@ -60,6 +64,8 @@ fn f(v FnArg) FnRet { return FnRet{} } +fn f2(v Generic) Generic {} + fn f_generic(v FnArgGeneric) FnRetGeneric { return FnRetGeneric{} }