protofmt/extensions.go

48 lines
1.4 KiB
Go

package protofmt
import "github.com/emicklei/proto"
// keyValuePair returns key = value or "value"
func keyValuePair(o *proto.Option, embedded bool) (cols []aligned) {
equals := alignedEquals
name := o.Name
if len(o.Constant.OrderedMap) > 0 {
cols = append(cols, leftAligned(name), equals)
cols = append(cols, columnsPrintablesFromMap(o.Constant.OrderedMap)...)
return
}
if embedded {
return append(cols, leftAligned(name), equals, leftAligned(o.Constant.SourceRepresentation())) // numbers right, strings left? TODO
}
return append(cols, rightAligned(name), equals, rightAligned(o.Constant.SourceRepresentation()))
}
func alignedInlinePrefix(c *proto.Comment) aligned {
prefix := " //"
if c.ExtraSlash {
prefix = " ///"
}
return notAligned(prefix)
}
func columnsPrintables(c *proto.Comment) (list []columnsPrintable) {
for _, each := range c.Lines {
list = append(list, inlineComment{each, c.ExtraSlash})
}
return
}
func typeAssertColumnsPrintable(v proto.Visitee) (columnsPrintable, bool) {
return asColumnsPrintable(v), len(asColumnsPrintable(v).columns()) > 0
}
func columnsPrintablesFromMap(m proto.LiteralMap) (cols []aligned) {
cols = append(cols, leftAligned("{"), alignedSpace)
for _, each := range m {
// TODO only works for simple constants
cols = append(cols, leftAligned(each.Name), alignedColon, leftAligned(each.SourceRepresentation()))
}
cols = append(cols, alignedSpace, leftAligned("}"))
return
}