Skip to content

Commit ce20f13

Browse files
authored
feat: annotated codeblocks #65
``` This is a Lua block: >lua local foo = 'bar' This is a Vimscript block: >vim au FileType lua setl sw=2 This is a C block: >c int *p = get_local_errno(); *p = EINVAL < This is a standard block: > $ nvim --clean +'q' < ```
1 parent 49cdef5 commit ce20f13

File tree

9 files changed

+3805
-3458
lines changed

9 files changed

+3805
-3458
lines changed

corpus/codeblock.txt

Lines changed: 127 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ block3:
2424
(block
2525
(line
2626
(codeblock
27-
(line))))
27+
(code
28+
(line)))))
2829
(block
2930
(line
3031
(word))
3132
(line
3233
(codeblock
33-
(line))))
34+
(code
35+
(line)))))
3436
(block
3537
(line
3638
(word)))
@@ -39,7 +41,8 @@ block3:
3941
(word))
4042
(line
4143
(codeblock
42-
(line))))
44+
(code
45+
(line)))))
4346
(block
4447
(line
4548
(word))))
@@ -73,9 +76,10 @@ text
7376
(word)
7477
(word)
7578
(codeblock
76-
(line)
77-
(line)
78-
(line))))
79+
(code
80+
(line)
81+
(line)
82+
(line)))))
7983
(block
8084
(line
8185
(word)
@@ -89,13 +93,51 @@ text
8993
(word))
9094
(line
9195
(codeblock
92-
(line)
93-
(line)
94-
(line))))
96+
(code
97+
(line)
98+
(line)
99+
(line)))))
95100
(block
96101
(line
97102
(word))))
98103

104+
================================================================================
105+
codeblock with language annotations
106+
================================================================================
107+
This code is in Lua: >lua
108+
local foo = 'bar'
109+
<
110+
111+
This code is in Vimscript: >vim
112+
let foo = "bar"
113+
<
114+
115+
--------------------------------------------------------------------------------
116+
117+
(help_file
118+
(block
119+
(line
120+
(word)
121+
(word)
122+
(word)
123+
(word)
124+
(word)
125+
(codeblock
126+
(language)
127+
(code
128+
(line)))))
129+
(block
130+
(line
131+
(word)
132+
(word)
133+
(word)
134+
(word)
135+
(word)
136+
(codeblock
137+
(language)
138+
(code
139+
(line))))))
140+
99141
================================================================================
100142
codeblock with implicit stop
101143
================================================================================
@@ -127,9 +169,10 @@ H3 HEADLINE *foo*
127169
(block
128170
(line
129171
(codeblock
130-
(line)
131-
(line)
132-
(line)))
172+
(code
173+
(line)
174+
(line)
175+
(line))))
133176
(line
134177
(h1
135178
(word)
@@ -143,8 +186,9 @@ H3 HEADLINE *foo*
143186
(block
144187
(line
145188
(codeblock
146-
(line)
147-
(line)))
189+
(code
190+
(line)
191+
(line))))
148192
(line
149193
(h2
150194
(word)
@@ -153,8 +197,9 @@ H3 HEADLINE *foo*
153197
(block
154198
(line
155199
(codeblock
156-
(line)
157-
(line)))
200+
(code
201+
(line)
202+
(line))))
158203
(line
159204
(h3
160205
(uppercase_name)
@@ -185,15 +230,16 @@ x
185230
(line
186231
(word)
187232
(codeblock
188-
(line)
189-
(line)
190-
(line)
191-
(line)
192-
(line)
193-
(line)
194-
(line)
195-
(line)
196-
(line)))
233+
(code
234+
(line)
235+
(line)
236+
(line)
237+
(line)
238+
(line)
239+
(line)
240+
(line)
241+
(line)
242+
(line))))
197243
(line
198244
(word))))
199245

