blob: 3fbdd1ae036ac8c6467bc8a9e5e60c9cd6728edd [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// +build !build_with_native_toolchain
package main
import (
"gen/config"
"strings"
)
// Strip out existing indentation and use count of open braces to place new indentation.
func formatObj(initialIndent int, value string) string {
indentationMark := " "
nIndent := initialIndent
var builder strings.Builder
runes := []rune(strings.Trim(value, " \t\n"))
for i := 0; i < len(runes); i++ {
r := runes[i]
builder.WriteRune(r)
switch r {
case '{', '[':
nIndent++
case '}', ']':
nIndent--
case '\n':
loop:
for i+1 < len(runes) {
switch runes[i+1] {
case ' ', '\t':
i++
default:
break loop
}
}
effectiveIndent := nIndent
if i+1 < len(runes) && (runes[i+1] == '}' || runes[i+1] == ']') {
effectiveIndent--
}
if i+1 == len(runes) || runes[i+1] != '\n' {
builder.WriteString(strings.Repeat(indentationMark, effectiveIndent))
}
}
}
return builder.String()
}
func formatComment(comment string) string {
if comment == "" {
return ""
}
parts := strings.Split(strings.TrimSpace(comment), "\n")
var builder strings.Builder
for _, part := range parts {
builder.WriteString("// " + strings.TrimSpace(part) + "\n")
}
return builder.String()
}
func formatBindingList(bindings []config.Binding) string {
if len(bindings) == 0 {
return ""
}
strs := make([]string, len(bindings))
for i, binding := range bindings {
strs[i] = string(binding)
}
return "[" + strings.Join(strs, ", ") + "]"
}