Skip to content

Commit e68d36d

Browse files
ChrHornsavq
authored andcommitted
feat(grammar): make block a visible scope
Problem: Function bodies etc. cannot be targeted directly by queries, making textobjects difficult to implement. Solution: Expose `block` rule, except for at `source_file`.
1 parent 6b73e37 commit e68d36d

File tree

7 files changed

+420833
-420845
lines changed

7 files changed

+420833
-420845
lines changed

grammar.js

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,12 @@ module.exports = grammar({
181181
],
182182

183183
rules: {
184-
source_file: $ => optional($._block),
184+
source_file: $ => optional(seq(
185+
sep1($._terminator, $._block_form),
186+
optional($._terminator)
187+
)),
185188

186-
_block: $ => seq(
189+
block: $ => seq(
187190
sep1($._terminator, $._block_form),
188191
optional($._terminator)
189192
),
@@ -258,7 +261,7 @@ module.exports = grammar({
258261
choice('module', 'baremodule'),
259262
field('name', choice($.identifier, $.interpolation_expression)),
260263
optional($._terminator),
261-
optional($._block),
264+
optional($.block),
262265
'end',
263266
),
264267

@@ -288,7 +291,7 @@ module.exports = grammar({
288291
'struct',
289292
$.type_head,
290293
optional($._terminator),
291-
optional($._block),
294+
optional($.block),
292295
'end',
293296
),
294297

@@ -304,15 +307,15 @@ module.exports = grammar({
304307
'function',
305308
$.signature,
306309
optional($._terminator),
307-
optional($._block),
310+
optional($.block),
308311
'end',
309312
),
310313

311314
macro_definition: $ => seq(
312315
'macro',
313316
$.signature,
314317
optional($._terminator),
315-
optional($._block),
318+
optional($.block),
316319
'end',
317320
),
318321

@@ -341,23 +344,23 @@ module.exports = grammar({
341344
$.using_statement,
342345
),
343346

344-
compound_statement: $ => seq('begin', optional($._terminator), optional($._block), 'end'),
347+
compound_statement: $ => seq('begin', optional($._terminator), optional($.block), 'end'),
345348

346-
quote_statement: $ => seq('quote', optional($._terminator), optional($._block), 'end'),
349+
quote_statement: $ => seq('quote', optional($._terminator), optional($.block), 'end'),
347350

348351
let_statement: $ => seq(
349352
'let',
350353
sep(',', $._bracket_form),
351354
$._terminator,
352-
optional($._block),
355+
optional($.block),
353356
'end',
354357
),
355358

356359
if_statement: $ => seq(
357360
'if',
358361
field('condition', $._expression),
359362
optional($._terminator),
360-
optional($._block),
363+
optional($.block),
361364
field('alternative', repeat($.elseif_clause)),
362365
field('alternative', optional($.else_clause)),
363366
'end',
@@ -367,19 +370,19 @@ module.exports = grammar({
367370
'elseif',
368371
field('condition', $._expression),
369372
optional($._terminator),
370-
optional($._block),
373+
optional($.block),
371374
),
372375

373376
else_clause: $ => seq(
374377
'else',
375378
optional($._terminator),
376-
optional($._block),
379+
optional($.block),
377380
),
378381

379382
try_statement: $ => seq(
380383
'try',
381384
optional($._terminator),
382-
optional($._block),
385+
optional($.block),
383386
choice(
384387
seq(
385388
$.catch_clause,
@@ -399,28 +402,28 @@ module.exports = grammar({
399402
'catch',
400403
optional($.identifier),
401404
optional($._terminator),
402-
optional($._block),
405+
optional($.block),
403406
)),
404407

405408
finally_clause: $ => seq(
406409
'finally',
407410
optional($._terminator),
408-
optional($._block),
411+
optional($.block),
409412
),
410413

411414
for_statement: $ => seq(
412415
'for',
413416
sep1(',', $.for_binding),
414417
optional($._terminator),
415-
optional($._block),
418+
optional($.block),
416419
'end',
417420
),
418421

419422
while_statement: $ => seq(
420423
'while',
421424
field('condition', $._expression),
422425
optional($._terminator),
423-
optional($._block),
426+
optional($.block),
424427
'end',
425428
),
426429

@@ -688,7 +691,7 @@ module.exports = grammar({
688691
'do',
689692
sep(',', $._bracket_form),
690693
$._terminator,
691-
optional($._block),
694+
optional($.block),
692695
'end',
693696
),
694697

src/grammar.json

Lines changed: 57 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)