@@ -224,19 +270,21 @@ tricky
224270
(block
225271
(line
226272
(codeblock
227-
(line)
228-
(line)
229-
(line))))
273+
(code
274+
(line)
275+
(line)
276+
(line)))))
230277
(block
231278
(line
232279
(word)
233280
(codeblock
234-
(line)
235-
(line)
236-
(line)
237-
(line)
238-
(line)
239-
(line))))
281+
(code
282+
(line)
283+
(line)
284+
(line)
285+
(line)
286+
(line)
287+
(line)))))
240288
(block
241289
(line
242290
(word))))
@@ -266,8 +314,9 @@ To test for a non-empty string, use empty(): >
266314
(word)
267315
(word)
268316
(codeblock
269-
(line)
270-
(line)))
317+
(code
318+
(line)
319+
(line))))
271320
(line
272321
(word)
273322
(word)
@@ -290,8 +339,9 @@ To test for a non-empty string, use empty(): >
290339
(word)
291340
(word)
292341
(codeblock
293-
(line)
294-
(line)))
342+
(code
343+
(line)
344+
(line))))
295345
(line
296346
(word)
297347
(word)
@@ -303,7 +353,8 @@ To test for a non-empty string, use empty(): >
303353
(word)
304354
(word)
305355
(codeblock
306-
(line)))))
356+
(code
357+
(line))))))
307358

308359
================================================================================
309360
codeblock stop and start on same line
@@ -329,12 +380,14 @@ codeblock stop and start on same line
329380
(line
330381
(word)
331382
(codeblock
332-
(line))))
383+
(code
384+
(line)))))
333385
(block
334386
(line
335387
(word)
336388
(codeblock
337-
(line))))
389+
(code
390+
(line)))))
338391
(block
339392
(line
340393
(tag
@@ -350,8 +403,9 @@ codeblock stop and start on same line
350403
(line
351404
(word)
352405
(codeblock
353-
(line)
354-
(line)))))
406+
(code
407+
(line)
408+
(line))))))
355409

356410
================================================================================
357411
NOT codeblock: whitespace after ">"
@@ -362,6 +416,11 @@ x >
362416
x x>
363417
line
364418

419+
Not a language annotation: > lua
420+
line
421+
422+
Not a language annotation: >lua is not at EOL
423+
line
365424

366425

367426
--------------------------------------------------------------------------------
@@ -378,4 +437,28 @@ x x>
378437
(word)
379438
(word))
380439
(line
381-
(word))))
440+
(word)))
441+
(block
442+
(line
443+
(word)
444+
(word)
445+
(word)
446+
(word)
447+
(word)
448+
(word))
449+
(line
450+
(word)))
451+
(block
452+
(line
453+
(word)
454+
(word)
455+
(word)
456+
(word)
457+
(word)
458+
(word)
459+
(word)
460+
(word)
461+
(word)
462+
(word))
463+
(line
464+
(word))))

corpus/heading3-column_heading.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@ column_heading should NOT parse atoms (links, tags, etc.) (FIXME)
164164
(line
165165
(word)
166166
(codeblock
167-
(line))))
167+
(code
168+
(line)))))
168169
(block
169170
(line
170171
(column_heading

corpus/line_block.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ listitem with codeblock
201201
(word)
202202
(word))
203203
(codeblock
204-
(line)))
204+
(code
205+
(line))))
205206
(line_li
206207
(line
207208
(word)
@@ -215,9 +216,10 @@ listitem with codeblock
215216
(line
216217
(word)
217218
(codeblock
218-
(line)
219-
(line)
220-
(line))))
219+
(code
220+
(line)
221+
(line)
222+
(line)))))
221223
(line_li
222224
(line
223225
(word))

grammar.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,13 @@ module.exports = grammar({
121121
repeat($._blank),
122122
),
123123

124-
// Codeblock: preformatted block of lines starting with ">".
124+
// Codeblock: preformatted block of lines starting with ">" or ">language" at EOL
125125
codeblock: ($) => prec.right(seq(
126126
'>',
127-
token.immediate('\n'),
128-
repeat1(alias($.line_code, $.line)),
127+
choice(
128+
alias(token.immediate(/[a-z0-9]+\n/), $.language),
129+
token.immediate('\n')),
130+
alias(repeat1(alias($.line_code, $.line)), $.code),
129131
// Codeblock ends if a line starts with non-whitespace.
130132
// Terminating "<" is consumed in other rules.
131133
)),

queries/help/highlights.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
text: (_) @text.literal)
1818
(codeblock) @text.literal
1919
(codeblock
20-
">" @conceal (#set! conceal ""))
20+
[">" (language)] @conceal (#set! conceal ""))
2121
(block
2222
"<" @conceal (#set! conceal ""))
2323
(argument) @parameter

queries/help/injections.scm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(codeblock
2+
(language) @language
3+
(code) @contents)

0 commit comments

Comments
 (0)