fix embedded no whitespace

This commit is contained in:
Arpad Ryszka 2017-10-29 15:12:47 +01:00
parent ac418bde03
commit 95dbb1db06
2 changed files with 34 additions and 6 deletions

View File

@ -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
} }

View File

@ -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",
}},
},
}},
)
}