diff options
Diffstat (limited to 'vendor/github.com/hashicorp/hil/scanner/token.go')
-rw-r--r-- | vendor/github.com/hashicorp/hil/scanner/token.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/hil/scanner/token.go b/vendor/github.com/hashicorp/hil/scanner/token.go new file mode 100644 index 0000000..b6c82ae --- /dev/null +++ b/vendor/github.com/hashicorp/hil/scanner/token.go | |||
@@ -0,0 +1,105 @@ | |||
1 | package scanner | ||
2 | |||
3 | import ( | ||
4 | "fmt" | ||
5 | |||
6 | "github.com/hashicorp/hil/ast" | ||
7 | ) | ||
8 | |||
9 | type Token struct { | ||
10 | Type TokenType | ||
11 | Content string | ||
12 | Pos ast.Pos | ||
13 | } | ||
14 | |||
15 | //go:generate stringer -type=TokenType | ||
16 | type TokenType rune | ||
17 | |||
18 | const ( | ||
19 | // Raw string data outside of ${ .. } sequences | ||
20 | LITERAL TokenType = 'o' | ||
21 | |||
22 | // STRING is like a LITERAL but it's inside a quoted string | ||
23 | // within a ${ ... } sequence, and so it can contain backslash | ||
24 | // escaping. | ||
25 | STRING TokenType = 'S' | ||
26 | |||
27 | // Other Literals | ||
28 | INTEGER TokenType = 'I' | ||
29 | FLOAT TokenType = 'F' | ||
30 | BOOL TokenType = 'B' | ||
31 | |||
32 | BEGIN TokenType = '$' // actually "${" | ||
33 | END TokenType = '}' | ||
34 | OQUOTE TokenType = '“' // Opening quote of a nested quoted sequence | ||
35 | CQUOTE TokenType = '”' // Closing quote of a nested quoted sequence | ||
36 | OPAREN TokenType = '(' | ||
37 | CPAREN TokenType = ')' | ||
38 | OBRACKET TokenType = '[' | ||
39 | CBRACKET TokenType = ']' | ||
40 | COMMA TokenType = ',' | ||
41 | |||
42 | IDENTIFIER TokenType = 'i' | ||
43 | |||
44 | PERIOD TokenType = '.' | ||
45 | PLUS TokenType = '+' | ||
46 | MINUS TokenType = '-' | ||
47 | STAR TokenType = '*' | ||
48 | SLASH TokenType = '/' | ||
49 | PERCENT TokenType = '%' | ||
50 | |||
51 | AND TokenType = '∧' | ||
52 | OR TokenType = '∨' | ||
53 | BANG TokenType = '!' | ||
54 | |||
55 | EQUAL TokenType = '=' | ||
56 | NOTEQUAL TokenType = '≠' | ||
57 | GT TokenType = '>' | ||
58 | LT TokenType = '<' | ||
59 | GTE TokenType = '≥' | ||
60 | LTE TokenType = '≤' | ||
61 | |||
62 | QUESTION TokenType = '?' | ||
63 | COLON TokenType = ':' | ||
64 | |||
65 | EOF TokenType = '␄' | ||
66 | |||
67 | // Produced for sequences that cannot be understood as valid tokens | ||
68 | // e.g. due to use of unrecognized punctuation. | ||
69 | INVALID TokenType = '�' | ||
70 | ) | ||
71 | |||
72 | func (t *Token) String() string { | ||
73 | switch t.Type { | ||
74 | case EOF: | ||
75 | return "end of string" | ||
76 | case INVALID: | ||
77 | return fmt.Sprintf("invalid sequence %q", t.Content) | ||
78 | case INTEGER: | ||
79 | return fmt.Sprintf("integer %s", t.Content) | ||
80 | case FLOAT: | ||
81 | return fmt.Sprintf("float %s", t.Content) | ||
82 | case STRING: | ||
83 | return fmt.Sprintf("string %q", t.Content) | ||
84 | case LITERAL: | ||
85 | return fmt.Sprintf("literal %q", t.Content) | ||
86 | case OQUOTE: | ||
87 | return fmt.Sprintf("opening quote") | ||
88 | case CQUOTE: | ||
89 | return fmt.Sprintf("closing quote") | ||
90 | case AND: | ||
91 | return "&&" | ||
92 | case OR: | ||
93 | return "||" | ||
94 | case NOTEQUAL: | ||
95 | return "!=" | ||
96 | case GTE: | ||
97 | return ">=" | ||
98 | case LTE: | ||
99 | return "<=" | ||
100 | default: | ||
101 | // The remaining token types have content that | ||
102 | // speaks for itself. | ||
103 | return fmt.Sprintf("%q", t.Content) | ||
104 | } | ||
105 | } | ||