1

refac: fluent.syntax -> fluent-syntax

This commit is contained in:
2025-07-21 16:45:21 +03:00
parent 8dd80fb012
commit 2f142d6da3
323 changed files with 4 additions and 4 deletions

View File

@@ -0,0 +1 @@
crlf.ftl eol=crlf

View File

@@ -0,0 +1,2 @@
err1 = { foo.23 }
err2 = { foo. }

View File

@@ -0,0 +1,58 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 13,
"end": 13
}
}
],
"content": "err1 = { foo.23 }\n",
"span": {
"type": "Span",
"start": 0,
"end": 18
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 31,
"end": 31
}
}
],
"content": "err2 = { foo. }\n",
"span": {
"type": "Span",
"start": 18,
"end": 34
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 34
}
}

View File

@@ -0,0 +1 @@
err1 = { -brand.gender }

View File

@@ -0,0 +1,32 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0019",
"arguments": [],
"message": "Attributes of terms cannot be used as placeables",
"span": {
"type": "Span",
"start": 23,
"end": 23
}
}
],
"content": "err1 = { -brand.gender }\n",
"span": {
"type": "Span",
"start": 0,
"end": 25
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 25
}
}

View File

@@ -0,0 +1,5 @@
err1 =
{ foo.bar ->
[1] One
*[2] Two
}

View File

@@ -0,0 +1,32 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0018",
"arguments": [],
"message": "Attributes of messages cannot be used as selectors",
"span": {
"type": "Span",
"start": 21,
"end": 21
}
}
],
"content": "err1 =\n { foo.bar ->\n [1] One\n *[2] Two\n }\n",
"span": {
"type": "Span",
"start": 0,
"end": 62
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 62
}
}

View File

@@ -0,0 +1,2 @@
foo = Value
.attr = Value 2

View File

@@ -0,0 +1,85 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 6,
"end": 11
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 11
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 13,
"end": 17
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 2",
"span": {
"type": "Span",
"start": 20,
"end": 27
}
}
],
"span": {
"type": "Span",
"start": 20,
"end": 27
}
},
"span": {
"type": "Span",
"start": 12,
"end": 27
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 27
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 28
}
}

View File

@@ -0,0 +1,17 @@
key1 = Value 1
.attr =
key2 =
.attr =
key3 =
.attr1 = Attr 1
.attr2 =
key4 =
.attr1 =
.attr2 = Attr 2
key5 =
.attr1 =
.attr2 =

View File

@@ -0,0 +1,120 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 26,
"end": 26
}
}
],
"content": "key1 = Value 1\n .attr =\n\n",
"span": {
"type": "Span",
"start": 0,
"end": 28
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 46,
"end": 46
}
}
],
"content": "key2 =\n .attr =\n\n",
"span": {
"type": "Span",
"start": 28,
"end": 48
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 87,
"end": 87
}
}
],
"content": "key3 =\n .attr1 = Attr 1\n .attr2 =\n\n",
"span": {
"type": "Span",
"start": 48,
"end": 89
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 108,
"end": 108
}
}
],
"content": "key4 =\n .attr1 =\n .attr2 = Attr 2\n\n",
"span": {
"type": "Span",
"start": 89,
"end": 130
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 149,
"end": 149
}
}
],
"content": "key5 =\n .attr1 =\n .attr2 =\n",
"span": {
"type": "Span",
"start": 130,
"end": 163
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 163
}
}

View File

@@ -0,0 +1,2 @@
key = Value
.label

View File

@@ -0,0 +1,34 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 22,
"end": 22
}
}
],
"content": "key = Value\n .label\n",
"span": {
"type": "Span",
"start": 0,
"end": 23
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 23
}
}

View File

@@ -0,0 +1,27 @@
### NOTE: Disable final newline insertion and trimming when editing this file.
key01 = Value 01
key02 = Value 02
key03 =
Value 03
Continued
# There are four spaces on the line between "Value 04" and "Continued".
key04 =
Value 04
Continued
# There are four spaces on the line following "Value 05".
key05 =
Value 05
# There are four spaces on the line following "Value 06".
key06 = Value 06

View File

@@ -0,0 +1,271 @@
{
"type": "Resource",
"body": [
{
"content": "NOTE: Disable final newline insertion and trimming when editing this file.",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 78
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 80,
"end": 85
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 01",
"span": {
"type": "Span",
"start": 88,
"end": 96
}
}
],
"span": {
"type": "Span",
"start": 88,
"end": 96
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 80,
"end": 96
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key02",
"span": {
"type": "Span",
"start": 98,
"end": 103
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 02",
"span": {
"type": "Span",
"start": 106,
"end": 114
}
}
],
"span": {
"type": "Span",
"start": 106,
"end": 114
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 98,
"end": 114
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key03",
"span": {
"type": "Span",
"start": 117,
"end": 122
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 03\n\nContinued",
"span": {
"type": "Span",
"start": 130,
"end": 153
}
}
],
"span": {
"type": "Span",
"start": 126,
"end": 153
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 117,
"end": 153
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key04",
"span": {
"type": "Span",
"start": 227,
"end": 232
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 04\n\nContinued",
"span": {
"type": "Span",
"start": 240,
"end": 267
}
}
],
"span": {
"type": "Span",
"start": 236,
"end": 267
}
},
"attributes": [],
"comment": {
"content": "There are four spaces on the line between \"Value 04\" and \"Continued\".",
"type": "Comment",
"span": {
"type": "Span",
"start": 155,
"end": 226
}
},
"span": {
"type": "Span",
"start": 155,
"end": 267
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key05",
"span": {
"type": "Span",
"start": 327,
"end": 332
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 05",
"span": {
"type": "Span",
"start": 339,
"end": 347
}
}
],
"span": {
"type": "Span",
"start": 335,
"end": 347
}
},
"attributes": [],
"comment": {
"content": "There are four spaces on the line following \"Value 05\".",
"type": "Comment",
"span": {
"type": "Span",
"start": 269,
"end": 326
}
},
"span": {
"type": "Span",
"start": 269,
"end": 347
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key06",
"span": {
"type": "Span",
"start": 411,
"end": 416
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 06",
"span": {
"type": "Span",
"start": 419,
"end": 427
}
}
],
"span": {
"type": "Span",
"start": 419,
"end": 427
}
},
"attributes": [],
"comment": {
"content": "There are four spaces on the line following \"Value 06\".",
"type": "Comment",
"span": {
"type": "Span",
"start": 353,
"end": 410
}
},
"span": {
"type": "Span",
"start": 353,
"end": 427
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 432
}
}

View File

@@ -0,0 +1,5 @@
err01 = { -2.4.5 }
err02 = { -2.4. }
err03 = { -.4 }
err04 = { -2..4 }
err05 = { 24d }

View File

@@ -0,0 +1,130 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 14,
"end": 14
}
}
],
"content": "err01 = { -2.4.5 }\n",
"span": {
"type": "Span",
"start": 0,
"end": 19
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 33,
"end": 33
}
}
],
"content": "err02 = { -2.4. }\n",
"span": {
"type": "Span",
"start": 19,
"end": 37
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 48,
"end": 48
}
}
],
"content": "err03 = { -.4 }\n",
"span": {
"type": "Span",
"start": 37,
"end": 53
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"0-9"
],
"message": "Expected a character from range: \"0-9\"",
"span": {
"type": "Span",
"start": 66,
"end": 66
}
}
],
"content": "err04 = { -2..4 }\n",
"span": {
"type": "Span",
"start": 53,
"end": 71
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 83,
"end": 83
}
}
],
"content": "err05 = { 24d }\n",
"span": {
"type": "Span",
"start": 71,
"end": 87
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 87
}
}

View File

@@ -0,0 +1,3 @@
err01 = { no-caps-name() }
err02 = { BUILTIN(2: "foo") }
err03 = { BUILTIN(key: foo) }

View File

@@ -0,0 +1,76 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0008",
"arguments": [],
"message": "The callee has to be an upper-case identifier or a term",
"span": {
"type": "Span",
"start": 22,
"end": 22
}
}
],
"content": "err01 = { no-caps-name() }\n",
"span": {
"type": "Span",
"start": 0,
"end": 27
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0009",
"arguments": [],
"message": "The argument name has to be a simple identifier",
"span": {
"type": "Span",
"start": 46,
"end": 46
}
}
],
"content": "err02 = { BUILTIN(2: \"foo\") }\n",
"span": {
"type": "Span",
"start": 27,
"end": 57
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0014",
"arguments": [],
"message": "Expected literal",
"span": {
"type": "Span",
"start": 80,
"end": 80
}
}
],
"content": "err03 = { BUILTIN(key: foo) }\n",
"span": {
"type": "Span",
"start": 57,
"end": 87
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 87
}
}

