refac: fluent.syntax -> fluent-syntax
This commit is contained in:
2
fluent-syntax/src/test/resources/reference_fixtures/.gitattributes
vendored
Normal file
2
fluent-syntax/src/test/resources/reference_fixtures/.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
crlf.ftl eol=crlf
|
||||
cr.ftl eol=cr
|
||||
@@ -0,0 +1,8 @@
|
||||
# ↓ BEL, U+0007
|
||||
control0 = abcdef
|
||||
|
||||
# ↓ DEL, U+007F
|
||||
delete = abcdef
|
||||
|
||||
# ↓ BPM, U+0082
|
||||
control1 = abcdef
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "control0",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 36
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "abc\u0007def",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 39,
|
||||
"end": 46
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 39,
|
||||
"end": 46
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": " ↓ BEL, U+0007",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "delete",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 74,
|
||||
"end": 80
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "abcdef",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 83,
|
||||
"end": 90
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 83,
|
||||
"end": 90
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": " ↓ DEL, U+007F",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 73
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "control1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 120,
|
||||
"end": 128
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "abcdef",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 131,
|
||||
"end": 138
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 131,
|
||||
"end": 138
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": " ↓ BPM, U+0082",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 119
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 138
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 139
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
face-with-tears-of-joy = 😂
|
||||
tetragram-for-centre = 𝌆
|
||||
|
||||
surrogates-in-text = \uD83D\uDE02
|
||||
surrogates-in-string = {"\uD83D\uDE02"}
|
||||
surrogates-in-adjacent-strings = {"\uD83D"}{"\uDE02"}
|
||||
|
||||
emoji-in-text = A face 😂 with tears of joy.
|
||||
emoji-in-string = {"A face 😂 with tears of joy."}
|
||||
|
||||
# ERROR Invalid identifier
|
||||
err-😂 = Value
|
||||
|
||||
# ERROR Invalid expression
|
||||
err-invalid-expression = { 😂 }
|
||||
|
||||
# ERROR Invalid variant key
|
||||
err-invalid-variant-key = { $sel ->
|
||||
*[😂] Value
|
||||
}
|
||||
414
fluent-syntax/src/test/resources/reference_fixtures/astral.json
Normal file
414
fluent-syntax/src/test/resources/reference_fixtures/astral.json
Normal file
@@ -0,0 +1,414 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "face-with-tears-of-joy",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 22
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "😂",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 25,
|
||||
"end": 27
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 25,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "tetragram-for-centre",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 48
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "𝌆",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 51,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 51,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "surrogates-in-text",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 73
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "\\uD83D\\uDE02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 88
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 88
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 88
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "surrogates-in-string",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 89,
|
||||
"end": 109
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\uD83D\\uDE02",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 113,
|
||||
"end": 127
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 128
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 128
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 89,
|
||||
"end": 128
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "surrogates-in-adjacent-strings",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 129,
|
||||
"end": 159
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\uD83D",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 163,
|
||||
"end": 171
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 162,
|
||||
"end": 172
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\uDE02",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 173,
|
||||
"end": 181
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 172,
|
||||
"end": 182
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 162,
|
||||
"end": 182
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 129,
|
||||
"end": 182
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "emoji-in-text",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 184,
|
||||
"end": 197
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A face 😂 with tears of joy.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 200,
|
||||
"end": 228
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 200,
|
||||
"end": 228
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 184,
|
||||
"end": 228
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "emoji-in-string",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 229,
|
||||
"end": 244
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "A face 😂 with tears of joy.",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 248,
|
||||
"end": 278
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 247,
|
||||
"end": 279
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 247,
|
||||
"end": 279
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 229,
|
||||
"end": 279
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Invalid identifier",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 281,
|
||||
"end": 307
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 312,
|
||||
"end": 312
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err-😂 = Value\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 308,
|
||||
"end": 324
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Invalid expression",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 324,
|
||||
"end": 350
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0028",
|
||||
"arguments": [],
|
||||
"message": "Expected an inline expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 378,
|
||||
"end": 378
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err-invalid-expression = { 😂 }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 351,
|
||||
"end": 384
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Invalid variant key",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 384,
|
||||
"end": 411
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0004",
|
||||
"arguments": [
|
||||
"a-zA-Z"
|
||||
],
|
||||
"message": "Expected a character from range: \"a-zA-Z\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 454,
|
||||
"end": 454
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err-invalid-variant-key = { $sel ->\n *[😂] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 412,
|
||||
"end": 466
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 466
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
## Function names
|
||||
|
||||
valid-func-name-01 = {FUN1()}
|
||||
valid-func-name-02 = {FUN_FUN()}
|
||||
valid-func-name-03 = {FUN-FUN()}
|
||||
|
||||
# JUNK 0 is not a valid Identifier start
|
||||
invalid-func-name-01 = {0FUN()}
|
||||
# JUNK Function names may not be lowercase
|
||||
invalid-func-name-02 = {fun()}
|
||||
# JUNK Function names may not contain lowercase character
|
||||
invalid-func-name-03 = {Fun()}
|
||||
# JUNK ? is not a valid Identifier character
|
||||
invalid-func-name-04 = {FUN?()}
|
||||
|
||||
## Arguments
|
||||
|
||||
positional-args = {FUN(1, "a", msg)}
|
||||
named-args = {FUN(x: 1, y: "Y")}
|
||||
dense-named-args = {FUN(x:1, y:"Y")}
|
||||
mixed-args = {FUN(1, "a", msg, x: 1, y: "Y")}
|
||||
|
||||
# ERROR Positional arg must not follow keyword args
|
||||
shuffled-args = {FUN(1, x: 1, "a", y: "Y", msg)}
|
||||
|
||||
# ERROR Named arguments must be unique
|
||||
duplicate-named-args = {FUN(x: 1, x: "X")}
|
||||
|
||||
|
||||
## Whitespace around arguments
|
||||
|
||||
sparse-inline-call = {FUN ( "a" , msg, x: 1 )}
|
||||
empty-inline-call = {FUN( )}
|
||||
multiline-call = {FUN(
|
||||
"a",
|
||||
msg,
|
||||
x: 1
|
||||
)}
|
||||
sparse-multiline-call = {FUN
|
||||
(
|
||||
|
||||
"a" ,
|
||||
msg
|
||||
, x: 1
|
||||
)}
|
||||
empty-multiline-call = {FUN(
|
||||
|
||||
)}
|
||||
|
||||
|
||||
unindented-arg-number = {FUN(
|
||||
1)}
|
||||
|
||||
unindented-arg-string = {FUN(
|
||||
"a")}
|
||||
|
||||
unindented-arg-msg-ref = {FUN(
|
||||
msg)}
|
||||
|
||||
unindented-arg-term-ref = {FUN(
|
||||
-msg)}
|
||||
|
||||
unindented-arg-var-ref = {FUN(
|
||||
$var)}
|
||||
|
||||
unindented-arg-call = {FUN(
|
||||
OTHER())}
|
||||
|
||||
unindented-named-arg = {FUN(
|
||||
x:1)}
|
||||
|
||||
unindented-closing-paren = {FUN(
|
||||
x
|
||||
)}
|
||||
|
||||
|
||||
|
||||
## Optional trailing comma
|
||||
|
||||
one-argument = {FUN(1,)}
|
||||
many-arguments = {FUN(1, 2, 3,)}
|
||||
inline-sparse-args = {FUN( 1, 2, 3, )}
|
||||
mulitline-args = {FUN(
|
||||
1,
|
||||
2,
|
||||
)}
|
||||
mulitline-sparse-args = {FUN(
|
||||
|
||||
1
|
||||
,
|
||||
2
|
||||
,
|
||||
)}
|
||||
|
||||
|
||||
## Syntax errors for trailing comma
|
||||
|
||||
one-argument = {FUN(1,,)}
|
||||
missing-arg = {FUN(,)}
|
||||
missing-sparse-arg = {FUN( , )}
|
||||
|
||||
|
||||
## Whitespace in named arguments
|
||||
|
||||
sparse-named-arg = {FUN(
|
||||
x : 1,
|
||||
y : 2,
|
||||
z
|
||||
:
|
||||
3
|
||||
)}
|
||||
|
||||
|
||||
unindented-colon = {FUN(
|
||||
x
|
||||
:1)}
|
||||
|
||||
unindented-value = {FUN(
|
||||
x:
|
||||
1)}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,46 @@
|
||||
## Callees in placeables.
|
||||
|
||||
function-callee-placeable = {FUNCTION()}
|
||||
term-callee-placeable = {-term()}
|
||||
|
||||
# ERROR Messages cannot be parameterized.
|
||||
message-callee-placeable = {message()}
|
||||
# ERROR Equivalent to a MessageReference callee.
|
||||
mixed-case-callee-placeable = {Function()}
|
||||
# ERROR Message attributes cannot be parameterized.
|
||||
message-attr-callee-placeable = {message.attr()}
|
||||
# ERROR Term attributes may not be used in Placeables.
|
||||
term-attr-callee-placeable = {-term.attr()}
|
||||
# ERROR Variables cannot be parameterized.
|
||||
variable-callee-placeable = {$variable()}
|
||||
|
||||
|
||||
## Callees in selectors.
|
||||
|
||||
function-callee-selector = {FUNCTION() ->
|
||||
*[key] Value
|
||||
}
|
||||
term-attr-callee-selector = {-term.attr() ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
# ERROR Messages cannot be parameterized.
|
||||
message-callee-selector = {message() ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Equivalent to a MessageReference callee.
|
||||
mixed-case-callee-selector = {Function() ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Message attributes cannot be parameterized.
|
||||
message-attr-callee-selector = {message.attr() ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Term values may not be used as selectors.
|
||||
term-callee-selector = {-term() ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Variables cannot be parameterized.
|
||||
variable-callee-selector = {$variable() ->
|
||||
*[key] Value
|
||||
}
|
||||
@@ -0,0 +1,706 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "Callees in placeables.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 25
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "function-callee-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "FunctionReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "FUNCTION",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 56,
|
||||
"end": 64
|
||||
}
|
||||
},
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 64,
|
||||
"end": 66
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 56,
|
||||
"end": 66
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 67
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 67
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term-callee-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 68,
|
||||
"end": 89
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 94,
|
||||
"end": 98
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 98,
|
||||
"end": 100
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 93,
|
||||
"end": 100
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 101
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 68,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Messages cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 103,
|
||||
"end": 144
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": 180,
|
||||
"end": 180
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-callee-placeable = {message()}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 145,
|
||||
"end": 184
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Equivalent to a MessageReference callee.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 184,
|
||||
"end": 232
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": 272,
|
||||
"end": 272
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "mixed-case-callee-placeable = {Function()}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 233,
|
||||
"end": 276
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Message attributes cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 276,
|
||||
"end": 327
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 373,
|
||||
"end": 373
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-attr-callee-placeable = {message.attr()}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 328,
|
||||
"end": 377
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Term attributes may not be used in Placeables.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 377,
|
||||
"end": 431
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0019",
|
||||
"arguments": [],
|
||||
"message": "Attributes of terms cannot be used as placeables",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 474,
|
||||
"end": 474
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-attr-callee-placeable = {-term.attr()}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 432,
|
||||
"end": 476
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Variables cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 476,
|
||||
"end": 518
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 557,
|
||||
"end": 557
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "variable-callee-placeable = {$variable()}\n\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 519,
|
||||
"end": 563
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Callees in selectors.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 563,
|
||||
"end": 587
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "function-callee-selector",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 589,
|
||||
"end": 613
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "FunctionReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "FUNCTION",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 617,
|
||||
"end": 625
|
||||
}
|
||||
},
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 625,
|
||||
"end": 627
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 617,
|
||||
"end": 627
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 636,
|
||||
"end": 639
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 641,
|
||||
"end": 646
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 641,
|
||||
"end": 646
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 634,
|
||||
"end": 646
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 617,
|
||||
"end": 647
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 616,
|
||||
"end": 648
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 616,
|
||||
"end": 648
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 589,
|
||||
"end": 648
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term-attr-callee-selector",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 649,
|
||||
"end": 674
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 679,
|
||||
"end": 683
|
||||
}
|
||||
},
|
||||
"attribute": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 684,
|
||||
"end": 688
|
||||
}
|
||||
},
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 688,
|
||||
"end": 690
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 678,
|
||||
"end": 690
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 699,
|
||||
"end": 702
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 704,
|
||||
"end": 709
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 704,
|
||||
"end": 709
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 697,
|
||||
"end": 709
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 678,
|
||||
"end": 710
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 677,
|
||||
"end": 711
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 677,
|
||||
"end": 711
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 649,
|
||||
"end": 711
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Messages cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 713,
|
||||
"end": 754
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": 789,
|
||||
"end": 789
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-callee-selector = {message() ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 755,
|
||||
"end": 813
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Equivalent to a MessageReference callee.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 813,
|
||||
"end": 861
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": 900,
|
||||
"end": 900
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "mixed-case-callee-selector = {Function() ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 862,
|
||||
"end": 924
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Message attributes cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 924,
|
||||
"end": 975
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1020,
|
||||
"end": 1020
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-attr-callee-selector = {message.attr() ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 976,
|
||||
"end": 1044
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Term values may not be used as selectors.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1044,
|
||||
"end": 1093
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0017",
|
||||
"arguments": [],
|
||||
"message": "Terms cannot be used as selectors",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1126,
|
||||
"end": 1126
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-callee-selector = {-term() ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1094,
|
||||
"end": 1147
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Variables cannot be parameterized.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1147,
|
||||
"end": 1189
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1227,
|
||||
"end": 1227
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "variable-callee-selector = {$variable() ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1190,
|
||||
"end": 1251
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 1251
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
# Standalone Comment
|
||||
|
||||
# Message Comment
|
||||
foo = Foo
|
||||
|
||||
# Term Comment
|
||||
# with a blank last line.
|
||||
#
|
||||
-term = Term
|
||||
|
||||
# Another standalone
|
||||
#
|
||||
# with indent
|
||||
## Group Comment
|
||||
### Resource Comment
|
||||
|
||||
# Errors
|
||||
#error
|
||||
##error
|
||||
###error
|
||||
@@ -0,0 +1,219 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "Standalone Comment",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "foo",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 40,
|
||||
"end": 43
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Foo",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 46,
|
||||
"end": 49
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 46,
|
||||
"end": 49
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Message Comment",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 22,
|
||||
"end": 39
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 22,
|
||||
"end": 49
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 95,
|
||||
"end": 99
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 102,
|
||||
"end": 106
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 102,
|
||||
"end": 106
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Term Comment\nwith a blank last line.\n",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 51,
|
||||
"end": 93
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 51,
|
||||
"end": 106
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Another standalone\n\n with indent",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 108,
|
||||
"end": 150
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Group Comment",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 151,
|
||||
"end": 167
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Resource Comment",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 168,
|
||||
"end": 188
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Errors",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 190,
|
||||
"end": 198
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
" "
|
||||
],
|
||||
"message": "Expected token: \" \"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 200,
|
||||
"end": 200
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "#error\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 199,
|
||||
"end": 206
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
" "
|
||||
],
|
||||
"message": "Expected token: \" \"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 208,
|
||||
"end": 208
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "##error\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 206,
|
||||
"end": 214
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
" "
|
||||
],
|
||||
"message": "Expected token: \" \"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 217,
|
||||
"end": 217
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "###error\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 214,
|
||||
"end": 223
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 223
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
### This entire file uses CR as EOL.
|
||||
19
fluent-syntax/src/test/resources/reference_fixtures/cr.json
Normal file
19
fluent-syntax/src/test/resources/reference_fixtures/cr.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "ResourceComment",
|
||||
"content": "This entire file uses CR as EOL.\r\rerr01 = Value 01\rerr02 = Value 02\r\rerr03 =\r\r Value 03\r Continued\r\r .title = Title\r\rerr04 = { \"str\r\rerr05 = { $sel -> }\r",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 166
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 166
|
||||
}
|
||||
}
|
||||
14
fluent-syntax/src/test/resources/reference_fixtures/crlf.ftl
Normal file
14
fluent-syntax/src/test/resources/reference_fixtures/crlf.ftl
Normal 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 -> }
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 01"
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 02\nContinued"
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "title"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Title"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Unclosed StringLiteral"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "err03 = { \"str\r\n\r\n"
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Missing newline after ->."
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "err04 = { $sel -> }\r\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
### NOTE: Disable final newline insertion when editing this file.
|
||||
|
||||
# No EOL
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "NOTE: Disable final newline insertion when editing this file.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "No EOL",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 75
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 75
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
### NOTE: Disable final newline insertion when editing this file.
|
||||
|
||||
message-id
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "NOTE: Disable final newline insertion when editing this file.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 77,
|
||||
"end": 77
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-id",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 77
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 77
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
### NOTE: Disable final newline insertion when editing this file.
|
||||
|
||||
message-id =
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "NOTE: Disable final newline insertion when editing this file.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0005",
|
||||
"arguments": [
|
||||
"message-id"
|
||||
],
|
||||
"message": "Expected message \"message-id\" to have a value or attributes",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 79,
|
||||
"end": 79
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-id =",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 79
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 79
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
### NOTE: Disable final newline insertion when editing this file.
|
||||
|
||||
000
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "NOTE: Disable final newline insertion when editing this file.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 67
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "000",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 70
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 70
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
### NOTE: Disable final newline insertion when editing this file.
|
||||
|
||||
no-eol = No EOL
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "NOTE: Disable final newline insertion when editing this file.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "no-eol",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 73
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "No EOL",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 82
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 82
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 82
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 82
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
## 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"}
|
||||
# ERROR Multiline literal
|
||||
invalid-multiline-literal = {"
|
||||
"}
|
||||
|
||||
## Unicode escapes
|
||||
string-unicode-4digits = {"\u0041"}
|
||||
escape-unicode-4digits = {"\\u0041"}
|
||||
string-unicode-6digits = {"\U01F602"}
|
||||
escape-unicode-6digits = {"\\U01F602"}
|
||||
|
||||
# OK The trailing "00" is part of the literal value.
|
||||
string-too-many-4digits = {"\u004100"}
|
||||
# OK The trailing "00" is part of the literal value.
|
||||
string-too-many-6digits = {"\U01F60200"}
|
||||
|
||||
# ERROR Too few hex digits after \u.
|
||||
string-too-few-4digits = {"\u41"}
|
||||
# ERROR Too few hex digits after \U.
|
||||
string-too-few-6digits = {"\U1F602"}
|
||||
|
||||
## Literal braces
|
||||
brace-open = An opening {"{"} brace.
|
||||
brace-close = A closing {"}"} brace.
|
||||
@@ -0,0 +1,937 @@
|
||||
{
|
||||
"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",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 372,
|
||||
"end": 396
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Multiline literal",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 396,
|
||||
"end": 421
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0020",
|
||||
"arguments": [],
|
||||
"message": "Unterminated string expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 452,
|
||||
"end": 452
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "invalid-multiline-literal = {\"\n \"}\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 422,
|
||||
"end": 458
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Unicode escapes",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 458,
|
||||
"end": 476
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "string-unicode-4digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 477,
|
||||
"end": 499
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\u0041",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 503,
|
||||
"end": 511
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 502,
|
||||
"end": 512
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 502,
|
||||
"end": 512
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 477,
|
||||
"end": 512
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "escape-unicode-4digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 513,
|
||||
"end": 535
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\\\u0041",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 539,
|
||||
"end": 548
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 538,
|
||||
"end": 549
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 538,
|
||||
"end": 549
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 513,
|
||||
"end": 549
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "string-unicode-6digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 550,
|
||||
"end": 572
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\U01F602",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 576,
|
||||
"end": 586
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 575,
|
||||
"end": 587
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 575,
|
||||
"end": 587
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 550,
|
||||
"end": 587
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "escape-unicode-6digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 588,
|
||||
"end": 610
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\\\U01F602",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 614,
|
||||
"end": 625
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 613,
|
||||
"end": 626
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 613,
|
||||
"end": 626
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 588,
|
||||
"end": 626
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "string-too-many-4digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 681,
|
||||
"end": 704
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\u004100",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 708,
|
||||
"end": 718
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 707,
|
||||
"end": 719
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 707,
|
||||
"end": 719
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "OK The trailing \"00\" is part of the literal value.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 628,
|
||||
"end": 680
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 628,
|
||||
"end": 719
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "string-too-many-6digits",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 773,
|
||||
"end": 796
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "\\U01F60200",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 800,
|
||||
"end": 812
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 799,
|
||||
"end": 813
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 799,
|
||||
"end": 813
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "OK The trailing \"00\" is part of the literal value.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 720,
|
||||
"end": 772
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 720,
|
||||
"end": 813
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Too few hex digits after \\u.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 815,
|
||||
"end": 851
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0026",
|
||||
"arguments": [
|
||||
"\\u41\""
|
||||
],
|
||||
"message": "Invalid Unicode escape sequence: \\u41\".",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 883,
|
||||
"end": 883
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "string-too-few-4digits = {\"\\u41\"}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 852,
|
||||
"end": 886
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Too few hex digits after \\U.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 886,
|
||||
"end": 922
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0026",
|
||||
"arguments": [
|
||||
"\\U1F602\""
|
||||
],
|
||||
"message": "Invalid Unicode escape sequence: \\U1F602\".",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 957,
|
||||
"end": 957
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "string-too-few-6digits = {\"\\U1F602\"}\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 923,
|
||||
"end": 961
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Literal braces",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 961,
|
||||
"end": 978
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "brace-open",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 979,
|
||||
"end": 989
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "An opening ",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 992,
|
||||
"end": 1003
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "{",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1004,
|
||||
"end": 1007
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1003,
|
||||
"end": 1008
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " brace.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1008,
|
||||
"end": 1015
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 992,
|
||||
"end": 1015
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 979,
|
||||
"end": 1015
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "brace-close",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1016,
|
||||
"end": 1027
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A closing ",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1030,
|
||||
"end": 1040
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "}",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1041,
|
||||
"end": 1044
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1040,
|
||||
"end": 1045
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " brace.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1045,
|
||||
"end": 1052
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1030,
|
||||
"end": 1052
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1016,
|
||||
"end": 1052
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 1053
|
||||
}
|
||||
}
|
||||
21
fluent-syntax/src/test/resources/reference_fixtures/junk.ftl
Normal file
21
fluent-syntax/src/test/resources/reference_fixtures/junk.ftl
Normal file
@@ -0,0 +1,21 @@
|
||||
## Two adjacent Junks.
|
||||
err01 = {1x}
|
||||
err02 = {2x}
|
||||
|
||||
# A single Junk.
|
||||
err03 = {1x
|
||||
2
|
||||
|
||||
# A single Junk.
|
||||
ą=Invalid identifier
|
||||
ć=Another one
|
||||
|
||||
# The COMMENT ends this junk.
|
||||
err04 = {
|
||||
# COMMENT
|
||||
|
||||
# The COMMENT ends this junk.
|
||||
# The closing brace is a separate Junk.
|
||||
err04 = {
|
||||
# COMMENT
|
||||
}
|
||||
233
fluent-syntax/src/test/resources/reference_fixtures/junk.json
Normal file
233
fluent-syntax/src/test/resources/reference_fixtures/junk.json
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "Two adjacent Junks.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 22
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 33,
|
||||
"end": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err01 = {1x}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 23,
|
||||
"end": 36
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 46,
|
||||
"end": 46
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err02 = {2x}\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 36,
|
||||
"end": 50
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "A single Junk.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 50,
|
||||
"end": 66
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 77,
|
||||
"end": 77
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err03 = {1x\n2\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 82
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "A single Junk.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 82,
|
||||
"end": 98
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 99,
|
||||
"end": 99
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "ą=Invalid identifier\nć=Another one\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 99,
|
||||
"end": 135
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "The COMMENT ends this junk.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 135,
|
||||
"end": 164
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0028",
|
||||
"arguments": [],
|
||||
"message": "Expected an inline expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 175,
|
||||
"end": 175
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err04 = {\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 165,
|
||||
"end": 175
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "COMMENT",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 175,
|
||||
"end": 184
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "The COMMENT ends this junk.\nThe closing brace is a separate Junk.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 186,
|
||||
"end": 255
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0028",
|
||||
"arguments": [],
|
||||
"message": "Expected an inline expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 266,
|
||||
"end": 266
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err04 = {\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 256,
|
||||
"end": 266
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "COMMENT",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 266,
|
||||
"end": 275
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 276,
|
||||
"end": 276
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 276,
|
||||
"end": 278
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 278
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
key01 = .Value
|
||||
key02 = …Value
|
||||
key03 = {"."}Value
|
||||
key04 =
|
||||
{"."}Value
|
||||
|
||||
key05 = Value
|
||||
{"."}Continued
|
||||
|
||||
key06 = .Value
|
||||
{"."}Continued
|
||||
|
||||
# MESSAGE (value = "Value", attributes = [])
|
||||
# JUNK (attr .Continued" must have a value)
|
||||
key07 = Value
|
||||
.Continued
|
||||
|
||||
# JUNK (attr .Value must have a value)
|
||||
key08 =
|
||||
.Value
|
||||
|
||||
# JUNK (attr .Value must have a value)
|
||||
key09 =
|
||||
.Value
|
||||
Continued
|
||||
|
||||
key10 =
|
||||
.Value = which is 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
|
||||
}
|
||||
|
||||
# JUNK (variant must have a value)
|
||||
key16 =
|
||||
{ 1 ->
|
||||
*[one]
|
||||
.Value
|
||||
}
|
||||
|
||||
# JUNK (unclosed placeable)
|
||||
key17 =
|
||||
{ 1 ->
|
||||
*[one] Value
|
||||
.Continued
|
||||
}
|
||||
|
||||
# JUNK (attr .Value must have a value)
|
||||
key18 =
|
||||
.Value
|
||||
|
||||
key19 =
|
||||
.attribute = Value
|
||||
Continued
|
||||
|
||||
key20 =
|
||||
{"."}Value
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
string-expression = {"abc"}
|
||||
number-expression = {123}
|
||||
number-expression = {-3.14}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "string-expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 17
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "abc",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 20,
|
||||
"end": 27
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 20,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 27
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "number-expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 45
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "123",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 49,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "number-expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 54,
|
||||
"end": 71
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "-3.14",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 75,
|
||||
"end": 80
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 74,
|
||||
"end": 81
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 74,
|
||||
"end": 81
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 54,
|
||||
"end": 81
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 82
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
## Member expressions in placeables.
|
||||
|
||||
# OK Message attributes may be interpolated in values.
|
||||
message-attribute-expression-placeable = {msg.attr}
|
||||
|
||||
# ERROR Term attributes may not be used for interpolation.
|
||||
term-attribute-expression-placeable = {-term.attr}
|
||||
|
||||
|
||||
## Member expressions in selectors.
|
||||
|
||||
# OK Term attributes may be used as selectors.
|
||||
term-attribute-expression-selector = {-term.attr ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Message attributes may not be used as selectors.
|
||||
message-attribute-expression-selector = {msg.attr ->
|
||||
*[key] Value
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "Member expressions in placeables.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 36
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "message-attribute-expression-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 93,
|
||||
"end": 131
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "MessageReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "msg",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 135,
|
||||
"end": 138
|
||||
}
|
||||
},
|
||||
"attribute": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 139,
|
||||
"end": 143
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 135,
|
||||
"end": 143
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 134,
|
||||
"end": 144
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 134,
|
||||
"end": 144
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "OK Message attributes may be interpolated in values.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 38,
|
||||
"end": 92
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 38,
|
||||
"end": 144
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Term attributes may not be used for interpolation.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 146,
|
||||
"end": 204
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0019",
|
||||
"arguments": [],
|
||||
"message": "Attributes of terms cannot be used as placeables",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 254,
|
||||
"end": 254
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-attribute-expression-placeable = {-term.attr}\n\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 205,
|
||||
"end": 258
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Member expressions in selectors.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 258,
|
||||
"end": 293
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term-attribute-expression-selector",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 342,
|
||||
"end": 376
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 381,
|
||||
"end": 385
|
||||
}
|
||||
},
|
||||
"attribute": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 386,
|
||||
"end": 390
|
||||
}
|
||||
},
|
||||
"arguments": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 380,
|
||||
"end": 390
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 399,
|
||||
"end": 402
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 404,
|
||||
"end": 409
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 404,
|
||||
"end": 409
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 397,
|
||||
"end": 409
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 380,
|
||||
"end": 410
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 379,
|
||||
"end": 411
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 379,
|
||||
"end": 411
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "OK Term attributes may be used as selectors.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 295,
|
||||
"end": 341
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 295,
|
||||
"end": 411
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Message attributes may not be used as selectors.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 412,
|
||||
"end": 468
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0018",
|
||||
"arguments": [],
|
||||
"message": "Attributes of messages cannot be used as selectors",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 519,
|
||||
"end": 519
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-attribute-expression-selector = {msg.attr ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 469,
|
||||
"end": 540
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 540
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
key01 = Value
|
||||
|
||||
key02 = Value
|
||||
.attr = Attribute
|
||||
|
||||
key02 = Value
|
||||
.attr1 = Attribute 1
|
||||
.attr2 = Attribute 2
|
||||
|
||||
key03 =
|
||||
.attr = Attribute
|
||||
|
||||
key04 =
|
||||
.attr1 = Attribute 1
|
||||
.attr2 = Attribute 2
|
||||
|
||||
# < whitespace >
|
||||
key05 =
|
||||
.attr1 = Attribute 1
|
||||
|
||||
no-whitespace=Value
|
||||
.attr1=Attribute 1
|
||||
|
||||
extra-whitespace = Value
|
||||
.attr1 = Attribute 1
|
||||
|
||||
key06 = {""}
|
||||
|
||||
# JUNK Missing value
|
||||
key07 =
|
||||
|
||||
# JUNK Missing =
|
||||
key08
|
||||
|
||||
KEY09 = Value 09
|
||||
|
||||
key-10 = Value 10
|
||||
key_11 = Value 11
|
||||
key-12- = Value 12
|
||||
key_13_ = Value 13
|
||||
|
||||
# JUNK Invalid id
|
||||
0err-14 = Value 14
|
||||
|
||||
# JUNK Invalid id
|
||||
err-15? = Value 15
|
||||
|
||||
# JUNK Invalid id
|
||||
err-ąę-16 = Value 16
|
||||
@@ -0,0 +1,998 @@
|
||||
{
|
||||
"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": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 8,
|
||||
"end": 13
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 13
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": 28
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 23,
|
||||
"end": 28
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 34,
|
||||
"end": 38
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 50
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 50
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 33,
|
||||
"end": 50
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 15,
|
||||
"end": 50
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 52,
|
||||
"end": 57
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 60,
|
||||
"end": 65
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 60,
|
||||
"end": 65
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 71,
|
||||
"end": 76
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 79,
|
||||
"end": 90
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 79,
|
||||
"end": 90
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 70,
|
||||
"end": 90
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr2",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 96,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 2",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 104,
|
||||
"end": 115
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 104,
|
||||
"end": 115
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 95,
|
||||
"end": 115
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 52,
|
||||
"end": 115
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 117,
|
||||
"end": 122
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 130,
|
||||
"end": 134
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 137,
|
||||
"end": 146
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 137,
|
||||
"end": 146
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 129,
|
||||
"end": 146
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 117,
|
||||
"end": 146
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 148,
|
||||
"end": 153
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 161,
|
||||
"end": 166
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 169,
|
||||
"end": 180
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 169,
|
||||
"end": 180
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 160,
|
||||
"end": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr2",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 186,
|
||||
"end": 191
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 2",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 194,
|
||||
"end": 205
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 194,
|
||||
"end": 205
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 185,
|
||||
"end": 205
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 148,
|
||||
"end": 205
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key05",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 231,
|
||||
"end": 236
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 260,
|
||||
"end": 265
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 268,
|
||||
"end": 279
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 268,
|
||||
"end": 279
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 259,
|
||||
"end": 279
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": {
|
||||
"content": " < whitespace >",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 207,
|
||||
"end": 230
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 207,
|
||||
"end": 279
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "no-whitespace",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 281,
|
||||
"end": 294
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 295,
|
||||
"end": 300
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 295,
|
||||
"end": 300
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 306,
|
||||
"end": 311
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 312,
|
||||
"end": 323
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 312,
|
||||
"end": 323
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 305,
|
||||
"end": 323
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 281,
|
||||
"end": 323
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "extra-whitespace",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 325,
|
||||
"end": 341
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 348,
|
||||
"end": 353
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 348,
|
||||
"end": 353
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 359,
|
||||
"end": 364
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute 1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 374,
|
||||
"end": 385
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 374,
|
||||
"end": 385
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 358,
|
||||
"end": 385
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 325,
|
||||
"end": 385
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key06",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 387,
|
||||
"end": 392
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 396,
|
||||
"end": 398
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 395,
|
||||
"end": 399
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 395,
|
||||
"end": 399
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 387,
|
||||
"end": 399
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing value",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 401,
|
||||
"end": 421
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0005",
|
||||
"arguments": [
|
||||
"key07"
|
||||
],
|
||||
"message": "Expected message \"key07\" to have a value or attributes",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 429,
|
||||
"end": 429
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "key07 =\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 422,
|
||||
"end": 431
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing =",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 431,
|
||||
"end": 447
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 453,
|
||||
"end": 453
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "key08\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 448,
|
||||
"end": 455
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "KEY09",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 455,
|
||||
"end": 460
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 09",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 463,
|
||||
"end": 471
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 463,
|
||||
"end": 471
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 455,
|
||||
"end": 471
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key-10",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 473,
|
||||
"end": 479
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 10",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 482,
|
||||
"end": 490
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 482,
|
||||
"end": 490
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 473,
|
||||
"end": 490
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key_11",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 491,
|
||||
"end": 497
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 11",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 500,
|
||||
"end": 508
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 500,
|
||||
"end": 508
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 491,
|
||||
"end": 508
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key-12-",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 509,
|
||||
"end": 516
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 12",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 519,
|
||||
"end": 527
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 519,
|
||||
"end": 527
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 509,
|
||||
"end": 527
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key_13_",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 528,
|
||||
"end": 535
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 13",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 538,
|
||||
"end": 546
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 538,
|
||||
"end": 546
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 528,
|
||||
"end": 546
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Invalid id",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 548,
|
||||
"end": 565
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 566,
|
||||
"end": 566
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "0err-14 = Value 14\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 566,
|
||||
"end": 586
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Invalid id",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 586,
|
||||
"end": 603
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 610,
|
||||
"end": 610
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err-15? = Value 15\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 604,
|
||||
"end": 624
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Invalid id",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 624,
|
||||
"end": 641
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 646,
|
||||
"end": 646
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err-ąę-16 = Value 16\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 642,
|
||||
"end": 663
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 663
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
# License Comment
|
||||
|
||||
### Resource Comment
|
||||
|
||||
-brand-name = Aurora
|
||||
|
||||
## Group Comment
|
||||
|
||||
key01 =
|
||||
.attr = Attribute
|
||||
|
||||
ą=Invalid identifier
|
||||
ć=Another one
|
||||
|
||||
# Message Comment
|
||||
key02 = Value
|
||||
|
||||
# Standalone Comment
|
||||
.attr = Dangling attribute
|
||||
|
||||
# There are 5 spaces on the line between key03 and key04.
|
||||
key03 = Value 03
|
||||
|
||||
key04 = Value 04
|
||||
@@ -0,0 +1,315 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "License Comment",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 17
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Resource Comment",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 19,
|
||||
"end": 39
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "brand-name",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 42,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Aurora",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 61
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 61
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 61
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Group Comment",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 63,
|
||||
"end": 79
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 81,
|
||||
"end": 86
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 94,
|
||||
"end": 98
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 101,
|
||||
"end": 110
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 101,
|
||||
"end": 110
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 93,
|
||||
"end": 110
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 81,
|
||||
"end": 110
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 112
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "ą=Invalid identifier\nć=Another one\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 148
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 166,
|
||||
"end": 171
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 174,
|
||||
"end": 179
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 174,
|
||||
"end": 179
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Message Comment",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 148,
|
||||
"end": 165
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 148,
|
||||
"end": 179
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Standalone Comment",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 181,
|
||||
"end": 201
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 202,
|
||||
"end": 202
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": " .attr = Dangling attribute\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 202,
|
||||
"end": 234
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 292,
|
||||
"end": 297
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 300,
|
||||
"end": 308
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 300,
|
||||
"end": 308
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "There are 5 spaces on the line between key03 and key04.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 234,
|
||||
"end": 291
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 234,
|
||||
"end": 308
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 315,
|
||||
"end": 320
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value 04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 323,
|
||||
"end": 331
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 323,
|
||||
"end": 331
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 315,
|
||||
"end": 331
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 332
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
key01 = A multiline value
|
||||
continued on the next line
|
||||
|
||||
and also down here.
|
||||
|
||||
key02 =
|
||||
A multiline value starting
|
||||
on a new line.
|
||||
|
||||
key03 =
|
||||
.attr = A multiline attribute value
|
||||
continued on the next line
|
||||
|
||||
and also down here.
|
||||
|
||||
key04 =
|
||||
.attr =
|
||||
A multiline attribute value
|
||||
staring on a new line
|
||||
|
||||
key05 =
|
||||
|
||||
A multiline value with non-standard
|
||||
|
||||
indentation.
|
||||
|
||||
key06 =
|
||||
A multiline value with {"placeables"}
|
||||
{"at"} the beginning and the end
|
||||
{"of lines"}{"."}
|
||||
|
||||
key07 =
|
||||
{"A multiline value"} starting and ending {"with a placeable"}
|
||||
|
||||
key08 = Leading and trailing whitespace.
|
||||
|
||||
key09 = zero
|
||||
three
|
||||
two
|
||||
one
|
||||
zero
|
||||
|
||||
key10 =
|
||||
two
|
||||
zero
|
||||
four
|
||||
|
||||
key11 =
|
||||
|
||||
|
||||
two
|
||||
zero
|
||||
|
||||
key12 =
|
||||
{"."}
|
||||
four
|
||||
|
||||
key13 =
|
||||
four
|
||||
{"."}
|
||||
@@ -0,0 +1,696 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline value\ncontinued on the next line\n\nand also down here.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 8,
|
||||
"end": 81
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 8,
|
||||
"end": 81
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 81
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 83,
|
||||
"end": 88
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline value starting\non a new line.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 95,
|
||||
"end": 140
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 91,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 83,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 142,
|
||||
"end": 147
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 155,
|
||||
"end": 159
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline attribute value\ncontinued on the next line\n\nand also down here.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 162,
|
||||
"end": 253
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 162,
|
||||
"end": 253
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 154,
|
||||
"end": 253
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 142,
|
||||
"end": 253
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 255,
|
||||
"end": 260
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 268,
|
||||
"end": 272
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline attribute value\nstaring on a new line",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 283,
|
||||
"end": 340
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 275,
|
||||
"end": 340
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 267,
|
||||
"end": 340
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 255,
|
||||
"end": 340
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key05",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 342,
|
||||
"end": 347
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline value with non-standard\n\n indentation.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 352,
|
||||
"end": 406
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 351,
|
||||
"end": 406
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 342,
|
||||
"end": 406
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key06",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 408,
|
||||
"end": 413
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "A multiline value with ",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 420,
|
||||
"end": 443
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "placeables",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 444,
|
||||
"end": 456
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 443,
|
||||
"end": 457
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 457,
|
||||
"end": 462
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "at",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 463,
|
||||
"end": 467
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 462,
|
||||
"end": 468
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " the beginning and the end\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 468,
|
||||
"end": 499
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "of lines",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 500,
|
||||
"end": 510
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 499,
|
||||
"end": 511
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": ".",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 512,
|
||||
"end": 515
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 511,
|
||||
"end": 516
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 416,
|
||||
"end": 516
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 408,
|
||||
"end": 516
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key07",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 518,
|
||||
"end": 523
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "A multiline value",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 531,
|
||||
"end": 550
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 530,
|
||||
"end": 551
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " starting and ending ",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 551,
|
||||
"end": 572
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "with a placeable",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 573,
|
||||
"end": 591
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 572,
|
||||
"end": 592
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 526,
|
||||
"end": 592
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 518,
|
||||
"end": 592
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key08",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 594,
|
||||
"end": 599
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Leading and trailing whitespace.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 606,
|
||||
"end": 643
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 606,
|
||||
"end": 643
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 594,
|
||||
"end": 643
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key09",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 645,
|
||||
"end": 650
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "zero\n three\n two\n one\nzero",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 653,
|
||||
"end": 690
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 653,
|
||||
"end": 690
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 645,
|
||||
"end": 690
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key10",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 692,
|
||||
"end": 697
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " two\nzero\n four",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 700,
|
||||
"end": 731
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 700,
|
||||
"end": 731
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 692,
|
||||
"end": 731
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key11",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 733,
|
||||
"end": 738
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " two\nzero",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 743,
|
||||
"end": 761
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 743,
|
||||
"end": 761
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 733,
|
||||
"end": 761
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key12",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 763,
|
||||
"end": 768
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": ".",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 772,
|
||||
"end": 775
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 771,
|
||||
"end": 776
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "\n four",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 776,
|
||||
"end": 785
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 771,
|
||||
"end": 785
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 763,
|
||||
"end": 785
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key13",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 787,
|
||||
"end": 792
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": " four\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 795,
|
||||
"end": 804
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": ".",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 805,
|
||||
"end": 808
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 804,
|
||||
"end": 809
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 795,
|
||||
"end": 809
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 787,
|
||||
"end": 809
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 810
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
int-zero = {0}
|
||||
int-positive = {1}
|
||||
int-negative = {-1}
|
||||
int-negative-zero = {-0}
|
||||
|
||||
int-positive-padded = {01}
|
||||
int-negative-padded = {-01}
|
||||
int-zero-padded = {00}
|
||||
int-negative-zero-padded = {-00}
|
||||
|
||||
float-zero = {0.0}
|
||||
float-positive = {0.01}
|
||||
float-positive-one = {1.03}
|
||||
float-positive-without-fraction = {1.000}
|
||||
|
||||
float-negative = {-0.01}
|
||||
float-negative-one = {-1.03}
|
||||
float-negative-zero = {-0.0}
|
||||
float-negative-without-fraction = {-1.000}
|
||||
|
||||
float-positive-padded-left = {01.03}
|
||||
float-positive-padded-right = {1.0300}
|
||||
float-positive-padded-both = {01.0300}
|
||||
|
||||
float-negative-padded-left = {-01.03}
|
||||
float-negative-padded-right = {-1.0300}
|
||||
float-negative-padded-both = {-01.0300}
|
||||
|
||||
|
||||
## ERRORS
|
||||
|
||||
err01 = {1.}
|
||||
err02 = {.02}
|
||||
err03 = {1.02.03}
|
||||
err04 = {1. 02}
|
||||
err05 = {1 .02}
|
||||
err06 = {- 1}
|
||||
err07 = {1,02}
|
||||
1197
fluent-syntax/src/test/resources/reference_fixtures/numbers.json
Normal file
1197
fluent-syntax/src/test/resources/reference_fixtures/numbers.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
### The syntax in this file has been discontinued. It is no longer part of the
|
||||
### Fluent specification and should not be implemented nor used. We're keeping
|
||||
### these fixtures around to protect against accidental syntax reuse.
|
||||
|
||||
|
||||
## Variant lists.
|
||||
|
||||
message-variant-list =
|
||||
{
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
-term-variant-list =
|
||||
{
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
|
||||
## Variant expressions.
|
||||
|
||||
message-variant-expression-placeable = {msg[case]}
|
||||
message-variant-expression-selector = {msg[case] ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
term-variant-expression-placeable = {-term[case]}
|
||||
term-variant-expression-selector = {-term[case] ->
|
||||
*[key] Value
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "The syntax in this file has been discontinued. It is no longer part of the\nFluent specification and should not be implemented nor used. We're keeping\nthese fixtures around to protect against accidental syntax reuse.",
|
||||
"type": "ResourceComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 227
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Variant lists.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 230,
|
||||
"end": 247
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0028",
|
||||
"arguments": [],
|
||||
"message": "Expected an inline expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 285,
|
||||
"end": 285
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-variant-list =\n {\n *[key] Value\n }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 249,
|
||||
"end": 305
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0028",
|
||||
"arguments": [],
|
||||
"message": "Expected an inline expression",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 339,
|
||||
"end": 339
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term-variant-list =\n {\n *[key] Value\n }\n\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 305,
|
||||
"end": 360
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Variant expressions.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 360,
|
||||
"end": 383
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 428,
|
||||
"end": 428
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-variant-expression-placeable = {msg[case]}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 385,
|
||||
"end": 436
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 478,
|
||||
"end": 478
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-variant-expression-selector = {msg[case] ->\n *[key] Value\n}\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 436,
|
||||
"end": 507
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 549,
|
||||
"end": 549
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-variant-expression-placeable = {-term[case]}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 507,
|
||||
"end": 557
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 598,
|
||||
"end": 598
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-variant-expression-selector = {-term[case] ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 557,
|
||||
"end": 626
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 626
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
nested-placeable = {{{1}}}
|
||||
padded-placeable = { 1 }
|
||||
sparse-placeable = { { 1 } }
|
||||
|
||||
# ERROR Unmatched opening brace
|
||||
unmatched-open1 = { 1
|
||||
|
||||
# ERROR Unmatched opening brace
|
||||
unmatched-open2 = {{ 1 }
|
||||
|
||||
# ERROR Unmatched closing brace
|
||||
unmatched-close1 = 1 }
|
||||
|
||||
# ERROR Unmatched closing brace
|
||||
unmatched-close2 = { 1 }}
|
||||
@@ -0,0 +1,300 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "nested-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 16
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 22,
|
||||
"end": 23
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 24
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 20,
|
||||
"end": 25
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 19,
|
||||
"end": 26
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 19,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "padded-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 43
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 49,
|
||||
"end": 50
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 46,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 46,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sparse-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 54,
|
||||
"end": 70
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 77,
|
||||
"end": 78
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 75,
|
||||
"end": 80
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 73,
|
||||
"end": 82
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 73,
|
||||
"end": 82
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 54,
|
||||
"end": 82
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Unmatched opening brace",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 84,
|
||||
"end": 115
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 139,
|
||||
"end": 139
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "unmatched-open1 = { 1\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 116,
|
||||
"end": 139
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Unmatched opening brace",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 139,
|
||||
"end": 170
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"}"
|
||||
],
|
||||
"message": "Expected token: \"}\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 197,
|
||||
"end": 197
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "unmatched-open2 = {{ 1 }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 171,
|
||||
"end": 197
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Unmatched closing brace",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 197,
|
||||
"end": 228
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0027",
|
||||
"arguments": [],
|
||||
"message": "Unbalanced closing brace in TextElement.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 250,
|
||||
"end": 250
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "unmatched-close1 = 1 }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 229,
|
||||
"end": 253
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Unmatched closing brace",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 253,
|
||||
"end": 284
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0027",
|
||||
"arguments": [],
|
||||
"message": "Unbalanced closing brace in TextElement.",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 309,
|
||||
"end": 309
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "unmatched-close2 = { 1 }}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 285,
|
||||
"end": 311
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 311
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
## Reference expressions in placeables.
|
||||
|
||||
message-reference-placeable = {msg}
|
||||
term-reference-placeable = {-term}
|
||||
variable-reference-placeable = {$var}
|
||||
|
||||
# Function references are invalid outside of call expressions.
|
||||
# This parses as a valid MessageReference.
|
||||
function-reference-placeable = {FUN}
|
||||
|
||||
|
||||
## Reference expressions in selectors.
|
||||
|
||||
variable-reference-selector = {$var ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
# ERROR Message values may not be used as selectors.
|
||||
message-reference-selector = {msg ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Term values may not be used as selectors.
|
||||
term-reference-selector = {-term ->
|
||||
*[key] Value
|
||||
}
|
||||
# ERROR Function references are invalid outside of call expressions, and this
|
||||
# parses as a MessageReference which isn't a valid selector.
|
||||
function-expression-selector = {FUN ->
|
||||
*[key] Value
|
||||
}
|
||||
@@ -0,0 +1,450 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "Reference expressions in placeables.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 39
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "message-reference-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 68
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "MessageReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "msg",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 72,
|
||||
"end": 75
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 72,
|
||||
"end": 75
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 71,
|
||||
"end": 76
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 71,
|
||||
"end": 76
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 76
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term-reference-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 77,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 106,
|
||||
"end": 110
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 105,
|
||||
"end": 110
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 104,
|
||||
"end": 111
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 104,
|
||||
"end": 111
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 77,
|
||||
"end": 111
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "variable-reference-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 145,
|
||||
"end": 148
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 144,
|
||||
"end": 148
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 143,
|
||||
"end": 149
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 143,
|
||||
"end": 149
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 149
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "function-reference-placeable",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 257,
|
||||
"end": 285
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "MessageReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "FUN",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 289,
|
||||
"end": 292
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 289,
|
||||
"end": 292
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 288,
|
||||
"end": 293
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 288,
|
||||
"end": 293
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Function references are invalid outside of call expressions.\nThis parses as a valid MessageReference.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 151,
|
||||
"end": 256
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 151,
|
||||
"end": 293
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Reference expressions in selectors.",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 296,
|
||||
"end": 334
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "variable-reference-selector",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 336,
|
||||
"end": 363
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 368,
|
||||
"end": 371
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 367,
|
||||
"end": 371
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 380,
|
||||
"end": 383
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 385,
|
||||
"end": 390
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 385,
|
||||
"end": 390
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 378,
|
||||
"end": 390
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 367,
|
||||
"end": 391
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 366,
|
||||
"end": 392
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 366,
|
||||
"end": 392
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 336,
|
||||
"end": 392
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Message values may not be used as selectors.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 394,
|
||||
"end": 446
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0016",
|
||||
"arguments": [],
|
||||
"message": "Message references cannot be used as selectors",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 481,
|
||||
"end": 481
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "message-reference-selector = {msg ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 447,
|
||||
"end": 502
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Term values may not be used as selectors.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 502,
|
||||
"end": 551
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0017",
|
||||
"arguments": [],
|
||||
"message": "Terms cannot be used as selectors",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 585,
|
||||
"end": 585
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "term-reference-selector = {-term ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 552,
|
||||
"end": 606
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Function references are invalid outside of call expressions, and this\nparses as a MessageReference which isn't a valid selector.",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 606,
|
||||
"end": 744
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0016",
|
||||
"arguments": [],
|
||||
"message": "Message references cannot be used as selectors",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 781,
|
||||
"end": 781
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "function-expression-selector = {FUN ->\n *[key] Value\n}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 745,
|
||||
"end": 802
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 802
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
new-messages =
|
||||
{ BUILTIN() ->
|
||||
[0] Zero
|
||||
*[other] {""}Other
|
||||
}
|
||||
|
||||
valid-selector-term-attribute =
|
||||
{ -term.case ->
|
||||
*[key] value
|
||||
}
|
||||
|
||||
# ERROR Term values are not valid selectors
|
||||
invalid-selector-term-value =
|
||||
{ -term ->
|
||||
*[key] value
|
||||
}
|
||||
|
||||
# ERROR CallExpressions on Terms are similar to TermReferences
|
||||
invalid-selector-term-variant =
|
||||
{ -term(case: "nominative") ->
|
||||
*[key] value
|
||||
}
|
||||
|
||||
# ERROR Nested expressions are not valid selectors
|
||||
invalid-selector-nested-expression =
|
||||
{ { 3 } ->
|
||||
*[key] default
|
||||
}
|
||||
|
||||
# ERROR Select expressions are not valid selectors
|
||||
invalid-selector-select-expression =
|
||||
{ { $sel ->
|
||||
*[key] value
|
||||
} ->
|
||||
*[key] default
|
||||
}
|
||||
|
||||
empty-variant =
|
||||
{ $sel ->
|
||||
*[key] {""}
|
||||
}
|
||||
|
||||
reduced-whitespace =
|
||||
{FOO()->
|
||||
*[key] {""}
|
||||
}
|
||||
|
||||
nested-select =
|
||||
{ $sel ->
|
||||
*[one] { $sel ->
|
||||
*[two] Value
|
||||
}
|
||||
}
|
||||
|
||||
# ERROR Missing selector
|
||||
missing-selector =
|
||||
{
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
# ERROR Missing line end after variant list
|
||||
missing-line-end =
|
||||
{ $sel ->
|
||||
*[key] Value}
|
||||
@@ -0,0 +1,362 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "new-messages"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "FunctionReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "BUILTIN"
|
||||
},
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": []
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"value": "0",
|
||||
"type": "NumberLiteral"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Zero"
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "other"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "",
|
||||
"type": "StringLiteral"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Other"
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "valid-selector-term-attribute"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term"
|
||||
},
|
||||
"attribute": {
|
||||
"type": "Identifier",
|
||||
"name": "case"
|
||||
},
|
||||
"arguments": null
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "value"
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Term values are not valid selectors"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "invalid-selector-term-value =\n { -term ->\n *[key] value\n }\n\n"
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR CallExpressions on Terms are similar to TermReferences"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "invalid-selector-term-variant =\n { -term(case: \"nominative\") ->\n *[key] value\n }\n\n"
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Nested expressions are not valid selectors"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "invalid-selector-nested-expression =\n { { 3 } ->\n *[key] default\n }\n\n"
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Select expressions are not valid selectors"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "invalid-selector-select-expression =\n { { $sel ->\n *[key] value\n } ->\n *[key] default\n }\n\n"
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "empty-variant"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel"
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "",
|
||||
"type": "StringLiteral"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "reduced-whitespace"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "FunctionReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "FOO"
|
||||
},
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": []
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "",
|
||||
"type": "StringLiteral"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "nested-select"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel"
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "one"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel"
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "two"
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value"
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Missing selector"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "missing-selector =\n {\n *[key] Value\n }\n\n"
|
||||
},
|
||||
{
|
||||
"type": "Comment",
|
||||
"content": "ERROR Missing line end after variant list"
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [],
|
||||
"content": "missing-line-end =\n { $sel ->\n *[key] Value}\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
select-1tbs-inline = { $selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-1tbs-newline = {
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-1tbs-indent = {
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-allman-inline =
|
||||
{ $selector ->
|
||||
*[key] Value
|
||||
[other] Other
|
||||
}
|
||||
|
||||
select-allman-newline =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-allman-indent =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-gnu-inline =
|
||||
{ $selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-gnu-newline =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-gnu-indent =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
select-no-indent =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
[other] Other
|
||||
}
|
||||
|
||||
select-no-indent-multiline =
|
||||
{
|
||||
$selector ->
|
||||
*[key] Value
|
||||
Continued
|
||||
[other]
|
||||
Other
|
||||
Multiline
|
||||
}
|
||||
|
||||
# ERROR (Multiline text must be indented)
|
||||
select-no-indent-multiline = { $selector ->
|
||||
*[key] Value
|
||||
Continued without indent.
|
||||
}
|
||||
|
||||
select-flat =
|
||||
{
|
||||
$selector
|
||||
->
|
||||
*[
|
||||
key
|
||||
] Value
|
||||
[
|
||||
other
|
||||
] Other
|
||||
}
|
||||
|
||||
# Each line ends with 5 spaces.
|
||||
select-flat-with-trailing-spaces =
|
||||
{
|
||||
$selector
|
||||
->
|
||||
*[
|
||||
key
|
||||
] Value
|
||||
[
|
||||
other
|
||||
] Other
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,39 @@
|
||||
key01 =
|
||||
|
||||
|
||||
Value
|
||||
|
||||
key02 =
|
||||
|
||||
|
||||
.attr = Attribute
|
||||
|
||||
|
||||
key03 =
|
||||
Value
|
||||
Continued
|
||||
|
||||
|
||||
Over multiple
|
||||
Lines
|
||||
|
||||
|
||||
|
||||
.attr = Attribute
|
||||
|
||||
|
||||
key05 = Value
|
||||
|
||||
key06 = { 1 ->
|
||||
|
||||
|
||||
[one] One
|
||||
|
||||
|
||||
|
||||
|
||||
*[two] Two
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,348 @@
|
||||
{
|
||||
"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": 14,
|
||||
"end": 19
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 10,
|
||||
"end": 19
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 19
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
"value": null,
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 36,
|
||||
"end": 40
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 43,
|
||||
"end": 52
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 43,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 35,
|
||||
"end": 52
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 60
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value\nContinued\n\n\nOver multiple\nLines",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 116
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 63,
|
||||
"end": 116
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 125,
|
||||
"end": 129
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 132,
|
||||
"end": 141
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 132,
|
||||
"end": 141
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 124,
|
||||
"end": 141
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 141
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key05",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 144,
|
||||
"end": 149
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 172,
|
||||
"end": 177
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 172,
|
||||
"end": 177
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 144,
|
||||
"end": 177
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key06",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 179,
|
||||
"end": 184
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 189,
|
||||
"end": 190
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "one",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 206,
|
||||
"end": 209
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "One",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 211,
|
||||
"end": 214
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 211,
|
||||
"end": 214
|
||||
}
|
||||
},
|
||||
"default": false,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 205,
|
||||
"end": 214
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "two",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 229,
|
||||
"end": 232
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Two",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 234,
|
||||
"end": 237
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 234,
|
||||
"end": 237
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 227,
|
||||
"end": 237
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 189,
|
||||
"end": 245
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 187,
|
||||
"end": 246
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 187,
|
||||
"end": 246
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 179,
|
||||
"end": 246
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 247
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
## OK
|
||||
|
||||
bracket-inline = [Value]
|
||||
dot-inline = .Value
|
||||
star-inline = *Value
|
||||
|
||||
## ERRORS
|
||||
|
||||
bracket-newline =
|
||||
[Value]
|
||||
dot-newline =
|
||||
.Value
|
||||
star-newline =
|
||||
*Value
|
||||
@@ -0,0 +1,214 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"content": "OK",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "bracket-inline",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 7,
|
||||
"end": 21
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "[Value]",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 24,
|
||||
"end": 31
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 24,
|
||||
"end": 31
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 7,
|
||||
"end": 31
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "dot-inline",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 32,
|
||||
"end": 42
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": ".Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 45,
|
||||
"end": 51
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 45,
|
||||
"end": 51
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 32,
|
||||
"end": 51
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "star-inline",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 52,
|
||||
"end": 63
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "*Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 66,
|
||||
"end": 72
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 66,
|
||||
"end": 72
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 52,
|
||||
"end": 72
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERRORS",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 74,
|
||||
"end": 83
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0005",
|
||||
"arguments": [
|
||||
"bracket-newline"
|
||||
],
|
||||
"message": "Expected message \"bracket-newline\" to have a value or attributes",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 102,
|
||||
"end": 102
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "bracket-newline =\n [Value]\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 85,
|
||||
"end": 115
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 139,
|
||||
"end": 139
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "dot-newline =\n .Value\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 115,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0005",
|
||||
"arguments": [
|
||||
"star-newline"
|
||||
],
|
||||
"message": "Expected message \"star-newline\" to have a value or attributes",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 154,
|
||||
"end": 154
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "star-newline =\n *Value\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 140,
|
||||
"end": 166
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 166
|
||||
}
|
||||
}
|
||||
14
fluent-syntax/src/test/resources/reference_fixtures/tab.ftl
Normal file
14
fluent-syntax/src/test/resources/reference_fixtures/tab.ftl
Normal file
@@ -0,0 +1,14 @@
|
||||
# OK (tab after = is part of the value)
|
||||
key01 = Value 01
|
||||
|
||||
# Error (tab before =)
|
||||
key02 = Value 02
|
||||
|
||||
# Error (tab is not a valid indent)
|
||||
key03 =
|
||||
This line isn't properly indented.
|
||||
|
||||
# Partial Error (tab is not a valid indent)
|
||||
key04 =
|
||||
This line is indented by 4 spaces,
|
||||
whereas this line by 1 tab.
|
||||
190
fluent-syntax/src/test/resources/reference_fixtures/tab.json
Normal file
190
fluent-syntax/src/test/resources/reference_fixtures/tab.json
Normal file
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 40,
|
||||
"end": 45
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "\tValue 01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 47,
|
||||
"end": 56
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 47,
|
||||
"end": 56
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "OK (tab after = is part of the value)",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 39
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 56
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Error (tab before =)",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 58,
|
||||
"end": 80
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 86,
|
||||
"end": 86
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "key02\t= Value 02\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 81,
|
||||
"end": 99
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Error (tab is not a valid indent)",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 99,
|
||||
"end": 134
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0005",
|
||||
"arguments": [
|
||||
"key03"
|
||||
],
|
||||
"message": "Expected message \"key03\" to have a value or attributes",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 142,
|
||||
"end": 142
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "key03 =\n\tThis line isn't properly indented.\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 135,
|
||||
"end": 180
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 224,
|
||||
"end": 229
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "This line is indented by 4 spaces,",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 236,
|
||||
"end": 270
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 232,
|
||||
"end": 270
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Partial Error (tab is not a valid indent)",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 180,
|
||||
"end": 223
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 180,
|
||||
"end": 270
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0002",
|
||||
"arguments": [],
|
||||
"message": "Expected an entry start",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 271,
|
||||
"end": 271
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "\twhereas this line by 1 tab.\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 271,
|
||||
"end": 300
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 300
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
-term = { $arg ->
|
||||
*[key] Value
|
||||
}
|
||||
|
||||
key01 = { -term }
|
||||
key02 = { -term () }
|
||||
key03 = { -term(arg: 1) }
|
||||
key04 = { -term("positional", narg1: 1, narg2: 2) }
|
||||
@@ -0,0 +1,452 @@
|
||||
{
|
||||
"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": "arg",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 11,
|
||||
"end": 14
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 10,
|
||||
"end": 14
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 23,
|
||||
"end": 26
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 33
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 10,
|
||||
"end": 34
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 8,
|
||||
"end": 35
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 8,
|
||||
"end": 35
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 35
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 37,
|
||||
"end": 42
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 47,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 45,
|
||||
"end": 54
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 45,
|
||||
"end": 54
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 37,
|
||||
"end": 54
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 60
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 66,
|
||||
"end": 70
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 71,
|
||||
"end": 73
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 65,
|
||||
"end": 73
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 63,
|
||||
"end": 75
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 63,
|
||||
"end": 75
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 75
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 81
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 87,
|
||||
"end": 91
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [],
|
||||
"named": [
|
||||
{
|
||||
"type": "NamedArgument",
|
||||
"name": {
|
||||
"type": "Identifier",
|
||||
"name": "arg",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 95
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 97,
|
||||
"end": 98
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 92,
|
||||
"end": 98
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 91,
|
||||
"end": 99
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 86,
|
||||
"end": 99
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 84,
|
||||
"end": 101
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 84,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 101
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 102,
|
||||
"end": 107
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "TermReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 113,
|
||||
"end": 117
|
||||
}
|
||||
},
|
||||
"attribute": null,
|
||||
"arguments": {
|
||||
"type": "CallArguments",
|
||||
"positional": [
|
||||
{
|
||||
"value": "positional",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 118,
|
||||
"end": 130
|
||||
}
|
||||
}
|
||||
],
|
||||
"named": [
|
||||
{
|
||||
"type": "NamedArgument",
|
||||
"name": {
|
||||
"type": "Identifier",
|
||||
"name": "narg1",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 132,
|
||||
"end": 137
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 139,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 132,
|
||||
"end": 140
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "NamedArgument",
|
||||
"name": {
|
||||
"type": "Identifier",
|
||||
"name": "narg2",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 142,
|
||||
"end": 147
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"value": "2",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 149,
|
||||
"end": 150
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 142,
|
||||
"end": 150
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 117,
|
||||
"end": 151
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 112,
|
||||
"end": 151
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 110,
|
||||
"end": 153
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 110,
|
||||
"end": 153
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 102,
|
||||
"end": 153
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 154
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
-term01 = Value
|
||||
.attr = Attribute
|
||||
|
||||
-term02 = {""}
|
||||
|
||||
# JUNK Missing value
|
||||
-term03 =
|
||||
.attr = Attribute
|
||||
|
||||
# JUNK Missing value
|
||||
# < whitespace >
|
||||
-term04 =
|
||||
.attr1 = Attribute 1
|
||||
|
||||
# JUNK Missing value
|
||||
-term05 =
|
||||
|
||||
# JUNK Missing value
|
||||
# < whitespace >
|
||||
-term06 =
|
||||
|
||||
# JUNK Missing =
|
||||
-term07
|
||||
|
||||
-term08=Value
|
||||
.attr=Attribute
|
||||
|
||||
-term09 = Value
|
||||
.attr = Attribute
|
||||
446
fluent-syntax/src/test/resources/reference_fixtures/terms.json
Normal file
446
fluent-syntax/src/test/resources/reference_fixtures/terms.json
Normal file
@@ -0,0 +1,446 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 1,
|
||||
"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": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 21,
|
||||
"end": 25
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 37
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 37
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 20,
|
||||
"end": 37
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 37
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term02",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 40,
|
||||
"end": 46
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"value": "",
|
||||
"type": "StringLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 50,
|
||||
"end": 52
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 49,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 49,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 39,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing value",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 55,
|
||||
"end": 75
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0006",
|
||||
"arguments": [
|
||||
"term03"
|
||||
],
|
||||
"message": "Expected term \"-term03\" to have a value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 85,
|
||||
"end": 85
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term03 =\n .attr = Attribute\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 76,
|
||||
"end": 109
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing value\n < whitespace >",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 109,
|
||||
"end": 155
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0006",
|
||||
"arguments": [
|
||||
"term04"
|
||||
],
|
||||
"message": "Expected term \"-term04\" to have a value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 165,
|
||||
"end": 165
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term04 = \n .attr1 = Attribute 1\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 156,
|
||||
"end": 208
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing value",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 208,
|
||||
"end": 228
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0006",
|
||||
"arguments": [
|
||||
"term05"
|
||||
],
|
||||
"message": "Expected term \"-term05\" to have a value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 238,
|
||||
"end": 238
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term05 =\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 229,
|
||||
"end": 240
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing value\n < whitespace >",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 240,
|
||||
"end": 286
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0006",
|
||||
"arguments": [
|
||||
"term06"
|
||||
],
|
||||
"message": "Expected term \"-term06\" to have a value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 296,
|
||||
"end": 296
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term06 = \n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 287,
|
||||
"end": 314
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "JUNK Missing =",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 314,
|
||||
"end": 330
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"="
|
||||
],
|
||||
"message": "Expected token: \"=\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 338,
|
||||
"end": 338
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "-term07\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 331,
|
||||
"end": 340
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term08",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 341,
|
||||
"end": 347
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 348,
|
||||
"end": 353
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 348,
|
||||
"end": 353
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 359,
|
||||
"end": 363
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 364,
|
||||
"end": 373
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 364,
|
||||
"end": 373
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 358,
|
||||
"end": 373
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 340,
|
||||
"end": 373
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Term",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "term09",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 376,
|
||||
"end": 382
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 388,
|
||||
"end": 393
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 388,
|
||||
"end": 393
|
||||
}
|
||||
},
|
||||
"attributes": [
|
||||
{
|
||||
"type": "Attribute",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "attr",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 399,
|
||||
"end": 403
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "Attribute",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 409,
|
||||
"end": 418
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 409,
|
||||
"end": 418
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 398,
|
||||
"end": 418
|
||||
}
|
||||
}
|
||||
],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 375,
|
||||
"end": 418
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 419
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
key01 = {$var}
|
||||
key02 = { $var }
|
||||
key03 = {
|
||||
$var
|
||||
}
|
||||
key04 = {
|
||||
$var}
|
||||
|
||||
|
||||
## Errors
|
||||
|
||||
# ERROR Missing variable identifier
|
||||
err01 = {$}
|
||||
# ERROR Double $$
|
||||
err02 = {$$var}
|
||||
# ERROR Invalid first char of the identifier
|
||||
err03 = {$-var}
|
||||
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key01",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 5
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 10,
|
||||
"end": 13
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 9,
|
||||
"end": 13
|
||||
}
|
||||
},
|
||||
"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": "Placeable",
|
||||
"expression": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 28,
|
||||
"end": 31
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 31
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 23,
|
||||
"end": 35
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 23,
|
||||
"end": 35
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 15,
|
||||
"end": 35
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key03",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 36,
|
||||
"end": 41
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 51,
|
||||
"end": 54
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 50,
|
||||
"end": 54
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 44,
|
||||
"end": 56
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 44,
|
||||
"end": 56
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 36,
|
||||
"end": 56
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key04",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 57,
|
||||
"end": 62
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "var",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 68,
|
||||
"end": 71
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 67,
|
||||
"end": 71
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 65,
|
||||
"end": 72
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 65,
|
||||
"end": 72
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 57,
|
||||
"end": 72
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "Errors",
|
||||
"type": "GroupComment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 75,
|
||||
"end": 84
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Missing variable identifier",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 86,
|
||||
"end": 121
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0004",
|
||||
"arguments": [
|
||||
"a-zA-Z"
|
||||
],
|
||||
"message": "Expected a character from range: \"a-zA-Z\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 132,
|
||||
"end": 132
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err01 = {$}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 122,
|
||||
"end": 134
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Double $$",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 134,
|
||||
"end": 151
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0004",
|
||||
"arguments": [
|
||||
"a-zA-Z"
|
||||
],
|
||||
"message": "Expected a character from range: \"a-zA-Z\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 162,
|
||||
"end": 162
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err02 = {$$var}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 152,
|
||||
"end": 168
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR Invalid first char of the identifier",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 168,
|
||||
"end": 212
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0004",
|
||||
"arguments": [
|
||||
"a-zA-Z"
|
||||
],
|
||||
"message": "Expected a character from range: \"a-zA-Z\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 223,
|
||||
"end": 223
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "err03 = {$-var}\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 213,
|
||||
"end": 229
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 229
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
simple-identifier =
|
||||
{ $sel ->
|
||||
*[key] value
|
||||
}
|
||||
|
||||
identifier-surrounded-by-whitespace =
|
||||
{ $sel ->
|
||||
*[ key ] value
|
||||
}
|
||||
|
||||
int-number =
|
||||
{ $sel ->
|
||||
*[1] value
|
||||
}
|
||||
|
||||
float-number =
|
||||
{ $sel ->
|
||||
*[3.14] value
|
||||
}
|
||||
|
||||
# ERROR
|
||||
invalid-identifier =
|
||||
{ $sel ->
|
||||
*[two words] value
|
||||
}
|
||||
|
||||
# ERROR
|
||||
invalid-int =
|
||||
{ $sel ->
|
||||
*[1 apple] value
|
||||
}
|
||||
|
||||
# ERROR
|
||||
invalid-int =
|
||||
{ $sel ->
|
||||
*[3.14 apples] value
|
||||
}
|
||||
@@ -0,0 +1,513 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "simple-identifier",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 17
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 27,
|
||||
"end": 30
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 26,
|
||||
"end": 30
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 43,
|
||||
"end": 46
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 48,
|
||||
"end": 53
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 41,
|
||||
"end": 53
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 26,
|
||||
"end": 58
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 24,
|
||||
"end": 59
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 20,
|
||||
"end": 59
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 59
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "identifier-surrounded-by-whitespace",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 61,
|
||||
"end": 96
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 106,
|
||||
"end": 109
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 105,
|
||||
"end": 109
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 127,
|
||||
"end": 130
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 137,
|
||||
"end": 142
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 137,
|
||||
"end": 142
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 120,
|
||||
"end": 142
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 105,
|
||||
"end": 147
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 103,
|
||||
"end": 148
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 99,
|
||||
"end": 148
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 61,
|
||||
"end": 148
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "int-number",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 150,
|
||||
"end": 160
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 170,
|
||||
"end": 173
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 169,
|
||||
"end": 173
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"value": "1",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 186,
|
||||
"end": 187
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 189,
|
||||
"end": 194
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 189,
|
||||
"end": 194
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 184,
|
||||
"end": 194
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 169,
|
||||
"end": 199
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 167,
|
||||
"end": 200
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 163,
|
||||
"end": 200
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 150,
|
||||
"end": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "float-number",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 202,
|
||||
"end": 214
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "Placeable",
|
||||
"expression": {
|
||||
"type": "SelectExpression",
|
||||
"selector": {
|
||||
"type": "VariableReference",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "sel",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 224,
|
||||
"end": 227
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 223,
|
||||
"end": 227
|
||||
}
|
||||
},
|
||||
"variants": [
|
||||
{
|
||||
"type": "Variant",
|
||||
"key": {
|
||||
"value": "3.14",
|
||||
"type": "NumberLiteral",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 240,
|
||||
"end": 244
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "value",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 246,
|
||||
"end": 251
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 246,
|
||||
"end": 251
|
||||
}
|
||||
},
|
||||
"default": true,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 238,
|
||||
"end": 251
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 223,
|
||||
"end": 256
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 221,
|
||||
"end": 257
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 217,
|
||||
"end": 257
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": null,
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 202,
|
||||
"end": 257
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 259,
|
||||
"end": 266
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"]"
|
||||
],
|
||||
"message": "Expected token: \"]\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 315,
|
||||
"end": 315
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "invalid-identifier =\n { $sel ->\n *[two words] value\n }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 267,
|
||||
"end": 335
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 335,
|
||||
"end": 342
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"]"
|
||||
],
|
||||
"message": "Expected token: \"]\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 382,
|
||||
"end": 382
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "invalid-int =\n { $sel ->\n *[1 apple] value\n }\n\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 343,
|
||||
"end": 402
|
||||
}
|
||||
},
|
||||
{
|
||||
"content": "ERROR",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 402,
|
||||
"end": 409
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Junk",
|
||||
"annotations": [
|
||||
{
|
||||
"type": "Annotation",
|
||||
"code": "E0003",
|
||||
"arguments": [
|
||||
"]"
|
||||
],
|
||||
"message": "Expected token: \"]\"",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 452,
|
||||
"end": 452
|
||||
}
|
||||
}
|
||||
],
|
||||
"content": "invalid-int =\n { $sel ->\n *[3.14 apples] value\n }\n",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 410,
|
||||
"end": 472
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 472
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
# Caution, lines 6 and 7 contain white-space-only lines
|
||||
key =
|
||||
first line
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
last line
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [
|
||||
{
|
||||
"type": "Message",
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"name": "key",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 56,
|
||||
"end": 59
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"type": "Pattern",
|
||||
"elements": [
|
||||
{
|
||||
"type": "TextElement",
|
||||
"value": "first line\n\n\n\n\n\n\nlast line",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 64,
|
||||
"end": 96
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 62,
|
||||
"end": 96
|
||||
}
|
||||
},
|
||||
"attributes": [],
|
||||
"comment": {
|
||||
"content": "Caution, lines 6 and 7 contain white-space-only lines",
|
||||
"type": "Comment",
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 55
|
||||
}
|
||||
},
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 96
|
||||
}
|
||||
}
|
||||
],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 97
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "Resource",
|
||||
"body": [],
|
||||
"span": {
|
||||
"type": "Span",
|
||||
"start": 0,
|
||||
"end": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
foo =
|
||||
.attr = Foo Attr
|
||||
@@ -0,0 +1 @@
|
||||
foo = \{ placeable }
|
||||
@@ -0,0 +1,3 @@
|
||||
foo =
|
||||
Foo
|
||||
Bar
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO() }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar) }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar: 1) }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar: "bar") }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(1) }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar, 1, baz: "baz") }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO("bar") }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar: "bar", baz: "baz") }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO(bar, baz) }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { FOO($bar) }
|
||||
@@ -0,0 +1 @@
|
||||
foo = { "Escaped \" quote" }
|
||||
@@ -0,0 +1,8 @@
|
||||
foo = Foo
|
||||
|
||||
## Comment Header
|
||||
##
|
||||
## A multiline
|
||||
## group comment
|
||||
|
||||
bar = Bar
|
||||
@@ -0,0 +1,3 @@
|
||||
foo =
|
||||
Foo
|
||||
Bar
|
||||
@@ -0,0 +1,2 @@
|
||||
foo = Foo
|
||||
Bar
|
||||
@@ -0,0 +1 @@
|
||||
foo = Foo { bar.baz }
|
||||
@@ -0,0 +1,3 @@
|
||||
# A multiline
|
||||
# message comment.
|
||||
foo = Foo
|
||||
@@ -0,0 +1 @@
|
||||
foo = Foo { bar }
|
||||
@@ -0,0 +1,9 @@
|
||||
# Attached comment
|
||||
key1 = Value1
|
||||
key2 = Value2
|
||||
|
||||
key3 = Value3
|
||||
|
||||
# Some comment
|
||||
|
||||
key4 = Value4
|
||||
@@ -0,0 +1 @@
|
||||
foo = Foo
|
||||
@@ -0,0 +1 @@
|
||||
foo = Foo
|
||||
@@ -0,0 +1,4 @@
|
||||
foo =
|
||||
.attr =
|
||||
Foo Attr
|
||||
Continued
|
||||
@@ -0,0 +1,3 @@
|
||||
foo =
|
||||
Foo
|
||||
Baz
|
||||
@@ -0,0 +1,2 @@
|
||||
foo = Foo
|
||||
Baz
|
||||
@@ -0,0 +1,2 @@
|
||||
foo = *Foo
|
||||
Baz
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user