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

Tilde (~) character inside JSX component breaks in MDX v2 #1238

Closed
patrickarlt opened this issue Aug 26, 2020 · 5 comments
Closed

Tilde (~) character inside JSX component breaks in MDX v2 #1238

patrickarlt opened this issue Aug 26, 2020 · 5 comments
Labels
🗄 area/interface This affects the public interface 💪 phase/solved Post is done 👶 semver/patch This is a backwards-compatible fix 🐛 type/bug This is a problem

Comments

@patrickarlt
Copy link

Subject of the issue

Tildes (~) inside MDX blocks in v2 do not parse.

Your environment

N/A can be reproduced in the v2 playground https://mdx-git-next.mdx.vercel.app/playground.

Steps to reproduce

  1. Go to https://mdx-git-next.mdx.vercel.app/playground
  2. Enter ~1 foot. parses as expected.
  3. Replace with
    <Box>
    
    ~1 foot.
    
    </Box>
    
  4. Parse error

Expected behavior

Should parse successfully.

Actual behavior

5:7: Unexpected end of file in code, expected a corresponding fence for `~`

2020-08-26_16-48-18

@patrickarlt patrickarlt added 🐛 type/bug This is a problem 🙉 open/needs-info This needs some more info labels Aug 26, 2020
@patrickarlt
Copy link
Author

Current workaround would be to do something like:

<Box>

{`~`}1 foot.

</Box>

@wooorm
Copy link
Member

wooorm commented Aug 27, 2020

Nice catch!

The reason for that is that code should be skipped:

<A>
~~~
</A>
~~~
</A>

Or:

<A>`</A>`</A>

While correctly parsing code is a bit more involved, I chose to require that ` and ~ must be balanced.
Another workaround is to use character references: &#126; or &#x7e;

@patrickarlt
Copy link
Author

@wooorm Is correctly parsing code something that you want to keep this open for on the radar? These workarounds are all pretty acceptable but since this parses fine in v1 https://mdxjs.com/playground/ should it be logged as a breaking change somewhere.

@wooorm
Copy link
Member

wooorm commented Aug 29, 2020

I'd say both describe it in a migration guide, and keep it open while we're gathering more feedback from folks!

wooorm added a commit that referenced this issue Dec 11, 2020
This updates MDX to use and support remark@13, which comes with a new internal
parser (micromark), and supports CommonMark.
See <https://github.com/remarkjs/remark/releases/tag/13.0.0> for more
information.
In short, this means MDX parses markdown closer to what folks expect.
And it means all latest plugins work (again).

But it also means that parsing MDX syntax (JSX, expressions, ESM) got an update.
See: <https://github.com/micromark/micromark-extension-mdxjs> and
<https://github.com/syntax-tree/mdast-util-mdx> for the syntax.
In short, this means MDX parsing is now JavaScript-aware: import/exports are
actually parsed for being valid JavaScript.
Expressions previously counted braces, but now can include braces in strings or
comments or whatnot.
This also means we can drop Babel (in a future PR) because we already have a
JavaScript AST.

This also deprecates the packages `remark-mdxjs` (which is now the default in
`remark-mdx`), `remark-mdx-remove-exports`, and `remark-mdx-remove-imports`.

Related to GH-704.
Related to GH-1041.

Closes GH-720.
Closes GH-1028.
Closes GH-1050.
Closes GH-1081.
Closes GH-1193.
Closes GH-1238.
Closes GH-1283.
Closes GH-1316.
Closes GH-1318.
Closes GH-1341.
wooorm added a commit that referenced this issue Dec 15, 2020
This updates MDX to use and support remark@13, which comes with a new internal
parser (micromark), and supports CommonMark.
See <https://github.com/remarkjs/remark/releases/tag/13.0.0> for more
information.
In short, this means MDX parses markdown closer to what folks expect.
And it means all latest plugins work (again).

But it also means that parsing MDX syntax (JSX, expressions, ESM) got an update.
See: <https://github.com/micromark/micromark-extension-mdxjs> and
<https://github.com/syntax-tree/mdast-util-mdx> for the syntax.
In short, this means MDX parsing is now JavaScript-aware: import/exports are
actually parsed for being valid JavaScript.
Expressions previously counted braces, but now can include braces in strings or
comments or whatnot.
This also means we can drop Babel (in a future PR) because we already have a
JavaScript AST.

This also deprecates the packages `remark-mdxjs` (which is now the default in
`remark-mdx`), `remark-mdx-remove-exports`, and `remark-mdx-remove-imports`.

Related to GH-704.
Related to GH-1041.

Closes GH-720.
Closes GH-1028.
Closes GH-1050.
Closes GH-1081.
Closes GH-1193.
Closes GH-1238.
Closes GH-1283.
Closes GH-1316.
Closes GH-1318.
Closes GH-1341.
Closes GH-1367.

Reviewed-by: Christian Murphy <[email protected]>
@wooorm
Copy link
Member

wooorm commented Dec 18, 2020

Hi all! I’m going to close this as it landed on the main, the (now default) branch we’re using to gear up to the MDX@2 release.

The reason is so that it’s more clear which issues still need to be solved already and don’t require further work.

Expect another next release soonish, which might include it, or maybe it’s already released as a beta!

For more info, see #1041.

@wooorm wooorm closed this as completed Dec 18, 2020
@wooorm wooorm added ⛵️ status/released 🐛 type/bug This is a problem 👶 semver/patch This is a backwards-compatible fix 🗄 area/interface This affects the public interface and removed 🐛 type/bug This is a problem 🙉 open/needs-info This needs some more info labels Dec 18, 2020
@wooorm wooorm added the 💪 phase/solved Post is done label Dec 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🗄 area/interface This affects the public interface 💪 phase/solved Post is done 👶 semver/patch This is a backwards-compatible fix 🐛 type/bug This is a problem
Development

No branches or pull requests

2 participants