@@ -25,24 +25,21 @@ void *tree_sitter_scala_external_scanner_create() {
25
25
return createStack ();
26
26
}
27
27
28
- void tree_sitter_scala_external_scanner_destroy (void * p ) {
29
- free (p );
28
+ void tree_sitter_scala_external_scanner_destroy (void * payload ) {
29
+ free (payload );
30
30
}
31
31
32
- void tree_sitter_scala_external_scanner_reset (void * p ) {
33
- resetStack ( p );
32
+ unsigned tree_sitter_scala_external_scanner_serialize (void * payload , char * buffer ) {
33
+ return serialiseStack ( payload , buffer );
34
34
}
35
35
36
- unsigned tree_sitter_scala_external_scanner_serialize (void * p , char * buffer ) {
37
- return serialiseStack (p , buffer );
38
- }
39
-
40
- void tree_sitter_scala_external_scanner_deserialize (void * p , const char * b ,
41
- unsigned n ) {
42
- deserialiseStack (p , b , n );
36
+ void tree_sitter_scala_external_scanner_deserialize (void * payload , const char * buffer ,
37
+ unsigned length ) {
38
+ deserialiseStack (payload , buffer , length );
43
39
}
44
40
45
41
static void advance (TSLexer * lexer ) { lexer -> advance (lexer , false); }
42
+
46
43
static void skip (TSLexer * lexer ) { lexer -> advance (lexer , true); }
47
44
48
45
static bool scan_string_content (TSLexer * lexer , bool is_multiline , bool has_interpolation ) {
@@ -63,24 +60,26 @@ static bool scan_string_content(TSLexer *lexer, bool is_multiline, bool has_inte
63
60
if (is_multiline && has_interpolation ) {
64
61
lexer -> result_symbol = INTERPOLATED_MULTILINE_STRING_MIDDLE ;
65
62
return true;
66
- } else if (has_interpolation ){
63
+ }
64
+ if (has_interpolation ) {
67
65
lexer -> result_symbol = INTERPOLATED_STRING_MIDDLE ;
68
66
return true;
69
- } else {
70
- advance (lexer );
71
67
}
68
+ advance (lexer );
72
69
} else {
73
70
closing_quote_count = 0 ;
74
71
if (lexer -> lookahead == '\\' ) {
75
72
advance (lexer );
76
- if (lexer -> lookahead != 0 ) advance (lexer );
73
+ if (!lexer -> eof (lexer )) {
74
+ advance (lexer );
75
+ }
77
76
} else if (lexer -> lookahead == '\n' ) {
78
77
if (is_multiline ) {
79
78
advance (lexer );
80
79
} else {
81
80
return false;
82
81
}
83
- } else if (lexer -> lookahead == 0 ) {
82
+ } else if (lexer -> eof ( lexer ) ) {
84
83
return false;
85
84
} else {
86
85
advance (lexer );
@@ -101,6 +100,16 @@ static bool detect_comment_start(TSLexer *lexer) {
101
100
return false;
102
101
}
103
102
103
+ static bool scan_word (TSLexer * lexer , const char * const word ) {
104
+ for (int i = 0 ; word [i ] != '\0' ; i ++ ) {
105
+ if (lexer -> lookahead != word [i ]) {
106
+ return false;
107
+ }
108
+ advance (lexer );
109
+ }
110
+ return !iswalnum (lexer -> lookahead );
111
+ }
112
+
104
113
bool tree_sitter_scala_external_scanner_scan (void * payload , TSLexer * lexer ,
105
114
const bool * valid_symbols ) {
106
115
ScannerStack * stack = (ScannerStack * )payload ;
@@ -114,8 +123,9 @@ bool tree_sitter_scala_external_scanner_scan(void *payload, TSLexer *lexer,
114
123
newline_count ++ ;
115
124
indentation_size = 0 ;
116
125
}
117
- else
126
+ else {
118
127
indentation_size ++ ;
128
+ }
119
129
skip (lexer );
120
130
}
121
131
@@ -174,7 +184,7 @@ bool tree_sitter_scala_external_scanner_scan(void *payload, TSLexer *lexer,
174
184
if (lexer -> eof (lexer )) {
175
185
stack -> last_column = -1 ;
176
186
} else {
177
- stack -> last_column = lexer -> get_column (lexer );
187
+ stack -> last_column = ( int ) lexer -> get_column (lexer );
178
188
}
179
189
return true;
180
190
}
@@ -203,14 +213,17 @@ bool tree_sitter_scala_external_scanner_scan(void *payload, TSLexer *lexer,
203
213
// a
204
214
// .b
205
215
// .c
206
- if (lexer -> lookahead == '.' ) return false;
216
+ if (lexer -> lookahead == '.' ) {
217
+ return false;
218
+ }
207
219
208
220
// Single-line and multi-line comments
209
221
if (lexer -> lookahead == '/' ) {
210
222
advance (lexer );
211
223
if (lexer -> lookahead == '/' ) {
212
224
return false;
213
- } else if (lexer -> lookahead == '*' ) {
225
+ }
226
+ if (lexer -> lookahead == '*' ) {
214
227
advance (lexer );
215
228
while (!lexer -> eof (lexer )) {
216
229
if (lexer -> lookahead == '*' ) {
@@ -238,108 +251,42 @@ bool tree_sitter_scala_external_scanner_scan(void *payload, TSLexer *lexer,
238
251
}
239
252
240
253
if (valid_symbols [ELSE ]) {
241
- if (lexer -> lookahead != 'e' ) return true;
242
- advance (lexer );
243
- if (lexer -> lookahead != 'l' ) return true;
244
- advance (lexer );
245
- if (lexer -> lookahead != 's' ) return true;
246
- advance (lexer );
247
- if (lexer -> lookahead != 'e' ) return true;
248
- advance (lexer );
249
- if (iswalpha (lexer -> lookahead )) return true;
250
- return false;
254
+ return !scan_word (lexer , "else" );
251
255
}
252
256
253
257
if (valid_symbols [CATCH ]) {
254
- if (lexer -> lookahead != 'c' && lexer -> lookahead != 'f' ) return true;
255
- advance (lexer );
256
- if (lexer -> lookahead == 'a' ) {
257
- advance (lexer );
258
- if (lexer -> lookahead != 't' ) return true;
259
- advance (lexer );
260
- if (lexer -> lookahead != 'c' ) return true;
261
- advance (lexer );
262
- if (lexer -> lookahead != 'h' ) return true;
263
- advance (lexer );
264
- if (iswalpha (lexer -> lookahead )) return true;
265
- return false;
266
- } else if (lexer -> lookahead == 'i' ) {
267
- advance (lexer );
268
- if (lexer -> lookahead != 'n' ) return true;
269
- advance (lexer );
270
- if (lexer -> lookahead != 'a' ) return true;
271
- advance (lexer );
272
- if (lexer -> lookahead != 'l' ) return true;
273
- advance (lexer );
274
- if (lexer -> lookahead != 'l' ) return true;
275
- advance (lexer );
276
- if (lexer -> lookahead != 'y' ) return true;
277
- advance (lexer );
278
- if (iswalpha (lexer -> lookahead )) return true;
279
- return false;
280
- } else {
281
- return true;
258
+ if (lexer -> lookahead == 'c' ) {
259
+ return !scan_word (lexer , "catch" );
282
260
}
261
+ if (lexer -> lookahead == 'f' ) {
262
+ return !scan_word (lexer , "finally" );
263
+ }
264
+ return true;
283
265
}
284
266
285
267
if (valid_symbols [FINALLY ]) {
286
- if (lexer -> lookahead != 'f' ) return true;
287
- advance (lexer );
288
- if (lexer -> lookahead != 'i' ) return true;
289
- advance (lexer );
290
- if (lexer -> lookahead != 'n' ) return true;
291
- advance (lexer );
292
- if (lexer -> lookahead != 'a' ) return true;
293
- advance (lexer );
294
- if (lexer -> lookahead != 'l' ) return true;
295
- advance (lexer );
296
- if (lexer -> lookahead != 'l' ) return true;
297
- advance (lexer );
298
- if (lexer -> lookahead != 'y' ) return true;
299
- advance (lexer );
300
- if (iswalpha (lexer -> lookahead )) return true;
301
- return false;
268
+ return !scan_word (lexer , "finally" );
302
269
}
303
270
304
271
if (valid_symbols [EXTENDS ]) {
305
- if (lexer -> lookahead != 'e' ) return true;
306
- advance (lexer );
307
- if (lexer -> lookahead != 'x' ) return true;
308
- advance (lexer );
309
- if (lexer -> lookahead != 't' ) return true;
310
- advance (lexer );
311
- if (lexer -> lookahead != 'e' ) return true;
312
- advance (lexer );
313
- if (lexer -> lookahead != 'n' ) return true;
314
- advance (lexer );
315
- if (lexer -> lookahead != 'd' ) return true;
316
- advance (lexer );
317
- if (lexer -> lookahead != 's' ) return true;
318
- advance (lexer );
319
- if (iswalpha (lexer -> lookahead )) return true;
320
- return false;
272
+ return !scan_word (lexer , "extends" );
321
273
}
322
274
323
275
if (valid_symbols [WITH ]) {
324
- if (lexer -> lookahead != 'w' ) return true;
325
- advance (lexer );
326
- if (lexer -> lookahead != 'i' ) return true;
327
- advance (lexer );
328
- if (lexer -> lookahead != 't' ) return true;
329
- advance (lexer );
330
- if (lexer -> lookahead != 'h' ) return true;
331
- advance (lexer );
332
- if (iswalpha (lexer -> lookahead )) return true;
333
- return false;
276
+ return !scan_word (lexer , "with" );
334
277
}
335
278
336
- if (newline_count > 1 ) return true;
279
+ if (newline_count > 1 ) {
280
+ return true;
281
+ }
337
282
338
283
return true;
339
284
}
340
285
341
286
while (iswspace (lexer -> lookahead )) {
342
- if (lexer -> lookahead == '\n' ) newline_count ++ ;
287
+ if (lexer -> lookahead == '\n' ) {
288
+ newline_count ++ ;
289
+ }
343
290
skip (lexer );
344
291
}
345
292
0 commit comments