View File

@@ -0,0 +1 @@
# This is a comment with no new line

View File

@@ -0,0 +1,19 @@
{
"type": "Resource",
"body": [
{
"content": "This is a comment with no new line",
"type": "Comment",
"span": {
"type": "Span",
"start": 0,
"end": 36
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 36
}
}

View File

@@ -0,0 +1,14 @@
key01 = Value 01
key02 =
Value 02
Continued
.title = Title
# ERROR Unclosed StringLiteral
err03 = { "str
# ERROR Missing newline after ->.
err04 = { $sel -> }

View File

@@ -0,0 +1,187 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 2,
"end": 7
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 01",
"span": {
"type": "Span",
"start": 10,
"end": 18
}
}
],
"span": {
"type": "Span",
"start": 10,
"end": 18
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 2,
"end": 18
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key02",
"span": {
"type": "Span",
"start": 20,
"end": 25
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 02\nContinued",
"span": {
"type": "Span",
"start": 35,
"end": 58
}
}
],
"span": {
"type": "Span",
"start": 31,
"end": 58
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "title",
"span": {
"type": "Span",
"start": 67,
"end": 72
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Title",
"span": {
"type": "Span",
"start": 75,
"end": 80
}
}
],
"span": {
"type": "Span",
"start": 75,
"end": 80
}
},
"span": {
"type": "Span",
"start": 66,
"end": 80
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 20,
"end": 80
}
},
{
"type": "Comment",
"content": "ERROR Unclosed StringLiteral",
"span": {
"type": "Span",
"start": 84,
"end": 114
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0020",
"arguments": [],
"message": "Unterminated string expression",
"span": {
"type": "Span",
"start": 130,
"end": 130
}
}
],
"content": "err03 = { \"str\r\n\r\n",
"span": {
"type": "Span",
"start": 116,
"end": 134
}
},
{
"type": "Comment",
"content": "ERROR Missing newline after ->.",
"span": {
"type": "Span",
"start": 134,
"end": 167
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"␤"
],
"message": "Expected token: \"␤\"",
"span": {
"type": "Span",
"start": 187,
"end": 187
}
}
],
"content": "err04 = { $sel -> }\r\n",
"span": {
"type": "Span",
"start": 169,
"end": 190
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 190
}
}

View File

@@ -0,0 +1,8 @@
### BE CAREFUL WHEN EDITING THIS FILE
###
### The last character in this file is the dash ("-") on line 8.
### We want to test a literal which starts like a negative number.
### Most editors automatically add a trailing newline at EOF.
### If you edit this file make sure to turn this behavior off.
key1 = {-

View File

@@ -0,0 +1,43 @@
{
"type": "Resource",
"body": [
{
"content": "BE CAREFUL WHEN EDITING THIS FILE\n\nThe last character in this file is the dash (\"-\") on line 8.\nWe want to test a literal which starts like a negative number.\nMost editors automatically add a trailing newline at EOF.\nIf you edit this file make sure to turn this behavior off.",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 298
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 309,
"end": 309
}
}
],
"content": "key1 = {-",
"span": {
"type": "Span",
"start": 300,
"end": 309
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 309
}
}

View File

@@ -0,0 +1,6 @@
foo = Foo
.attr = Foo Attr
bar = Bar
.attr1 = Bar Attr 1
.attr2 = Bar Attr 2

View File

@@ -0,0 +1,196 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo",
"span": {
"type": "Span",
"start": 6,
"end": 9
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 9
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 11,
"end": 15
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo Attr",
"span": {
"type": "Span",
"start": 18,
"end": 26
}
}
],
"span": {
"type": "Span",
"start": 18,
"end": 26
}
},
"span": {
"type": "Span",
"start": 10,
"end": 26
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 26
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "bar",
"span": {
"type": "Span",
"start": 28,
"end": 31
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Bar",
"span": {
"type": "Span",
"start": 34,
"end": 37
}
}
],
"span": {
"type": "Span",
"start": 34,
"end": 37
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr1",
"span": {
"type": "Span",
"start": 43,
"end": 48
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Bar Attr 1",
"span": {
"type": "Span",
"start": 51,
"end": 61
}
}
],
"span": {
"type": "Span",
"start": 51,
"end": 61
}
},
"span": {
"type": "Span",
"start": 42,
"end": 61
}
},
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr2",
"span": {
"type": "Span",
"start": 63,
"end": 68
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Bar Attr 2",
"span": {
"type": "Span",
"start": 71,
"end": 81
}
}
],
"span": {
"type": "Span",
"start": 71,
"end": 81
}
},
"span": {
"type": "Span",
"start": 62,
"end": 81
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 28,
"end": 81
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 82
}
}

View File

@@ -0,0 +1,9 @@
{
"type": "Resource",
"body": [],
"span": {
"type": "Span",
"start": 0,
"end": 0
}
}

View File

@@ -0,0 +1,9 @@
{
"type": "Resource",
"body": [],
"span": {
"type": "Span",
"start": 0,
"end": 10
}
}

View File

