func()

in format.go [556:612]


func (un *formatter) visitConst(expr ast.Expr) error {
	val := expr.AsLiteral()
	switch val := val.(type) {
	case types.Bool:
		un.WriteString(strconv.FormatBool(bool(val)))
	case types.Bytes:
		// try to handle literal byte strings.
		if un.options.pretty && !bytes.ContainsFunc([]byte(val), func(r rune) bool {
			return !unicode.IsGraphic(r) && !unicode.IsSpace(r)
		}) {
			syn := un.syntax(expr.ID())
			if strings.EqualFold(syn, "b'''") || strings.EqualFold(syn, `b"""`) ||
				strings.EqualFold(syn, "br'''") || strings.EqualFold(syn, `br"""`) {
				un.WriteString(syn)
				un.WriteString(string(val))
				un.WriteString(strings.TrimLeft(syn, "bBrR"))
				break
			}
		}
		// otherwise bytes constants are surrounded with b"<bytes>"
		un.WriteString(`b"`)
		un.WriteString(bytesToOctets([]byte(val)))
		un.WriteString(`"`)
	case types.Double:
		// represent the float using the minimum required digits
		d := strconv.FormatFloat(float64(val), 'g', -1, 64)
		un.WriteString(d)
		if !strings.Contains(d, ".") {
			un.WriteString(".0")
		}
	case types.Int:
		i := strconv.FormatInt(int64(val), 10)
		un.WriteString(i)
	case types.Null:
		un.WriteString("null")
	case types.String:
		syn := un.syntax(expr.ID())
		if un.options.pretty && syn == "'''" || syn == `"""` ||
			strings.EqualFold(syn, "r'''") || strings.EqualFold(syn, `r"""`) {
			// handle literal strings.
			un.WriteString(syn)
			un.WriteString(string(val))
			un.WriteString(strings.TrimLeft(syn, "rR"))
		} else {
			// otherwise strings will be double quoted with quotes escaped.
			un.WriteString(strconv.Quote(string(val)))
		}
	case types.Uint:
		// uint literals have a 'u' suffix.
		ui := strconv.FormatUint(uint64(val), 10)
		un.WriteString(ui)
		un.WriteString("u")
	default:
		return fmt.Errorf("unsupported constant: %v", expr)
	}
	return nil
}