mirror of https://github.com/stashapp/stash.git
41 lines
707 B
Go
41 lines
707 B
Go
package gogen
|
|
|
|
import (
|
|
"go/ast"
|
|
"go/parser"
|
|
"go/token"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/gobuffalo/genny"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type ParsedFile struct {
|
|
File genny.File
|
|
FileSet *token.FileSet
|
|
Ast *ast.File
|
|
Lines []string
|
|
}
|
|
|
|
func ParseFileMode(gf genny.File, mode parser.Mode) (ParsedFile, error) {
|
|
pf := ParsedFile{
|
|
FileSet: token.NewFileSet(),
|
|
File: gf,
|
|
}
|
|
|
|
src := gf.String()
|
|
f, err := parser.ParseFile(pf.FileSet, gf.Name(), src, mode)
|
|
if err != nil && errors.Cause(err) != io.EOF {
|
|
return pf, errors.WithStack(err)
|
|
}
|
|
pf.Ast = f
|
|
|
|
pf.Lines = strings.Split(src, "\n")
|
|
return pf, nil
|
|
}
|
|
|
|
func ParseFile(gf genny.File) (ParsedFile, error) {
|
|
return ParseFileMode(gf, 0)
|
|
}
|