possible bug in tag syntax
marco-m opened this issue · 3 comments
marco-m commented
Hello,
it seems there is a difference between the "raw" and "parse" tag syntax? The following repro shows what I stumbled upon.
package tagsyntax
import (
"testing"
"github.com/alecthomas/assert/v2"
"github.com/alecthomas/participle/v2"
)
type GoodAST struct {
Key string `parser:"@Ident '='"`
BlankLines []string `"\n"`
}
type BadAST struct {
Key string `parser:"@Ident '='"`
// Same as field in GoodAST, as explained in https://github.com/alecthomas/participle#tag-syntax
BlankLines []string `parser:"'\n'"`
}
func TestLiteralNotTerminatedGood(t *testing.T) {
_, err := participle.Build(&GoodAST{})
assert.NoError(t, err)
}
func TestLiteralNotTerminatedBad(t *testing.T) {
_, err := participle.Build(&BadAST{})
// The error is:
//
// Key: <input>:1:2: literal not terminated
//
// which is confusing because it refers to the previous field in the struct (Key)
// and unclear?
assert.NoError(t, err)
}
alecthomas commented
It's a bit unclear, what's the bug? That it's not correctly decoding an escaped \n
?
svex99 commented
I receive the same error. When is declared the field tag with parser:"'\n'"
raises the error literal not terminated
. Change it to '\n'
works.
alecthomas commented
I think this is because '\n'
is currently lexed by text/scanner, which does not support single escape sequences in single quotes.