Skip to content

Commit dd57171

Browse files
committed
simplify lexer.TokenType
1 parent 21fe71d commit dd57171

File tree

3 files changed

+174
-200
lines changed

3 files changed

+174
-200
lines changed

language/lexer/lexer.go

Lines changed: 47 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ import (
1111
"github.com/graphql-go/graphql/language/source"
1212
)
1313

14+
type TokenKind int
15+
1416
const (
15-
EOF = iota + 1
17+
EOF TokenKind = iota + 1
1618
BANG
1719
DOLLAR
1820
PAREN_L
@@ -51,61 +53,33 @@ const (
5153
DIRECTIVE = "directive"
5254
)
5355

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: "&",
10377
}
10478

10579
// Token is a representation of a lexed Token. Value only appears for non-punctuation
10680
// tokens: NAME, INT, FLOAT, and STRING.
10781
type Token struct {
108-
Kind int
82+
Kind TokenKind
10983
Start int
11084
End int
11185
Value string
@@ -151,7 +125,7 @@ func readName(source *source.Source, position, runePosition int) Token {
151125
break
152126
}
153127
}
154-
return makeToken(TokenKind[NAME], runePosition, endRune, string(body[position:endByte]))
128+
return makeToken(NAME, runePosition, endRune, string(body[position:endByte]))
155129
}
156130

157131
// 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
207181
}
208182
position = p
209183
}
210-
kind := TokenKind[INT]
184+
kind := INT
211185
if isFloat {
212-
kind = TokenKind[FLOAT]
186+
kind = FLOAT
213187
}
214188

215189
return makeToken(kind, start, position, string(body[start:position])), nil
@@ -328,7 +302,7 @@ func readString(s *source.Source, start int) (Token, error) {
328302
stringContent := body[chunkStart:position]
329303
valueBuffer.Write(stringContent)
330304
value := valueBuffer.String()
331-
return makeToken(TokenKind[STRING], start, position+1, value), nil
305+
return makeToken(STRING, start, position+1, value), nil
332306
}
333307

334308
// readBlockString reads a block string token from the source file.
@@ -357,7 +331,7 @@ func readBlockString(s *source.Source, start int) (Token, error) {
357331
stringContent := body[chunkStart:position]
358332
valueBuffer.Write(stringContent)
359333
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
361335
}
362336
}
363337

@@ -490,7 +464,7 @@ func char2hex(a rune) int {
490464
return -1
491465
}
492466

493-
func makeToken(kind int, start int, end int, value string) Token {
467+
func makeToken(kind TokenKind, start int, end int, value string) Token {
494468
return Token{Kind: kind, Start: start, End: end, Value: value}
495469
}
496470

@@ -512,7 +486,7 @@ func readToken(s *source.Source, fromPosition int) (Token, error) {
512486
bodyLength := len(body)
513487
position, runePosition := positionAfterWhitespace(body, fromPosition)
514488
if position >= bodyLength {
515-
return makeToken(TokenKind[EOF], position, position, ""), nil
489+
return makeToken(EOF, position, position, ""), nil
516490
}
517491
code, codeLength := runeAt(body, position)
518492

@@ -524,51 +498,51 @@ func readToken(s *source.Source, fromPosition int) (Token, error) {
524498
switch code {
525499
// !
526500
case '!':
527-
return makeToken(TokenKind[BANG], position, position+1, ""), nil
501+
return makeToken(BANG, position, position+1, ""), nil
528502
// $
529503
case '$':
530-
return makeToken(TokenKind[DOLLAR], position, position+1, ""), nil
504+
return makeToken(DOLLAR, position, position+1, ""), nil
531505
// &
532506
case '&':
533-
return makeToken(TokenKind[AMP], position, position+1, ""), nil
507+
return makeToken(AMP, position, position+1, ""), nil
534508
// (
535509
case '(':
536-
return makeToken(TokenKind[PAREN_L], position, position+1, ""), nil
510+
return makeToken(PAREN_L, position, position+1, ""), nil
537511
// )
538512
case ')':
539-
return makeToken(TokenKind[PAREN_R], position, position+1, ""), nil
513+
return makeToken(PAREN_R, position, position+1, ""), nil
540514
// .
541515
case '.':
542516
next1, _ := runeAt(body, position+1)
543517
next2, _ := runeAt(body, position+2)
544518
if next1 == '.' && next2 == '.' {
545-
return makeToken(TokenKind[SPREAD], position, position+3, ""), nil
519+
return makeToken(SPREAD, position, position+3, ""), nil
546520
}
547521
break
548522
// :
549523
case ':':
550-
return makeToken(TokenKind[COLON], position, position+1, ""), nil
524+
return makeToken(COLON, position, position+1, ""), nil
551525
// =
552526
case '=':
553-
return makeToken(TokenKind[EQUALS], position, position+1, ""), nil
527+
return makeToken(EQUALS, position, position+1, ""), nil
554528
// @
555529
case '@':
556-
return makeToken(TokenKind[AT], position, position+1, ""), nil
530+
return makeToken(AT, position, position+1, ""), nil
557531
// [
558532
case '[':
559-
return makeToken(TokenKind[BRACKET_L], position, position+1, ""), nil
533+
return makeToken(BRACKET_L, position, position+1, ""), nil
560534
// ]
561535
case ']':
562-
return makeToken(TokenKind[BRACKET_R], position, position+1, ""), nil
536+
return makeToken(BRACKET_R, position, position+1, ""), nil
563537
// {
564538
case '{':
565-
return makeToken(TokenKind[BRACE_L], position, position+1, ""), nil
539+
return makeToken(BRACE_L, position, position+1, ""), nil
566540
// |
567541
case '|':
568-
return makeToken(TokenKind[PIPE], position, position+1, ""), nil
542+
return makeToken(PIPE, position, position+1, ""), nil
569543
// }
570544
case '}':
571-
return makeToken(TokenKind[BRACE_R], position, position+1, ""), nil
545+
return makeToken(BRACE_R, position, position+1, ""), nil
572546
// A-Z
573547
case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
574548
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z':
@@ -677,6 +651,6 @@ func GetTokenDesc(token Token) string {
677651
return fmt.Sprintf("%s \"%s\"", GetTokenKindDesc(token.Kind), token.Value)
678652
}
679653

680-
func GetTokenKindDesc(kind int) string {
654+
func GetTokenKindDesc(kind TokenKind) string {
681655
return tokenDescription[kind]
682656
}

0 commit comments

Comments
 (0)