1package hcl 2 3// ExprList tests if the given expression is a static list construct and, 4// if so, extracts the expressions that represent the list elements. 5// If the given expression is not a static list, error diagnostics are 6// returned. 7// 8// A particular Expression implementation can support this function by 9// offering a method called ExprList that takes no arguments and returns 10// []Expression. This method should return nil if a static list cannot 11// be extracted. Alternatively, an implementation can support 12// UnwrapExpression to delegate handling of this function to a wrapped 13// Expression object. 14func ExprList(expr Expression) ([]Expression, Diagnostics) { 15 type exprList interface { 16 ExprList() []Expression 17 } 18 19 physExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool { 20 _, supported := expr.(exprList) 21 return supported 22 }) 23 24 if exL, supported := physExpr.(exprList); supported { 25 if list := exL.ExprList(); list != nil { 26 return list, nil 27 } 28 } 29 return nil, Diagnostics{ 30 &Diagnostic{ 31 Severity: DiagError, 32 Summary: "Invalid expression", 33 Detail: "A static list expression is required.", 34 Subject: expr.StartRange().Ptr(), 35 }, 36 } 37} 38