@@ -0,0 +1,24 @@
## Literal text
text-backslash-one = Value with \ a backslash
text-backslash-two = Value with \\ two backslashes
text-backslash-brace = Value with \{placeable}
text-backslash-u = \u0041
text-backslash-backslash-u = \\u0041
## String literals
quote-in-string = {"\""}
backslash-in-string = {"\\"}
# ERROR Mismatched quote
mismatched-quote = {"\\""}
# ERROR Unknown escape
unknown-escape = {"\x"}
## Unicode escapes
string-unicode-sequence = {"\u0041"}
string-escaped-unicode = {"\\u0041"}
# ERROR Unknown escape
unknown-unicode = {"\u000z"}
## Literal braces
brace-open = An opening {"{"} brace.
brace-close = A closing {"}"} brace.

View File

@@ -0,0 +1,673 @@
{
"type": "Resource",
"body": [
{
"content": "Literal text",
"type": "GroupComment",
"span": {
"type": "Span",
"start": 0,
"end": 15
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "text-backslash-one",
"span": {
"type": "Span",
"start": 16,
"end": 34
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value with \\ a backslash",
"span": {
"type": "Span",
"start": 37,
"end": 61
}
}
],
"span": {
"type": "Span",
"start": 37,
"end": 61
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 16,
"end": 61
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "text-backslash-two",
"span": {
"type": "Span",
"start": 62,
"end": 80
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value with \\\\ two backslashes",
"span": {
"type": "Span",
"start": 83,
"end": 112
}
}
],
"span": {
"type": "Span",
"start": 83,
"end": 112
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 62,
"end": 112
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "text-backslash-brace",
"span": {
"type": "Span",
"start": 113,
"end": 133
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value with \\",
"span": {
"type": "Span",
"start": 136,
"end": 148
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "placeable",
"span": {
"type": "Span",
"start": 149,
"end": 158
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 149,
"end": 158
}
},
"span": {
"type": "Span",
"start": 148,
"end": 159
}
}
],
"span": {
"type": "Span",
"start": 136,
"end": 159
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 113,
"end": 159
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "text-backslash-u",
"span": {
"type": "Span",
"start": 160,
"end": 176
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "\\u0041",
"span": {
"type": "Span",
"start": 179,
"end": 185
}
}
],
"span": {
"type": "Span",
"start": 179,
"end": 185
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 160,
"end": 185
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "text-backslash-backslash-u",
"span": {
"type": "Span",
"start": 186,
"end": 212
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "\\\\u0041",
"span": {
"type": "Span",
"start": 215,
"end": 222
}
}
],
"span": {
"type": "Span",
"start": 215,
"end": 222
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 186,
"end": 222
}
},
{
"content": "String literals",
"type": "GroupComment",
"span": {
"type": "Span",
"start": 224,
"end": 242
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "quote-in-string",
"span": {
"type": "Span",
"start": 243,
"end": 258
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": "\\\"",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 262,
"end": 266
}
},
"span": {
"type": "Span",
"start": 261,
"end": 267
}
}
],
"span": {
"type": "Span",
"start": 261,
"end": 267
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 243,
"end": 267
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "backslash-in-string",
"span": {
"type": "Span",
"start": 268,
"end": 287
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": "\\\\",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 291,
"end": 295
}
},
"span": {
"type": "Span",
"start": 290,
"end": 296
}
}
],
"span": {
"type": "Span",
"start": 290,
"end": 296
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 268,
"end": 296
}
},
{
"content": "ERROR Mismatched quote",
"type": "Comment",
"span": {
"type": "Span",
"start": 297,
"end": 321
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 346,
"end": 346
}
}
],
"content": "mismatched-quote = {\"\\\\\"\"}\n",
"span": {
"type": "Span",
"start": 322,
"end": 349
}
},
{
"content": "ERROR Unknown escape",
"type": "Comment",
"span": {
"type": "Span",
"start": 349,
"end": 371
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0025",
"arguments": [
"x"
],
"message": "Unknown escape sequence: \\x.",
"span": {
"type": "Span",
"start": 392,
"end": 392
}
}
],
"content": "unknown-escape = {\"\\x\"}\n\n",
"span": {
"type": "Span",
"start": 372,
"end": 397
}
},
{
"content": "Unicode escapes",
"type": "GroupComment",
"span": {
"type": "Span",
"start": 397,
"end": 415
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "string-unicode-sequence",
"span": {
"type": "Span",
"start": 416,
"end": 439
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": "\\u0041",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 443,
"end": 451
}
},
"span": {
"type": "Span",
"start": 442,
"end": 452
}
}
],
"span": {
"type": "Span",
"start": 442,
"end": 452
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 416,
"end": 452
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "string-escaped-unicode",
"span": {
"type": "Span",
"start": 453,
"end": 475
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": "\\\\u0041",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 479,
"end": 488
}
},
"span": {
"type": "Span",
"start": 478,
"end": 489
}
}
],
"span": {
"type": "Span",
"start": 478,
"end": 489
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 453,
"end": 489
}
},
{
"content": "ERROR Unknown escape",
"type": "Comment",
"span": {
"type": "Span",
"start": 490,
"end": 512
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0026",
"arguments": [
"\\u000z"
],
"message": "Invalid Unicode escape sequence: \\u000z.",
"span": {
"type": "Span",
"start": 538,
"end": 538
}
}
],
"content": "unknown-unicode = {\"\\u000z\"}\n\n",
"span": {
"type": "Span",
"start": 513,
"end": 543
}
},
{
"content": "Literal braces",
"type": "GroupComment",
"span": {
"type": "Span",
"start": 543,
"end": 560
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "brace-open",
"span": {
"type": "Span",
"start": 561,
"end": 571
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "An opening ",
"span": {
"type": "Span",
"start": 574,
"end": 585
}
},
{
"type": "Placeable",
"expression": {
"value": "{",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 586,
"end": 589
}
},
"span": {
"type": "Span",
"start": 585,
"end": 590
}
},
{
"type": "TextElement",
"value": " brace.",
"span": {
"type": "Span",
"start": 590,
"end": 597
}
}
],
"span": {
"type": "Span",
"start": 574,
"end": 597
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 561,
"end": 597
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "brace-close",
"span": {
"type": "Span",
"start": 598,
"end": 609
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "A closing ",
"span": {
"type": "Span",
"start": 612,
"end": 622
}
},
{
"type": "Placeable",
"expression": {
"value": "}",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 623,
"end": 626
}
},
"span": {
"type": "Span",
"start": 622,
"end": 627
}
},
{
"type": "TextElement",
"value": " brace.",
"span": {
"type": "Span",
"start": 627,
"end": 634
}
}
],
"span": {
"type": "Span",
"start": 612,
"end": 634
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 598,
"end": 634
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 635
}
}

View File

@@ -0,0 +1,2 @@
key = { FOO(arg1: 1,
arg2: 2) }

View File

@@ -0,0 +1,127 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "FunctionReference",
"id": {
"type": "Identifier",
"name": "FOO",
"span": {
"type": "Span",
"start": 8,
"end": 11
}
},
"arguments": {
"type": "CallArguments",
"positional": [],
"named": [
{
"type": "NamedArgument",
"name": {
"type": "Identifier",
"name": "arg1",
"span": {
"type": "Span",
"start": 12,
"end": 16
}
},
"value": {
"value": "1",
"type": "NumberLiteral",
"span": {
"type": "Span",
"start": 18,
"end": 19
}
},
"span": {
"type": "Span",
"start": 12,
"end": 19
}
},
{
"type": "NamedArgument",
"name": {
"type": "Identifier",
"name": "arg2",
"span": {
"type": "Span",
"start": 33,
"end": 37
}
},
"value": {
"value": "2",
"type": "NumberLiteral",
"span": {
"type": "Span",
"start": 39,
"end": 40
}
},
"span": {
"type": "Span",
"start": 33,
"end": 40
}
}
],
"span": {
"type": "Span",
"start": 11,
"end": 41
}
},
"span": {
"type": "Span",
"start": 8,
"end": 41
}
},
"span": {
"type": "Span",
"start": 6,
"end": 43
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 43
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 43
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 44
}
}

View File

@@ -0,0 +1,10 @@
err01 = A
key2 = {
a }
key3 = { a
}
key4 = {
{ a }}

View File

@@ -0,0 +1,205 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0002",
"arguments": [],
"message": "Expected an entry start",
"span": {
"type": "Span",
"start": 0,
"end": 0
}
}
],
"content": " err01 = A\n\n",
"span": {
"type": "Span",
"start": 0,
"end": 13
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key2",
"span": {
"type": "Span",
"start": 13,
"end": 17
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "a",
"span": {
"type": "Span",
"start": 22,
"end": 23
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 22,
"end": 23
}
},
"span": {
"type": "Span",
"start": 20,
"end": 25
}
}
],
"span": {
"type": "Span",
"start": 20,
"end": 25
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 13,
"end": 25
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 27,
"end": 31
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "a",
"span": {
"type": "Span",
"start": 36,
"end": 37
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 36,
"end": 37
}
},
"span": {
"type": "Span",
"start": 34,
"end": 39
}
}
],
"span": {
"type": "Span",
"start": 34,
"end": 39
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 27,
"end": 39
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key4",
"span": {
"type": "Span",
"start": 41,
"end": 45
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "a",
"span": {
"type": "Span",
"start": 52,
"end": 53
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 52,
"end": 53
}
},
"span": {
"type": "Span",
"start": 50,
"end": 55
}
},
"span": {
"type": "Span",
"start": 48,
"end": 56
}
}
],
"span": {
"type": "Span",
"start": 48,
"end": 56
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 41,
"end": 56
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 57
}
}

View File

@@ -0,0 +1,23 @@
err01 = {1xx}
err02 = {1xx}
err03 = {1xx}
1xx
err04 = {1xx}
1xx
err05 = {
1xx
err06 = {1xx
.attr = Value
err07 = {
key08 = Value
err09 = {

View File

@@ -0,0 +1,238 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 10,
"end": 10
}
}
],
"content": "err01 = {1xx}\n",
"span": {
"type": "Span",
"start": 0,
"end": 14
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 24,
"end": 24
}
}
],
"content": "err02 = {1xx}\n\n",
"span": {
"type": "Span",
"start": 14,
"end": 29
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 39,
"end": 39
}
}
],
"content": "err03 = {1xx}\n1xx\n\n",
"span": {
"type": "Span",
"start": 29,
"end": 48
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 58,
"end": 58
}
}
],
"content": "err04 = {1xx}\n\n1xx\n\n",
"span": {
"type": "Span",
"start": 48,
"end": 68
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 80,
"end": 80
}
}
],
"content": "err05 = {\n\n1xx\n\n",
"span": {
"type": "Span",
"start": 68,
"end": 84
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 94,
"end": 94
}
}
],
"content": "err06 = {1xx\n\n .attr = Value\n\n",
"span": {
"type": "Span",
"start": 84,
"end": 117
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 128,
"end": 128
}
}
],
"content": "err07 = {\n\n",
"span": {
"type": "Span",
"start": 117,
"end": 128
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key08",
"span": {
"type": "Span",
"start": 128,
"end": 133
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 136,
"end": 141
}
}
],
"span": {
"type": "Span",
"start": 136,
"end": 141
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 128,
"end": 141
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0028",
"arguments": [],
"message": "Expected an inline expression",
"span": {
"type": "Span",
"start": 153,
"end": 153
}
}
],
"content": "err09 = {\n",
"span": {
"type": "Span",
"start": 143,
"end": 153
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 153
}
}

