diff --git a/language/lexer/lexer.go b/language/lexer/lexer.go index 1988c5fd..cc67bb6e 100644 --- a/language/lexer/lexer.go +++ b/language/lexer/lexer.go @@ -129,7 +129,7 @@ func readName(source *source.Source, position, runePosition int) Token { break } } - return makeToken(NAME, runePosition, endRune, string(body[position:endByte])) + return makeToken(NAME, position, endByte, string(body[position:endByte])) } // Reads a number token from the source file, either a float diff --git a/language/lexer/lexer_test.go b/language/lexer/lexer_test.go index c476d8fa..8eb8c0ae 100644 --- a/language/lexer/lexer_test.go +++ b/language/lexer/lexer_test.go @@ -91,8 +91,8 @@ func TestLexer_AcceptsBOMHeader(t *testing.T) { Body: "\uFEFF foo", Expected: Token{ Kind: NAME, - Start: 2, - End: 5, + Start: 4, + End: 7, Value: "foo", }, }, diff --git a/language/parser/parser_test.go b/language/parser/parser_test.go index 3cc4253a..6c41a876 100644 --- a/language/parser/parser_test.go +++ b/language/parser/parser_test.go @@ -498,6 +498,19 @@ func TestParsesEnumValueDefinitionWithDescription(t *testing.T) { } } +func TestParsesTypeDefinitionWithMultiByteCharactersComment_UnicodeText(t *testing.T) { + source := ` + # This comment has a фы世界 character. + type Foo implements Bar { + foo: String! + } + ` + _, err := Parse(ParseParams{Source: source}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + func TestDefinitionsWithDescriptions(t *testing.T) { testCases := []struct { name string