Warning
This is an internal project, and is not intended for public use. No support or stability guarantees are provided.
A rehype plugin that improves the visual appearance of HTML tags within inline <code> elements by wrapping angle brackets with their associated tag names into single styled spans.
The enhanceCodeInlineElements plugin transforms syntax-highlighted inline code to make HTML tags more visually cohesive. It identifies patterns where < or </ precedes a highlighted tag name followed by >, and wraps the entire tag (including brackets) into the highlighting span.
<, tag name, and > into a single styled spanpl-ent (HTML entities) and pl-c1 (React components)<div><span><pre> elementsThis plugin is part of @mui/internal-docs-infra and doesn't need separate installation.
import { unified } from 'unified';
import rehypeParse from 'rehype-parse';
import rehypeStringify from 'rehype-stringify';
import enhanceCodeInlineElements from '@mui/internal-docs-infra/pipeline/enhanceCodeInlineElements';
const processor = unified()
.use(rehypeParse, { fragment: true })
.use(enhanceCodeInlineElements)
.use(rehypeStringify);
const result = await processor.process(
'<code class="language-tsx"><<span class="pl-ent">div</span>></code>',
);
console.log(String(result));
// Output: <code class="language-tsx"><span class="pl-ent"><div></span></code>
This plugin is designed to run after syntax highlighting has been applied:
import transformHtmlCodeInlineHighlighted from '@mui/internal-docs-infra/pipeline/transformHtmlCodeInlineHighlighted';
import enhanceCodeInlineElements from '@mui/internal-docs-infra/pipeline/enhanceCodeInlineElements';
const processor = unified()
.use(rehypeParse, { fragment: true })
.use(transformHtmlCodeInlineHighlighted)
.use(enhanceCodeInlineElements) // Must come after highlighting
.use(rehypeStringify);
<!-- Input (after syntax highlighting) -->
<code class="language-tsx"><<span class="pl-ent">div</span>></code>
<!-- Output -->
<code class="language-tsx"><span class="pl-ent"><div></span></code>
<!-- Input -->
<code class="language-tsx"><<span class="pl-c1">Box</span>></code>
<!-- Output -->
<code class="language-tsx"><span class="pl-c1"><Box></span></code>
<!-- Input -->
<code class="language-tsx"></<span class="pl-ent">div</span>></code>
<!-- Output -->
<code class="language-tsx"><span class="pl-ent"></div></span></code>
<!-- Input -->
<code><<span class="pl-ent">div</span>><<span class="pl-c1">Box</span>></code>
<!-- Output -->
<code><span class="pl-ent"><div></span><span class="pl-c1"><Box></span></code>
Tags with attributes are fully supported - everything from the opening < to the closing > or /> is wrapped:
<!-- Input -->
<code><<span class="pl-c1">Box</span> flag option={true} /></code>
<!-- Output -->
<code><span class="pl-c1"><Box flag option={true} /></span></code>
<!-- Input -->
<code><<span class="pl-ent">div</span> className="test"></code>
<!-- Output -->
<code><span class="pl-ent"><div className="test"></span></code>
The plugin looks for this specific pattern in inline code elements:
< or </pl-ent or pl-c1>, />, or />When all three conditions are met, it consolidates everything from the opening bracket through the closing bracket into a single span.
Input: text("<") + span.pl-ent("div") + text(" className='x'>")
↓
Output: span.pl-ent("<div className='x'>")
The plugin uses a queue-based approach to handle consecutive tags:
> is re-queued><span> to be processed correctlySelf-closing tags are fully supported, with or without a space before />:
<!-- Input: with space -->
<code><<span class="pl-ent">br</span> /></code>
<!-- Output -->
<code><span class="pl-ent"><br /></span></code>
<!-- Input: without space -->
<code><<span class="pl-ent">input</span>/></code>
<!-- Output -->
<code><span class="pl-ent"><input/></span></code>
Code inside <pre> elements is skipped to avoid interfering with block code formatting:
<!-- Input: NOT processed -->
<pre><code><<span class="pl-ent">div</span>></code></pre>
<!-- Output: unchanged -->
<pre><code><<span class="pl-ent">div</span>></code></pre>
Spans without matching brackets are left unchanged:
<!-- Missing < -->
<code><span class="pl-ent">div</span>></code>
<!-- unchanged -->
<!-- Missing > -->
<code><<span class="pl-ent">div</span></code>
<!-- unchanged -->
Without this plugin, HTML tags in inline code are styled inconsistently:
/* Before: only the tag name gets color */
<span class="pl-ent">div</span> /* colored */
< /* default text color */
> /* default text color */
/* After: the entire tag is styled uniformly */
<span class="pl-ent"><div></span> /* all colored together */
This makes inline code snippets like <Button> or <div> more readable and visually appealing, matching how developers typically think of HTML tags as complete units.
This plugin should run after other code enhancement plugins:
transformHtmlCodeInlineHighlighted - Applies syntax highlightingenhanceCodeExportLinks - Links type references to documentationenhanceCodeInlineElements - Consolidates tag brackets (this plugin)Running it earlier would prevent the pattern from matching since the highlighting spans wouldn't exist yet.