Skip to content

Commit

Permalink
chore: refactor tap_lexer to use more primordials
Browse files Browse the repository at this point in the history
PR-URL: nodejs/node#45744
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
(cherry picked from commit 2483da743cbb48f31c6b3f8cb186d89f31d73611)
  • Loading branch information
aduh95 authored and MoLow committed Feb 2, 2023
1 parent 9b49978 commit 4e778bc
Showing 1 changed file with 22 additions and 16 deletions.
38 changes: 22 additions & 16 deletions lib/internal/test_runner/tap_lexer.js
@@ -1,7 +1,14 @@
// https://github.com/nodejs/node/blob/f8ce9117b19702487eb600493d941f7876e00e01/lib/internal/test_runner/tap_lexer.js
// https://github.com/nodejs/node/blob/2483da743cbb48f31c6b3f8cb186d89f31d73611/lib/internal/test_runner/tap_lexer.js
'use strict'

const { SafeSet, MathMax, StringPrototypeIncludes } = require('#internal/per_context/primordials')
const {
ArrayPrototypePop,
ArrayPrototypePush,
MathMax,
SafeSet,
StringPrototypeIncludes,
StringPrototypeTrim
} = require('#internal/per_context/primordials')
const {
codes: { ERR_TAP_LEXER_ERROR }
} = require('#internal/errors')
Expand Down Expand Up @@ -137,21 +144,21 @@ class TapLexer {
this.#lastScannedToken = token
}

ArrayPrototypePush(chunk, token)
if (token.kind === TokenKind.NEWLINE) {
// Store the current chunk + NEWLINE token
tokens.push([...chunk, token])
ArrayPrototypePush(tokens, chunk)
chunk = []
} else {
chunk.push(token)
}
}

if (chunk.length > 0) {
tokens.push([...chunk, this.#scanEOL()])
ArrayPrototypePush(chunk, this.#scanEOL())
ArrayPrototypePush(tokens, chunk)
}

// send EOF as a separate chunk
tokens.push([this.#scanEOF()])
ArrayPrototypePush(tokens, [this.#scanEOF()])

return tokens
}
Expand Down Expand Up @@ -239,7 +246,7 @@ class TapLexer {
this.#hasTheCurrentCharacterBeenEscaped() ||
this.#source.peek(1) === TokenKind.WHITESPACE
) {
this.#escapeStack.pop()
ArrayPrototypePop(this.#escapeStack)
return new Token({
kind: TokenKind.LITERAL,
value: char,
Expand All @@ -250,7 +257,7 @@ class TapLexer {
// Otherwise, consume the escape symbol as an escape symbol that should be ignored by the parser
// we also need to push the escape symbol to the escape stack
// and consume the next character as a literal (done in the next turn)
this.#escapeStack.push(char)
ArrayPrototypePush(this.#escapeStack, char)
return new Token({
kind: TokenKind.ESCAPE,
value: char,
Expand Down Expand Up @@ -327,7 +334,7 @@ class TapLexer {
const charHasBeenEscaped = this.#hasTheCurrentCharacterBeenEscaped()
if (this.#isComment || charHasBeenEscaped) {
if (charHasBeenEscaped) {
this.#escapeStack.pop()
ArrayPrototypePop(this.#escapeStack)
}

return new Token({
Expand Down Expand Up @@ -356,7 +363,7 @@ class TapLexer {
}
}

word = word.trim()
word = StringPrototypeTrim(word)

if (TapLexer.Keywords.has(word)) {
const token = this.#scanTAPKeyword(word)
Expand All @@ -381,10 +388,9 @@ class TapLexer {
}

#scanTAPKeyword (word) {
const isLastScannedTokenEOLorNewLine = StringPrototypeIncludes(
[TokenKind.EOL, TokenKind.NEWLINE],
this.#lastScannedToken.kind
)
const isLastScannedTokenEOLorNewLine =
TokenKind.EOL === this.#lastScannedToken.kind ||
TokenKind.NEWLINE === this.#lastScannedToken.kind

if (word === 'TAP' && isLastScannedTokenEOLorNewLine) {
return new Token({
Expand Down Expand Up @@ -480,7 +486,7 @@ class TapLexer {
// We deliberately do not include "# \ + -"" in this list
// these are used for comments/reasons explanations, pragma and escape characters
// whitespace is not included because it is handled separately
return '!"$%&\'()*,./:;<=>?@[]^_`{|}~'.indexOf(char) > -1
return StringPrototypeIncludes('!"$%&\'()*,./:;<=>?@[]^_`{|}~', char)
}

#isWhitespaceSymbol (char) {
Expand Down

0 comments on commit 4e778bc

Please sign in to comment.