@@ -24,8 +24,8 @@ const TokenKind = {
24
24
} ;
25
25
26
26
class Token {
27
- constructor ( { type , value, stream } ) {
28
- this . type = type ;
27
+ constructor ( { kind , value, stream } ) {
28
+ this . kind = kind ;
29
29
this . value = value ;
30
30
this . location = {
31
31
line : stream . line ,
@@ -150,7 +150,7 @@ class TapLexer {
150
150
this . escapeStack = [ ] ;
151
151
152
152
this . lastScannedToken = new Token ( {
153
- type : TokenKind . EOL ,
153
+ kind : TokenKind . EOL ,
154
154
value : TokenKind . EOL ,
155
155
stream : this . source ,
156
156
} ) ;
@@ -161,7 +161,7 @@ class TapLexer {
161
161
let token = this . scanToken ( ) ;
162
162
163
163
// remember the last scanned token (except for whitespace)
164
- if ( token . type !== TokenKind . WHITESPACE ) {
164
+ if ( token . kind !== TokenKind . WHITESPACE ) {
165
165
this . lastScannedToken = token ;
166
166
}
167
167
yield token ;
@@ -223,27 +223,28 @@ class TapLexer {
223
223
// escape chars from the stack and start fresh for the next line
224
224
this . escapeStack = [ ] ;
225
225
return new Token ( {
226
- type : TokenKind . EOL ,
226
+ kind : TokenKind . EOL ,
227
227
value : char ,
228
228
stream : this . source ,
229
229
} ) ;
230
230
}
231
231
232
232
scanEOF ( ) {
233
233
return new Token ( {
234
- type : TokenKind . EOF ,
234
+ kind : TokenKind . EOF ,
235
235
value : TokenKind . EOF ,
236
236
stream : this . source ,
237
237
} ) ;
238
238
}
239
239
240
240
scanEscapeSymbol ( char ) {
241
- // if the escape symbol has been escaped, then it is not an escape symbol
242
- // consume it as a literal.
243
- if ( this . hasTheCurrentCharacterBeenEscaped ( char ) ) {
241
+ // if the escape symbol has been escaped (by previous symbol),
242
+ // or if the next symbol is a whitespace symbol,
243
+ // then consume it as a literal.
244
+ if ( this . hasTheCurrentCharacterBeenEscaped ( ) || this . source . peek ( 1 ) === TokenKind . WHITESPACE ) {
244
245
this . escapeStack . pop ( ) ;
245
246
return new Token ( {
246
- type : TokenKind . LITERAL ,
247
+ kind : TokenKind . LITERAL ,
247
248
value : char ,
248
249
stream : this . source ,
249
250
} ) ;
@@ -254,15 +255,15 @@ class TapLexer {
254
255
// and consume the next character as a literal (done in the next turn)
255
256
this . escapeStack . push ( char ) ;
256
257
return new Token ( {
257
- type : TokenKind . ESCAPE ,
258
+ kind : TokenKind . ESCAPE ,
258
259
value : char ,
259
260
stream : this . source ,
260
261
} ) ;
261
262
}
262
263
263
264
scanWhitespace ( char ) {
264
265
return new Token ( {
265
- type : TokenKind . WHITESPACE ,
266
+ kind : TokenKind . WHITESPACE ,
266
267
value : char ,
267
268
stream : this . source ,
268
269
} ) ;
@@ -279,15 +280,15 @@ class TapLexer {
279
280
}
280
281
281
282
return new Token ( {
282
- type : TokenKind . DASH ,
283
+ kind : TokenKind . DASH ,
283
284
value : char ,
284
285
stream : this . source ,
285
286
} ) ;
286
287
}
287
288
288
289
scanPlus ( char ) {
289
290
return new Token ( {
290
- type : TokenKind . PLUS ,
291
+ kind : TokenKind . PLUS ,
291
292
value : char ,
292
293
stream : this . source ,
293
294
} ) ;
@@ -296,25 +297,25 @@ class TapLexer {
296
297
scanHash ( char ) {
297
298
// if last token is whitespace or EOL, we consume it as a comment
298
299
if (
299
- this . lastScannedToken . type === TokenKind . WHITESPACE ||
300
- this . lastScannedToken . type === TokenKind . EOL
300
+ this . lastScannedToken . kind === TokenKind . WHITESPACE ||
301
+ this . lastScannedToken . kind === TokenKind . EOL
301
302
) {
302
303
this . isComment = true ;
303
304
return new Token ( {
304
- type : TokenKind . COMMENT ,
305
+ kind : TokenKind . COMMENT ,
305
306
value : char ,
306
307
stream : this . source ,
307
308
} ) ;
308
309
}
309
310
310
- const charHasBeenEscaped = this . hasTheCurrentCharacterBeenEscaped ( char ) ;
311
+ const charHasBeenEscaped = this . hasTheCurrentCharacterBeenEscaped ( ) ;
311
312
if ( this . isComment || charHasBeenEscaped ) {
312
313
if ( charHasBeenEscaped ) {
313
314
this . escapeStack . pop ( ) ;
314
315
}
315
316
316
317
return new Token ( {
317
- type : TokenKind . LITERAL ,
318
+ kind : TokenKind . LITERAL ,
318
319
value : char ,
319
320
stream : this . source ,
320
321
} ) ;
@@ -323,7 +324,7 @@ class TapLexer {
323
324
// when a hash is found, we assume the rest of the line is a comment
324
325
this . isComment = true ;
325
326
return new Token ( {
326
- type : TokenKind . HASH ,
327
+ kind : TokenKind . HASH ,
327
328
value : char ,
328
329
stream : this . source ,
329
330
} ) ;
@@ -349,7 +350,7 @@ class TapLexer {
349
350
this . error (
350
351
`Exepcted YAML end block: ...` ,
351
352
new Token ( {
352
- type : TokenKind . EOF ,
353
+ kind : TokenKind . EOF ,
353
354
value : TokenKind . EOF ,
354
355
stream : this . source ,
355
356
} )
@@ -358,7 +359,7 @@ class TapLexer {
358
359
}
359
360
360
361
return new Token ( {
361
- type : TokenKind . TAP_YAML ,
362
+ kind : TokenKind . TAP_YAML ,
362
363
value : yaml , // don't trim on purpose!
363
364
stream : this . source ,
364
365
} ) ;
@@ -377,7 +378,7 @@ class TapLexer {
377
378
comment = comment . replace ( / ^ # / , '' ) ;
378
379
379
380
return new Token ( {
380
- type : TokenKind . COMMENT ,
381
+ kind : TokenKind . COMMENT ,
381
382
value : comment ,
382
383
stream : this . source ,
383
384
} ) ;
@@ -397,7 +398,7 @@ class TapLexer {
397
398
description = description . replace ( / ^ - / , '' ) ;
398
399
399
400
return new Token ( {
400
- type : TokenKind . COMMENT ,
401
+ kind : TokenKind . COMMENT ,
401
402
value : description . trim ( ) ,
402
403
stream : this . source ,
403
404
} ) ;
@@ -444,60 +445,60 @@ class TapLexer {
444
445
}
445
446
446
447
return new Token ( {
447
- type : TokenKind . LITERAL ,
448
+ kind : TokenKind . LITERAL ,
448
449
value : word ,
449
450
stream : this . source ,
450
451
} ) ;
451
452
}
452
453
453
454
scanTAPkeyword ( word ) {
454
- if ( word === 'TAP' && this . lastScannedToken . type === TokenKind . EOL ) {
455
+ if ( word === 'TAP' && this . lastScannedToken . kind === TokenKind . EOL ) {
455
456
return new Token ( {
456
- type : TokenKind . TAP ,
457
+ kind : TokenKind . TAP ,
457
458
value : word ,
458
459
stream : this . source ,
459
460
} ) ;
460
461
}
461
462
462
- if ( word === 'version' && this . lastScannedToken . type === TokenKind . TAP ) {
463
+ if ( word === 'version' && this . lastScannedToken . kind === TokenKind . TAP ) {
463
464
return new Token ( {
464
- type : TokenKind . TAP_VERSION ,
465
+ kind : TokenKind . TAP_VERSION ,
465
466
value : word ,
466
467
stream : this . source ,
467
468
} ) ;
468
469
}
469
470
470
- if ( word === '..' && this . lastScannedToken . type === TokenKind . NUMERIC ) {
471
+ if ( word === '..' && this . lastScannedToken . kind === TokenKind . NUMERIC ) {
471
472
return new Token ( {
472
- type : TokenKind . TAP_PLAN ,
473
+ kind : TokenKind . TAP_PLAN ,
473
474
value : word ,
474
475
stream : this . source ,
475
476
} ) ;
476
477
}
477
478
478
- if ( word === 'not' && this . lastScannedToken . type === TokenKind . EOL ) {
479
+ if ( word === 'not' && this . lastScannedToken . kind === TokenKind . EOL ) {
479
480
return new Token ( {
480
- type : TokenKind . TAP_TEST_NOTOK ,
481
+ kind : TokenKind . TAP_TEST_NOTOK ,
481
482
value : word ,
482
483
stream : this . source ,
483
484
} ) ;
484
485
}
485
486
486
487
if (
487
488
word === 'ok' &&
488
- ( this . lastScannedToken . type === TokenKind . TAP_TEST_NOTOK ||
489
- this . lastScannedToken . type === TokenKind . EOL )
489
+ ( this . lastScannedToken . kind === TokenKind . TAP_TEST_NOTOK ||
490
+ this . lastScannedToken . kind === TokenKind . EOL )
490
491
) {
491
492
return new Token ( {
492
- type : TokenKind . TAP_TEST_OK ,
493
+ kind : TokenKind . TAP_TEST_OK ,
493
494
value : word ,
494
495
stream : this . source ,
495
496
} ) ;
496
497
}
497
498
498
- if ( word === 'pragma' && this . lastScannedToken . type === TokenKind . EOL ) {
499
+ if ( word === 'pragma' && this . lastScannedToken . kind === TokenKind . EOL ) {
499
500
return new Token ( {
500
- type : TokenKind . TAP_PRAGMA ,
501
+ kind : TokenKind . TAP_PRAGMA ,
501
502
value : word ,
502
503
stream : this . source ,
503
504
} ) ;
@@ -518,13 +519,13 @@ class TapLexer {
518
519
}
519
520
}
520
521
return new Token ( {
521
- type : TokenKind . NUMERIC ,
522
+ kind : TokenKind . NUMERIC ,
522
523
value : number ,
523
524
stream : this . source ,
524
525
} ) ;
525
526
}
526
527
527
- hasTheCurrentCharacterBeenEscaped ( char ) {
528
+ hasTheCurrentCharacterBeenEscaped ( ) {
528
529
// use the escapeStack to keep track of the escape characters
529
530
return this . escapeStack . length > 0 ;
530
531
}
0 commit comments