@@ -113,37 +113,63 @@ describe "SQL grammar", ->
113
113
expect (tokens[1 ]).toEqual value : ' Test' , scopes : [' source.sql' , ' string.quoted.double.sql' ]
114
114
expect (tokens[2 ]).toEqual value : ' "' , scopes : [' source.sql' , ' string.quoted.double.sql' , ' punctuation.definition.string.end.sql' ]
115
115
116
- it ' tokenizes the time type' , ->
117
- {tokens } = grammar .tokenizeLine (' TIME' )
118
- expect (tokens[0 ]).toEqual value : ' TIME' , scopes : [' source.sql' , ' storage.type.sql' ]
119
-
120
- {tokens } = grammar .tokenizeLine (' TIME WITH TIME ZONE' )
121
- expect (tokens[0 ]).toEqual value : ' TIME' , scopes : [' source.sql' , ' storage.type.sql' ]
122
- expect (tokens[2 ]).toEqual value : ' WITH TIME ZONE' , scopes : [' source.sql' , ' storage.type.sql' ]
123
-
124
- {tokens } = grammar .tokenizeLine (' TIME(1)WITHOUT TIME ZONE\' 23:00\' ' )
125
- expect (tokens[0 ]).toEqual value : ' TIME' , scopes : [' source.sql' , ' storage.type.sql' ]
126
- expect (tokens[2 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
127
- expect (tokens[4 ]).toEqual value : ' WITHOUT TIME ZONE' , scopes : [' source.sql' , ' storage.type.sql' ]
128
-
129
- it ' tokenizes the timestamp type' , ->
130
- {tokens } = grammar .tokenizeLine (' TIMESTAMP ( 12 ) WITH TIME ZONE' )
131
- expect (tokens[0 ]).toEqual value : ' TIMESTAMP' , scopes : [' source.sql' , ' storage.type.sql' ]
132
- expect (tokens[2 ]).toEqual value : ' 12' , scopes : [' source.sql' , ' constant.numeric.sql' ]
133
- expect (tokens[4 ]).toEqual value : ' WITH TIME ZONE' , scopes : [' source.sql' , ' storage.type.sql' ]
134
-
135
- it ' tokenizes the timestamptz type' , ->
136
- {tokens } = grammar .tokenizeLine (' timestamptz' )
137
- expect (tokens[0 ]).toEqual value : ' timestamptz' , scopes : [' source.sql' , ' storage.type.sql' ]
138
-
139
- {tokens } = grammar .tokenizeLine (' TIMESTAMPTZ(2)NOT NULL' )
140
- expect (tokens[0 ]).toEqual value : ' TIMESTAMPTZ' , scopes : [' source.sql' , ' storage.type.sql' ]
141
- expect (tokens[2 ]).toEqual value : ' 2' , scopes : [' source.sql' , ' constant.numeric.sql' ]
142
-
143
- it ' tokenizes the timetz type' , ->
144
- {tokens } = grammar .tokenizeLine (' timetz (2)' )
145
- expect (tokens[0 ]).toEqual value : ' timetz' , scopes : [' source.sql' , ' storage.type.sql' ]
146
- expect (tokens[2 ]).toEqual value : ' 2' , scopes : [' source.sql' , ' constant.numeric.sql' ]
116
+ it ' tokenizes storage types' , ->
117
+ lines = grammar .tokenizeLines ('''
118
+ datetime
119
+ double precision
120
+ integer
121
+ ''' )
122
+ expect (lines[0 ][0 ]).toEqual value : ' datetime' , scopes : [' source.sql' , ' storage.type.sql' ]
123
+ expect (lines[1 ][0 ]).toEqual value : ' double precision' , scopes : [' source.sql' , ' storage.type.sql' ]
124
+ expect (lines[2 ][0 ]).toEqual value : ' integer' , scopes : [' source.sql' , ' storage.type.sql' ]
125
+
126
+ it ' tokenizes storage types with an optional argument' , ->
127
+ lines = grammar .tokenizeLines ('''
128
+ bit varying
129
+ int()
130
+ timestamptz(1)
131
+ ''' )
132
+ expect (lines[0 ][0 ]).toEqual value : ' bit varying' , scopes : [' source.sql' , ' storage.type.sql' ]
133
+ expect (lines[1 ][0 ]).toEqual value : ' int' , scopes : [' source.sql' , ' storage.type.sql' ]
134
+ expect (lines[1 ][1 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.begin.sql' ]
135
+ expect (lines[1 ][2 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.end.sql' ]
136
+ expect (lines[2 ][0 ]).toEqual value : ' timestamptz' , scopes : [' source.sql' , ' storage.type.sql' ]
137
+ expect (lines[2 ][1 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.begin.sql' ]
138
+ expect (lines[2 ][2 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
139
+ expect (lines[2 ][3 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.end.sql' ]
140
+
141
+ it ' tokenizes storage types with two optional arguments' , ->
142
+ lines = grammar .tokenizeLines ('''
143
+ decimal
144
+ decimal(1)
145
+ numeric(1,1)
146
+ ''' )
147
+ expect (lines[0 ][0 ]).toEqual value : ' decimal' , scopes : [' source.sql' , ' storage.type.sql' ]
148
+ expect (lines[1 ][0 ]).toEqual value : ' decimal' , scopes : [' source.sql' , ' storage.type.sql' ]
149
+ expect (lines[1 ][1 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.begin.sql' ]
150
+ expect (lines[1 ][2 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
151
+ expect (lines[1 ][3 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.end.sql' ]
152
+ expect (lines[2 ][0 ]).toEqual value : ' numeric' , scopes : [' source.sql' , ' storage.type.sql' ]
153
+ expect (lines[2 ][1 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.begin.sql' ]
154
+ expect (lines[2 ][2 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
155
+ expect (lines[2 ][3 ]).toEqual value : ' ,' , scopes : [' source.sql' , ' punctuation.separator.parameters.comma.sql' ]
156
+ expect (lines[2 ][4 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
157
+ expect (lines[2 ][5 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.end.sql' ]
158
+
159
+ it ' tokenizes storage types with time zones' , ->
160
+ lines = grammar .tokenizeLines ('''
161
+ time
162
+ time(1) with time zone
163
+ timestamp without time zone
164
+ ''' )
165
+ expect (lines[0 ][0 ]).toEqual value : ' time' , scopes : [' source.sql' , ' storage.type.sql' ]
166
+ expect (lines[1 ][0 ]).toEqual value : ' time' , scopes : [' source.sql' , ' storage.type.sql' ]
167
+ expect (lines[1 ][1 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.begin.sql' ]
168
+ expect (lines[1 ][2 ]).toEqual value : ' 1' , scopes : [' source.sql' , ' constant.numeric.sql' ]
169
+ expect (lines[1 ][3 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.parameters.bracket.round.end.sql' ]
170
+ expect (lines[1 ][5 ]).toEqual value : ' with time zone' , scopes : [' source.sql' , ' storage.type.sql' ]
171
+ expect (lines[2 ][0 ]).toEqual value : ' timestamp' , scopes : [' source.sql' , ' storage.type.sql' ]
172
+ expect (lines[2 ][2 ]).toEqual value : ' without time zone' , scopes : [' source.sql' , ' storage.type.sql' ]
147
173
148
174
it ' tokenizes comments' , ->
149
175
{tokens } = grammar .tokenizeLine (' -- comment' )
@@ -167,3 +193,40 @@ describe "SQL grammar", ->
167
193
expect (tokens[3 ]).toEqual value : ' WITH ' , scopes : [' source.sql' , ' comment.block.sql' ]
168
194
expect (tokens[4 ]).toEqual value : ' */' , scopes : [' source.sql' , ' comment.block.sql' , ' punctuation.definition.comment.sql' ]
169
195
expect (tokens[6 ]).toEqual value : ' AND' , scopes : [' source.sql' , ' keyword.other.DML.sql' ]
196
+
197
+ describe ' punctuation' , ->
198
+ it ' tokenizes parentheses' , ->
199
+ {tokens } = grammar .tokenizeLine (' WHERE salary > (SELECT avg(salary) FROM employees)' )
200
+ expect (tokens[0 ]).toEqual value : ' WHERE' , scopes : [' source.sql' , ' keyword.other.DML.sql' ]
201
+ expect (tokens[1 ]).toEqual value : ' salary ' , scopes : [' source.sql' ]
202
+ expect (tokens[2 ]).toEqual value : ' >' , scopes : [' source.sql' , ' keyword.operator.comparison.sql' ]
203
+ expect (tokens[4 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.section.bracket.round.begin.sql' ]
204
+ expect (tokens[5 ]).toEqual value : ' SELECT' , scopes : [' source.sql' , ' keyword.other.DML.sql' ]
205
+ expect (tokens[7 ]).toEqual value : ' avg' , scopes : [' source.sql' , ' support.function.aggregate.sql' ]
206
+ expect (tokens[8 ]).toEqual value : ' (' , scopes : [' source.sql' , ' punctuation.definition.section.bracket.round.begin.sql' ]
207
+ expect (tokens[9 ]).toEqual value : ' salary' , scopes : [' source.sql' ]
208
+ expect (tokens[10 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.section.bracket.round.end.sql' ]
209
+ expect (tokens[12 ]).toEqual value : ' FROM' , scopes : [' source.sql' , ' keyword.other.DML.sql' ]
210
+ expect (tokens[13 ]).toEqual value : ' employees' , scopes : [' source.sql' ]
211
+ expect (tokens[14 ]).toEqual value : ' )' , scopes : [' source.sql' , ' punctuation.definition.section.bracket.round.end.sql' ]
212
+
213
+ it ' tokenizes commas' , ->
214
+ {tokens } = grammar .tokenizeLine (' name, year' )
215
+ expect (tokens[0 ]).toEqual value : ' name' , scopes : [' source.sql' ]
216
+ expect (tokens[1 ]).toEqual value : ' ,' , scopes : [' source.sql' , ' punctuation.separator.comma.sql' ]
217
+ expect (tokens[2 ]).toEqual value : ' year' , scopes : [' source.sql' ]
218
+
219
+ it ' tokenizes periods' , ->
220
+ {tokens } = grammar .tokenizeLine (' .' )
221
+ expect (tokens[0 ]).toEqual value : ' .' , scopes : [' source.sql' , ' punctuation.separator.period.sql' ]
222
+
223
+ {tokens } = grammar .tokenizeLine (' database.table' )
224
+ expect (tokens[0 ]).toEqual value : ' database' , scopes : [' source.sql' , ' constant.other.database-name.sql' ]
225
+ expect (tokens[1 ]).toEqual value : ' .' , scopes : [' source.sql' , ' punctuation.separator.period.sql' ]
226
+ expect (tokens[2 ]).toEqual value : ' table' , scopes : [' source.sql' , ' constant.other.table-name.sql' ]
227
+
228
+ it ' tokenizes semicolons' , ->
229
+ {tokens } = grammar .tokenizeLine (' ORDER BY year;' )
230
+ expect (tokens[0 ]).toEqual value : ' ORDER BY' , scopes : [' source.sql' , ' keyword.other.DML.sql' ]
231
+ expect (tokens[1 ]).toEqual value : ' year' , scopes : [' source.sql' ]
232
+ expect (tokens[2 ]).toEqual value : ' ;' , scopes : [' source.sql' , ' punctuation.terminator.statement.semicolon.sql' ]
0 commit comments