From eef0463948397cd157700b91ca6b464b28fcc2b5 Mon Sep 17 00:00:00 2001 From: pushkar Date: Wed, 3 Dec 2025 23:30:44 +0530 Subject: [PATCH] feat: add transformer-remove-empty-lines --- packages/transformers/src/index.ts | 1 + .../src/transformers/remove-empty-lines.ts | 22 +++++++++++++++++ .../test/remove-empty-lines.test.ts | 24 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 packages/transformers/src/transformers/remove-empty-lines.ts create mode 100644 packages/transformers/test/remove-empty-lines.test.ts diff --git a/packages/transformers/src/index.ts b/packages/transformers/src/index.ts index 7bc630870..532a57dea 100644 --- a/packages/transformers/src/index.ts +++ b/packages/transformers/src/index.ts @@ -10,6 +10,7 @@ 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-empty-lines' 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-empty-lines.ts b/packages/transformers/src/transformers/remove-empty-lines.ts new file mode 100644 index 000000000..6a24f64ca --- /dev/null +++ b/packages/transformers/src/transformers/remove-empty-lines.ts @@ -0,0 +1,22 @@ +import type { ShikiTransformer } from '@shikijs/types' + +/** + * Remove empty lines from the code. + */ +export function transformerRemoveEmptyLines(): ShikiTransformer { + return { + name: '@shikijs/transformers:remove-empty-lines', + code(code) { + code.children = code.children.filter((line) => { + if (line.type !== 'element') + return true + const isAllWhitespace = line.children.every((token) => { + if (token.type !== 'text') + return false + return !token.value.trim() + }) + return !isAllWhitespace + }) + }, + } +} diff --git a/packages/transformers/test/remove-empty-lines.test.ts b/packages/transformers/test/remove-empty-lines.test.ts new file mode 100644 index 000000000..d19d46bb3 --- /dev/null +++ b/packages/transformers/test/remove-empty-lines.test.ts @@ -0,0 +1,24 @@ +import { codeToHtml } from 'shiki' +import { describe, expect, it } from 'vitest' +import { transformerRemoveEmptyLines } from '../src' + +describe('transformer-remove-empty-lines', () => { + it('removes empty lines', async () => { + const code = ` +line 1 + +line 2 + +line 3 +` + const html = await codeToHtml(code, { + lang: 'js', + theme: 'github-dark', + transformers: [ + transformerRemoveEmptyLines(), + ], + }) + + expect(html).toMatchSnapshot() + }) +})