@@ -11,8 +11,10 @@ import (
11
11
"github.com/graphql-go/graphql/language/source"
12
12
)
13
13
14
+ type TokenKind int
15
+
14
16
const (
15
- EOF = iota + 1
17
+ EOF TokenKind = iota + 1
16
18
BANG
17
19
DOLLAR
18
20
PAREN_L
@@ -51,61 +53,33 @@ const (
51
53
DIRECTIVE = "directive"
52
54
)
53
55
54
- var TokenKind map [int ]int
55
- var tokenDescription map [int ]string
56
-
57
- func init () {
58
- TokenKind = make (map [int ]int )
59
- {
60
- TokenKind [EOF ] = EOF
61
- TokenKind [BANG ] = BANG
62
- TokenKind [DOLLAR ] = DOLLAR
63
- TokenKind [PAREN_L ] = PAREN_L
64
- TokenKind [PAREN_R ] = PAREN_R
65
- TokenKind [SPREAD ] = SPREAD
66
- TokenKind [COLON ] = COLON
67
- TokenKind [EQUALS ] = EQUALS
68
- TokenKind [AT ] = AT
69
- TokenKind [BRACKET_L ] = BRACKET_L
70
- TokenKind [BRACKET_R ] = BRACKET_R
71
- TokenKind [BRACE_L ] = BRACE_L
72
- TokenKind [PIPE ] = PIPE
73
- TokenKind [BRACE_R ] = BRACE_R
74
- TokenKind [NAME ] = NAME
75
- TokenKind [INT ] = INT
76
- TokenKind [FLOAT ] = FLOAT
77
- TokenKind [STRING ] = STRING
78
- TokenKind [BLOCK_STRING ] = BLOCK_STRING
79
- }
80
- tokenDescription = make (map [int ]string )
81
- {
82
- tokenDescription [TokenKind [EOF ]] = "EOF"
83
- tokenDescription [TokenKind [BANG ]] = "!"
84
- tokenDescription [TokenKind [DOLLAR ]] = "$"
85
- tokenDescription [TokenKind [PAREN_L ]] = "("
86
- tokenDescription [TokenKind [PAREN_R ]] = ")"
87
- tokenDescription [TokenKind [SPREAD ]] = "..."
88
- tokenDescription [TokenKind [COLON ]] = ":"
89
- tokenDescription [TokenKind [EQUALS ]] = "="
90
- tokenDescription [TokenKind [AT ]] = "@"
91
- tokenDescription [TokenKind [BRACKET_L ]] = "["
92
- tokenDescription [TokenKind [BRACKET_R ]] = "]"
93
- tokenDescription [TokenKind [BRACE_L ]] = "{"
94
- tokenDescription [TokenKind [PIPE ]] = "|"
95
- tokenDescription [TokenKind [BRACE_R ]] = "}"
96
- tokenDescription [TokenKind [NAME ]] = "Name"
97
- tokenDescription [TokenKind [INT ]] = "Int"
98
- tokenDescription [TokenKind [FLOAT ]] = "Float"
99
- tokenDescription [TokenKind [STRING ]] = "String"
100
- tokenDescription [TokenKind [BLOCK_STRING ]] = "BlockString"
101
- tokenDescription [TokenKind [AMP ]] = "&"
102
- }
56
+ var tokenDescription = map [TokenKind ]string {
57
+ EOF : "EOF" ,
58
+ BANG : "!" ,
59
+ DOLLAR : "$" ,
60
+ PAREN_L : "(" ,
61
+ PAREN_R : ")" ,
62
+ SPREAD : "..." ,
63
+ COLON : ":" ,
64
+ EQUALS : "=" ,
65
+ AT : "@" ,
66
+ BRACKET_L : "[" ,
67
+ BRACKET_R : "]" ,
68
+ BRACE_L : "{" ,
69
+ PIPE : "|" ,
70
+ BRACE_R : "}" ,
71
+ NAME : "Name" ,
72
+ INT : "Int" ,
73
+ FLOAT : "Float" ,
74
+ STRING : "String" ,
75
+ BLOCK_STRING : "BlockString" ,
76
+ AMP : "&" ,
103
77
}
104
78
105
79
// Token is a representation of a lexed Token. Value only appears for non-punctuation
106
80
// tokens: NAME, INT, FLOAT, and STRING.
107
81
type Token struct {
108
- Kind int
82
+ Kind TokenKind
109
83
Start int
110
84
End int
111
85
Value string
@@ -151,7 +125,7 @@ func readName(source *source.Source, position, runePosition int) Token {
151
125
break
152
126
}
153
127
}
154
- return makeToken (TokenKind [ NAME ] , runePosition , endRune , string (body [position :endByte ]))
128
+ return makeToken (NAME , runePosition , endRune , string (body [position :endByte ]))
155
129
}
156
130
157
131
// Reads a number token from the source file, either a float
@@ -207,9 +181,9 @@ func readNumber(s *source.Source, start int, firstCode rune, codeLength int) (To
207
181
}
208
182
position = p
209
183
}
210
- kind := TokenKind [ INT ]
184
+ kind := INT
211
185
if isFloat {
212
- kind = TokenKind [ FLOAT ]
186
+ kind = FLOAT
213
187
}
214
188
215
189
return makeToken (kind , start , position , string (body [start :position ])), nil
@@ -328,7 +302,7 @@ func readString(s *source.Source, start int) (Token, error) {
328
302
stringContent := body [chunkStart :position ]
329
303
valueBuffer .Write (stringContent )
330
304
value := valueBuffer .String ()
331
- return makeToken (TokenKind [ STRING ] , start , position + 1 , value ), nil
305
+ return makeToken (STRING , start , position + 1 , value ), nil
332
306
}
333
307
334
308
// readBlockString reads a block string token from the source file.
@@ -357,7 +331,7 @@ func readBlockString(s *source.Source, start int) (Token, error) {
357
331
stringContent := body [chunkStart :position ]
358
332
valueBuffer .Write (stringContent )
359
333
value := blockStringValue (valueBuffer .String ())
360
- return makeToken (TokenKind [ BLOCK_STRING ] , start , position + 3 , value ), nil
334
+ return makeToken (BLOCK_STRING , start , position + 3 , value ), nil
361
335
}
362
336
}
363
337
@@ -490,7 +464,7 @@ func char2hex(a rune) int {
490
464
return - 1
491
465
}
492
466
493
- func makeToken (kind int , start int , end int , value string ) Token {
467
+ func makeToken (kind TokenKind , start int , end int , value string ) Token {
494
468
return Token {Kind : kind , Start : start , End : end , Value : value }
495
469
}
496
470
@@ -512,7 +486,7 @@ func readToken(s *source.Source, fromPosition int) (Token, error) {
512
486
bodyLength := len (body )
513
487
position , runePosition := positionAfterWhitespace (body , fromPosition )
514
488
if position >= bodyLength {
515
- return makeToken (TokenKind [ EOF ] , position , position , "" ), nil
489
+ return makeToken (EOF , position , position , "" ), nil
516
490
}
517
491
code , codeLength := runeAt (body , position )
518
492
@@ -524,51 +498,51 @@ func readToken(s *source.Source, fromPosition int) (Token, error) {
524
498
switch code {
525
499
// !
526
500
case '!' :
527
- return makeToken (TokenKind [ BANG ] , position , position + 1 , "" ), nil
501
+ return makeToken (BANG , position , position + 1 , "" ), nil
528
502
// $
529
503
case '$' :
530
- return makeToken (TokenKind [ DOLLAR ] , position , position + 1 , "" ), nil
504
+ return makeToken (DOLLAR , position , position + 1 , "" ), nil
531
505
// &
532
506
case '&' :
533
- return makeToken (TokenKind [ AMP ] , position , position + 1 , "" ), nil
507
+ return makeToken (AMP , position , position + 1 , "" ), nil
534
508
// (
535
509
case '(' :
536
- return makeToken (TokenKind [ PAREN_L ] , position , position + 1 , "" ), nil
510
+ return makeToken (PAREN_L , position , position + 1 , "" ), nil
537
511
// )
538
512
case ')' :
539
- return makeToken (TokenKind [ PAREN_R ] , position , position + 1 , "" ), nil
513
+ return makeToken (PAREN_R , position , position + 1 , "" ), nil
540
514
// .
541
515
case '.' :
542
516
next1 , _ := runeAt (body , position + 1 )
543
517
next2 , _ := runeAt (body , position + 2 )
544
518
if next1 == '.' && next2 == '.' {
545
- return makeToken (TokenKind [ SPREAD ] , position , position + 3 , "" ), nil
519
+ return makeToken (SPREAD , position , position + 3 , "" ), nil
546
520
}
547
521
break
548
522
// :
549
523
case ':' :
550
- return makeToken (TokenKind [ COLON ] , position , position + 1 , "" ), nil
524
+ return makeToken (COLON , position , position + 1 , "" ), nil
551
525
// =
552
526
case '=' :
553
- return makeToken (TokenKind [ EQUALS ] , position , position + 1 , "" ), nil
527
+ return makeToken (EQUALS , position , position + 1 , "" ), nil
554
528
// @
555
529
case '@' :
556
- return makeToken (TokenKind [ AT ] , position , position + 1 , "" ), nil
530
+ return makeToken (AT , position , position + 1 , "" ), nil
557
531
// [
558
532
case '[' :
559
- return makeToken (TokenKind [ BRACKET_L ] , position , position + 1 , "" ), nil
533
+ return makeToken (BRACKET_L , position , position + 1 , "" ), nil
560
534
// ]
561
535
case ']' :
562
- return makeToken (TokenKind [ BRACKET_R ] , position , position + 1 , "" ), nil
536
+ return makeToken (BRACKET_R , position , position + 1 , "" ), nil
563
537
// {
564
538
case '{' :
565
- return makeToken (TokenKind [ BRACE_L ] , position , position + 1 , "" ), nil
539
+ return makeToken (BRACE_L , position , position + 1 , "" ), nil
566
540
// |
567
541
case '|' :
568
- return makeToken (TokenKind [ PIPE ] , position , position + 1 , "" ), nil
542
+ return makeToken (PIPE , position , position + 1 , "" ), nil
569
543
// }
570
544
case '}' :
571
- return makeToken (TokenKind [ BRACE_R ] , position , position + 1 , "" ), nil
545
+ return makeToken (BRACE_R , position , position + 1 , "" ), nil
572
546
// A-Z
573
547
case 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' ,
574
548
'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' :
@@ -677,6 +651,6 @@ func GetTokenDesc(token Token) string {
677
651
return fmt .Sprintf ("%s \" %s\" " , GetTokenKindDesc (token .Kind ), token .Value )
678
652
}
679
653
680
- func GetTokenKindDesc (kind int ) string {
654
+ func GetTokenKindDesc (kind TokenKind ) string {
681
655
return tokenDescription [kind ]
682
656
}
0 commit comments