Browse Source

Fix broken lexer test

master
Dylan Baker 6 years ago
parent
commit
0bd9afe74b
3 changed files with 12 additions and 11 deletions
  1. 8
    8
      src/lexer.js
  2. 2
    1
      src/tokenStream.js
  3. 2
    2
      test/lexer.js

+ 8
- 8
src/lexer.js View File

@@ -5,30 +5,30 @@ module.exports = class Lexer {
5 5
   scan(source) {
6 6
     let pos = 0
7 7
     let line = 1
8
-    let tokens = new TokenStream()
8
+    let tokenStream = new TokenStream()
9 9
 
10 10
     while (pos < source.length) {
11 11
       if (source[pos].match(/\(/)) {
12
-        tokens.push({
12
+        tokenStream.tokens.push({
13 13
           type: tokenTypes.OPAREN,
14 14
           line: line,
15 15
         })
16 16
         pos++
17 17
       } else if (source[pos].match(/\)/)) {
18
-        tokens.push({
18
+        tokenStream.tokens.push({
19 19
           type: tokenTypes.CPAREN,
20 20
           line: line,
21 21
         })
22 22
         pos++
23 23
       } else if (source[pos].match(/['"]/)) {
24
-        tokens.push({
24
+        tokenStream.tokens.push({
25 25
           type: tokenTypes.QUOTE,
26 26
           line: line,
27 27
         })
28 28
         pos++
29 29
       } else if (source[pos].match(/:/)) {
30 30
         let value = /:([^()'"\s]+)/.exec(source.slice(pos))[1].trim()
31
-        tokens.push({
31
+        tokenStream.tokens.push({
32 32
           type: tokenTypes.ATTRIBUTE,
33 33
           line: line,
34 34
           value: value,
@@ -41,7 +41,7 @@ module.exports = class Lexer {
41 41
         pos++
42 42
       } else {
43 43
         let value = /[^()"':]+/.exec(source.slice(pos))[0]
44
-        tokens.push({
44
+        tokenStream.tokens.push({
45 45
           type: tokenTypes.LITERAL,
46 46
           line: line,
47 47
           value: value.trim(),
@@ -50,10 +50,10 @@ module.exports = class Lexer {
50 50
       }
51 51
     }
52 52
 
53
-    tokens.push({
53
+    tokenStream.tokens.push({
54 54
       type: tokenTypes.EOF,
55 55
       line: line,
56 56
     })
57
-    return tokens
57
+    return tokenStream
58 58
   }
59 59
 }

+ 2
- 1
src/tokenStream.js View File

@@ -1,6 +1,7 @@
1 1
 module.exports = class TokenStream extends Array {
2 2
   constructor() {
3 3
     super()
4
+    this.tokens = []
4 5
     this.position = 0
5 6
   }
6 7
 
@@ -17,6 +18,6 @@ module.exports = class TokenStream extends Array {
17 18
   }
18 19
 
19 20
   peek(step = 0) {
20
-    return this[this.position + step]
21
+    return this.tokens[this.position + step]
21 22
   }
22 23
 }

+ 2
- 2
test/lexer.js View File

@@ -8,7 +8,7 @@ test('lexes simple template correctly', t => {
8 8
   const lexer = new Lexer()
9 9
   let tokens = lexer.scan(
10 10
     '(div :class "foobar" (p "Lorem ipsum dolor sit amet"))',
11
-  )
11
+  ).tokens
12 12
   t.deepEqual(tokens.map(token => token.type), [
13 13
     tt.OPAREN,
14 14
     tt.LITERAL,
@@ -36,7 +36,7 @@ test('keeps track of line numbers', t => {
36 36
   let tokens = lexer.scan(`(
37 37
     (div :class "foobar"
38 38
       (p :class "bazquux"))
39
-  `)
39
+  `).tokens
40 40
   t.equal(tokens[2].line, 2)
41 41
   t.equal(tokens[7].line, 3)
42 42
 })

Loading…
Cancel
Save