var errorType … // matchArgType reports an error if printf verb t is not appropriate for // operand arg. // // If arg is a type parameter, the verb t must be appropriate for every type in // the type parameter type set. func matchArgType(pass *analysis.Pass, t printfArgType, arg ast.Expr) (reason string, ok bool) { … } type argMatcher … // match checks if typ matches m's printf arg type. If topLevel is true, typ is // the actual type of the printf arg, for which special rules apply. As a // special case, top level type parameters pass topLevel=true when checking for // matches among the constituents of their type set, as type arguments will // replace the type parameter at compile time. func (m *argMatcher) match(typ types.Type, topLevel bool) bool { … } func isConvertibleToString(typ types.Type) bool { … }