(scanner: Scanner)
| 461 | } |
| 462 | |
| 463 | export function basicString(scanner: Scanner): ParseResult<string> { |
| 464 | scanner.skipWhitespaces(); |
| 465 | if (scanner.char() !== '"') return failure(); |
| 466 | scanner.next(); |
| 467 | const acc = []; |
| 468 | while (scanner.char() !== '"' && !scanner.eof()) { |
| 469 | if (scanner.char() === "\n") { |
| 470 | throw new SyntaxError("Single-line string cannot contain EOL"); |
| 471 | } |
| 472 | const escapedChar = escapeSequence(scanner); |
| 473 | if (escapedChar.ok) { |
| 474 | acc.push(escapedChar.body); |
| 475 | } else { |
| 476 | acc.push(scanner.char()); |
| 477 | scanner.next(); |
| 478 | } |
| 479 | } |
| 480 | if (scanner.eof()) { |
| 481 | throw new SyntaxError( |
| 482 | `Single-line string is not closed:\n${acc.join("")}`, |
| 483 | ); |
| 484 | } |
| 485 | scanner.next(); // skip last '"" |
| 486 | return success(acc.join("")); |
| 487 | } |
| 488 | |
| 489 | export function literalString(scanner: Scanner): ParseResult<string> { |
| 490 | scanner.skipWhitespaces(); |
nothing calls this directly
no test coverage detected