tree: 5f720dd70781e1cf124be1e1be5cc2fa5dbe071e [search]
  1. .gitattributes
  2. arg_0001.txt
  3. arg_0001.txt.out.expected
  4. arg_0002.txt
  5. arg_0002.txt.out.expected
  6. arg_0003.txt
  7. arg_0003.txt.out.expected
  8. arg_0004.txt
  9. arg_0004.txt.out.expected
  10. arg_0005.txt
  11. arg_0005.txt.out.expected
  12. arg_0006.txt
  13. arg_0006.txt.out.expected
  14. arg_0007.txt
  15. arg_0007.txt.out.expected
  16. arg_0008.txt
  17. arg_0008.txt.out.expected
  18. arg_0009.txt
  19. arg_0009.txt.out.expected
  20. arg_0010.txt
  21. arg_0010.txt.out.expected
  22. arg_0011.txt
  23. arg_0011.txt.out.expected
  24. arg_0012.txt
  25. arg_0012.txt.out.expected
  26. arg_0013.txt
  27. arg_0013.txt.out.expected
  28. arg_0014.txt
  29. arg_0014.txt.out.expected
  30. arg_0015.txt
  31. arg_0015.txt.out.expected
  32. arg_0016.txt
  33. arg_0016.txt.out.expected
  34. arg_0017.txt
  35. arg_0017.txt.out.expected
  36. arg_0018.txt
  37. arg_0018.txt.out.expected
  38. arg_0019.txt
  39. arg_0019.txt.out.expected
  40. arg_0020.txt
  41. arg_0020.txt.out.expected
  42. arg_0021.txt
  43. arg_0021.txt.out.expected
  44. arg_val_0001.txt
  45. arg_val_0001.txt.out.expected
  46. arg_val_0002.txt
  47. arg_val_0002.txt.out.expected
  48. arg_val_0003.txt
  49. arg_val_0003.txt.out.expected
  50. arg_val_0004.txt
  51. arg_val_0004.txt.out.expected
  52. arg_val_0005.txt
  53. arg_val_0005.txt.out.expected
  54. arg_val_0006.txt
  55. arg_val_0006.txt.out.expected
  56. arg_val_0007.txt
  57. arg_val_0007.txt.out.expected
  58. arg_val_0008.txt
  59. arg_val_0008.txt.out.expected
  60. args_0001.txt
  61. args_0001.txt.out.expected
  62. args_0002.txt
  63. args_0002.txt.out.expected
  64. args_0003.txt
  65. args_0003.txt.out.expected
  66. blankPara_0001.txt
  67. blankPara_0001.txt.out.expected
  68. block_0001.txt
  69. block_0001.txt.out.expected
  70. block_0002.txt
  71. block_0002.txt.out.expected
  72. block_0003.txt
  73. block_0003.txt.out.expected
  74. block_0004.txt
  75. block_0004.txt.out.expected
  76. block_0005.txt
  77. block_0005.txt.out.expected
  78. block_0006.txt
  79. block_0006.txt.out.expected
  80. block_0007.txt
  81. block_0007.txt.out.expected
  82. block_0008.txt
  83. block_0008.txt.out.expected
  84. block_0009.txt
  85. block_0009.txt.out.expected
  86. block_0010.txt
  87. block_0010.txt.out.expected
  88. block_0011.txt
  89. block_0011.txt.out.expected
  90. block_0012.txt
  91. block_0012.txt.out.expected
  92. block_0013.txt
  93. block_0013.txt.out.expected
  94. blockOpener_0001.txt
  95. blockOpener_0001.txt.out.expected
  96. blockOpener_0002.txt
  97. blockOpener_0002.txt.out.expected
  98. blockOpener_0003.txt
  99. blockOpener_0003.txt.out.expected
  100. blockOpener_0004.txt
  101. blockOpener_0004.txt.out.expected
  102. blockOpener_0005.txt
  103. blockOpener_0005.txt.out.expected
  104. blockOpener_0006.txt
  105. blockOpener_0006.txt.out.expected
  106. blockOpener_0007.txt
  107. blockOpener_0007.txt.out.expected
  108. blocks_0001.txt
  109. blocks_0001.txt.out.expected
  110. blocks_0002.txt
  111. blocks_0002.txt.out.expected
  112. blocks_0003.txt
  113. blocks_0003.txt.out.expected
  114. blocks_0004.txt
  115. blocks_0004.txt.out.expected
  116. blocks_0005.txt
  117. blocks_0005.txt.out.expected
  118. blocks_0006.txt
  119. blocks_0006.txt.out.expected
  120. blocks_0007.txt
  121. blocks_0007.txt.out.expected
  122. blocks_0008.txt
  123. blocks_0008.txt.out.expected
  124. blocks_0009.txt
  125. blocks_0009.txt.out.expected
  126. blocks_0010.txt
  127. blocks_0010.txt.out.expected
  128. blocks_0011.txt
  129. blocks_0011.txt.out.expected
  130. blocks_0012.txt
  131. blocks_0012.txt.out.expected
  132. blocks_0013.txt
  133. blocks_0013.txt.out.expected
  134. blocks_0014.txt
  135. blocks_0014.txt.out.expected
  136. blocks_0015.txt
  137. blocks_0015.txt.out.expected
  138. blocks_0016.txt
  139. blocks_0016.txt.out.expected
  140. blocks_0017.txt
  141. blocks_0017.txt.out.expected
  142. blocks_0018.txt
  143. blocks_0018.txt.out.expected
  144. blocks_0019.txt
  145. blocks_0019.txt.out.expected
  146. blocks_0020.txt
  147. blocks_0020.txt.out.expected
  148. blocks_0021.txt
  149. blocks_0021.txt.out.expected
  150. blocks_0022.txt
  151. blocks_0022.txt.out.expected
  152. blocks_0023.txt
  153. blocks_0023.txt.out.expected
  154. blocks_0024.txt
  155. blocks_0024.txt.out.expected
  156. blocks_0025.txt
  157. blocks_0025.txt.out.expected
  158. blocks_0026.txt
  159. blocks_0026.txt.out.expected
  160. blocks_0027.txt
  161. blocks_0027.txt.out.expected
  162. blocks_0028.txt
  163. blocks_0028.txt.out.expected
  164. blocks_0029.txt
  165. blocks_0029.txt.out.expected
  166. blocks_0030.txt
  167. blocks_0030.txt.out.expected
  168. blocks_0031.txt
  169. blocks_0031.txt.out.expected
  170. blocks_0032.txt
  171. blocks_0032.txt.out.expected
  172. blocks_0033.txt
  173. blocks_0033.txt.out.expected
  174. blocks_0034.txt
  175. blocks_0034.txt.out.expected
  176. blocks_0035.txt
  177. blocks_0035.txt.out.expected
  178. blocks_0036.txt
  179. blocks_0036.txt.out.expected
  180. blocks_0037.txt
  181. blocks_0037.txt.out.expected
  182. blocks_0038.txt
  183. blocks_0038.txt.out.expected
  184. blocks_0039.txt
  185. blocks_0039.txt.out.expected
  186. blocks_0040.txt
  187. blocks_0040.txt.out.expected
  188. blocks_0041.txt
  189. blocks_0041.txt.out.expected
  190. blocks_0042.txt
  191. blocks_0042.txt.out.expected
  192. blocks_0043.txt
  193. blocks_0043.txt.out.expected
  194. blocks_0044.txt
  195. blocks_0044.txt.out.expected
  196. blocks_0045.txt
  197. blocks_0045.txt.out.expected
  198. blocks_0046.txt
  199. blocks_0046.txt.out.expected
  200. blocks_0047.txt
  201. blocks_0047.txt.out.expected
  202. blocks_0048.txt
  203. blocks_0048.txt.out.expected
  204. blocks_0049.txt
  205. blocks_0049.txt.out.expected
  206. blocks_0050.txt
  207. blocks_0050.txt.out.expected
  208. blocks_0051.txt
  209. blocks_0051.txt.out.expected
  210. blocks_0052.txt
  211. blocks_0052.txt.out.expected
  212. blocks_0053.txt
  213. blocks_0053.txt.out.expected
  214. blocks_0054.txt
  215. blocks_0054.txt.out.expected
  216. blocks_0055.txt
  217. blocks_0055.txt.out.expected
  218. blocks_0056.txt
  219. blocks_0056.txt.out.expected
  220. blocks_0057.txt
  221. blocks_0057.txt.out.expected
  222. blocks_0058.txt
  223. blocks_0058.txt.out.expected
  224. blocks_0059.txt
  225. blocks_0059.txt.out.expected
  226. blocks_0060.txt
  227. blocks_0060.txt.out.expected
  228. blocks_0061.txt
  229. blocks_0061.txt.out.expected
  230. blocks_0062.txt
  231. blocks_0062.txt.out.expected
  232. blocks_0063.txt
  233. blocks_0063.txt.out.expected
  234. blocks_0064.txt
  235. blocks_0064.txt.out.expected
  236. blocks_0065.txt
  237. blocks_0065.txt.out.expected
  238. blocks_0066.txt
  239. blocks_0066.txt.out.expected
  240. blocks_0067.txt
  241. blocks_0067.txt.out.expected
  242. blocks_0068.txt
  243. blocks_0068.txt.out.expected
  244. blocks_0069.txt
  245. blocks_0069.txt.out.expected
  246. blocks_0070.txt
  247. blocks_0070.txt.out.expected
  248. blocks_0071.txt
  249. blocks_0071.txt.out.expected
  250. blocks_0072.txt
  251. blocks_0072.txt.out.expected
  252. blocks_0073.txt
  253. blocks_0073.txt.out.expected
  254. blocks_0074.txt
  255. blocks_0074.txt.out.expected
  256. blocks_0075.txt
  257. blocks_0075.txt.out.expected
  258. blocks_0076.txt
  259. blocks_0076.txt.out.expected
  260. blocks_0077.txt
  261. blocks_0077.txt.out.expected
  262. blocks_0078.txt
  263. blocks_0078.txt.out.expected
  264. blocks_0079.txt
  265. blocks_0079.txt.out.expected
  266. blocks_0080.txt
  267. blocks_0080.txt.out.expected
  268. blocks_0081.txt
  269. blocks_0081.txt.out.expected
  270. blocks_0082.txt
  271. blocks_0082.txt.out.expected
  272. blocks_0083.txt
  273. blocks_0083.txt.out.expected
  274. blocks_0084.txt
  275. blocks_0084.txt.out.expected
  276. blocks_0085.txt
  277. blocks_0085.txt.out.expected
  278. blocks_0086.txt
  279. blocks_0086.txt.out.expected
  280. blocks_0087.txt
  281. blocks_0087.txt.out.expected
  282. blocks_0088.txt
  283. blocks_0088.txt.out.expected
  284. blocks_0089.txt
  285. blocks_0089.txt.out.expected
  286. blocks_0090.txt
  287. blocks_0090.txt.out.expected
  288. blocks_0091.txt
  289. blocks_0091.txt.out.expected
  290. blocks_0092.txt
  291. blocks_0092.txt.out.expected
  292. blocks_0093.txt
  293. blocks_0093.txt.out.expected
  294. blocks_0094.txt
  295. blocks_0094.txt.out.expected
  296. blocks_0095.txt
  297. blocks_0095.txt.out.expected
  298. blocks_0096.txt
  299. blocks_0096.txt.out.expected
  300. blocks_0097.txt
  301. blocks_0097.txt.out.expected
  302. blocks_0098.txt
  303. blocks_0098.txt.out.expected
  304. blocks_0099.txt
  305. blocks_0099.txt.out.expected
  306. blocks_0100.txt
  307. blocks_0100.txt.out.expected
  308. code_0001.txt
  309. code_0001.txt.out.expected
  310. code_0002.txt
  311. code_0002.txt.out.expected
  312. code_0003.txt
  313. code_0003.txt.out.expected
  314. code_0004.txt
  315. code_0004.txt.out.expected
  316. code_0005.txt
  317. code_0005.txt.out.expected
  318. code_0006.txt
  319. code_0006.txt.out.expected
  320. code_0007.txt
  321. code_0007.txt.out.expected
  322. code_0008.txt
  323. code_0008.txt.out.expected
  324. code_0009.txt
  325. code_0009.txt.out.expected
  326. code_0010.txt
  327. code_0010.txt.out.expected
  328. code_0011.txt
  329. code_0011.txt.out.expected
  330. code_0012.txt
  331. code_0012.txt.out.expected
  332. code_0013.txt
  333. code_0013.txt.out.expected
  334. code_0014.txt
  335. code_0014.txt.out.expected
  336. code_0015.txt
  337. code_0015.txt.out.expected
  338. codeBlock_0001.txt
  339. codeBlock_0001.txt.out.expected
  340. codeBlock_0002.txt
  341. codeBlock_0002.txt.out.expected
  342. codeBlock_0003.txt
  343. codeBlock_0003.txt.out.expected
  344. codeBlock_0004.txt
  345. codeBlock_0004.txt.out.expected
  346. codeBlock_0005.txt
  347. codeBlock_0005.txt.out.expected
  348. codeBlock_0006.txt
  349. codeBlock_0006.txt.out.expected
  350. codeBlock_0007.txt
  351. codeBlock_0007.txt.out.expected
  352. codeBlock_0008.txt
  353. codeBlock_0008.txt.out.expected
  354. codeBlock_0009.txt
  355. codeBlock_0009.txt.out.expected
  356. codeBlock_0010.txt
  357. codeBlock_0010.txt.out.expected
  358. codeBlock_0011.txt
  359. codeBlock_0011.txt.out.expected
  360. codeBlock_0012.txt
  361. codeBlock_0012.txt.out.expected
  362. codeBlock_0013.txt
  363. codeBlock_0013.txt.out.expected
  364. codeBlock_0014.txt
  365. codeBlock_0014.txt.out.expected
  366. codeBlock_0015.txt
  367. codeBlock_0015.txt.out.expected
  368. codeBlock_0016.txt
  369. codeBlock_0016.txt.out.expected
  370. codeBlock_0017.txt
  371. codeBlock_0017.txt.out.expected
  372. codeBlock_0018.txt
  373. codeBlock_0018.txt.out.expected
  374. codeIndented_0001.txt
  375. codeIndented_0001.txt.out.expected
  376. codeIndented_0002.txt
  377. codeIndented_0002.txt.out.expected
  378. coverage_0001.txt
  379. coverage_0001.txt.out.expected
  380. directive_0001.txt
  381. directive_0001.txt.out.expected
  382. directive_0002.txt
  383. directive_0002.txt.out.expected
  384. directive_0003.txt
  385. directive_0003.txt.out.expected
  386. directive_0004.txt
  387. directive_0004.txt.out.expected
  388. directive_0005.txt
  389. directive_0005.txt.out.expected
  390. directive_0006.txt
  391. directive_0006.txt.out.expected
  392. directive_0007.txt
  393. directive_0007.txt.out.expected
  394. directive_0008.txt
  395. directive_0008.txt.out.expected
  396. directive_0009.txt
  397. directive_0009.txt.out.expected
  398. directive_0010.txt
  399. directive_0010.txt.out.expected
  400. directive_0011.txt
  401. directive_0011.txt.out.expected
  402. document_0001.txt
  403. document_0001.txt.out.expected
  404. document_0002.txt
  405. document_0002.txt.out.expected
  406. document_0003.txt
  407. document_0003.txt.out.expected
  408. document_0004.txt
  409. document_0004.txt.out.expected
  410. document_0005.txt
  411. document_0005.txt.out.expected
  412. document_0006.txt
  413. document_0006.txt.out.expected
  414. document_0009.txt
  415. document_0009.txt.out.expected
  416. document_0010.txt
  417. document_0010.txt.out.expected
  418. document_0011.txt
  419. document_0011.txt.out.expected
  420. document_0012.txt
  421. document_0012.txt.out.expected
  422. document_0013.txt
  423. document_0013.txt.out.expected
  424. document_0014.txt
  425. document_0014.txt.out.expected
  426. document_0015.txt
  427. document_0015.txt.out.expected
  428. document_0016.txt
  429. document_0016.txt.out.expected
  430. document_0017.txt
  431. document_0017.txt.out.expected
  432. document_0018.txt
  433. document_0018.txt.out.expected
  434. documentIndented_0001.txt
  435. documentIndented_0001.txt.out.expected
  436. emph_0001.txt
  437. emph_0001.txt.out.expected
  438. emph_0002.txt
  439. emph_0002.txt.out.expected
  440. emph_0003.txt
  441. emph_0003.txt.out.expected
  442. emph_0004.txt
  443. emph_0004.txt.out.expected
  444. emph_0005.txt
  445. emph_0005.txt.out.expected
  446. format_0001.txt
  447. format_0001.txt.out.expected
  448. header_0001.txt
  449. header_0001.txt.out.expected
  450. header_0002.txt
  451. header_0002.txt.out.expected
  452. inlineTextChar_0001.txt
  453. inlineTextChar_0001.txt.out.expected
  454. inlineTextChar_0002.txt
  455. inlineTextChar_0002.txt.out.expected
  456. inlineTextChar_0003.txt
  457. inlineTextChar_0003.txt.out.expected
  458. inlineTextChar_0004.txt
  459. inlineTextChar_0004.txt.out.expected
  460. inlineTextChar_0005.txt
  461. inlineTextChar_0005.txt.out.expected
  462. lookaheadOrderedListMarker_0001.txt
  463. lookaheadOrderedListMarker_0001.txt.out.expected
  464. lookaheadOrderedListMarker_0002.txt
  465. lookaheadOrderedListMarker_0002.txt.out.expected
  466. lookaheadOrderedListMarker_0003.txt
  467. lookaheadOrderedListMarker_0003.txt.out.expected
  468. lookaheadOrderedListMarker_0004.txt
  469. lookaheadOrderedListMarker_0004.txt.out.expected
  470. lookaheadOrderedListMarker_0005.txt
  471. lookaheadOrderedListMarker_0005.txt.out.expected
  472. lookaheadOrderedListMarker_0006.txt
  473. lookaheadOrderedListMarker_0006.txt.out.expected
  474. lookaheadOrderedListMarker_0007.txt
  475. lookaheadOrderedListMarker_0007.txt.out.expected
  476. lookaheadUnorderedListMarker_0001.txt
  477. lookaheadUnorderedListMarker_0001.txt.out.expected
  478. lookaheadUnorderedListMarker_0002.txt
  479. lookaheadUnorderedListMarker_0002.txt.out.expected
  480. lookaheadUnorderedListMarker_0003.txt
  481. lookaheadUnorderedListMarker_0003.txt.out.expected
  482. lookaheadUnorderedListMarker_0004.txt
  483. lookaheadUnorderedListMarker_0004.txt.out.expected
  484. lookaheadUnorderedListMarker_0005.txt
  485. lookaheadUnorderedListMarker_0005.txt.out.expected
  486. lookaheadUnorderedListMarker_0006.txt
  487. lookaheadUnorderedListMarker_0006.txt.out.expected
  488. manyInlineTextChar_0001.txt
  489. manyInlineTextChar_0001.txt.out.expected
  490. manyInlineTextChar_0002.txt
  491. manyInlineTextChar_0002.txt.out.expected
  492. manyInlineTextChar_0003.txt
  493. manyInlineTextChar_0003.txt.out.expected
  494. metadataBlock_0001.txt
  495. metadataBlock_0001.txt.out.expected
  496. metadataBlock_0002.txt
  497. metadataBlock_0002.txt.out.expected
  498. metadataBlock_0003.txt
  499. metadataBlock_0003.txt.out.expected
  500. metadataBlock_0004.txt
  501. metadataBlock_0004.txt.out.expected
  502. metadataBlock_0005.txt
  503. metadataBlock_0005.txt.out.expected
  504. metadataBlock_0006.txt
  505. metadataBlock_0006.txt.out.expected
  506. metadataBlock_0007.txt
  507. metadataBlock_0007.txt.out.expected
  508. metadataBlockNested_0001.txt
  509. metadataBlockNested_0001.txt.out.expected
  510. nameAndArgs_0001.txt
  511. nameAndArgs_0001.txt.out.expected
  512. nameAndArgs_0002.txt
  513. nameAndArgs_0002.txt.out.expected
  514. nameAndArgs_0003.txt
  515. nameAndArgs_0003.txt.out.expected
  516. nameAndArgs_0004.txt
  517. nameAndArgs_0004.txt.out.expected
  518. nameAndArgs_0005.txt
  519. nameAndArgs_0005.txt.out.expected
  520. nameAndArgs_0006.txt
  521. nameAndArgs_0006.txt.out.expected
  522. nameAndArgs_0007.txt
  523. nameAndArgs_0007.txt.out.expected
  524. nameAndArgs_0008.txt
  525. nameAndArgs_0008.txt.out.expected
  526. nameAndArgs_0009.txt
  527. nameAndArgs_0009.txt.out.expected
  528. nameAndArgs_0010.txt
  529. nameAndArgs_0010.txt.out.expected
  530. nodeinfo_0001.txt
  531. nodeinfo_0001.txt.out.expected
  532. oneInline_0001.txt
  533. oneInline_0001.txt.out.expected
  534. oneInline_0002.txt
  535. oneInline_0002.txt.out.expected
  536. oneInline_0003.txt
  537. oneInline_0003.txt.out.expected
  538. oneInline_0004.txt
  539. oneInline_0004.txt.out.expected
  540. oneInline_0005.txt
  541. oneInline_0005.txt.out.expected
  542. oneInline_0006.txt
  543. oneInline_0006.txt.out.expected
  544. oneInline_0007.txt
  545. oneInline_0007.txt.out.expected
  546. oneInline_0008.txt
  547. oneInline_0008.txt.out.expected
  548. oneInline_0009.txt
  549. oneInline_0009.txt.out.expected
  550. oneInline_0010.txt
  551. oneInline_0010.txt.out.expected
  552. oneInline_0011.txt
  553. oneInline_0011.txt.out.expected
  554. oneInline_0012.txt
  555. oneInline_0012.txt.out.expected
  556. oneInline_0013.txt
  557. oneInline_0013.txt.out.expected
  558. oneInline_0014.txt
  559. oneInline_0014.txt.out.expected
  560. oneInline_0015.txt
  561. oneInline_0015.txt.out.expected
  562. oneInline_0016.txt
  563. oneInline_0016.txt.out.expected
  564. oneInline_0017.txt
  565. oneInline_0017.txt.out.expected
  566. oneInline_0018.txt
  567. oneInline_0018.txt.out.expected
  568. oneInline_0019.txt
  569. oneInline_0019.txt.out.expected
  570. oneInline_0020.txt
  571. oneInline_0020.txt.out.expected
  572. oneInline_0021.txt
  573. oneInline_0021.txt.out.expected
  574. oneInline_0022.txt
  575. oneInline_0022.txt.out.expected
  576. oneInline_0023.txt
  577. oneInline_0023.txt.out.expected
  578. oneInline_0024.txt
  579. oneInline_0024.txt.out.expected
  580. README.md
  581. recoverBlock_0001.txt
  582. recoverBlock_0001.txt.out.expected
  583. recoverBlocks_0001.txt
  584. recoverBlocks_0001.txt.out.expected
  585. role_0001.txt
  586. role_0001.txt.out.expected
  587. role_0002.txt
  588. role_0002.txt.out.expected
  589. role_0003.txt
  590. role_0003.txt.out.expected
  591. role_0004.txt
  592. role_0004.txt.out.expected
  593. role_0005.txt
  594. role_0005.txt.out.expected
  595. role_0006.txt
  596. role_0006.txt.out.expected
  597. role_0007.txt
  598. role_0007.txt.out.expected
  599. role_0008.txt
  600. role_0008.txt.out.expected
  601. role_0009.txt
  602. role_0009.txt.out.expected
  603. run_test.lean
  604. run_test.sh
  605. text_0001.txt
  606. text_0001.txt.out.expected
  607. text_0002.txt
  608. text_0002.txt.out.expected
  609. text_0003.txt
  610. text_0003.txt.out.expected
