in format.go [233:268]
func (un *formatter) visit(expr ast.Expr, macro bool) error {
if un.err != nil {
return un.err
}
if expr == nil {
return errors.New("unsupported expression")
}
for _, c := range un.CommentBlock(expr.ID()) {
un.WriteString(c)
un.WriteNewLine()
}
visited, err := un.visitMaybeMacroCall(expr)
if visited || err != nil {
return err
}
switch expr.Kind() {
case ast.CallKind:
return un.visitCall(expr, macro)
case ast.LiteralKind:
return un.visitConst(expr)
case ast.IdentKind:
return un.visitIdent(expr)
case ast.ListKind:
return un.visitList(expr)
case ast.MapKind:
return un.visitStructMap(expr)
case ast.SelectKind:
return un.visitSelect(expr)
case ast.StructKind:
return un.visitStructMsg(expr)
default:
return fmt.Errorf("unsupported expression: %v", expr.Kind())
}
}