parent
fa5eced013
commit
e6b52a357f
3 changed files with 105 additions and 10 deletions
|
|
@ -919,11 +919,12 @@ func (p *parser) parseKey() (k *d2ast.KeyPath) {
|
||||||
Start: p.pos,
|
Start: p.pos,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
defer k.Range.End.From(&p.pos)
|
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if len(k.Path) == 0 {
|
if len(k.Path) == 0 {
|
||||||
k = nil
|
k = nil
|
||||||
|
} else {
|
||||||
|
k.Range.End = k.Path[len(k.Path)-1].Unbox().GetRange().End
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
@ -948,6 +949,9 @@ func (p *parser) parseKey() (k *d2ast.KeyPath) {
|
||||||
return k
|
return k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(k.Path) == 0 {
|
||||||
|
k.Range.Start = s.GetRange().Start
|
||||||
|
}
|
||||||
k.Path = append(k.Path, &sb)
|
k.Path = append(k.Path, &sb)
|
||||||
|
|
||||||
r, newlines, eof = p.peekNotSpace()
|
r, newlines, eof = p.peekNotSpace()
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ func TestParse(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
text string
|
text string
|
||||||
assert func(t testing.TB, ast *d2ast.Map, err error)
|
assert func(t testing.TB, ast *d2ast.Map, err error)
|
||||||
|
|
||||||
// exp is in testdata/d2parser/TestParse/${name}.json
|
// exp is in testdata/d2parser/TestParse/${name}.json
|
||||||
|
|
@ -382,14 +382,14 @@ c-
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "whitespace_range",
|
name: "whitespace_range",
|
||||||
text: `a -> b -> c`,
|
text: ` a -> b -> c `,
|
||||||
assert: func(t testing.TB, ast *d2ast.Map, err error) {
|
assert: func(t testing.TB, ast *d2ast.Map, err error) {
|
||||||
assert.Equal(t, "1:1", ast.Nodes[0].MapKey.Edges[0].Src.Range.Start.String())
|
assert.Equal(t, "1:2", ast.Nodes[0].MapKey.Edges[0].Src.Range.Start.String())
|
||||||
assert.Equal(t, "1:2", ast.Nodes[0].MapKey.Edges[0].Src.Range.End.String())
|
assert.Equal(t, "1:3", ast.Nodes[0].MapKey.Edges[0].Src.Range.End.String())
|
||||||
assert.Equal(t, "1:6", ast.Nodes[0].MapKey.Edges[0].Dst.Range.Start.String())
|
assert.Equal(t, "1:7", ast.Nodes[0].MapKey.Edges[0].Dst.Range.Start.String())
|
||||||
assert.Equal(t, "1:7", ast.Nodes[0].MapKey.Edges[0].Dst.Range.End.String())
|
assert.Equal(t, "1:8", ast.Nodes[0].MapKey.Edges[0].Dst.Range.End.String())
|
||||||
assert.Equal(t, "1:6", ast.Nodes[0].MapKey.Edges[1].Dst.Range.Start.String())
|
assert.Equal(t, "1:12", ast.Nodes[0].MapKey.Edges[1].Dst.Range.Start.String())
|
||||||
assert.Equal(t, "1:6", ast.Nodes[0].MapKey.Edges[1].Dst.Range.End.String())
|
assert.Equal(t, "1:13", ast.Nodes[0].MapKey.Edges[1].Dst.Range.End.String())
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
91
testdata/d2parser/TestParse/whitespace_range.exp.json
generated
vendored
Normal file
91
testdata/d2parser/TestParse/whitespace_range.exp.json
generated
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
{
|
||||||
|
"ast": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:0:0-0:13:13",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"map_key": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:1:1-0:13:13",
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:1:1-0:7:7",
|
||||||
|
"src": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:1:1-0:2:2",
|
||||||
|
"path": [
|
||||||
|
{
|
||||||
|
"unquoted_string": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:1:1-0:2:2",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"string": "a",
|
||||||
|
"raw_string": "a"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"src_arrow": "",
|
||||||
|
"dst": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:6:6-0:7:7",
|
||||||
|
"path": [
|
||||||
|
{
|
||||||
|
"unquoted_string": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:6:6-0:7:7",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"string": "b",
|
||||||
|
"raw_string": "b"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dst_arrow": ">"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:6:6-0:12:12",
|
||||||
|
"src": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:6:6-0:7:7",
|
||||||
|
"path": [
|
||||||
|
{
|
||||||
|
"unquoted_string": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:6:6-0:7:7",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"string": "b",
|
||||||
|
"raw_string": "b"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"src_arrow": "",
|
||||||
|
"dst": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:11:11-0:12:12",
|
||||||
|
"path": [
|
||||||
|
{
|
||||||
|
"unquoted_string": {
|
||||||
|
"range": "d2/testdata/d2parser/TestParse/whitespace_range.d2,0:11:11-0:12:12",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"string": "c",
|
||||||
|
"raw_string": "c"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dst_arrow": ">"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primary": {},
|
||||||
|
"value": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"err": null
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue