package parser import ( "os" "sort" "strings" "github.com/gobuffalo/packr/v2/plog" ) // Parser to find boxes type Parser struct { Prospects []*File // a list of files to check for boxes IgnoreImports bool } // Run the parser and run any boxes found func (p *Parser) Run() (Boxes, error) { var boxes Boxes for _, pros := range p.Prospects { plog.Debug(p, "Run", "parsing", pros.Name()) v := NewVisitor(pros) pbr, err := v.Run() if err != nil { return boxes, err } for _, b := range pbr { plog.Debug(p, "Run", "file", pros.Name(), "box", b.Name) boxes = append(boxes, b) } } pwd, _ := os.Getwd() sort.Slice(boxes, func(a, b int) bool { b1 := boxes[a] return !strings.HasPrefix(b1.AbsPath, pwd) }) return boxes, nil } // New Parser from a list of File func New(prospects ...*File) *Parser { return &Parser{ Prospects: prospects, } }