View File

@@ -0,0 +1,64 @@
key01 = .Value
key02 = …Value
key03 = {"."}Value
key04 =
{"."}Value
key05 = Value
{"."}Continued
key06 = .Value
{"."}Continued
# ERROR (attr .Continued must have a value)
key07 = Value
.Continued
# ERROR (attr .Value must have a value)
key08 =
.Value
# ERROR (attr .Value must have a value)
key09 =
.Value
Continued
key10 =
.Value = which looks like an attribute
Continued
key11 =
{"."}Value = which looks like an attribute
Continued
key12 =
.accesskey =
A
key13 =
.attribute = .Value
key14 =
.attribute =
{"."}Value
key15 =
{ 1 ->
[one] .Value
*[other]
{"."}Value
}
# ERROR (variant must have a value)
key16 =
{ 1 ->
*[one]
.Value
}
# ERROR (unclosed placeable)
key17 =
{ 1 ->
*[one] Value
.Continued
}

View File

@@ -0,0 +1,934 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 0,
"end": 5
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": ".Value",
"span": {
"type": "Span",
"start": 8,
"end": 14
}
}
],
"span": {
"type": "Span",
"start": 8,
"end": 14
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 14
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key02",
"span": {
"type": "Span",
"start": 15,
"end": 20
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "…Value",
"span": {
"type": "Span",
"start": 23,
"end": 29
}
}
],
"span": {
"type": "Span",
"start": 23,
"end": 29
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 15,
"end": 29
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key03",
"span": {
"type": "Span",
"start": 30,
"end": 35
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 39,
"end": 42
}
},
"span": {
"type": "Span",
"start": 38,
"end": 43
}
},
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 43,
"end": 48
}
}
],
"span": {
"type": "Span",
"start": 38,
"end": 48
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 30,
"end": 48
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key04",
"span": {
"type": "Span",
"start": 49,
"end": 54
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 62,
"end": 65
}
},
"span": {
"type": "Span",
"start": 61,
"end": 66
}
},
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 66,
"end": 71
}
}
],
"span": {
"type": "Span",
"start": 57,
"end": 71
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 49,
"end": 71
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key05",
"span": {
"type": "Span",
"start": 73,
"end": 78
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value\n",
"span": {
"type": "Span",
"start": 81,
"end": 91
}
},
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 92,
"end": 95
}
},
"span": {
"type": "Span",
"start": 91,
"end": 96
}
},
{
"type": "TextElement",
"value": "Continued",
"span": {
"type": "Span",
"start": 96,
"end": 105
}
}
],
"span": {
"type": "Span",
"start": 81,
"end": 105
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 73,
"end": 105
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key06",
"span": {
"type": "Span",
"start": 107,
"end": 112
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": ".Value\n",
"span": {
"type": "Span",
"start": 115,
"end": 126
}
},
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 127,
"end": 130
}
},
"span": {
"type": "Span",
"start": 126,
"end": 131
}
},
{
"type": "TextElement",
"value": "Continued",
"span": {
"type": "Span",
"start": 131,
"end": 140
}
}
],
"span": {
"type": "Span",
"start": 115,
"end": 140
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 107,
"end": 140
}
},
{
"content": "ERROR (attr .Continued must have a value)",
"type": "Comment",
"span": {
"type": "Span",
"start": 142,
"end": 185
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 214,
"end": 214
}
}
],
"content": "key07 = Value\n .Continued\n\n",
"span": {
"type": "Span",
"start": 186,
"end": 216
}
},
{
"content": "ERROR (attr .Value must have a value)",
"type": "Comment",
"span": {
"type": "Span",
"start": 216,
"end": 255
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 274,
"end": 274
}
}
],
"content": "key08 =\n .Value\n\n",
"span": {
"type": "Span",
"start": 256,
"end": 276
}
},
{
"content": "ERROR (attr .Value must have a value)",
"type": "Comment",
"span": {
"type": "Span",
"start": 276,
"end": 315
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 334,
"end": 334
}
}
],
"content": "key09 =\n .Value\n Continued\n\n",
"span": {
"type": "Span",
"start": 316,
"end": 350
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key10",
"span": {
"type": "Span",
"start": 350,
"end": 355
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "Value",
"span": {
"type": "Span",
"start": 363,
"end": 368
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "which looks like an attribute\nContinued",
"span": {
"type": "Span",
"start": 371,
"end": 414
}
}
],
"span": {
"type": "Span",
"start": 371,
"end": 414
}
},
"span": {
"type": "Span",
"start": 362,
"end": 414
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 350,
"end": 414
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key11",
"span": {
"type": "Span",
"start": 416,
"end": 421
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 429,
"end": 432
}
},
"span": {
"type": "Span",
"start": 428,
"end": 433
}
},
{
"type": "TextElement",
"value": "Value = which looks like an attribute\nContinued",
"span": {
"type": "Span",
"start": 433,
"end": 484
}
}
],
"span": {
"type": "Span",
"start": 424,
"end": 484
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 416,
"end": 484
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key12",
"span": {
"type": "Span",
"start": 486,
"end": 491
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "accesskey",
"span": {
"type": "Span",
"start": 499,
"end": 508
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "A",
"span": {
"type": "Span",
"start": 515,
"end": 516
}
}
],
"span": {
"type": "Span",
"start": 511,
"end": 516
}
},
"span": {
"type": "Span",
"start": 498,
"end": 516
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 486,
"end": 516
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key13",
"span": {
"type": "Span",
"start": 522,
"end": 527
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attribute",
"span": {
"type": "Span",
"start": 535,
"end": 544
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": ".Value",
"span": {
"type": "Span",
"start": 547,
"end": 553
}
}
],
"span": {
"type": "Span",
"start": 547,
"end": 553
}
},
"span": {
"type": "Span",
"start": 534,
"end": 553
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 522,
"end": 553
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key14",
"span": {
"type": "Span",
"start": 555,
"end": 560
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attribute",
"span": {
"type": "Span",
"start": 568,
"end": 577
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 590,
"end": 593
}
},
"span": {
"type": "Span",
"start": 589,
"end": 594
}
},
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 594,
"end": 599
}
}
],
"span": {
"type": "Span",
"start": 580,
"end": 599
}
},
"span": {
"type": "Span",
"start": 567,
"end": 599
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 555,
"end": 599
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key15",
"span": {
"type": "Span",
"start": 601,
"end": 606
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "SelectExpression",
"selector": {
"value": "1",
"type": "NumberLiteral",
"span": {
"type": "Span",
"start": 615,
"end": 616
}
},
"variants": [
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "one",
"span": {
"type": "Span",
"start": 629,
"end": 632
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": ".Value",
"span": {
"type": "Span",
"start": 634,
"end": 640
}
}
],
"span": {
"type": "Span",
"start": 634,
"end": 640
}
},
"default": false,
"span": {
"type": "Span",
"start": 628,
"end": 640
}
},
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "other",
"span": {
"type": "Span",
"start": 650,
"end": 655
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"value": ".",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 670,
"end": 673
}
},
"span": {
"type": "Span",
"start": 669,
"end": 674
}
},
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 674,
"end": 679
}
}
],
"span": {
"type": "Span",
"start": 657,
"end": 679
}
},
"default": true,
"span": {
"type": "Span",
"start": 648,
"end": 679
}
}
],
"span": {
"type": "Span",
"start": 615,
"end": 684
}
},
"span": {
"type": "Span",
"start": 613,
"end": 685
}
}
],
"span": {
"type": "Span",
"start": 609,
"end": 685
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 601,
"end": 685
}
},
{
"content": "ERROR (variant must have a value)",
"type": "Comment",
"span": {
"type": "Span",
"start": 687,
"end": 722
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0012",
"arguments": [],
"message": "Expected value",
"span": {
"type": "Span",
"start": 755,
"end": 755
}
}
],
"content": "key16 =\n { 1 ->\n *[one]\n .Value\n }\n\n",
"span": {
"type": "Span",
"start": 723,
"end": 781
}
},
{
"content": "ERROR (unclosed placeable)",
"type": "Comment",
"span": {
"type": "Span",
"start": 781,
"end": 809
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 860,
"end": 860
}
}
],
"content": "key17 =\n { 1 ->\n *[one] Value\n .Continued\n }\n",
"span": {
"type": "Span",
"start": 810,
"end": 877
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 877
}
}

View File

@@ -0,0 +1,3 @@
key01 = Value

View File

