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

fix(docs): prevent mdx from transforming -- into – for commands #7622

Closed
wants to merge 1 commit into from

Conversation

elitalpa
Copy link
Contributor

Overview

Apparently any text in markdown gets processed and double dashes transformed.
If a command contains -- and we want it to be treated as a string, it should be put between {` and `} or between {" and "}.

Fixes #7616

Copy link

vercel bot commented Feb 17, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
19-react-dev ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 17, 2025 7:55am
react-dev ✅ Ready (Inspect) Visit Preview Feb 17, 2025 7:55am

@elitalpa
Copy link
Contributor Author

Comparing

Notice the -- in commands.

Before

Screenshot 2025-02-17 085243

After

Screenshot 2025-02-17 085319

Copy link

Size changes

📦 Next.js Bundle Analysis for react-dev

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@@ -33,7 +33,7 @@ The first step is to install a build tool like `vite`, `parcel`, or `rsbuild`. T
[Vite](https://vite.dev/) is a build tool that aims to provide a faster and leaner development experience for modern web projects.

<TerminalBlock>
npm create vite@latest my-app -- --template react
{`npm create vite@latest my-app -- --template react`}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dont think we should do this (making it string) We might want to check if this was working before and fix the root cause in TerminalBlock component. This component is in a lot of places.

Copy link
Contributor Author

@elitalpa elitalpa Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your comment, you are right to ask about the root cause and implications of this component being used in a lot of places so I've done more research into this.

not a bug but a feature ?

Actually it seems to be a feature of a markdown plugin that's causing this.
The plugin name is "retext-smartypants" and is implementing the smartypants syntax which transforms :

Dashes (“--” and “---”) into en- and em-dash entities
source (smartypant syntax docs) : daringfireball.net/projects/smartypants

The text inside the component gets treated as normal text because it's not put between {` `} or {" "} so it modifies the string before it gets to the TerminalBlock component.

Disabling this feature of the plugin might not be an option as this feature seem to be used in normal text across the docs.

Fast and Simple Solution

Putting the code between {` `} or {" "} makes the component receive the raw string.
This change doesn't need to be done everywhere, only when needed like here.

Using {` `} or {" "} or {' '} is something common in React's JSX syntax (the docs are written in MDX which is based on JSX) used for making sure certain characters are escaped when used as childrens of a component or html tag.

Alternative solution

The other alternative is to stop using the component directly but rather use markdown code blocks :
```bash
```
and maybe configure mdx to replace every code block with the TerminalBlock component. But this can require a lot more effort and impact many other pages.

Copy link
Contributor Author

@elitalpa elitalpa Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tldr :

  • root cause doesn't seem to be the TerminalBlock component but the retext-smartypants markdown plugin which transforms any text
  • this feature of the plugin seems to be used across the docs and disabling it doesn't seem to be an option
  • possibles solutions are
    • using curly braces (common in React) to escape characters
    • never using a React component for commands and using basic markdown codeblocks

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah the fix makes sense, we can fix it in terminal block if needed later

@elitalpa elitalpa mentioned this pull request Feb 17, 2025
rickhanlonii added a commit that referenced this pull request Feb 17, 2025
Co-authored-by: elitalpa <[email protected]>
@rickhanlonii
Copy link
Member

Thanks, merged this into #7624.

If you have a chance, it would be nice to audit all of the other usages to see if they have issues.

rickhanlonii added a commit that referenced this pull request Feb 17, 2025
* [Blog + Docs] Updates from feedback

* Merge in changes from #7618

Co-authored-by: Mark Erikson <[email protected]>

* Say the words "Vite", "Parcel", and "Rsbuild"

* Tweaks from feedback

* re-apply #7615

* merge in #7622

Co-authored-by: elitalpa <[email protected]>

---------

Co-authored-by: Mark Erikson <[email protected]>
Co-authored-by: elitalpa <[email protected]>
@elitalpa
Copy link
Contributor Author

Thanks, merged this into #7624.

If you have a chance, it would be nice to audit all of the other usages to see if they have issues.

From what I noticed, other commands are not using the TerminalBlock component but a markdown code block like :
image

So this explains why there wasn't an issue like this previously.

Or -D is used instead of --save-dev :
image

✅ Checked all the other usages, there seems to be no issue.

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.

[Bug]: Can't copy the right command from the command block | double dashes -- gets merged into a single dash -
4 participants