tree-sitter-rake 0.5.0-beta → 0.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/scanner.c +13 -3
package/package.json
CHANGED
package/src/scanner.c
CHANGED
|
@@ -60,8 +60,12 @@ bool tree_sitter_rake_external_scanner_scan(void *payload, TSLexer *lexer, const
|
|
|
60
60
|
return valid_symbols[BLOCK_COMMENT] && scan_block_comment(lexer);
|
|
61
61
|
}
|
|
62
62
|
if (valid_symbols[BLOCK_COMMENT]) {
|
|
63
|
+
// At the start of a source file, no layout token is expected. Still
|
|
64
|
+
// recognize a block comment after blank lines or line comments.
|
|
65
|
+
bool layout_expected = valid_symbols[NEWLINE] || valid_symbols[INDENT] || valid_symbols[DEDENT];
|
|
63
66
|
while (lexer->lookahead == ' ' || lexer->lookahead == '\t' ||
|
|
64
|
-
lexer->lookahead == '\r' || lexer->lookahead == '\f'
|
|
67
|
+
lexer->lookahead == '\r' || lexer->lookahead == '\f' ||
|
|
68
|
+
(!layout_expected && lexer->lookahead == '\n')) {
|
|
65
69
|
skip(lexer);
|
|
66
70
|
}
|
|
67
71
|
if (lexer->lookahead == '(') return scan_block_comment(lexer);
|
|
@@ -86,8 +90,14 @@ bool tree_sitter_rake_external_scanner_scan(void *payload, TSLexer *lexer, const
|
|
|
86
90
|
skip(lexer);
|
|
87
91
|
} else if (c == '(' && end_of_line) {
|
|
88
92
|
indent = lexer->get_column(lexer);
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
// Emit the comment itself when it is valid here. Deferring it to
|
|
94
|
+
// the next scan requires a layout token to carry that state.
|
|
95
|
+
if (valid_symbols[BLOCK_COMMENT]) {
|
|
96
|
+
if (scan_block_comment(lexer)) return true;
|
|
97
|
+
} else {
|
|
98
|
+
skip(lexer);
|
|
99
|
+
scanner->pending_block_comment = lexer->lookahead == '*';
|
|
100
|
+
}
|
|
91
101
|
break;
|
|
92
102
|
} else {
|
|
93
103
|
indent = lexer->get_column(lexer);
|