@@ -0,0 +1,48 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 2,
"end": 7
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 10,
"end": 15
}
}
],
"span": {
"type": "Span",
"start": 10,
"end": 15
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 2,
"end": 15
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 16
}
}

View File

@@ -0,0 +1,5 @@
key01 = Value

View File

@@ -0,0 +1,48 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 10,
"end": 15
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 18,
"end": 23
}
}
],
"span": {
"type": "Span",
"start": 18,
"end": 23
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 10,
"end": 23
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 24
}
}

View File

@@ -0,0 +1,4 @@
err1 =
{ foo ->
*[1] One
}

View File

@@ -0,0 +1,32 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0016",
"arguments": [],
"message": "Message references cannot be used as selectors",
"span": {
"type": "Span",
"start": 17,
"end": 17
}
}
],
"content": "err1 =\n { foo ->\n *[1] One\n }\n",
"span": {
"type": "Span",
"start": 0,
"end": 42
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 42
}
}

View File

@@ -0,0 +1,14 @@
### BE CAREFUL WHEN EDITING THIS FILE
###
### The last character in this file is the space (" ") on line 14.
### We want to test a message with no value and with no EOL at the
### end of the fie. Most editors automatically add a trailing newline
### at EOF. If you edit this file make sure to turn this behavior off.
key1 =
key2 =

View File

@@ -0,0 +1,67 @@
{
"type": "Resource",
"body": [
{
"content": "BE CAREFUL WHEN EDITING THIS FILE\n\nThe last character in this file is the space (\" \") on line 14.\nWe want to test a message with no value and with no EOL at the\nend of the fie. Most editors automatically add a trailing newline\nat EOF. If you edit this file make sure to turn this behavior off.",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 316
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0005",
"arguments": [
"key1"
],
"message": "Expected message \"key1\" to have a value or attributes",
"span": {
"type": "Span",
"start": 324,
"end": 324
}
}
],
"content": "key1 =\n\n \n\n",
"span": {
"type": "Span",
"start": 318,
"end": 329
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0005",
"arguments": [
"key2"
],
"message": "Expected message \"key2\" to have a value or attributes",
"span": {
"type": "Span",
"start": 335,
"end": 335
}
}
],
"content": "key2 =\n\n ",
"span": {
"type": "Span",
"start": 329,
"end": 338
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 338
}
}

View File

@@ -0,0 +1,18 @@
### BE CAREFUL WHEN EDITING THIS FILE
###
### The last character in this file is the equals sign in `key5 =` in line 18.
### We want to test a message with no value and with no EOL after its
### identifier. Most editors automatically add a trailing newline at EOF.
### If you edit this file make sure to turn this behavior off.
key1 =
key2 =
key3 =
.attr = Attr
key4 =
.attr = Attr
key5 =

View File

@@ -0,0 +1,205 @@
{
"type": "Resource",
"body": [
{
"content": "BE CAREFUL WHEN EDITING THIS FILE\n\nThe last character in this file is the equals sign in `key5 =` in line 18.\nWe want to test a message with no value and with no EOL after its\nidentifier. Most editors automatically add a trailing newline at EOF.\nIf you edit this file make sure to turn this behavior off.",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 327
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0005",
"arguments": [
"key1"
],
"message": "Expected message \"key1\" to have a value or attributes",
"span": {
"type": "Span",
"start": 335,
"end": 335
}
}
],
"content": "key1 =\n\n",
"span": {
"type": "Span",
"start": 329,
"end": 337
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0005",
"arguments": [
"key2"
],
"message": "Expected message \"key2\" to have a value or attributes",
"span": {
"type": "Span",
"start": 343,
"end": 343
}
}
],
"content": "key2 = \n\n",
"span": {
"type": "Span",
"start": 337,
"end": 346
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 346,
"end": 350
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 358,
"end": 362
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Attr",
"span": {
"type": "Span",
"start": 365,
"end": 369
}
}
],
"span": {
"type": "Span",
"start": 365,
"end": 369
}
},
"span": {
"type": "Span",
"start": 357,
"end": 369
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 346,
"end": 369
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key4",
"span": {
"type": "Span",
"start": 371,
"end": 375
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 384,
"end": 388
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Attr",
"span": {
"type": "Span",
"start": 391,
"end": 395
}
}
],
"span": {
"type": "Span",
"start": 391,
"end": 395
}
},
"span": {
"type": "Span",
"start": 383,
"end": 395
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 371,
"end": 395
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0005",
"arguments": [
"key5"
],
"message": "Expected message \"key5\" to have a value or attributes",
"span": {
"type": "Span",
"start": 403,
"end": 403
}
}
],
"content": "key5 =",
"span": {
"type": "Span",
"start": 397,
"end": 403
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 403
}
}

View File

@@ -0,0 +1,6 @@
# This is
#
# An example of a multiline comment
key = Value

View File

@@ -0,0 +1,57 @@
{
"type": "Resource",
"body": [
{
"content": "This is\n\nAn example of a multiline comment",
"type": "Comment",
"span": {
"type": "Span",
"start": 1,
"end": 48
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 50,
"end": 53
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 56,
"end": 61
}
}
],
"span": {
"type": "Span",
"start": 56,
"end": 61
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 50,
"end": 61
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 62
}
}

View File

@@ -0,0 +1,20 @@
key01 = Value
Continued here.
key02 =
Value
Continued here.
# ERROR "Continued" looks like a new message.
# key03 parses fine with just "Value".
key03 =
Value
Continued here
and here.
# ERROR "Continued" and "and" look like new messages
# key04 parses fine with just "Value".
key04 =
Value
Continued here
and even here.

View File

@@ -0,0 +1,250 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 0,
"end": 5
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value\nContinued here.",
"span": {
"type": "Span",
"start": 8,
"end": 33
}
}
],
"span": {
"type": "Span",
"start": 8,
"end": 33
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 33
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key02",
"span": {
"type": "Span",
"start": 35,
"end": 40
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value\nContinued here.",
"span": {
"type": "Span",
"start": 47,
"end": 72
}
}
],
"span": {
"type": "Span",
"start": 43,
"end": 72
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 35,
"end": 72
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key03",
"span": {
"type": "Span",
"start": 159,
"end": 164
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 171,
"end": 176
}
}
],
"span": {
"type": "Span",
"start": 167,
"end": 176
}
},
"attributes": [],
"comment": {
"content": "ERROR \"Continued\" looks like a new message.\nkey03 parses fine with just \"Value\".",
"type": "Comment",
"span": {
"type": "Span",
"start": 74,
"end": 158
}
},
"span": {
"type": "Span",
"start": 74,
"end": 176
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 187,
"end": 187
}
}
],
"content": "Continued here\n and here.\n\n",
"span": {
"type": "Span",
"start": 177,
"end": 207
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key04",
"span": {
"type": "Span",
"start": 299,
"end": 304
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 311,
"end": 316
}
}
],
"span": {
"type": "Span",
"start": 307,
"end": 316
}
},
"attributes": [],
"comment": {
"content": "ERROR \"Continued\" and \"and\" look like new messages\nkey04 parses fine with just \"Value\".",
"type": "Comment",
"span": {
"type": "Span",
"start": 207,
"end": 298
}
},
"span": {
"type": "Span",
"start": 207,
"end": 316
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 327,
"end": 327
}
}
],
"content": "Continued here\n",
"span": {
"type": "Span",
"start": 317,
"end": 332
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 336,
"end": 336
}
}
],
"content": "and even here.\n",
"span": {
"type": "Span",
"start": 332,
"end": 347
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 347
}
}

View File

@@ -0,0 +1,3 @@
err01 = { BUILTIN(key: "
text
") }

View File

@@ -0,0 +1,32 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0020",
"arguments": [],
"message": "Unterminated string expression",
"span": {
"type": "Span",
"start": 24,
"end": 24
}
}
],
"content": "err01 = { BUILTIN(key: \"\n text\n \") }\n",
"span": {
"type": "Span",
"start": 0,
"end": 40
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 40
}
}

View File

@@ -0,0 +1,2 @@
key = Value
Value 2

View File

@@ -0,0 +1,48 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value\nValue 2",
"span": {
"type": "Span",
"start": 6,
"end": 23
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 23
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 23
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 24
}
}

View File

@@ -0,0 +1,3 @@
key =
Foo { bar }
Baz

View File