tests/docparse/README.md

Verso parser tests

The part of each .txt filename before the first _ selects the parser that reads it (see testConfigs in run_test.lean). The expected output records the resulting syntax tree, any parse errors, and, for parsers whose output reproduces their input exactly, a round-trip verdict from validateSourceInfo.

validateSourceInfo checks six properties:

  • No node has source info of its own; only atoms and identifiers carry any.
  • Every leaf has .original source info whose text is exactly the input at its recorded range.
  • The leaves are in order, and no two of them overlap.
  • The whitespace recorded on the leaves exactly fills the gaps between tokens.
  • Only the first leaf has leading whitespace, because the token before a leaf records the whitespace that precedes it.
  • Syntax.reprint reproduces the input.

The harness gives the first leaf the whitespace the input starts with, the role that a doc comment's opening delimiter plays in a file. Block-level configs run through blockStart, which consumes the whitespace before the fragment as the enclosing context does.

Configs that only classify input or discard their output (inlineTextChar, blockOpener, and the lookahead marker configs) skip the check. The check also runs for parses that reported errors, so the expected output files pin how the harness treats recovered and partial output. A successful parse has to pass the check. An errored parse records whatever verdict its recovery produces, ordinarily a failure at a <missing> leaf or an uncovered region.

The coverage_0001.txt entry leaves its own contents unparsed. It re-parses every input file in the directory instead. It fails when no successful parse result contains some syntax kind from Lean.Doc.Parser.documentKinds, and when a successful parse result contains a kind that is not a builtin syntax kind. Between them, the two checks keep documentKinds equal to the kinds the parser produces.

