From ec55c4e7ba1ced9ecc270ab911993c7fb6ced320 Mon Sep 17 00:00:00 2001 From: Dunqing Date: Fri, 8 Jul 2022 05:15:47 +0000 Subject: [PATCH 1/6] fix: ms.replace only replaces the original content --- packages/core/src/utils/variantGroup.ts | 12 ++++++++---- test/transformer-variant-group.test.ts | 11 ++--------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/core/src/utils/variantGroup.ts b/packages/core/src/utils/variantGroup.ts index 49634a074e..adaab32414 100644 --- a/packages/core/src/utils/variantGroup.ts +++ b/packages/core/src/utils/variantGroup.ts @@ -7,9 +7,10 @@ export function expandVariantGroup(str: MagicString): MagicString export function expandVariantGroup(str: string | MagicString) { regexClassGroup.lastIndex = 0 let hasChanged = false + let content = str.toString() do { - const before = str.toString() - str = str.replace( + const before = content + content = content.replace( regexClassGroup, (_, pre, sep, body: string) => { return body @@ -18,8 +19,11 @@ export function expandVariantGroup(str: string | MagicString) { .join(' ') }, ) - hasChanged = str.toString() !== before + hasChanged = content !== before } while (hasChanged) - return str + if (typeof str === 'string') + return content + else + return str.overwrite(0, str.length(), content) } diff --git a/test/transformer-variant-group.test.ts b/test/transformer-variant-group.test.ts index 0fe64d7c93..df12397bee 100644 --- a/test/transformer-variant-group.test.ts +++ b/test/transformer-variant-group.test.ts @@ -1,5 +1,4 @@ import { readFile } from 'fs/promises' -import transformerVariantGroup from '@unocss/transformer-variant-group' import { describe, expect, test } from 'vitest' import { expandVariantGroup } from '@unocss/core' import MagicString from 'magic-string' @@ -33,12 +32,6 @@ describe('transformer-variant-group', () => { }) test('vue file', async () => { - const transformer = transformerVariantGroup() - const transform = async (code: string) => { - const s = new MagicString(code) - await transformer.transform(s, '', {} as any) - return s.toString() - } const file = await readFile('./test/assets/variant-group.vue', 'utf-8') const result = await transform(file) expect(result).toMatchInlineSnapshot(` @@ -46,9 +39,9 @@ describe('transformer-variant-group', () => { const a = 1 const b = 2 // eslint-disable-next-line @typescript-eslint/space-infix-ops - const c = a-(b -a -b) + const c = a-b a--a a--b - +