fix embedded no whitespace
This commit is contained in:
parent
ac418bde03
commit
95dbb1db06
14
define.go
14
define.go
@ -110,20 +110,20 @@ func nodeChar(n *Node) rune {
|
|||||||
return toRune(s)
|
return toRune(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func defineMember(s *Syntax, defaultName string, n *Node) (string, error) {
|
func defineMember(s *Syntax, defaultName string, ct CommitType, n *Node) (string, error) {
|
||||||
switch n.Name {
|
switch n.Name {
|
||||||
case "symbol":
|
case "symbol":
|
||||||
return n.Text(), nil
|
return n.Text(), nil
|
||||||
default:
|
default:
|
||||||
return defaultName, defineExpression(s, defaultName, Alias, n)
|
return defaultName, defineExpression(s, defaultName, ct, n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func defineMembers(s *Syntax, name string, n ...*Node) ([]string, error) {
|
func defineMembers(s *Syntax, name string, ct CommitType, n ...*Node) ([]string, error) {
|
||||||
var refs []string
|
var refs []string
|
||||||
for i, ni := range n {
|
for i, ni := range n {
|
||||||
nmi := childName(name, i)
|
nmi := childName(name, i)
|
||||||
ref, err := defineMember(s, nmi, ni)
|
ref, err := defineMember(s, nmi, ct, ni)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -211,6 +211,7 @@ func defineSymbol(s *Syntax, name string, ct CommitType, n *Node) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func defineSequence(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
func defineSequence(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
||||||
|
nows := ct & NoWhitespace
|
||||||
var items []SequenceItem
|
var items []SequenceItem
|
||||||
for i, ni := range n {
|
for i, ni := range n {
|
||||||
if ni.Name != "item" || len(ni.Nodes) == 0 {
|
if ni.Name != "item" || len(ni.Nodes) == 0 {
|
||||||
@ -223,7 +224,7 @@ func defineSequence(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
|||||||
)
|
)
|
||||||
|
|
||||||
defaultName := childName(name, i)
|
defaultName := childName(name, i)
|
||||||
item.Name, err = defineMember(s, defaultName, ni.Nodes[0])
|
item.Name, err = defineMember(s, defaultName, Alias|nows, ni.Nodes[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -242,7 +243,8 @@ func defineSequence(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func defineChoice(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
func defineChoice(s *Syntax, name string, ct CommitType, n ...*Node) error {
|
||||||
refs, err := defineMembers(s, name, n...)
|
nows := ct & NoWhitespace
|
||||||
|
refs, err := defineMembers(s, name, Alias|nows, n...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -281,3 +281,29 @@ func TestCSVWhitespace(t *testing.T) {
|
|||||||
runTestsSyntax(t, s, tests)
|
runTestsSyntax(t, s, tests)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNoWhitespaceFlag(t *testing.T) {
|
||||||
|
runTests(
|
||||||
|
t,
|
||||||
|
`
|
||||||
|
space:ws = " ";
|
||||||
|
symbol:nows = [a-zA-Z_] [a-zA-Z0-9_]* | "[" .+ "]";
|
||||||
|
symbols = symbol*;
|
||||||
|
`,
|
||||||
|
[]testItem{{
|
||||||
|
title: "multiple symbols",
|
||||||
|
text: "a b c",
|
||||||
|
ignorePosition: true,
|
||||||
|
node: &Node{
|
||||||
|
Name: "symbols",
|
||||||
|
Nodes: []*Node{{
|
||||||
|
Name: "symbol",
|
||||||
|
}, {
|
||||||
|
Name: "symbol",
|
||||||
|
}, {
|
||||||
|
Name: "symbol",
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user