@@ -0,0 +1,83 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo ",
"span": {
"type": "Span",
"start": 10,
"end": 14
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "bar",
"span": {
"type": "Span",
"start": 16,
"end": 19
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 16,
"end": 19
}
},
"span": {
"type": "Span",
"start": 14,
"end": 21
}
},
{
"type": "TextElement",
"value": "\nBaz",
"span": {
"type": "Span",
"start": 21,
"end": 29
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 29
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 29
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 30
}
}

View File

@@ -0,0 +1,2 @@
err01 = Value
.2 = Foo

View File

@@ -0,0 +1,34 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 19,
"end": 19
}
}
],
"content": "err01 = Value\n .2 = Foo\n",
"span": {
"type": "Span",
"start": 0,
"end": 27
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 27
}
}

View File

@@ -0,0 +1,9 @@
key1 =
A multiline message with a { placeable }
at the end of line. The message should
consist of three lines of text.
key2 =
A multiline message with a { placeable }
key3 = A singleline message with a { placeable }

View File

@@ -0,0 +1,211 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key1",
"span": {
"type": "Span",
"start": 0,
"end": 4
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "A multiline message with a ",
"span": {
"type": "Span",
"start": 11,
"end": 38
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "placeable",
"span": {
"type": "Span",
"start": 40,
"end": 49
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 40,
"end": 49
}
},
"span": {
"type": "Span",
"start": 38,
"end": 51
}
},
{
"type": "TextElement",
"value": "\nat the end of line. The message should\nconsist of three lines of text.",
"span": {
"type": "Span",
"start": 51,
"end": 131
}
}
],
"span": {
"type": "Span",
"start": 7,
"end": 131
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 131
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key2",
"span": {
"type": "Span",
"start": 133,
"end": 137
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "A multiline message with a ",
"span": {
"type": "Span",
"start": 144,
"end": 171
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "placeable",
"span": {
"type": "Span",
"start": 173,
"end": 182
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 173,
"end": 182
}
},
"span": {
"type": "Span",
"start": 171,
"end": 184
}
}
],
"span": {
"type": "Span",
"start": 140,
"end": 184
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 133,
"end": 184
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 186,
"end": 190
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "A singleline message with a ",
"span": {
"type": "Span",
"start": 193,
"end": 221
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "placeable",
"span": {
"type": "Span",
"start": 223,
"end": 232
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 223,
"end": 232
}
},
"span": {
"type": "Span",
"start": 221,
"end": 234
}
}
],
"span": {
"type": "Span",
"start": 193,
"end": 234
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 186,
"end": 234
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 235
}
}

View File

@@ -0,0 +1,8 @@
key1 =
{ foo }
key2 =
Foo { foo }
key3 =
{ foo } Foo

View File

@@ -0,0 +1,193 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key1",
"span": {
"type": "Span",
"start": 0,
"end": 4
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 13,
"end": 16
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 13,
"end": 16
}
},
"span": {
"type": "Span",
"start": 11,
"end": 18
}
}
],
"span": {
"type": "Span",
"start": 7,
"end": 18
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 18
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key2",
"span": {
"type": "Span",
"start": 20,
"end": 24
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo ",
"span": {
"type": "Span",
"start": 31,
"end": 35
}
},
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 37,
"end": 40
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 37,
"end": 40
}
},
"span": {
"type": "Span",
"start": 35,
"end": 42
}
}
],
"span": {
"type": "Span",
"start": 27,
"end": 42
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 20,
"end": 42
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 44,
"end": 48
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 57,
"end": 60
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 57,
"end": 60
}
},
"span": {
"type": "Span",
"start": 55,
"end": 62
}
},
{
"type": "TextElement",
"value": " Foo",
"span": {
"type": "Span",
"start": 62,
"end": 66
}
}
],
"span": {
"type": "Span",
"start": 51,
"end": 66
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 44,
"end": 66
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 67
}
}

View File

@@ -0,0 +1,12 @@
key1 = {{ foo }}
key2 = { { foo } }
key3 =
{
{ foo }
}
err1 = { { foo }
err2 = { foo } }

View File

@@ -0,0 +1,245 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key1",
"span": {
"type": "Span",
"start": 0,
"end": 4
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 10,
"end": 13
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 10,
"end": 13
}
},
"span": {
"type": "Span",
"start": 8,
"end": 15
}
},
"span": {
"type": "Span",
"start": 7,
"end": 16
}
}
],
"span": {
"type": "Span",
"start": 7,
"end": 16
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 16
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key2",
"span": {
"type": "Span",
"start": 18,
"end": 22
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 30,
"end": 33
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 30,
"end": 33
}
},
"span": {
"type": "Span",
"start": 28,
"end": 35
}
},
"span": {
"type": "Span",
"start": 25,
"end": 38
}
}
],
"span": {
"type": "Span",
"start": 25,
"end": 38
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 18,
"end": 38
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 40,
"end": 44
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "Placeable",
"expression": {
"type": "MessageReference",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 59,
"end": 62
}
},
"attribute": null,
"span": {
"type": "Span",
"start": 59,
"end": 62
}
},
"span": {
"type": "Span",
"start": 57,
"end": 64
}
},
"span": {
"type": "Span",
"start": 50,
"end": 69
}
}
],
"span": {
"type": "Span",
"start": 47,
"end": 69
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 40,
"end": 69
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 90,
"end": 90
}
}
],
"content": "err1 = { { foo }\n\n",
"span": {
"type": "Span",
"start": 71,
"end": 90
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0027",
"arguments": [],
"message": "Unbalanced closing brace in TextElement.",
"span": {
"type": "Span",
"start": 105,
"end": 105
}
}
],
"content": "err2 = { foo } }\n",
"span": {
"type": "Span",
"start": 90,
"end": 107
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 107
}
}

View File

@@ -0,0 +1,34 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 15,
"end": 15
}
}
],
"content": "err01 = { $num\n",
"span": {
"type": "Span",
"start": 0,
"end": 15
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 15
}
}

View File

@@ -0,0 +1,2 @@
### This is a resource wide comment
### It's multiline

View File

@@ -0,0 +1,19 @@
{
"type": "Resource",
"body": [
{
"content": "This is a resource wide comment\nIt's multiline",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 54
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 55
}
}

View File

@@ -0,0 +1,3 @@
### This is a comment
### This comment is multiline
###

View File

@@ -0,0 +1,19 @@
{
"type": "Resource",
"body": [
{
"content": "This is a comment\nThis comment is multiline\n",
"type": "ResourceComment",
"span": {
"type": "Span",
"start": 0,
"end": 55
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 56
}
}

View File

@@ -0,0 +1,3 @@
key = Value
.label = Value
.accesskey = K

View File

@@ -0,0 +1,121 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 6,
"end": 11
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 11
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "label",
"span": {
"type": "Span",
"start": 17,
"end": 22
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 25,
"end": 30
}
}
],
"span": {
"type": "Span",
"start": 25,
"end": 30
}
},
"span": {
"type": "Span",
"start": 16,
"end": 30
}
},
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "accesskey",
"span": {
"type": "Span",
"start": 32,
"end": 41
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "K",
"span": {
"type": "Span",
"start": 44,
"end": 45
}
}
],
"span": {
"type": "Span",
"start": 44,
"end": 45
}
},
"span": {
"type": "Span",
"start": 31,
"end": 45
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 45
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 46
}
}

View File

@@ -0,0 +1 @@
err01 = { $foo $faa }

View File

@@ -0,0 +1,34 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 15,
"end": 15
}
}
],
"content": "err01 = { $foo $faa }\n",
"span": {
"type": "Span",
"start": 0,
"end": 22
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 22
}
}

View File

@@ -0,0 +1 @@
err01 = { $foo - }

View File

@@ -0,0 +1,34 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"}"
],
"message": "Expected token: \"}\"",
"span": {
"type": "Span",
"start": 15,
"end": 15
}
}
],
"content": "err01 = { $foo - }\n",
"span": {
"type": "Span",
"start": 0,
"end": 19
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 19
}
}

View File

@@ -0,0 +1,6 @@
err01 = { $foo -> }
err02 = { $foo ->
}
err03 = { $foo ->

View File

@@ -0,0 +1,78 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"␤"
],
"message": "Expected token: \"␤\"",
"span": {
"type": "Span",
"start": 18,
"end": 18
}
}
],
"content": "err01 = { $foo -> }\n\n",
"span": {
"type": "Span",
"start": 0,
"end": 21
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0011",
"arguments": [],
"message": "Expected at least one variant after \"->\"",
"span": {
"type": "Span",
"start": 43,
"end": 43
}
}
],
"content": "err02 = { $foo ->\n }\n\n",
"span": {
"type": "Span",
"start": 21,
"end": 46
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0011",
"arguments": [],
"message": "Expected at least one variant after \"->\"",
"span": {
"type": "Span",
"start": 64,
"end": 64
}
}
],
"content": "err03 = { $foo ->\n",
"span": {
"type": "Span",
"start": 46,
"end": 64
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 64
}
}

