diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index 578dcff3d1..31df49742a 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -285,16 +285,23 @@ pub fn (mut f Fmt) short_module(name string) string { pub fn (mut f Fmt) mark_types_import_as_used(typ ast.Type) { sym := f.table.sym(typ) - if sym.info is ast.Map { - map_info := sym.map_info() - f.mark_types_import_as_used(map_info.key_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) + match sym.info { + ast.Map { + map_info := sym.map_info() + f.mark_types_import_as_used(map_info.key_type) + f.mark_types_import_as_used(map_info.value_type) + return } + ast.Array, ast.ArrayFixed { + f.mark_types_import_as_used(sym.info.elem_type) + return + } + ast.GenericInst { + for concrete_typ in sym.info.concrete_types { + f.mark_types_import_as_used(concrete_typ) + } + } + else {} } name := sym.name.split('[')[0] // take `Type` from `Type[T]` 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 2926f1aff9..db19a260f5 100644 --- a/vlib/v/fmt/tests/import_selective_expected.vv +++ b/vlib/v/fmt/tests/import_selective_expected.vv @@ -14,6 +14,7 @@ import mod { FnArgGeneric, FnArgTypeParam1, FnArgTypeParam2, + FnArgVariadic, FnRet, FnRetGeneric, FnRetTypeParam1, @@ -23,8 +24,10 @@ import mod { InterfaceMethodRet, RightOfAs, RightOfIs, + StructArrayFieldElem, StructEmbed, StructField, + StructFixedArrayFieldElem, StructMapFieldKey, StructMapFieldValue, StructMethodArg, @@ -42,9 +45,11 @@ type Fn = fn (FnAliasParam) FnAliasRet struct Struct { StructEmbed - v StructField - ref &StructRefField - map map[StructMapFieldKey]StructMapFieldValue + v StructField + ref &StructRefField + map map[StructMapFieldKey]StructMapFieldValue + arr []StructArrayFieldElem + arr_fixed [2]StructFixedArrayFieldElem } fn (s Struct) method(v StructMethodArg) StructMethodRet { @@ -60,7 +65,7 @@ interface Interface { f(InterfaceMethodArg) InterfaceMethodRet } -fn f(v FnArg) FnRet { +fn f(v FnArg, vv ...FnArgVariadic) FnRet { if v is RightOfIs { } _ = v as RightOfAs diff --git a/vlib/v/fmt/tests/import_selective_input.vv b/vlib/v/fmt/tests/import_selective_input.vv index 3bbc208424..2264c116e9 100644 --- a/vlib/v/fmt/tests/import_selective_input.vv +++ b/vlib/v/fmt/tests/import_selective_input.vv @@ -11,6 +11,7 @@ import mod { Unused, StructEmbed, StructField, StructRefField StructMapFieldKey, StructMapFieldValue, + StructArrayFieldElem, StructFixedArrayFieldElem StructMethodArg, StructMethodArgGeneric, StructMethodRet, @@ -21,6 +22,7 @@ import mod { InterfaceMethodRet, FnArg, + FnArgVariadic FnArgGeneric FnArgTypeParam1 FnArgTypeParam2 @@ -48,6 +50,8 @@ struct Struct { v StructField ref &StructRefField map map[StructMapFieldKey]StructMapFieldValue + arr []StructArrayFieldElem + arr_fixed [2]StructFixedArrayFieldElem } fn (s Struct) method(v StructMethodArg) StructMethodRet { @@ -63,7 +67,7 @@ interface Interface { f(InterfaceMethodArg) InterfaceMethodRet } -fn f(v FnArg) FnRet { +fn f(v FnArg, vv ...FnArgVariadic) FnRet { if v is RightOfIs {} _ = v as RightOfAs