Skip to content

Commit 82b0e8c

Browse files
committed
Clearer lex errors for unprintable unicode.
1 parent 00b69c9 commit 82b0e8c

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

graphql/core/language/lexer.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,13 @@ def char_code_at(s, pos):
128128

129129

130130
def print_char_code(code):
131-
return 'EOF' if code is None else json.dumps(unichr(code))
131+
if code is None:
132+
return '<EOF>'
133+
134+
if code < 0x007F:
135+
return json.dumps(unichr(code))
136+
137+
return '"\\u%04X"' % code
132138

133139

134140
def read_token(source, from_position):

tests/core_language/test_lexer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def test_lex_reports_useful_number_errors():
152152

153153
with raises(LanguageError) as excinfo:
154154
lex_one(u'1.')
155-
assert u'Syntax Error GraphQL (1:3) Invalid number, expected digit but got: EOF.' in excinfo.value.message
155+
assert u'Syntax Error GraphQL (1:3) Invalid number, expected digit but got: <EOF>.' in excinfo.value.message
156156

157157
with raises(LanguageError) as excinfo:
158158
lex_one(u'.123')
@@ -168,7 +168,7 @@ def test_lex_reports_useful_number_errors():
168168

169169
with raises(LanguageError) as excinfo:
170170
lex_one(u'1.0e')
171-
assert u'Syntax Error GraphQL (1:5) Invalid number, expected digit but got: EOF.' in excinfo.value.message
171+
assert u'Syntax Error GraphQL (1:5) Invalid number, expected digit but got: <EOF>.' in excinfo.value.message
172172

173173
with raises(LanguageError) as excinfo:
174174
lex_one(u'1.0eA')
@@ -202,11 +202,11 @@ def test_lex_reports_useful_unknown_character_error():
202202

203203
with raises(LanguageError) as excinfo:
204204
lex_one(u'\u203B')
205-
assert u'Syntax Error GraphQL (1:1) Unexpected character "\\u203b"' in excinfo.value.message
205+
assert u'Syntax Error GraphQL (1:1) Unexpected character "\\u203B"' in excinfo.value.message
206206

207207
with raises(LanguageError) as excinfo:
208208
lex_one(u'\u200b')
209-
assert u'Syntax Error GraphQL (1:1) Unexpected character "\\u200b"' in excinfo.value.message
209+
assert u'Syntax Error GraphQL (1:1) Unexpected character "\\u200B"' in excinfo.value.message
210210

211211

212212
def test_lex_reports_useful_information_for_dashes_in_names():

0 commit comments

Comments
 (0)