Merge branch 'master' of github.com:/oec/goparsify
This commit is contained in:
commit
afd70fad39
@ -2,6 +2,7 @@ package goparsify
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Seq matches all of the given parsers in order and returns their result as .Child[n]
|
||||
@ -51,11 +52,13 @@ func Any(parsers ...Parserish) Parser {
|
||||
startpos := ps.Pos
|
||||
|
||||
var longestError Error
|
||||
expected := []string{}
|
||||
for _, parser := range parserfied {
|
||||
parser(ps, node)
|
||||
if ps.Errored() {
|
||||
if ps.Error.pos >= longestError.pos {
|
||||
longestError = ps.Error
|
||||
expected = append(expected, ps.Error.expected)
|
||||
}
|
||||
if ps.Cut > startpos {
|
||||
break
|
||||
@ -68,7 +71,10 @@ func Any(parsers ...Parserish) Parser {
|
||||
return
|
||||
}
|
||||
|
||||
ps.Error = longestError
|
||||
ps.Error = Error{
|
||||
pos: longestError.pos,
|
||||
expected: strings.Join(expected, " or "),
|
||||
}
|
||||
ps.Pos = startpos
|
||||
})
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package goparsify
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
@ -54,7 +53,7 @@ func TestAny(t *testing.T) {
|
||||
Seq("hello", "world", "."),
|
||||
Seq("hello", "brother"),
|
||||
))
|
||||
require.Equal(t, "offset 11: expected .", p2.Error.Error())
|
||||
require.Equal(t, "offset 11: expected nope or .", p2.Error.Error())
|
||||
require.Equal(t, 11, p2.Error.Pos())
|
||||
require.Equal(t, 0, p2.Pos)
|
||||
})
|
||||
@ -80,8 +79,6 @@ func TestAny(t *testing.T) {
|
||||
t.Run("ab a", func(t *testing.T) {
|
||||
node, ps := runParser("ab a", p)
|
||||
|
||||
fmt.Println(node)
|
||||
|
||||
require.False(t, ps.Errored())
|
||||
require.Equal(t, "ab", node.Child[0].Token)
|
||||
require.Equal(t, "a", node.Child[1].Token)
|
||||
|
Loading…
Reference in New Issue
Block a user