View File

@@ -0,0 +1,9 @@
# ERROR No blanks are allowed between * and [.
err01 = { $sel ->
* [key] Value
}
# ERROR Missing default variant.
err02 = { $sel ->
[key] Value
}

View File

@@ -0,0 +1,72 @@
{
"type": "Resource",
"body": [
{
"content": "ERROR No blanks are allowed between * and [.",
"type": "Comment",
"span": {
"type": "Span",
"start": 0,
"end": 46
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0011",
"arguments": [],
"message": "Expected at least one variant after \"->\"",
"span": {
"type": "Span",
"start": 69,
"end": 69
}
}
],
"content": "err01 = { $sel ->\n * [key] Value\n}\n\n",
"span": {
"type": "Span",
"start": 47,
"end": 87
}
},
{
"content": "ERROR Missing default variant.",
"type": "Comment",
"span": {
"type": "Span",
"start": 87,
"end": 119
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0010",
"arguments": [],
"message": "Expected one of the variants to be marked as default (*)",
"span": {
"type": "Span",
"start": 154,
"end": 154
}
}
],
"content": "err02 = { $sel ->\n [key] Value\n}\n",
"span": {
"type": "Span",
"start": 120,
"end": 156
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 156
}
}

View File

@@ -0,0 +1 @@
foo = Foo

View File

@@ -0,0 +1,48 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo",
"span": {
"type": "Span",
"start": 6,
"end": 9
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 9
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 9
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 10
}
}

View File

@@ -0,0 +1,2 @@
k = Value
.l = Foo

View File

@@ -0,0 +1,85 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "k",
"span": {
"type": "Span",
"start": 0,
"end": 1
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 4,
"end": 9
}
}
],
"span": {
"type": "Span",
"start": 4,
"end": 9
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "l",
"span": {
"type": "Span",
"start": 15,
"end": 16
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Foo",
"span": {
"type": "Span",
"start": 19,
"end": 22
}
}
],
"span": {
"type": "Span",
"start": 19,
"end": 22
}
},
"span": {
"type": "Span",
"start": 14,
"end": 22
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 22
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 23
}
}

View File

@@ -0,0 +1,45 @@
key =
Value
key2 =
.attr = Attribute
key3 =
Value
Value2
Value 4
Value3
.attr2 = Attr 2
key5 = Value 5
key6 = { $sel ->
[one] One
*[two] Two
}
key8 =
{
$sel
->
*[one] One
}

View File

@@ -0,0 +1,457 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 12,
"end": 17
}
}
],
"span": {
"type": "Span",
"start": 8,
"end": 17
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 17
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key2",
"span": {
"type": "Span",
"start": 19,
"end": 23
}
},
"value": null,
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 33,
"end": 37
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Attribute",
"span": {
"type": "Span",
"start": 40,
"end": 49
}
}
],
"span": {
"type": "Span",
"start": 40,
"end": 49
}
},
"span": {
"type": "Span",
"start": 32,
"end": 49
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 19,
"end": 49
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key3",
"span": {
"type": "Span",
"start": 52,
"end": 56
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value\nValue2\n\n\nValue 4\nValue3",
"span": {
"type": "Span",
"start": 63,
"end": 104
}
}
],
"span": {
"type": "Span",
"start": 59,
"end": 104
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr2",
"span": {
"type": "Span",
"start": 113,
"end": 118
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Attr 2",
"span": {
"type": "Span",
"start": 121,
"end": 127
}
}
],
"span": {
"type": "Span",
"start": 121,
"end": 127
}
},
"span": {
"type": "Span",
"start": 112,
"end": 127
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 52,
"end": 127
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key5",
"span": {
"type": "Span",
"start": 130,
"end": 134
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value 5",
"span": {
"type": "Span",
"start": 137,
"end": 144
}
}
],
"span": {
"type": "Span",
"start": 137,
"end": 144
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 130,
"end": 144
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key6",
"span": {
"type": "Span",
"start": 146,
"end": 150
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "SelectExpression",
"selector": {
"type": "VariableReference",
"id": {
"type": "Identifier",
"name": "sel",
"span": {
"type": "Span",
"start": 156,
"end": 159
}
},
"span": {
"type": "Span",
"start": 155,
"end": 159
}
},
"variants": [
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "one",
"span": {
"type": "Span",
"start": 174,
"end": 177
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "One",
"span": {
"type": "Span",
"start": 179,
"end": 182
}
}
],
"span": {
"type": "Span",
"start": 179,
"end": 182
}
},
"default": false,
"span": {
"type": "Span",
"start": 173,
"end": 182
}
},
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "two",
"span": {
"type": "Span",
"start": 194,
"end": 197
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Two",
"span": {
"type": "Span",
"start": 199,
"end": 202
}
}
],
"span": {
"type": "Span",
"start": 199,
"end": 202
}
},
"default": true,
"span": {
"type": "Span",
"start": 192,
"end": 202
}
}
],
"span": {
"type": "Span",
"start": 155,
"end": 208
}
},
"span": {
"type": "Span",
"start": 153,
"end": 209
}
}
],
"span": {
"type": "Span",
"start": 153,
"end": 209
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 146,
"end": 209
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key8",
"span": {
"type": "Span",
"start": 211,
"end": 215
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "SelectExpression",
"selector": {
"type": "VariableReference",
"id": {
"type": "Identifier",
"name": "sel",
"span": {
"type": "Span",
"start": 231,
"end": 234
}
},
"span": {
"type": "Span",
"start": 230,
"end": 234
}
},
"variants": [
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "one",
"span": {
"type": "Span",
"start": 257,
"end": 260
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "One",
"span": {
"type": "Span",
"start": 262,
"end": 265
}
}
],
"span": {
"type": "Span",
"start": 262,
"end": 265
}
},
"default": true,
"span": {
"type": "Span",
"start": 255,
"end": 265
}
}
],
"span": {
"type": "Span",
"start": 230,
"end": 271
}
},
"span": {
"type": "Span",
"start": 221,
"end": 272
}
}
],
"span": {
"type": "Span",
"start": 219,
"end": 272
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 211,
"end": 272
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 273
}
}

View File

@@ -0,0 +1,3 @@
foo = Value
# This is a standalone comment

View File

@@ -0,0 +1,57 @@
{
"type": "Resource",
"body": [
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "foo",
"span": {
"type": "Span",
"start": 0,
"end": 3
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Value",
"span": {
"type": "Span",
"start": 6,
"end": 11
}
}
],
"span": {
"type": "Span",
"start": 6,
"end": 11
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 11
}
},
{
"content": "This is a standalone comment",
"type": "Comment",
"span": {
"type": "Span",
"start": 13,
"end": 43
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 44
}
}

View File

@@ -0,0 +1,2 @@
foo
# ~ERROR E0003, pos 3, args "="

View File

@@ -0,0 +1,43 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 3,
"end": 3
}
}
],
"content": "foo\n",
"span": {
"type": "Span",
"start": 0,
"end": 4
}
},
{
"content": "~ERROR E0003, pos 3, args \"=\"",
"type": "Comment",
"span": {
"type": "Span",
"start": 4,
"end": 35
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 36
}
}

View File

@@ -0,0 +1,24 @@
-term =
{ $case ->
*[uppercase] Term
[lowercase] term
}
.attr = a
key01 = {-term}
key02 = {-term()}
key03 = {-term(case: "uppercase")}
key04 =
{ -term.attr ->
[a] { -term } A
[b] { -term() } B
*[x] X
}
-err1 =
-err2 =
.attr = Attribute
--err3 = Error
err4 = { --err4 }

View File