The blankPara_0001.txt entry re-parses every input file as well. It fails when a paragraph in a successful parse is written as nothing but whitespace. A paragraph contains content, so a run of empty lines is not a paragraph. It judges by the text as written, because an escape makes content out of the character it escapes: \ on a line of its own is a paragraph whose decoded content is a space.

Parser coverage audit

The table maps each production-level ParserFn in Lean.DocString.Parser to the test-file prefixes that exercise it. These productions also exercise the generic combinators (atLeastFn, asTokenFn, ignoreFn, withCurrentColumn, the recover* family, and so on). The recoverBlock/recoverBlocks prefixes also target the recovery paths.

ParserFnExercised by prefixes
valFnarg_val, arg, args, nameAndArgs
argFn (positional, named with and without parens, flags)arg, args, nameAndArgs, codeBlock, directive, role
argsFnargs, nameAndArgs
nameAndArgsFnnameAndArgs, codeBlock, directive, role
inlineTextCharFninlineTextChar, manyInlineTextChar, text
textFn (incl. escapes)text, emph, oneInline, blocks, document
linebreakFnblock, blocks, oneInline, document
emphFnemph, blocks, role
boldFnblocks, oneInline, role
codeFn (incl. backtick runs, space stripping, continuation lines)code, codeIndented, oneInline, blocks, role, documentIndented
mathFn ($ and $$)oneInline, documentIndented
linkFn, linkTargetFn (URL and reference targets)block, blocks, oneInline
imageFnblocks, document, oneInline
footnoteFnblock, blocks, oneInline
roleFn (bracketed and bracketless)role, block, oneInline
blockOpenerFnblockOpener
lookaheadUnorderedListMarkerlookaheadUnorderedListMarker
lookaheadOrderedListMarkerlookaheadOrderedListMarker
unorderedMarkersFn, numberingFn, listItemFn, unorderedListFn, orderedListFn (both numbering styles)blocks, block, directive
definitionListFn, descItemFnblocks
blockquoteFnblocks
paraFnblock, blocks, directive, document
headerFnheader, blocks
codeBlockFn (named and anonymous, indentation, blank lines)codeBlock, block
directiveFn (incl. nesting)directive, blocks
blockCommandFnblock, blocks
linkRefFnblocks
footnoteRefFnblocks
metadataBlockFn, metadataContentsmetadataBlock, blocks
blockFn, blocksFn, blocks1Fnblock, blocks, recoverBlock, recoverBlocks
documentFn (incl. empty, whitespace-only, tabs, CRLF input)document, documentIndented
blockTailWs, lineTailWs, wsFallbackblocks, document

Writing doc syntax in quotations

Each production has a parser of its own, so a quotation can write document syntax, as in `(Lean.Doc.Parser.Block.para| $inls*). Delimiter runs have their own parsers too. A quotation that leaves the delimiter open splices one in ($b:listMarker, $i:headerMarker, $d:emphDelimiter, $m:inlineMathMarker), instead of fixing a marker style or a header level.

There are three limitations.

A quotation cannot write literal content out. Content tokens have no delimiters of their own, so versoText, versoCode, and versoCodeBlock accept only antiquotations. Inline code has a further restriction. Backticks already have a meaning inside a quotation, so splice its delimiters as $d:codeDelimiter too.

A quotation cannot splice both halves of a description list item. Nothing that a quotation can see separates its inlines from its blocks.

The literal list form is ambiguous. In `(Lean.Doc.Parser.Block.ul| * $bs* * $cs*) an item's contents absorb the marker that follows. The real parser uses indentation to find the end of an item, and a quotation has no indentation. Splice the items instead, as `(Lean.Doc.Parser.Block.ul| $items*).