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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/scanner.c +13 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tree-sitter-rake",
3
- "version": "0.5.0-beta",
3
+ "version": "0.5.0-beta.1",
4
4
  "description": "Tree-sitter grammar for Rake, a vector-first SIMD language",
5
5
  "main": "bindings/node/index.js",
6
6
  "types": "bindings/node/index.d.ts",
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
- skip(lexer);
90
- scanner->pending_block_comment = lexer->lookahead == '*';
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);