From 48095814bc064d95fd4551141828217412e5ab9f Mon Sep 17 00:00:00 2001 From: crazylogic03 Date: Wed, 26 Nov 2025 22:17:14 +0530 Subject: [PATCH 1/8] changes done --- docs/packages/transformers.md | 19 +++++++ packages/transformers/src/index.ts | 1 + .../src/transformers/remove-comments.ts | 51 +++++++++++++++++++ packages/transformers/test/fixtures.test.ts | 16 ++++++ .../test/fixtures/remove-comments/basic.js | 6 +++ .../remove-comments/basic.js.output.html | 6 +++ 6 files changed, 99 insertions(+) create mode 100644 packages/transformers/src/transformers/remove-comments.ts create mode 100644 packages/transformers/test/fixtures/remove-comments/basic.js create mode 100644 packages/transformers/test/fixtures/remove-comments/basic.js.output.html diff --git a/docs/packages/transformers.md b/docs/packages/transformers.md index 5baf924c6..7edc592be 100644 --- a/docs/packages/transformers.md +++ b/docs/packages/transformers.md @@ -544,3 +544,22 @@ CSS output: --shiki-light-bg: #ffffff; } ``` + +### `transformerRemoveComments` + +Remove comments from the code. + +```ts +import { transformerRemoveComments } from '@shikijs/transformers' + +const html = await codeToHtml(code, { + lang: 'ts', + transformers: [ + transformerRemoveComments(), + ], +}) +``` + +Options: + +- `removeEmptyLines`: Remove lines that become empty after removing comments. Default `true`. diff --git a/packages/transformers/src/index.ts b/packages/transformers/src/index.ts index a410acf0b..7bc630870 100644 --- a/packages/transformers/src/index.ts +++ b/packages/transformers/src/index.ts @@ -9,6 +9,7 @@ export * from './transformers/notation-focus' export * from './transformers/notation-highlight' export * from './transformers/notation-highlight-word' export * from './transformers/notation-map' +export * from './transformers/remove-comments' export * from './transformers/remove-line-breaks' export * from './transformers/remove-notation-escape' export * from './transformers/render-indent-guides' diff --git a/packages/transformers/src/transformers/remove-comments.ts b/packages/transformers/src/transformers/remove-comments.ts new file mode 100644 index 000000000..960bd60ee --- /dev/null +++ b/packages/transformers/src/transformers/remove-comments.ts @@ -0,0 +1,51 @@ +import type { ShikiTransformer } from '@shikijs/types' + +export interface TransformerRemoveCommentsOptions { + /** + * Remove lines that become empty after removing comments. + * @default true + */ + removeEmptyLines?: boolean +} + +/** + * Remove comments from the code. + */ +export function transformerRemoveComments( + options: TransformerRemoveCommentsOptions = {}, +): ShikiTransformer { + const { removeEmptyLines = true } = options + + return { + name: '@shikijs/transformers:remove-comments', + preprocess(_code, options) { + const opts = options as any + if (opts.includeExplanation !== true) + opts.includeExplanation = true + }, + tokens(tokens) { + const result = [] + for (const line of tokens) { + const hasComment = line.some(token => + token.explanation?.some(exp => exp.scopes.some(s => s.scopeName.startsWith('comment'))), + ) + + const filteredLine = line.filter((token) => { + const isComment = token.explanation?.some(exp => + exp.scopes.some(s => s.scopeName.startsWith('comment')), + ) + return !isComment + }) + + if (removeEmptyLines && hasComment) { + const isAllWhitespace = filteredLine.every(token => !token.content.trim()) + if (isAllWhitespace) + continue + } + + result.push(filteredLine) + } + return result + }, + } +} diff --git a/packages/transformers/test/fixtures.test.ts b/packages/transformers/test/fixtures.test.ts index d8496886b..a2300ea77 100644 --- a/packages/transformers/test/fixtures.test.ts +++ b/packages/transformers/test/fixtures.test.ts @@ -10,6 +10,7 @@ import { transformerNotationFocus, transformerNotationHighlight, transformerNotationWordHighlight, + transformerRemoveComments, transformerRemoveLineBreak, transformerRemoveNotationEscape, transformerRenderWhitespace, @@ -265,3 +266,18 @@ body { margin: 0; } .line { display: block; width: 100%; height: 1.2em; } `, ) + +suite( + 'remove-comments', + import.meta.glob('./fixtures/remove-comments/*.*', { query: '?raw', import: 'default', eager: true }), + [ + transformerRemoveComments(), + transformerRemoveLineBreak(), + ], + code => `${code} +`, +) diff --git a/packages/transformers/test/fixtures/remove-comments/basic.js b/packages/transformers/test/fixtures/remove-comments/basic.js new file mode 100644 index 000000000..8f1116655 --- /dev/null +++ b/packages/transformers/test/fixtures/remove-comments/basic.js @@ -0,0 +1,6 @@ +// This is a comment +const x = 1; // Inline comment +/* Block comment */ +const y = 2; + +// Another comment diff --git a/packages/transformers/test/fixtures/remove-comments/basic.js.output.html b/packages/transformers/test/fixtures/remove-comments/basic.js.output.html new file mode 100644 index 000000000..8d2f7c249 --- /dev/null +++ b/packages/transformers/test/fixtures/remove-comments/basic.js.output.html @@ -0,0 +1,6 @@ +
const x = 1; const y = 2;
+ \ No newline at end of file From f064268a16661053b2c191be3feddec7c5771b26 Mon Sep 17 00:00:00 2001 From: Bitshifter-9 Date: Wed, 26 Nov 2025 23:00:28 +0530 Subject: [PATCH 2/8] Fixed Files --- test/exports/@shikijs/transformers.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/test/exports/@shikijs/transformers.yaml b/test/exports/@shikijs/transformers.yaml index 225c8df80..c4bf27d20 100644 --- a/test/exports/@shikijs/transformers.yaml +++ b/test/exports/@shikijs/transformers.yaml @@ -12,6 +12,7 @@ transformerNotationHighlight: function transformerNotationMap: function transformerNotationWordHighlight: function + transformerRemoveComments: function transformerRemoveLineBreak: function transformerRemoveNotationEscape: function transformerRenderIndentGuides: function From 09d6263403171dbe9f6a6f01d49029585adc2904 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:21:25 +0900 Subject: [PATCH 3/8] chore: update --- docs/packages/transformers.md | 25 ++++++++++++++++++- packages/shiki/test/bundle.test.ts | 2 +- .../src/transformers/remove-comments.ts | 5 ++-- packages/transformers/test/fixtures.test.ts | 6 ++++- packages/types/src/options.ts | 2 +- 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/packages/transformers.md b/docs/packages/transformers.md index 7edc592be..45d2ba457 100644 --- a/docs/packages/transformers.md +++ b/docs/packages/transformers.md @@ -547,19 +547,42 @@ CSS output: ### `transformerRemoveComments` -Remove comments from the code. +Remove comments from the code. It works by checking the internal grammar token metadata to determine if the token is a comment. + +It requires `includeExplanation: true` to work. ```ts import { transformerRemoveComments } from '@shikijs/transformers' const html = await codeToHtml(code, { lang: 'ts', + includeExplanation: true, transformers: [ transformerRemoveComments(), ], }) ``` +For example: + +````md +```js +// This is a comment +const x = 1; // Inline comment +/* Block comment */ +const y = 2; + +// Another comment +``` +```` + +Renders: + +```js +const x = 1 +const y = 2 +``` + Options: - `removeEmptyLines`: Remove lines that become empty after removing comments. Default `true`. diff --git a/packages/shiki/test/bundle.test.ts b/packages/shiki/test/bundle.test.ts index 481ccb377..63e10507e 100644 --- a/packages/shiki/test/bundle.test.ts +++ b/packages/shiki/test/bundle.test.ts @@ -7,7 +7,7 @@ it('bundle-full', async () => { })) expect(highlighter.getLoadedLanguages().length) - .toMatchInlineSnapshot(`331`) + .toMatchInlineSnapshot(`332`) }) it('bundle-web', async () => { diff --git a/packages/transformers/src/transformers/remove-comments.ts b/packages/transformers/src/transformers/remove-comments.ts index 960bd60ee..6f1b5289f 100644 --- a/packages/transformers/src/transformers/remove-comments.ts +++ b/packages/transformers/src/transformers/remove-comments.ts @@ -19,9 +19,8 @@ export function transformerRemoveComments( return { name: '@shikijs/transformers:remove-comments', preprocess(_code, options) { - const opts = options as any - if (opts.includeExplanation !== true) - opts.includeExplanation = true + if (options.includeExplanation !== true && options.includeExplanation !== 'scopeName') + throw new Error('`transformerRemoveComments` requires `includeExplanation: true` to work') }, tokens(tokens) { const result = [] diff --git a/packages/transformers/test/fixtures.test.ts b/packages/transformers/test/fixtures.test.ts index a2300ea77..c1bf25967 100644 --- a/packages/transformers/test/fixtures.test.ts +++ b/packages/transformers/test/fixtures.test.ts @@ -1,6 +1,6 @@ /// -import type { ShikiTransformer } from 'shiki' +import type { CodeToHastOptions, ShikiTransformer } from 'shiki' import { codeToHtml } from 'shiki' import { describe, expect, it } from 'vitest' import { @@ -26,6 +26,7 @@ function suite( transformers: ShikiTransformer[], replace?: (code: string) => string, outputSuffix = '', + options: Partial = {}, ) { describe(name, () => { for (const path of Object.keys(files)) { @@ -37,6 +38,7 @@ function suite( const ext = path.split('.').pop()! let code = await codeToHtml(files[path], { + ...options, lang: ext, theme: 'github-dark', transformers, @@ -280,4 +282,6 @@ body { margin: 0; } .shiki { padding: 1em; } .line { display: block; width: 100%; height: 1.2em; } `, + undefined, + { includeExplanation: true }, ) diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index 0ce4d4a40..99aaff118 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -142,7 +142,7 @@ export interface CodeToHastOptionsCommon extends TransformerOptions, DecorationOptions, - Pick { + Pick { lang: StringLiteralUnion From f3b094d276a07638ea0a840221f14148cabcd2b8 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:25:16 +0900 Subject: [PATCH 4/8] chore: update --- docs/components.d.ts | 5 ++++- docs/packages/markdown-it.md | 1 + docs/packages/transformers.md | 16 ++++++++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/components.d.ts b/docs/components.d.ts index 0fbc1d6ac..4367f3ce8 100644 --- a/docs/components.d.ts +++ b/docs/components.d.ts @@ -1,8 +1,11 @@ /* eslint-disable */ // @ts-nocheck +// biome-ignore lint: disable +// oxlint-disable +// ------ // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 -// biome-ignore lint: disable + export {} /* prettier-ignore */ diff --git a/docs/packages/markdown-it.md b/docs/packages/markdown-it.md index 510e64c58..b32341d4b 100644 --- a/docs/packages/markdown-it.md +++ b/docs/packages/markdown-it.md @@ -52,6 +52,7 @@ md.use(await Shiki({ You can pass [transformers](/guide/transformers) to the plugin options to customize the highlighted code. ```ts twoslash +// @twoslash-cache: {"v":1,"hash":"7251d42df549db899085560c6ca05a99dc9f338642b7849507ef0ead24fa6dba","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAMr52Aa3aMIWcZLiJeAWWal5UCAHcwASTSyF7APKqJYHpoAKpCAFt2cGAB5Gr3fqMwdjRNHT0DYzM+AF4APl4iCHYoWIAdINcsCFI0GTlFShA4NF0GRAB2KlYYMABzNHwkAFYqEtJamDKQCwKq9jBcRAAGKhF8XWYxMiRygF8KdGxBgmJp1roulg4uPiFRNSk0UmZ7fmzXMgA5CBKDgBF2fn5lW3UAfk0AFWPT86ub5j3R78GwHBx5SzfE5wM6kC6kdLsTLZXJHaGw+HXW52B5PQoGEQIRAgACqnl4AANkABCETQGC8ADUjIAuhTeCcoJSaXTYLwALT8tm8NAQXh+PQcqCwLmc3ikGCuVZcjgDOAAOkKxVKzRGIGqdQaSAATABmVq6DpdNG/OH/bGSXH8QqqwYARlG42OU3IiAAnPNFjg8IQSOR1vQmGxODxeP0aKR+JMGWEApE0OktjG+HT7LlUxFTCFtP5C2YAMLqI6CMTZRHInIl8KBMz4iCEvA6fq8LC6TykAD0CrAsAVpF4IlYXA16XSAGIFwveGTmB1Z2AKZuAFbMIhcESkdiqdIDge8SCwdVbuAUXipECT6fsET33iGZgYRDpPfjgst3LRPKMAAI6COwCqMAA5BKaZgPywSQdwFDpLwqHilygEDIYTawWYjDcAA3N+uhAXAgisAB6HqsOo5QXO4qloE8G5KQ5EwAAXux1KIURYAnmeF4wFeN4ivgDJwMwFy3gARoIuSGME+C8GRtS6F+YA/uhvCAQqoHgTAUEwYWzGIfhvGaQqZEUdpVE0WQdEMc2xjMfKbGcdxhHrqevDSS4hj9m+ikQHJvAAIJaHct7MNKMBcqKd4gApI5GK+kjKQeR65KwEDRfxvBYjAt4NGQDK6AykC8FAXD4OqxHjq4GGBclhjqkZgTBGZdWkeRlENdRNS0ZB9Ftc5wSudU7k8ekm4Uuu0j9LU1S8K6QEjmQC23gpDTBbkvbHLUxxYEphiHep03bru+6HseGkkQ1Nm6WBEHQYxo1oKZnm3eOlk9TZfV2aQJhgK6UEAPqgyNcHBOD40cVxU0bpu66LkuACitCSVg1TrjNO57nAGU3d5dKuEqYAweK9JdfdOkgU9BkvU5UPvdwUEk2TMEI3lsBJr9SqwNTjWPfphmvczH28XlNTMNJS0wGGGANAtgsPXTIuM7BJms8AKG8PgaCuKwmjVoVuuqoo/CfiKrGm1IIrYBAB3MEdZDGzb6SzJ9M3IyjMgYGAJS0Hr7C1PgHCh+IdQ49ucBdWH16q3pz1yKH4f68JiG8N5+toFgGininYch/r17qtktQDuumk00BScM5DWuMDrduF2nxZ7GIdi8IwxSkLeU51HwzdoXG/DdwPtS8AAZFPeusKXVoADInLUgirgZE/cEPusj0cGC8MPI9oQqaCCKQUjxxqrfF2gjAT7evdFTb3DqnurCCDAvFH7wswToCYzd3BkPWYO8f7rhHifM+UhIKQQIlnM8ghyQbDIGANglUYC82svAEQztlZ2xAWAT2vFvZ8TAFYccW0lJCFYKwN8h0cDjlWKQQ8fJGCPF4BgYK54YCxQ5HAOAIcpCPn4SKMUFIvBYAVLECk3AzqIwpHjK6mU47zzgInemUFr4RwznwbOaBc75wHFokuGpy6V1Id5UKYg160J5swX6b8P6xy+lpWmddRZM0bofYx7dhCdzSj3I4/cV7bztqhdhd8V7T1npfdUS8V5rw6JEweoTv57wPqAiBnQoG8EghIhUE4pz8OiPeS+95YheF5DAWIkEmSZO/iPWJPjkm1AfkE62H8X6OIZIyepDTUJ5IHFUipA5JHVNgfU3+OC0AAMYEAg+BCR4ENAZA8+uT8kMmEXAEpBBVHlMqfSGpTIqJyXYKwDU2DnYwAABIG1YIE0gfBGTrKGYcrwoypETPwR7L2m4tRtDKG6N0xoqg1HqI0RAbo9RtCtJ2MWrY+gDBNJ6CYPoZiBmoEsEMTDCg0EjMSXMxR0KhHhQwKg2ochIDdAAFj9KCw0EKQXUEtJ0PADUXT9EGNSlF3oExIAAGwYswMGYkoY1jUA2FGbYsY/zpnwiSpmZhu6MmNLwJh2Voo8HrFkRssqixtg7MSLsUg9r9iHANEq44tm1VISjeiK41ykNxpdAm10MxgG8oJYSt57xbOfK+d8n4up6qVW4jRGtjIISQqAmuWEcJllvp9Cy8BfqAX+ha0gDkG5jVYhNeGn08peuvEVMSylJKFR8iFShylBCqVIOpauQs1bPWzSzTqLifrWTTVAfqa1M1DUcprHNbl82Sw9WeXyRgAqUJ2mFCKUUYpxTFPeJKERUpSFdZlZaOUoB5QKiWkqHICkVSqnAGqKtAKrqMK1MWHUk0kU7b1HtAMs1ixcrmuGHliFI1IfNOoS0VoAw2oFbaIU9qrkOsdU60cFEusJu6xt6j1atoll1R9f1n0ZqBiDSC4NW0ww/ZNX5s1bW+3RpjbGTqLr43g3ldmkgKb8xgBe2u4aUOs0gvR8m/gubjvQZg3ITGWPCxbW+qN7apaoNlgyeWZBFZyCji4muIn65ibbd4u5bsP7ITtubR4VsTY6dQsKx2kHXYdOY4Q4jPtFx+wDswIOPi8HnQUc4zSl8kPJ2Lm3HR8C9b6LzogAu3mb6lzMVXO6Tb3ERqYuJ7xIWI6aA7gcbuj9lohIyWE0e48okzzngvToy86iJI3iE1JR90mH2/qsi+qj1TNPvspdpJsulsA/l/I+Uz/5KTmaDYBoDllZZq7k2BfnEEyfoCgtBdjfqXKwHg1CBCiEufXOQkDVDyK0JOs7BhaqwwsIZGwsenDBDcN4U+WoQiilqPiuIsZ0jZEwcUZum67nVGeYZj43zeiDFBaMQlkxZd2jmLylY0+02MH2Ost0tzkWPseKHep3WPikt+JSw84Jg9MsjwiRPaJ+WNTxOK+vFpW9scVdIPvKrR9ht5LGYU6cOyykgAqcM2pvSsv9LQk0gHt9GtpZa6/NrPS+n9MGcM9592vnfy6zMnr8zgCLLQoNrJp81l04KVspneyWcHNgEc55fVTnnPVHNm5dyHlPJeRLj54yOtLeI/8nUkKmjcv1GCo0kLoUsq6CGsl+pOVIDd2MVFfLIVuiFVi0VOKIxdEJYJqACrcL+4pYC/lAAOel4LkXMvaKy4k7LEWDH5TyyYYehiR5FSsMMuLJXEl8J0QgUA+B+/VONxgWNa39CcO/Wo/R5qZGqLI+N/5lWqvVTungBqiQgAAFQh/6DLaos/1yLx3cpHAIhHjsF4Z3vvUhq195ICaiYrg1HxjFCIM+w5dp9jIHGPMJwRBCXSGYSCaityINyMwGtdbRF/xoUpD336F8CgFvHAzP24HZGrSv2YQWhtXnDIwxkH0sxc2e1oxcWCDIEBGyHhxizen5FhHgmBk5QRkQzDWQzUw+lFxHjb08DYQTBwL7lyTOAgFBgVCxmTEglvEgjxXelvGSy7kYFFHkBqBEmSFoHKy5zQhELEOQAkJZHVFzBoADhslkPsHkKgFoEUOUJqDQH6k4Of0YAHFYIHFaVyWkl0ARmkMW0d3JQBSpXKA9HdwZSQHNFz1hWJHGw5SRUQBLwfC9DL2mEQFNEr2WDFXDAlXxRACzB2AhEUBeDBCTwTR6GsFeHsGH2cDcA8G8F8FvWLD9xiHiESGSDSAyB1VyFSKd0pUhXT2cINGz0QBaA8Pz26HyHYB8OL1LzRUhVCIWExSrwiNr2iI7xcAYUwD4ErFgFBDsDgC0B6iPGqE+DEguDgC8AACFhAoBqgoBljFRql1RipVinBShOBWAvAAAlGAOkUgKALwXuYDPYi4K4vvXuQEOwUKMAfeAAHxkCOAWkXiwOOFYBJCCEkA2K2J2KeIrQeLqFiHhOnzwFCgYiwDVTHjpGynHFQVWP/yOPgBtWWI8A5BoSnQ4S4XijgE3303FAWKxgZDxLUVhFEgZA6AGGOBoC5CqQQPkTQGcR8TICUPpE+AgFuUNkYCqVvEPgnk0EgmvG4N1gZM0GpzbhlKICwP4RgH5DbnlKyyqj0FVPVM8H5D1PkB1MWx+RW1IQAHUzlaFWTsCaA5EZp9ZDZ0h7jewN1MBqgdkMTshEA5wgU3QCJBQz1LBjT/B/Snh+AiIWcql3lKSTgyiZpcVVwiRkBkAigeFCgc5AtTw+8GhBBpJBTXABxQzFBrxSz2i5w24TTjSbF+QGSQAWQWR7Dnc3Q/R6iPcIV/CYVWjGyi8Zhuiw9jQwjsUa9Y8mBJEVAyAJjlob5NB7w1SaANStSb57xqiyhjQhhmiGjPdmjeyug25OikBM8AjQ9gjqVRzo9xyojNgpzxiMA+ATSFyQAlz4AjSTT1zWyaizR3DdyIU3cDy8ATTjz/QhyLyrzq9xU+DJyxiZzHzeAoRbR4QZj1BDifgYQ/hSA4APh4j2AkLMK7RSBkAWReBfitiMFOUoBETiQCKMQyBGTcDio8KewjwYBXRNRvzNz+UmV/yqUmUgLiQbRCL4QEABzw9wLfQRz+jhVwiY9bypVsxrZ0QsKsR3jHRgREjZjcK6LVKAQgQnhUKMjNBUjdKiLtUURlLkL7R1KwAnQaLSRyQqRaR6QmRWR2Q5RnKqkBQhR2R4oKZooZQOQRwgIlQSAVROUNQNyTR09eKuyTR3DBLqAML6LSA1KDLnRxLgVJKg9ZgWyHx6Q8AkQKiWL+AXBXBckAABMs9gCslDCyxsYAKykSmyjKn+AQcqqqmqis4S1KuASCBq/MUlDqtwXJeq0hePVxEfOVbgdcI3eg5gd8MaVIpuBUlY+AJU0BFU3JN8lc7UozNCZ8naw0zUk0s0n+A63qrCjQXgZAUBK6oi9KnETS6NO2Fsn5bgQoC4EoJAUAZBewOwPAXkkAWYWYIAA=="} import Shiki from '@shikijs/markdown-it' import { transformerNotationDiff } from '@shikijs/transformers' import MarkdownIt from 'markdown-it' diff --git a/docs/packages/transformers.md b/docs/packages/transformers.md index 45d2ba457..a905aa418 100644 --- a/docs/packages/transformers.md +++ b/docs/packages/transformers.md @@ -549,20 +549,24 @@ CSS output: Remove comments from the code. It works by checking the internal grammar token metadata to determine if the token is a comment. -It requires `includeExplanation: true` to work. +This transformer requires `includeExplanation: true` to work. ```ts import { transformerRemoveComments } from '@shikijs/transformers' const html = await codeToHtml(code, { lang: 'ts', - includeExplanation: true, + includeExplanation: true, // [!code highlight] transformers: [ - transformerRemoveComments(), + transformerRemoveComments(), // [!code highlight] ], }) ``` +Options: + +- `removeEmptyLines`: Remove lines that become empty after removing comments. Default `true`. + For example: ````md @@ -576,13 +580,9 @@ const y = 2; ``` ```` -Renders: +Will renders: ```js const x = 1 const y = 2 ``` - -Options: - -- `removeEmptyLines`: Remove lines that become empty after removing comments. Default `true`. From ef5617a488e7d4e1bf31535cae07b7712c911246 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:29:37 +0900 Subject: [PATCH 5/8] Update packages/transformers/src/transformers/remove-comments.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../src/transformers/remove-comments.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/transformers/src/transformers/remove-comments.ts b/packages/transformers/src/transformers/remove-comments.ts index 6f1b5289f..fac75e234 100644 --- a/packages/transformers/src/transformers/remove-comments.ts +++ b/packages/transformers/src/transformers/remove-comments.ts @@ -25,16 +25,18 @@ export function transformerRemoveComments( tokens(tokens) { const result = [] for (const line of tokens) { - const hasComment = line.some(token => - token.explanation?.some(exp => exp.scopes.some(s => s.scopeName.startsWith('comment'))), - ) - - const filteredLine = line.filter((token) => { + const filteredLine = [] + let hasComment = false + for (const token of line) { const isComment = token.explanation?.some(exp => - exp.scopes.some(s => s.scopeName.startsWith('comment')), + exp.scopes.some(s => s.scopeName.startsWith('comment')) ) - return !isComment - }) + if (isComment) { + hasComment = true + } else { + filteredLine.push(token) + } + } if (removeEmptyLines && hasComment) { const isAllWhitespace = filteredLine.every(token => !token.content.trim()) From 4f47fa6f01d90528f5d2bdc1954361a1063fb7c5 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:29:59 +0900 Subject: [PATCH 6/8] Update docs/packages/transformers.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/packages/transformers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/packages/transformers.md b/docs/packages/transformers.md index a905aa418..a743dd7c6 100644 --- a/docs/packages/transformers.md +++ b/docs/packages/transformers.md @@ -583,6 +583,6 @@ const y = 2; Will renders: ```js -const x = 1 -const y = 2 +const x = 1; +const y = 2; ``` From fb1d46366dc6d3c45db93f9a6198d77cfd94e2e9 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:30:33 +0900 Subject: [PATCH 7/8] Update packages/transformers/src/transformers/remove-comments.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/transformers/src/transformers/remove-comments.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/transformers/src/transformers/remove-comments.ts b/packages/transformers/src/transformers/remove-comments.ts index fac75e234..3b6eba9a3 100644 --- a/packages/transformers/src/transformers/remove-comments.ts +++ b/packages/transformers/src/transformers/remove-comments.ts @@ -20,7 +20,7 @@ export function transformerRemoveComments( name: '@shikijs/transformers:remove-comments', preprocess(_code, options) { if (options.includeExplanation !== true && options.includeExplanation !== 'scopeName') - throw new Error('`transformerRemoveComments` requires `includeExplanation: true` to work') + throw new Error('`transformerRemoveComments` requires `includeExplanation` to be set to `true` or `\'scopeName\'`') }, tokens(tokens) { const result = [] From 53f5a03552a927f4a6d6d756cac1808bc94031bb Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 3 Dec 2025 14:38:31 +0900 Subject: [PATCH 8/8] chore: lint --- docs/packages/transformers.md | 8 ++++---- packages/transformers/src/transformers/remove-comments.ts | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/packages/transformers.md b/docs/packages/transformers.md index a743dd7c6..0ea0edd14 100644 --- a/docs/packages/transformers.md +++ b/docs/packages/transformers.md @@ -572,9 +572,9 @@ For example: ````md ```js // This is a comment -const x = 1; // Inline comment +const x = 1 // Inline comment /* Block comment */ -const y = 2; +const y = 2 // Another comment ``` @@ -583,6 +583,6 @@ const y = 2; Will renders: ```js -const x = 1; -const y = 2; +const x = 1 +const y = 2 ``` diff --git a/packages/transformers/src/transformers/remove-comments.ts b/packages/transformers/src/transformers/remove-comments.ts index 3b6eba9a3..dead8d09a 100644 --- a/packages/transformers/src/transformers/remove-comments.ts +++ b/packages/transformers/src/transformers/remove-comments.ts @@ -29,11 +29,12 @@ export function transformerRemoveComments( let hasComment = false for (const token of line) { const isComment = token.explanation?.some(exp => - exp.scopes.some(s => s.scopeName.startsWith('comment')) + exp.scopes.some(s => s.scopeName.startsWith('comment')), ) if (isComment) { hasComment = true - } else { + } + else { filteredLine.push(token) } }