func()

in format.go [875:910]


func (un *formatter) lastChild(expr ast.Expr) ast.Expr {
	call, ok := un.info.GetMacroCall(expr.ID())
	if ok {
		return un.lastChild(call)
	}
	switch expr.Kind() {
	case ast.CallKind:
		args := expr.AsCall().Args()
		if len(args) == 0 {
			return expr
		}
		return un.lastChild(args[len(args)-1])
	case ast.ListKind:
		elems := expr.AsList().Elements()
		if len(elems) == 0 {
			return expr
		}
		return un.lastChild(elems[len(elems)-1])
	case ast.MapKind:
		entries := expr.AsMap().Entries()
		if len(entries) == 0 {
			return expr
		}
		return un.lastChild(entries[len(entries)-1].AsMapEntry().Value())
	case ast.SelectKind:
		return un.lastChild(expr.AsSelect().Operand())
	case ast.StructKind:
		fields := expr.AsStruct().Fields()
		if len(fields) == 0 {
			return expr
		}
		return un.lastChild(fields[len(fields)-1].AsStructField().Value())
	default:
		return expr
	}
}