@@ -217,6 +217,7 @@ bool tree_sitter_c_sharp_external_scanner_scan(void *payload, TSLexer *lexer, co
217217 if (is_verbatim || lexer -> lookahead == '@' ) {
218218 if (lexer -> lookahead == '@' ) {
219219 advance (lexer );
220+ is_verbatim = true;
220221 }
221222 lexer -> result_symbol = INTERPOLATION_VERBATIM_START ;
222223 interpolation .string_type = VERBATIM ;
@@ -246,13 +247,20 @@ bool tree_sitter_c_sharp_external_scanner_scan(void *payload, TSLexer *lexer, co
246247 if (valid_symbols [INTERPOLATION_START_QUOTE ] && scanner -> interpolation_stack .size > 0 ) {
247248 Interpolation * current_interpolation = array_back (& scanner -> interpolation_stack );
248249
249- while (lexer -> lookahead == '"' ) {
250- advance (lexer );
251- current_interpolation -> quote_count ++ ;
250+ if (is_verbatim (current_interpolation ) || is_regular (current_interpolation )) {
251+ if (lexer -> lookahead == '"' ) {
252+ advance (lexer );
253+ current_interpolation -> quote_count ++ ;
254+ }
255+ } else {
256+ while (lexer -> lookahead == '"' ) {
257+ advance (lexer );
258+ current_interpolation -> quote_count ++ ;
259+ }
252260 }
253261
254262 lexer -> result_symbol = INTERPOLATION_START_QUOTE ;
255- return current_interpolation -> quote_count >= 3 ;
263+ return current_interpolation -> quote_count > 0 ;
256264 }
257265
258266 if (valid_symbols [INTERPOLATION_END_QUOTE ] && scanner -> interpolation_stack .size > 0 ) {
@@ -302,20 +310,6 @@ bool tree_sitter_c_sharp_external_scanner_scan(void *payload, TSLexer *lexer, co
302310
303311 if (brace_advanced == current_interpolation -> open_brace_count ) {
304312 current_interpolation -> open_brace_count = 0 ;
305- if (lexer -> lookahead == '"' ) {
306- if (is_regular (current_interpolation ) || is_verbatim (current_interpolation )) {
307- if (is_verbatim (current_interpolation )) {
308- lexer -> mark_end (lexer );
309- advance (lexer );
310- // double quote in verbatim does not signify end, unless it's a triple quote
311- if (lexer -> lookahead != '"' ) {
312- array_pop (& scanner -> interpolation_stack );
313- }
314- } else {
315- array_pop (& scanner -> interpolation_stack );
316- }
317- }
318- }
319313 lexer -> result_symbol = INTERPOLATION_CLOSE_BRACE ;
320314 return true;
321315 }
@@ -371,9 +365,6 @@ bool tree_sitter_c_sharp_external_scanner_scan(void *payload, TSLexer *lexer, co
371365 advance (lexer );
372366 continue ;
373367 }
374- if (did_advance ) {
375- array_pop (& scanner -> interpolation_stack );
376- }
377368 return did_advance ;
378369 }
379370
@@ -395,9 +386,6 @@ bool tree_sitter_c_sharp_external_scanner_scan(void *payload, TSLexer *lexer, co
395386 // finally regular
396387 else if (is_regular (current_interpolation )) {
397388 if (lexer -> lookahead == '\\' || lexer -> lookahead == '\n' || lexer -> lookahead == '"' ) {
398- if (did_advance && lexer -> lookahead == '"' ) {
399- array_pop (& scanner -> interpolation_stack );
400- }
401389 lexer -> mark_end (lexer );
402390 return did_advance ;
403391 }
0 commit comments