mirror of
https://github.com/mikefarah/yq.git
synced 2026-08-24 08:22:13 +08:00
Added "debug-node-info" flag for inspecting yq AST
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user