in cft/format/transform.go [24:96]
func formatNode(n *yaml.Node) *yaml.Node {
n = node.Clone(n)
// Is it a map?
if n.Kind == yaml.MappingNode {
// Does it have just one key/value pair?
if len(n.Content) == 2 {
// Is the key relevant?
for tag, funcName := range cft.Tags {
if n.Content[0].Value == funcName {
// Prepare comments
headComments := []string{n.HeadComment, n.Content[0].HeadComment, n.Content[1].HeadComment}
lineComments := []string{n.LineComment, n.Content[0].LineComment, n.Content[1].LineComment}
footComments := []string{n.FootComment, n.Content[0].FootComment, n.Content[1].FootComment}
n = n.Content[1]
n.Tag = tag
// Is it a GetAtt and is currently a sequence?
if funcName == "Fn::GetAtt" && n.Kind == yaml.SequenceNode {
// Are both parts scalars?
allScalar := true
parts := make([]string, len(n.Content))
for i, child := range n.Content {
if child.Kind != yaml.ScalarNode {
allScalar = false
break
}
parts[i] = child.Value
headComments = append(headComments, child.HeadComment)
lineComments = append(lineComments, child.LineComment)
footComments = append(footComments, child.FootComment)
}
if allScalar {
n.Content = []*yaml.Node{}
n.Kind = yaml.ScalarNode
n.Value = strings.Join(parts, ".")
}
n.HeadComment = mergeComments(headComments)
n.LineComment = mergeComments(lineComments)
n.FootComment = mergeComments(footComments)
}
break
}
}
}
}
// Is it a scalar?
if n.Kind == yaml.ScalarNode {
// Is it a string
if n.Tag == "!!str" {
// Reformat how yaml thinks is best
if b, err := yaml.Marshal(n.Value); err == nil {
var newNode yaml.Node
if err = yaml.Unmarshal(b, &newNode); err == nil {
n.Style = newNode.Content[0].Style
}
}
}
}
for i, child := range n.Content {
n.Content[i] = formatNode(child)
}
return n
}