compiles and runs again

This commit is contained in:
Jeff Carr 2025-03-27 07:29:10 -05:00
parent 1b7d44ec42
commit be94cbe320
2 changed files with 72 additions and 63 deletions

View File

@ -85,8 +85,7 @@ message Find {
bool needAll = 4; //
}
message File {
// `autogenpb:var:w io.Writer`
message File { // `autogenpb:var:w io.Writer`
string Package = 1; // whatever the package name is at the top of the .go file
string filename = 2; // yellow.proto
string pbfilename = 3; // yellow.pb.go

View File

@ -20,10 +20,12 @@ var allTheLines *LinesScanner
type EnumMessage struct {
msgPB *FormatMsg
all []Message
}
type StdMessage struct {
msgPB *FormatMsg
all []Message
}
func (msg *EnumMessage) name() string {
@ -31,12 +33,17 @@ func (msg *EnumMessage) name() string {
}
func (msg *StdMessage) name() string {
if msg.msgPB != nil {
return msg.msgPB.Header
}
return "fuckit std"
}
type Messages interface {
type Message interface {
format() []string
name() string
load()
addMsg(Message)
}
func protoReformat(filename string) error {
@ -104,8 +111,8 @@ func protoReformat(filename string) error {
for allTheLines.Scan() {
line := allTheLines.Next()
if strings.HasPrefix(line, "oneof ") {
newmsg := newStdMessage(fmtmsg, line)
loadMsgDefinition(newmsg)
newmsg := fmtmsg.newOneofMessage(line)
newmsg.load()
for _, newline := range newmsg.format() {
newfile += fmt.Sprintln(newline)
}
@ -113,8 +120,9 @@ func protoReformat(filename string) error {
}
if strings.HasPrefix(line, "enum ") {
newmsg := newEnumMessage(fmtmsg, line)
loadEnumDefinition(newmsg)
newmsg := fmtmsg.newEnumMessage(line)
newmsg.load()
// loadEnumDefinition(newmsg)
for _, newline := range newmsg.format() {
newfile += fmt.Sprintln(newline)
}
@ -122,28 +130,12 @@ func protoReformat(filename string) error {
}
if strings.HasPrefix(line, "message ") {
newmsg := newStdMessage(fmtmsg, line)
newmsg := fmtmsg.newStdMessage(line)
newmsg.load()
log.Info("got to message", line)
for i, msg := range loadMsgDefinition(newmsg) {
log.Info("got in", i, msg.name())
for _, newline := range msg.format() {
newfile += fmt.Sprintln(newline)
}
for _, newline := range newmsg.format() {
newfile += fmt.Sprintln(newline)
}
/*
parts := strings.Fields(line)
if len(parts) > 3 {
// hack to actually indent comments on the message line itself. you're welcome
start := parts[0] + " " + parts[1] + " " + parts[2]
end := strings.Join(parts[3:], " ")
offset := int(bigName) + int(bigType) + 16 - len(start)
pad := fmt.Sprintf("%d", offset)
hmm := "%s %" + pad + "s %s"
line = fmt.Sprintf(hmm, start, " ", end)
}
newfile += fmt.Sprintln(line)
*/
continue
}
@ -167,11 +159,21 @@ func saveFile(filename string, data string) error {
return nil
}
func newStdMessage(fmtmsg *FormatMsg, header string) *StdMessage {
func newDepth(fmtmsg *FormatMsg, header string) *FormatMsg {
newmsg := new(FormatMsg)
newmsg.MaxVarname = fmtmsg.MaxVarname
newmsg.MaxVartype = fmtmsg.MaxVartype
newmsg.Header = header
newmsg.Depth = fmtmsg.Depth + 1
return newmsg
}
// func newStdMessage(fmtmsg *FormatMsg, header string) *StdMessage {
func (msgPB *FormatMsg) newStdMessage(header string) *StdMessage {
newmsg := newDepth(msgPB, header)
newmsg.Type = FormatMsg_MESSAGE
msgPB.Msgs = append(msgPB.Msgs, newmsg)
newstd := new(StdMessage)
newstd.msgPB = newmsg
@ -179,11 +181,21 @@ func newStdMessage(fmtmsg *FormatMsg, header string) *StdMessage {
return newstd
}
func newEnumMessage(fmtmsg *FormatMsg, header string) *EnumMessage {
newmsg := new(FormatMsg)
newmsg.MaxVarname = fmtmsg.MaxVarname
newmsg.MaxVartype = fmtmsg.MaxVartype
newmsg.Header = header
func (msgPB *FormatMsg) newOneofMessage(header string) *StdMessage {
newmsg := newDepth(msgPB, header)
newmsg.Type = FormatMsg_ONEOF
msgPB.Msgs = append(msgPB.Msgs, newmsg)
newstd := new(StdMessage)
newstd.msgPB = newmsg
return newstd
}
func (msgPB *FormatMsg) newEnumMessage(header string) *EnumMessage {
newmsg := newDepth(msgPB, header)
newmsg.Type = FormatMsg_ENUM
msgPB.Msgs = append(msgPB.Msgs, newmsg)
newstd := new(EnumMessage)
newstd.msgPB = newmsg
@ -191,44 +203,44 @@ func newEnumMessage(fmtmsg *FormatMsg, header string) *EnumMessage {
return newstd
}
func loadMsgDefinition(msg *StdMessage) []Messages {
var allMessages []Messages
allMessages = append(allMessages, msg)
fmtmsg := msg.msgPB
// proto files can be defined as trees
// func loadMsgDefinition(msg *StdMessage) {
// func (newMsg *EnumMessage) load() {
// func (msg *StdMessage) loadMsgDefinition(msg *StdMessage) {
func (msg *StdMessage) load() {
// fmtmsg := msg.msgPB
curPB := msg.msgPB
for allTheLines.Scan() {
line := allTheLines.Next()
if strings.HasPrefix(line, "oneof ") {
newmsg := newStdMessage(fmtmsg, line)
allMessages = append(allMessages, newmsg)
// fmtmsg.Oneofs = append(fmtmsg.Oneofs, newmsg)
newmsg := msg.msgPB.newOneofMessage(line)
newmsg.load()
curPB = newmsg.msgPB
continue
}
if strings.HasPrefix(line, "enum ") {
newmsg := newEnumMessage(fmtmsg, line)
loadEnumDefinition(newmsg)
allMessages = append(allMessages, newmsg)
// fmtmsg.Enums = append(fmtmsg.Enums, newmsg)
// log.Info("got here:", line)
// os.Exit(-1)
newmsg := msg.msgPB.newEnumMessage(line)
newmsg.load()
curPB = newmsg.msgPB
// loadEnumDefinition(newmsg)
continue
}
if strings.HasPrefix(line, "message ") {
// message inception. search for the architect. don't forget your totem
newmsg := newStdMessage(fmtmsg, line)
newAll := loadMsgDefinition(newmsg)
allMessages = append(allMessages, newAll...)
// fmtmsg.InceptionMsgs = append(fmtmsg.InceptionMsgs, newmsg)
newmsg := msg.msgPB.newStdMessage(line)
newmsg.load()
curPB = newmsg.msgPB
continue
}
if strings.HasPrefix(line, "}") {
fmtmsg.Footer = line
return allMessages
msg.msgPB.Footer = line
return
}
fmtmsg.Lines = append(fmtmsg.Lines, line)
curPB.Notes = append(curPB.Notes, line)
// fmtmsg.Lines = append(fmtmsg.Lines, line)
}
return allMessages
return
}
// returns vartype, varname, id, end
@ -275,19 +287,17 @@ func makeLineIter(data []byte) iter.Seq[string] {
}
}
func loadEnumDefinition(newMsg *EnumMessage) *EnumMessage {
curmsg := newMsg.msgPB
// func loadEnumDefinition(newMsg *EnumMessage) *EnumMessage {
func (newMsg *EnumMessage) load() {
curPB := newMsg.msgPB
for allTheLines.Scan() {
line := allTheLines.Next()
if strings.HasPrefix(line, "}") {
curmsg.Footer = line
newMsg.msgPB = curmsg
return newMsg
curPB.Footer = line
return
}
curmsg.Lines = append(curmsg.Lines, line)
curPB.Lines = append(curPB.Lines, line)
}
newMsg.msgPB = curmsg
return newMsg
}
// find the max length of varname and vartype