Added "debug-node-info" flag for inspecting yq AST

This commit is contained in:
Mike Farah
2025-07-15 21:35:54 +10:00
parent d0c897f5e6
commit 8e731ac13c
8 changed files with 262 additions and 3 deletions
+76
View File
@@ -0,0 +1,76 @@
package yqlib
import (
"bufio"
"container/list"
"io"
"go.yaml.in/yaml/v3"
)
type nodeInfoPrinter struct {
printerWriter PrinterWriter
appendixReader io.Reader
printedMatches bool
}
func NewNodeInfoPrinter(printerWriter PrinterWriter) Printer {
return &nodeInfoPrinter{
printerWriter: printerWriter,
}
}
func (p *nodeInfoPrinter) SetNulSepOutput(_ bool) {
}
func (p *nodeInfoPrinter) SetAppendix(reader io.Reader) {
p.appendixReader = reader
}
func (p *nodeInfoPrinter) PrintedAnything() bool {
return p.printedMatches
}
func (p *nodeInfoPrinter) PrintResults(matchingNodes *list.List) error {
for el := matchingNodes.Front(); el != nil; el = el.Next() {
mappedDoc := el.Value.(*CandidateNode)
writer, errorWriting := p.printerWriter.GetWriter(mappedDoc)
if errorWriting != nil {
return errorWriting
}
bytes, err := yaml.Marshal(mappedDoc.ConvertToNodeInfo())
if err != nil {
return err
}
if _, err := writer.Write(bytes); err != nil {
return err
}
if _, err := writer.Write([]byte("\n")); err != nil {
return err
}
p.printedMatches = true
if err := writer.Flush(); err != nil {
return err
}
}
if p.appendixReader != nil {
writer, err := p.printerWriter.GetWriter(nil)
if err != nil {
return err
}
log.Debug("Piping appendix reader...")
betterReader := bufio.NewReader(p.appendixReader)
_, err = io.Copy(writer, betterReader)
if err != nil {
return err
}
if err := writer.Flush(); err != nil {
return err
}
}
return nil
}