encoding:
- name: disallows uncommon control characters
input: "\u0007"
error:
message: 'Cannot contain the invalid character "\u0007"'
locations: [{line: 1, column: 1}]
- name: accepts BOM header
input: "\uFEFF foo"
tokens:
-
kind: NAME
start: 2
end: 5
value: 'foo'
simple tokens:
- name: records line and column
input: "\n \r\n \r foo\n"
tokens:
-
kind: NAME
start: 8
end: 11
line: 4
column: 3
value: 'foo'
- name: skips whitespace
input: "\n\n foo\n\n\n"
tokens:
-
kind: NAME
start: 6
end: 9
value: 'foo'
- name: skips comments
input: "\n #comment\n foo#comment\n"
tokens:
-
kind: NAME
start: 18
end: 21
value: 'foo'
- name: skips commas
input: ",,,foo,,,"
tokens:
-
kind: NAME
start: 3
end: 6
value: 'foo'
- name: errors respect whitespace
input: "\n\n ?\n\n\n"
error:
message: 'Cannot parse the unexpected character "?".'
locations: [{line: 3, column: 5}]
string: |
Syntax Error: Cannot parse the unexpected character "?".
GraphQL request (3:5)
2:
3: ?
^
4:
- name: lex reports useful information for dashes in names
input: "a-b"
error:
message: 'Invalid number, expected digit but got: "b".'
locations: [{ line: 1, column: 3 }]
tokens:
-
kind: Name
start: 0
end: 1
value: a
lexes strings:
- name: basic
input: '"simple"'
tokens:
-
kind: STRING
start: 0
end: 8
value: 'simple'
- name: whitespace
input: '" white space "'
tokens:
-
kind: STRING
start: 0
end: 15
value: ' white space '
- name: quote
input: '"quote \""'
tokens:
-
kind: STRING
start: 0
end: 10
value: 'quote "'
- name: escaped
input: '"escaped \n\r\b\t\f"'
tokens:
-
kind: STRING
start: 0
end: 20
value: "escaped \n\r\b\t\f"
- name: slashes
input: '"slashes \\ \/"'
tokens:
-
kind: STRING
start: 0
end: 15
value: 'slashes \ /'
- name: unicode
input: '"unicode \u1234\u5678\u90AB\uCDEF"'
tokens:
-
kind: STRING
start: 0
end: 34
value: "unicode \u1234\u5678\u90AB\uCDEF"
lex reports useful string errors:
- name: unterminated
input: '"'
error:
message: "Unterminated string."
locations: [{ line: 1, column: 2 }]
- name: no end quote
input: '"no end quote'
error:
message: 'Unterminated string.'
locations: [{ line: 1, column: 14 }]
- name: single quotes
input: "'single quotes'"
error:
message: "Unexpected single quote character ('), did you mean to use a double quote (\")?"
locations: [{ line: 1, column: 1 }]
- name: control characters
input: "\"contains unescaped \u0007 control char\""
error:
message: 'Invalid character within String: "\u0007".'
locations: [{ line: 1, column: 21 }]
- name: null byte
input: "\"null-byte is not \u0000 end of file\""
error:
message: 'Invalid character within String: "\u0000".'
locations: [{ line: 1, column: 19 }]
- name: unterminated newline
input: "\"multi\nline\""
error:
message: 'Unterminated string.'
locations: [{line: 1, column: 7 }]
- name: unterminated carriage return
input: "\"multi\rline\""
error:
message: 'Unterminated string.'
locations: [{ line: 1, column: 7 }]
- name: bad escape character
input: '"bad \z esc"'
error:
message: 'Invalid character escape sequence: \z.'
locations: [{ line: 1, column: 7 }]
- name: hex escape sequence
input: '"bad \x esc"'
error:
message: 'Invalid character escape sequence: \x.'
locations: [{ line: 1, column: 7 }]
- name: short escape sequence
input: '"bad \u1 esc"'
error:
message: 'Invalid character escape sequence: \u1 es.'
locations: [{ line: 1, column: 7 }]
- name: invalid escape sequence 1
input: '"bad \u0XX1 esc"'
error:
message: 'Invalid character escape sequence: \u0XX1.'
locations: [{ line: 1, column: 7 }]
- name: invalid escape sequence 2
input: '"bad \uXXXX esc"'
error:
message: 'Invalid character escape sequence: \uXXXX.'
locations: [{ line: 1, column: 7 }]
- name: invalid escape sequence 3
input: '"bad \uFXXX esc"'
error:
message: 'Invalid character escape sequence: \uFXXX.'
locations: [{ line: 1, column: 7 }]
- name: invalid character escape sequence
input: '"bad \uXXXF esc"'
error:
message: 'Invalid character escape sequence: \uXXXF.'
locations: [{ line: 1, column: 7 }]
lexes block strings:
- name: simple
input: '"""simple"""'
tokens:
-
kind: BLOCK_STRING
start: 0
end: 12
value: 'simple'
- name: white space
input: '""" white space """'
tokens:
-
kind: BLOCK_STRING
start: 0
end: 19
value: ' white space '
- name: contains quote
input: '"""contains " quote"""'
tokens:
-
kind: BLOCK_STRING
start: 0
end: 22
value: 'contains " quote'
- name: contains triplequote
input: "\"\"\"contains \\\"\"\" triplequote\"\"\""
tokens:
-
kind: BLOCK_STRING
start: 0
end: 31
value: 'contains """ triplequote'
- name: multi line
input: "\"\"\"multi\nline\"\"\""
tokens:
-
kind: BLOCK_STRING
start: 0
end: 16
value: "multi\nline"
- name: multi line normalized
input: "\"\"\"multi\rline\r\nnormalized\"\"\""
tokens:
-
kind: BLOCK_STRING
start: 0
end: 28
value: "multi\nline\nnormalized"
- name: unescaped
input: '"""unescaped \n\r\b\t\f\u1234"""'
tokens:
-
kind: BLOCK_STRING
start: 0
end: 32
value: 'unescaped \n\r\b\t\f\u1234'
- name: slashes
input: '"""slashes \\ \/"""'
tokens:
-
kind: BLOCK_STRING
start: 0
end: 19
value: 'slashes \\ \/'
- name: multiple lines
input: |
"""
spans
multiple
lines
"""
tokens:
-
kind: BLOCK_STRING
start: 0
end: 36
value: "spans\n multiple\n lines"
lex reports useful block string errors:
- name: unterminated string
input: '"""'
error:
message: "Unterminated string."
locations: [{ line: 1, column: 4 }]
- name: unescaped control characters
input: "\"\"\"contains unescaped \u0007 control char\"\"\""
error:
message: 'Invalid character within String: "\u0007".'
locations: [{ line: 1, column: 23 }]
- name: null byte
input: "\"\"\"null-byte is not \u0000 end of file\"\"\""
error:
message: 'Invalid character within String: "\u0000".'
locations: [{ line: 1, column: 21 }]
lexes numbers:
- name: integer
input: "4"
tokens:
-
kind: INT
start: 0
end: 1
value: '4'
- name: float
input: "4.123"
tokens:
-
kind: FLOAT
start: 0
end: 5
value: '4.123'
- name: negative
input: "-4"
tokens:
-
kind: INT
start: 0
end: 2
value: '-4'
- name: nine
input: "9"
tokens:
-
kind: INT
start: 0
end: 1
value: '9'
- name: zero
input: "0"
tokens:
-
kind: INT
start: 0
end: 1
value: '0'
- name: negative float
input: "-4.123"
tokens:
-
kind: FLOAT
start: 0
end: 6
value: '-4.123'
- name: float leading zero
input: "0.123"
tokens:
-
kind: FLOAT
start: 0
end: 5
value: '0.123'
- name: exponent whole
input: "123e4"
tokens:
-
kind: FLOAT
start: 0
end: 5
value: '123e4'
- name: exponent uppercase
input: "123E4"
tokens:
-
kind: FLOAT
start: 0
end: 5
value: '123E4'
- name: exponent negative power
input: "123e-4"
tokens:
-
kind: FLOAT
start: 0
end: 6
value: '123e-4'
- name: exponent positive power
input: "123e+4"
tokens:
-
kind: FLOAT
start: 0
end: 6
value: '123e+4'
- name: exponent negative base
input: "-1.123e4"
tokens:
-
kind: FLOAT
start: 0
end: 8
value: '-1.123e4'
- name: exponent negative base upper
input: "-1.123E4"
tokens:
-
kind: FLOAT
start: 0
end: 8
value: '-1.123E4'
- name: exponent negative base negative power
input: "-1.123e-4"
tokens:
-
kind: FLOAT
start: 0
end: 9
value: '-1.123e-4'
- name: exponent negative base positive power
input: "-1.123e+4"
tokens:
-
kind: FLOAT
start: 0
end: 9
value: '-1.123e+4'
- name: exponent negative base large power
input: "-1.123e4567"
tokens:
-
kind: FLOAT
start: 0
end: 11
value: '-1.123e4567'
lex reports useful number errors:
- name: zero
input: "00"
error:
message: 'Invalid number, unexpected digit after 0: "0".'
locations: [{ line: 1, column: 2 }]
- name: positive
input: "+1"
error:
message: 'Cannot parse the unexpected character "+".'
locations: [{ line: 1, column: 1 }]
- name: trailing dot
input: "1."
error:
message: 'Invalid number, expected digit but got: <EOF>.'
locations: [{ line: 1, column: 3 }]
- name: traililng dot exponent
input: "1.e1"
error:
message: 'Invalid number, expected digit but got: "e".'
locations: [{ line: 1, column: 3 }]
- name: missing leading zero
input: ".123"
error:
message: 'Cannot parse the unexpected character ".".'
locations: [{ line: 1, column: 1 }]
- name: characters
input: "1.A"
error:
message: 'Invalid number, expected digit but got: "A".'
locations: [{ line: 1, column: 3 }]
- name: negative characters
input: "-A"
error:
message: 'Invalid number, expected digit but got: "A".'
locations: [{ line: 1, column: 2 }]
- name: missing exponent
input: '1.0e'
error:
message: 'Invalid number, expected digit but got: <EOF>.'
locations: [{ line: 1, column: 5 }]
- name: character exponent
input: "1.0eA"
error:
message: 'Invalid number, expected digit but got: "A".'
locations: [{ line: 1, column: 5 }]
lexes punctuation:
- name: bang
input: "!"
tokens:
-
kind: BANG
start: 0
end: 1
value: undefined
- name: dollar
input: "$"
tokens:
-
kind: DOLLAR
start: 0
end: 1
value: undefined
- name: open paren
input: "("
tokens:
-
kind: PAREN_L
start: 0
end: 1
value: undefined
- name: close paren
input: ")"
tokens:
-
kind: PAREN_R
start: 0
end: 1
value: undefined
- name: spread
input: "..."
tokens:
-
kind: SPREAD
start: 0
end: 3
value: undefined
- name: colon
input: ":"
tokens:
-
kind: COLON
start: 0
end: 1
value: undefined
- name: equals
input: "="
tokens:
-
kind: EQUALS
start: 0
end: 1
value: undefined
- name: at
input: "@"
tokens:
-
kind: AT
start: 0
end: 1
value: undefined
- name: open bracket
input: "["
tokens:
-
kind: BRACKET_L
start: 0
end: 1
value: undefined
- name: close bracket
input: "]"
tokens:
-
kind: BRACKET_R
start: 0
end: 1
value: undefined
- name: open brace
input: "{"
tokens:
-
kind: BRACE_L
start: 0
end: 1
value: undefined
- name: close brace
input: "}"
tokens:
-
kind: BRACE_R
start: 0
end: 1
value: undefined
- name: pipe
input: "|"
tokens:
-
kind: PIPE
start: 0
end: 1
value: undefined
lex reports useful unknown character error:
- name: not a spread
input: ".."
error:
message: 'Cannot parse the unexpected character ".".'
locations: [{ line: 1, column: 1 }]
- name: question mark
input: "?"
error:
message: 'Cannot parse the unexpected character "?".'
message: 'Cannot parse the unexpected character "?".'
locations: [{ line: 1, column: 1 }]
- name: unicode 203
input: "\u203B"
error:
message: 'Cannot parse the unexpected character "â".'
locations: [{ line: 1, column: 1 }]
- name: unicode 200
input: "\u200b"
error:
message: 'Cannot parse the unexpected character "â".'
locations: [{ line: 1, column: 1 }]