From 6d5506b94dd7f89e0d7b143ee0042315c9bfc605 Mon Sep 17 00:00:00 2001 From: Aven30 Date: Wed, 20 Jul 2022 10:55:34 -0700 Subject: [PATCH] Fix #229 (#230) * account for newline characters in block str * fix test and simplify block string line increment logic, fixes #229 * place block str test in correct section Co-authored-by: Ahmad Moudani --- lexer/lexer.go | 7 ++++++- lexer/lexer_test.yml | 20 ++++++++++++++++++++ parser/schema_test.yml | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lexer/lexer.go b/lexer/lexer.go index 720dd5b4..de938acc 100644 --- a/lexer/lexer.go +++ b/lexer/lexer.go @@ -434,7 +434,6 @@ func (s *Lexer) readBlockString() (Token, *gqlerror.Error) { // skip the close quote s.end += 3 s.endRunes += 3 - return t, err } @@ -456,6 +455,8 @@ func (s *Lexer) readBlockString() (Token, *gqlerror.Error) { buf.WriteByte('\n') s.end++ s.endRunes++ + s.line++ + s.lineStartRunes = s.endRunes } else { var char = rune(r) var w = 1 @@ -467,6 +468,10 @@ func (s *Lexer) readBlockString() (Token, *gqlerror.Error) { s.end += w s.endRunes++ buf.WriteRune(char) + if r == '\n' { + s.line++ + s.lineStartRunes = s.endRunes + } } } diff --git a/lexer/lexer_test.yml b/lexer/lexer_test.yml index e2c26696..5c4d5f0f 100644 --- a/lexer/lexer_test.yml +++ b/lexer/lexer_test.yml @@ -307,6 +307,26 @@ lexes block strings: end: 36 value: "spans\n multiple\n lines" + - name: records correct line and column after block string + input: | + """ + + some + description + + """ foo + tokens: + - + kind: BLOCK_STRING + value: "some\ndescription" + - + kind: NAME + start: 27 + end: 30 + line: 6 + column: 5 + value: 'foo' + lex reports useful block string errors: - name: unterminated string input: '"""' diff --git a/parser/schema_test.yml b/parser/schema_test.yml index 30faf84c..8b6a5d0c 100644 --- a/parser/schema_test.yml +++ b/parser/schema_test.yml @@ -643,4 +643,4 @@ fuzzer: input: "\"\"\"\r" error: message: 'Unexpected ' - locations: [{ line: 1, column: 5 }] + locations: [{ line: 2, column: 1 }]