@@ -0,0 +1,742 @@
{
"type": "Resource",
"body": [
{
"type": "Term",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 1,
"end": 5
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "SelectExpression",
"selector": {
"type": "VariableReference",
"id": {
"type": "Identifier",
"name": "case",
"span": {
"type": "Span",
"start": 15,
"end": 19
}
},
"span": {
"type": "Span",
"start": 14,
"end": 19
}
},
"variants": [
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "uppercase",
"span": {
"type": "Span",
"start": 32,
"end": 41
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "Term",
"span": {
"type": "Span",
"start": 43,
"end": 47
}
}
],
"span": {
"type": "Span",
"start": 43,
"end": 47
}
},
"default": true,
"span": {
"type": "Span",
"start": 30,
"end": 47
}
},
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "lowercase",
"span": {
"type": "Span",
"start": 57,
"end": 66
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "term",
"span": {
"type": "Span",
"start": 68,
"end": 72
}
}
],
"span": {
"type": "Span",
"start": 68,
"end": 72
}
},
"default": false,
"span": {
"type": "Span",
"start": 56,
"end": 72
}
}
],
"span": {
"type": "Span",
"start": 14,
"end": 77
}
},
"span": {
"type": "Span",
"start": 12,
"end": 78
}
}
],
"span": {
"type": "Span",
"start": 8,
"end": 78
}
},
"attributes": [
{
"type": "Attribute",
"id": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 84,
"end": 88
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "a",
"span": {
"type": "Span",
"start": 91,
"end": 92
}
}
],
"span": {
"type": "Span",
"start": 91,
"end": 92
}
},
"span": {
"type": "Span",
"start": 83,
"end": 92
}
}
],
"comment": null,
"span": {
"type": "Span",
"start": 0,
"end": 92
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key01",
"span": {
"type": "Span",
"start": 94,
"end": 99
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 104,
"end": 108
}
},
"attribute": null,
"arguments": null,
"span": {
"type": "Span",
"start": 103,
"end": 108
}
},
"span": {
"type": "Span",
"start": 102,
"end": 109
}
}
],
"span": {
"type": "Span",
"start": 102,
"end": 109
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 94,
"end": 109
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key02",
"span": {
"type": "Span",
"start": 110,
"end": 115
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 120,
"end": 124
}
},
"attribute": null,
"arguments": {
"type": "CallArguments",
"positional": [],
"named": [],
"span": {
"type": "Span",
"start": 124,
"end": 126
}
},
"span": {
"type": "Span",
"start": 119,
"end": 126
}
},
"span": {
"type": "Span",
"start": 118,
"end": 127
}
}
],
"span": {
"type": "Span",
"start": 118,
"end": 127
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 110,
"end": 127
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key03",
"span": {
"type": "Span",
"start": 128,
"end": 133
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 138,
"end": 142
}
},
"attribute": null,
"arguments": {
"type": "CallArguments",
"positional": [],
"named": [
{
"type": "NamedArgument",
"name": {
"type": "Identifier",
"name": "case",
"span": {
"type": "Span",
"start": 143,
"end": 147
}
},
"value": {
"value": "uppercase",
"type": "StringLiteral",
"span": {
"type": "Span",
"start": 149,
"end": 160
}
},
"span": {
"type": "Span",
"start": 143,
"end": 160
}
}
],
"span": {
"type": "Span",
"start": 142,
"end": 161
}
},
"span": {
"type": "Span",
"start": 137,
"end": 161
}
},
"span": {
"type": "Span",
"start": 136,
"end": 162
}
}
],
"span": {
"type": "Span",
"start": 136,
"end": 162
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 128,
"end": 162
}
},
{
"type": "Message",
"id": {
"type": "Identifier",
"name": "key04",
"span": {
"type": "Span",
"start": 165,
"end": 170
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "SelectExpression",
"selector": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 180,
"end": 184
}
},
"attribute": {
"type": "Identifier",
"name": "attr",
"span": {
"type": "Span",
"start": 185,
"end": 189
}
},
"arguments": null,
"span": {
"type": "Span",
"start": 179,
"end": 189
}
},
"variants": [
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "a",
"span": {
"type": "Span",
"start": 202,
"end": 203
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 208,
"end": 212
}
},
"attribute": null,
"arguments": null,
"span": {
"type": "Span",
"start": 207,
"end": 212
}
},
"span": {
"type": "Span",
"start": 205,
"end": 214
}
},
{
"type": "TextElement",
"value": " A",
"span": {
"type": "Span",
"start": 214,
"end": 216
}
}
],
"span": {
"type": "Span",
"start": 205,
"end": 216
}
},
"default": false,
"span": {
"type": "Span",
"start": 201,
"end": 216
}
},
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "b",
"span": {
"type": "Span",
"start": 226,
"end": 227
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "Placeable",
"expression": {
"type": "TermReference",
"id": {
"type": "Identifier",
"name": "term",
"span": {
"type": "Span",
"start": 232,
"end": 236
}
},
"attribute": null,
"arguments": {
"type": "CallArguments",
"positional": [],
"named": [],
"span": {
"type": "Span",
"start": 236,
"end": 238
}
},
"span": {
"type": "Span",
"start": 231,
"end": 238
}
},
"span": {
"type": "Span",
"start": 229,
"end": 240
}
},
{
"type": "TextElement",
"value": " B",
"span": {
"type": "Span",
"start": 240,
"end": 242
}
}
],
"span": {
"type": "Span",
"start": 229,
"end": 242
}
},
"default": false,
"span": {
"type": "Span",
"start": 225,
"end": 242
}
},
{
"type": "Variant",
"key": {
"type": "Identifier",
"name": "x",
"span": {
"type": "Span",
"start": 252,
"end": 253
}
},
"value": {
"type": "Pattern",
"elements": [
{
"type": "TextElement",
"value": "X",
"span": {
"type": "Span",
"start": 255,
"end": 256
}
}
],
"span": {
"type": "Span",
"start": 255,
"end": 256
}
},
"default": true,
"span": {
"type": "Span",
"start": 250,
"end": 256
}
}
],
"span": {
"type": "Span",
"start": 179,
"end": 261
}
},
"span": {
"type": "Span",
"start": 177,
"end": 262
}
}
],
"span": {
"type": "Span",
"start": 173,
"end": 262
}
},
"attributes": [],
"comment": null,
"span": {
"type": "Span",
"start": 165,
"end": 262
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0006",
"arguments": [
"err1"
],
"message": "Expected term \"-err1\" to have a value",
"span": {
"type": "Span",
"start": 271,
"end": 271
}
}
],
"content": "-err1 =\n",
"span": {
"type": "Span",
"start": 264,
"end": 272
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0006",
"arguments": [
"err2"
],
"message": "Expected term \"-err2\" to have a value",
"span": {
"type": "Span",
"start": 279,
"end": 279
}
}
],
"content": "-err2 =\n .attr = Attribute\n",
"span": {
"type": "Span",
"start": 272,
"end": 302
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 303,
"end": 303
}
}
],
"content": "--err3 = Error\n",
"span": {
"type": "Span",
"start": 302,
"end": 317
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0004",
"arguments": [
"a-zA-Z"
],
"message": "Expected a character from range: \"a-zA-Z\"",
"span": {
"type": "Span",
"start": 327,
"end": 327
}
}
],
"content": "err4 = { --err4 }\n",
"span": {
"type": "Span",
"start": 317,
"end": 335
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 335
}
}

View File

@@ -0,0 +1,6 @@
-foo =
.attr = Attribute
-bar =
-baz

View File

@@ -0,0 +1,82 @@
{
"type": "Resource",
"body": [
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0006",
"arguments": [
"foo"
],
"message": "Expected term \"-foo\" to have a value",
"span": {
"type": "Span",
"start": 6,
"end": 6
}
}
],
"content": "-foo =\n .attr = Attribute\n\n",
"span": {
"type": "Span",
"start": 0,
"end": 30
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0006",
"arguments": [
"bar"
],
"message": "Expected term \"-bar\" to have a value",
"span": {
"type": "Span",
"start": 36,
"end": 36
}
}
],
"content": "-bar =\n\n",
"span": {
"type": "Span",
"start": 30,
"end": 38
}
},
{
"type": "Junk",
"annotations": [
{
"type": "Annotation",
"code": "E0003",
"arguments": [
"="
],
"message": "Expected token: \"=\"",
"span": {
"type": "Span",
"start": 42,
"end": 42
}
}
],
"content": "-baz\n",
"span": {
"type": "Span",
"start": 38,
"end": 43
}
}
],
"span": {
"type": "Span",
"start": 0,
"end": 43
}
}

View File

@@ -0,0 +1,12 @@
err01 = {
key02 = Value 02
err03 = {
FUNC(
arg
,
namedArg: "Value"
,
key04 = Value 04
)
}

Some files were not shown because too many files have changed in this diff Show More