refactoring: update api
This commit is contained in:
@@ -1,12 +1,25 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/z7zmey/php-parser/internal/php5"
|
||||
"github.com/z7zmey/php-parser/internal/php7"
|
||||
"github.com/z7zmey/php-parser/internal/scanner"
|
||||
"github.com/z7zmey/php-parser/internal/version"
|
||||
"github.com/z7zmey/php-parser/pkg/ast"
|
||||
"github.com/z7zmey/php-parser/pkg/errors"
|
||||
"github.com/z7zmey/php-parser/pkg/cfg"
|
||||
"github.com/z7zmey/php-parser/pkg/version"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrVersionOutOfRange is returned if the version is not supported
|
||||
ErrVersionOutOfRange = errors.New("the version is out of supported range")
|
||||
|
||||
php5RangeStart = &version.Version{Major: 5}
|
||||
php5RangeEnd = &version.Version{Major: 5, Minor: 6}
|
||||
|
||||
php7RangeStart = &version.Version{Major: 7}
|
||||
php7RangeEnd = &version.Version{Major: 7, Minor: 4}
|
||||
)
|
||||
|
||||
// Parser interface
|
||||
@@ -15,29 +28,26 @@ type Parser interface {
|
||||
GetRootNode() ast.Vertex
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
WithTokens bool
|
||||
WithPositions bool
|
||||
ErrorHandlerFunc func(e *errors.Error)
|
||||
}
|
||||
|
||||
func Parse(src []byte, ver string, cfg Config) (ast.Vertex, error) {
|
||||
func Parse(src []byte, config cfg.Config) (ast.Vertex, error) {
|
||||
var parser Parser
|
||||
|
||||
r, err := version.Compare(ver, "7.0")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if config.Version == nil {
|
||||
config.Version = php7RangeEnd
|
||||
}
|
||||
|
||||
lexer := scanner.NewLexer(src, ver, cfg.ErrorHandlerFunc)
|
||||
|
||||
if r == -1 {
|
||||
parser = php5.NewParser(lexer, cfg.ErrorHandlerFunc)
|
||||
} else {
|
||||
parser = php7.NewParser(lexer, cfg.ErrorHandlerFunc)
|
||||
if config.Version.InRange(php5RangeStart, php5RangeEnd) {
|
||||
lexer := scanner.NewLexer(src, config)
|
||||
parser = php5.NewParser(lexer, config)
|
||||
parser.Parse()
|
||||
return parser.GetRootNode(), nil
|
||||
}
|
||||
|
||||
parser.Parse()
|
||||
if config.Version.InRange(php7RangeStart, php7RangeEnd) {
|
||||
lexer := scanner.NewLexer(src, config)
|
||||
parser = php7.NewParser(lexer, config)
|
||||
parser.Parse()
|
||||
return parser.GetRootNode(), nil
|
||||
}
|
||||
|
||||
return parser.GetRootNode(), nil
|
||||
return nil, ErrVersionOutOfRange
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user