Skip to content

Commit 1969cf4

Browse files
authored
fix: upgrade shiki, remove embedded languages workaround (#4566)
1 parent b930b8d commit 1969cf4

File tree

4 files changed

+61
-71
lines changed

4 files changed

+61
-71
lines changed

docs/.vitepress/config/shared.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ export const shared = defineConfig({
2424

2525
markdown: {
2626
math: true,
27-
// Load these languages ahead of time for embedded code highlighting
28-
// TODO: remove this when Shiki fixes markdown embedded language loading
29-
languages: ['js', 'ts', 'html', 'vue-html', 'css', 'yaml', 'sh'],
3027
codeTransformers: [
3128
// We use `[!!code` in demo to prevent transformation, here we revert it back.
3229
{

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@
9898
"@docsearch/css": "^3.8.3",
9999
"@docsearch/js": "^3.8.3",
100100
"@iconify-json/simple-icons": "^1.2.24",
101-
"@shikijs/core": "^2.3.2",
102-
"@shikijs/transformers": "^2.3.2",
103-
"@shikijs/types": "^2.3.2",
101+
"@shikijs/core": "^2.4.1",
102+
"@shikijs/transformers": "^2.4.1",
103+
"@shikijs/types": "^2.4.1",
104104
"@vitejs/plugin-vue": "^5.2.1",
105105
"@vue/devtools-api": "^7.7.2",
106106
"@vue/shared": "^3.5.13",
@@ -109,7 +109,7 @@
109109
"focus-trap": "^7.6.4",
110110
"mark.js": "8.11.1",
111111
"minisearch": "^7.1.1",
112-
"shiki": "^2.3.2",
112+
"shiki": "^2.4.1",
113113
"vite": "^6.1.0",
114114
"vue": "^3.5.13"
115115
},

pnpm-lock.yaml

Lines changed: 51 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/node/markdown/plugins/highlight.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {
77
type TransformerCompactLineOption
88
} from '@shikijs/transformers'
99
import { customAlphabet } from 'nanoid'
10-
import type { LanguageRegistration, ShikiTransformer } from 'shiki'
11-
import { createHighlighter, isSpecialLang } from 'shiki'
10+
import type { ShikiTransformer, BundledLanguage } from 'shiki'
11+
import { createHighlighter, guessEmbeddedLanguages } from 'shiki'
1212
import type { Logger } from 'vite'
1313
import type { MarkdownOptions, ThemeOptions } from '../markdown'
1414
import c from 'picocolors'
@@ -71,16 +71,6 @@ export async function highlight(
7171
langAlias: options.languageAlias
7272
})
7373

74-
async function loadLanguage(name: string | LanguageRegistration) {
75-
const lang = typeof name === 'string' ? name : name.name
76-
if (
77-
!isSpecialLang(lang) &&
78-
!highlighter.getLoadedLanguages().includes(lang)
79-
) {
80-
await highlighter.loadLanguage(lang as any)
81-
}
82-
}
83-
8474
await options?.shikiSetup?.(highlighter)
8575

8676
// TODO: remove explicit matchAlgorithm in shiki v3
@@ -129,7 +119,7 @@ export async function highlight(
129119
.toLowerCase() || defaultLang
130120

131121
try {
132-
await loadLanguage(lang)
122+
await highlighter.loadLanguage(lang as any)
133123
} catch {
134124
logger.warn(
135125
c.yellow(
@@ -163,6 +153,9 @@ export async function highlight(
163153

164154
str = removeMustache(str).trimEnd()
165155

156+
const embeddedLang = guessEmbeddedLanguages(str, lang, highlighter)
157+
await highlighter.loadLanguage(...(embeddedLang as BundledLanguage[]))
158+
166159
const highlighted = highlighter.codeToHtml(str, {
167160
lang,
168161
transformers: [

0 commit comments

Comments
 (0)