token.go

  1package lexer
  2
  3import (
  4	"strconv"
  5
  6	"github.com/vektah/gqlparser/ast"
  7)
  8
  9const (
 10	Invalid Type = iota
 11	EOF
 12	Bang
 13	Dollar
 14	Amp
 15	ParenL
 16	ParenR
 17	Spread
 18	Colon
 19	Equals
 20	At
 21	BracketL
 22	BracketR
 23	BraceL
 24	BraceR
 25	Pipe
 26	Name
 27	Int
 28	Float
 29	String
 30	BlockString
 31	Comment
 32)
 33
 34func (t Type) Name() string {
 35	switch t {
 36	case Invalid:
 37		return "Invalid"
 38	case EOF:
 39		return "EOF"
 40	case Bang:
 41		return "Bang"
 42	case Dollar:
 43		return "Dollar"
 44	case Amp:
 45		return "Amp"
 46	case ParenL:
 47		return "ParenL"
 48	case ParenR:
 49		return "ParenR"
 50	case Spread:
 51		return "Spread"
 52	case Colon:
 53		return "Colon"
 54	case Equals:
 55		return "Equals"
 56	case At:
 57		return "At"
 58	case BracketL:
 59		return "BracketL"
 60	case BracketR:
 61		return "BracketR"
 62	case BraceL:
 63		return "BraceL"
 64	case BraceR:
 65		return "BraceR"
 66	case Pipe:
 67		return "Pipe"
 68	case Name:
 69		return "Name"
 70	case Int:
 71		return "Int"
 72	case Float:
 73		return "Float"
 74	case String:
 75		return "String"
 76	case BlockString:
 77		return "BlockString"
 78	case Comment:
 79		return "Comment"
 80	}
 81	return "Unknown " + strconv.Itoa(int(t))
 82}
 83
 84func (t Type) String() string {
 85	switch t {
 86	case Invalid:
 87		return "<Invalid>"
 88	case EOF:
 89		return "<EOF>"
 90	case Bang:
 91		return "!"
 92	case Dollar:
 93		return "$"
 94	case Amp:
 95		return "&"
 96	case ParenL:
 97		return "("
 98	case ParenR:
 99		return ")"
100	case Spread:
101		return "..."
102	case Colon:
103		return ":"
104	case Equals:
105		return "="
106	case At:
107		return "@"
108	case BracketL:
109		return "["
110	case BracketR:
111		return "]"
112	case BraceL:
113		return "{"
114	case BraceR:
115		return "}"
116	case Pipe:
117		return "|"
118	case Name:
119		return "Name"
120	case Int:
121		return "Int"
122	case Float:
123		return "Float"
124	case String:
125		return "String"
126	case BlockString:
127		return "BlockString"
128	case Comment:
129		return "Comment"
130	}
131	return "Unknown " + strconv.Itoa(int(t))
132}
133
134// Kind represents a type of token. The types are predefined as constants.
135type Type int
136
137type Token struct {
138	Kind  Type         // The token type.
139	Value string       // The literal value consumed.
140	Pos   ast.Position // The file and line this token was read from
141}
142
143func (t Token) String() string {
144	if t.Value != "" {
145		return t.Kind.String() + " " + strconv.Quote(t.Value)
146	}
147	return t.Kind.String()
148}