executablebooks / MyST-Parser

An extended commonmark compliant parser, with bridges to docutils/sphinx
https://myst-parser.readthedocs.io
MIT License
736 stars 195 forks source link

👌 IMPROVE: Directive option parsing #796

Closed chrisjsewell closed 9 months ago

chrisjsewell commented 1 year ago

Previously, directive options blocks have been parsed using a "full" YAML parser. This is unnecessary, and problematic since only a mapping of string key to string value is required, not any of the other YAML constructs; sequences, flow style, anchors, aliases, tags, ..., It required addition handling of non-string values (failing or converting back to strings), and could also cause confusion when values were not parsed as strings (see e.g. #712).

This commit, introduces a new "restricted" YAML parser (adapted from pyyaml), which will maintain back-compatibilty with existing options blocks, but will only parse mappings of string keys to string values (including multi-line strings and comment parsing). Parsing errors are also improved, by reporting the exact line on which the error occured.

closes #382

codecov[bot] commented 1 year ago

Codecov Report

Attention: 46 lines in your changes are missing coverage. Please review.

Comparison is base (1f61fa0) 90.26% compared to head (86dc085) 90.08%.

Files Patch % Lines
myst_parser/parsers/options.py 89.57% 39 Missing :warning:
myst_parser/parsers/directives.py 88.67% 6 Missing :warning:
myst_parser/mocking.py 0.00% 1 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #796 +/- ## ========================================== - Coverage 90.26% 90.08% -0.19% ========================================== Files 23 24 +1 Lines 2970 3360 +390 ========================================== + Hits 2681 3027 +346 - Misses 289 333 +44 ``` | [Flag](https://app.codecov.io/gh/executablebooks/MyST-Parser/pull/796/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=executablebooks) | Coverage Δ | | |---|---|---| | [pytests](https://app.codecov.io/gh/executablebooks/MyST-Parser/pull/796/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=executablebooks) | `90.08% <89.27%> (-0.19%)` | :arrow_down: | Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=executablebooks#carryforward-flags-in-the-pull-request-comment) to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.