Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update: Replace Markdown parser (fixes #125, fixes #186) #188

Merged
merged 5 commits into from
May 26, 2021
Merged

Conversation

btmills
Copy link
Member

@btmills btmills commented May 20, 2021

The previous parser, remark-parse v7, included a transitive dependency on an npm package with a security vulnerability (see #186). Newer versions of remark-parse are wrappers around a new underlying parser, mdast-util-from-markdown, so we can use that directly.

I had thought the upgrade was going to be more difficult because the new parser no longer supplies per-line indent information, but we're already calculating it in getBlockRangeMap(), so I included the indentation in the each line's RangeMap and read from there instead.

The previous parser also failed to preserve \r\n line endings, replacing them all with \n. The new parser correctly preserves \r\n line endings, finally providing a fix for the failing test case I cherry-picked from #125. The improved behavior also uncovered an incorrect line ending test assertion that this commit corrects.

While this change is in theory fully compatible, containing just bug fixes, I'm tagging it Update: in case there are compatibility changes in the new parser. This is consistent with #175, which upgraded remark-parse v5 to v7 in a semver-minor Update: change.

Future versions of the Markdown processor don't include per-line indent
information. Thankfully, we're already calculating it in
`getBlockRangeMap()` because we need it to correctly map fix ranges for
lines that are under-indented to the left of their opening code fence.
This includes the indent in the `RangeMap` for each line and uses that
in `adjustBlock()` instead.

This uncovered an incorrect assertion in one of the tests, which
combined an indented code block, a message on a line with mixed spaces
and tabs indentation, and an under-indented final line. The message
column was incorrectly asserted as being in the whitespace indentation
before the line.
Originally discovered in #120 and cherry-picked from #125.
The previous parser, `remark-parse` v7, included a transitive dependency
on an npm package with a security vulnerability. Newer versions of
`remark-parse` are wrappers around a new underlying parser,
`mdast-util-from-markdown`, so we can use that directly.

The previous parser also failed to preserve `\r\n` line endings,
replacing them all with `\n`. The new parser correctly preserves `\r\n`
line endings, finally providing a fix for the failing test case I
cherry-picked in the previous commit. The improved behavior also
uncovered an incorrect line ending test assertion that this commit
corrects.

While this change is in theory fully compatible, containing just bug
fixes, I'm tagging it `Update:` in case there are compatibility changes
in the new parser. This is consistent with #175, which upgraded
`remark-parse` v5 to v7 in a semver-minor `Update:` change.
@eslint-github-bot

This comment has been minimized.

@btmills btmills changed the title Update: Replace Markdown parser (fixes #125, fixes #186) Update: Replace Markdown parser (fixes #125, fixes #186) May 20, 2021
@btmills btmills merged commit 32203f6 into main May 26, 2021
@btmills btmills deleted the issue186 branch May 26, 2021 04:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants