From b9951344c35a5950546a686acc33314b2ce09f65 Mon Sep 17 00:00:00 2001 From: kirin Date: Mon, 26 Sep 2022 18:31:24 +0800 Subject: [PATCH 1/3] fix(vscode): remove css-directive transformer to get matched result from source code --- packages/shared-common/src/index.ts | 13 ++++++++---- test/pos.test.ts | 31 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/packages/shared-common/src/index.ts b/packages/shared-common/src/index.ts index e9678f07f7..26fdb38e5c 100644 --- a/packages/shared-common/src/index.ts +++ b/packages/shared-common/src/index.ts @@ -1,4 +1,4 @@ -import type { UnoGenerator } from '@unocss/core' +import type { SourceCodeTransformer, SourceCodeTransformerEnforce, UnoGenerator } from '@unocss/core' import { e, isAttributifySelector, regexClassGroup } from '@unocss/core' import MagicString from 'magic-string' @@ -95,15 +95,20 @@ export function getMatchedPositions(code: string, matched: string[], hasVariantG return result.sort((a, b) => a[0] - b[0]) } +// remove css-directive transformer to get matched result from source code +function checkTransformers(transformer: SourceCodeTransformer, enforce: SourceCodeTransformerEnforce = 'default') { + return transformer.enforce === enforce && transformer.name !== 'css-directive' +} + export async function getMatchedPositionsFromCode(uno: UnoGenerator, code: string, id = '') { const s = new MagicString(code) const tokens = new Set() const ctx = { uno, tokens } as any - for (const i of uno.config.transformers?.filter(i => i.enforce === 'pre') || []) + for (const i of uno.config.transformers?.filter(i => checkTransformers(i, 'pre')) || []) await i.transform(s, id, ctx) - for (const i of uno.config.transformers?.filter(i => !i.enforce || i.enforce === 'default') || []) + for (const i of uno.config.transformers?.filter(i => checkTransformers(i)) || []) await i.transform(s, id, ctx) - for (const i of uno.config.transformers?.filter(i => i.enforce === 'post') || []) + for (const i of uno.config.transformers?.filter(i => checkTransformers(i, 'post')) || []) await i.transform(s, id, ctx) const hasVariantGroup = !!uno.config.transformers?.find(i => i.name === 'variant-group') const result = await uno.generate(s.toString(), { preflights: false }) diff --git a/test/pos.test.ts b/test/pos.test.ts index ef8f44428e..e45856d849 100644 --- a/test/pos.test.ts +++ b/test/pos.test.ts @@ -4,6 +4,7 @@ import presetUno from '@unocss/preset-uno' import { createGenerator } from '@unocss/core' import { getMatchedPositionsFromCode as match } from '@unocss/shared-common' import transformerVariantGroup from '@unocss/transformer-variant-group' +import cssDirectives from '@unocss/transformer-directives' describe('matched-positions', async () => { test('attributify', async () => { @@ -31,6 +32,36 @@ describe('matched-positions', async () => { `) }) + test('css-directive', async () => { + const uno = createGenerator({ + presets: [ + presetUno(), + ], + transformers: [cssDirectives()], + }) + + expect(await match(uno, '.btn-center{@apply text-center my-0 font-medium;\n}')) + .toMatchInlineSnapshot(` + [ + [ + 19, + 30, + "text-center", + ], + [ + 31, + 35, + "my-0", + ], + [ + 36, + 47, + "font-medium", + ], + ] + `) + }) + test('class-based', async () => { const uno = createGenerator({ presets: [ From 7680df84184520fc172e4ebf8affc1b43ae8ff81 Mon Sep 17 00:00:00 2001 From: kirin Date: Mon, 26 Sep 2022 19:12:03 +0800 Subject: [PATCH 2/3] fix: checkTransformers --- packages/shared-common/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared-common/src/index.ts b/packages/shared-common/src/index.ts index 26fdb38e5c..1b2324a90e 100644 --- a/packages/shared-common/src/index.ts +++ b/packages/shared-common/src/index.ts @@ -96,7 +96,7 @@ export function getMatchedPositions(code: string, matched: string[], hasVariantG } // remove css-directive transformer to get matched result from source code -function checkTransformers(transformer: SourceCodeTransformer, enforce: SourceCodeTransformerEnforce = 'default') { +function checkTransformers(transformer: SourceCodeTransformer, enforce?: SourceCodeTransformerEnforce) { return transformer.enforce === enforce && transformer.name !== 'css-directive' } From a47ba81f337e0ccff9306a5d596096177a7f3f0a Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 27 Sep 2022 02:12:24 +0800 Subject: [PATCH 3/3] chore: update --- packages/shared-common/src/index.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/shared-common/src/index.ts b/packages/shared-common/src/index.ts index 1b2324a90e..8528916230 100644 --- a/packages/shared-common/src/index.ts +++ b/packages/shared-common/src/index.ts @@ -1,4 +1,4 @@ -import type { SourceCodeTransformer, SourceCodeTransformerEnforce, UnoGenerator } from '@unocss/core' +import type { UnoGenerator } from '@unocss/core' import { e, isAttributifySelector, regexClassGroup } from '@unocss/core' import MagicString from 'magic-string' @@ -96,19 +96,22 @@ export function getMatchedPositions(code: string, matched: string[], hasVariantG } // remove css-directive transformer to get matched result from source code -function checkTransformers(transformer: SourceCodeTransformer, enforce?: SourceCodeTransformerEnforce) { - return transformer.enforce === enforce && transformer.name !== 'css-directive' -} +const ignoreTransformers = [ + 'css-directive', + 'compile-class', +] export async function getMatchedPositionsFromCode(uno: UnoGenerator, code: string, id = '') { const s = new MagicString(code) const tokens = new Set() const ctx = { uno, tokens } as any - for (const i of uno.config.transformers?.filter(i => checkTransformers(i, 'pre')) || []) + + const transformers = uno.config.transformers?.filter(i => !ignoreTransformers.includes(i.name)) + for (const i of transformers?.filter(i => i.enforce === 'pre') || []) await i.transform(s, id, ctx) - for (const i of uno.config.transformers?.filter(i => checkTransformers(i)) || []) + for (const i of transformers?.filter(i => !i.enforce || i.enforce === 'default') || []) await i.transform(s, id, ctx) - for (const i of uno.config.transformers?.filter(i => checkTransformers(i, 'post')) || []) + for (const i of transformers?.filter(i => i.enforce === 'post') || []) await i.transform(s, id, ctx) const hasVariantGroup = !!uno.config.transformers?.find(i => i.name === 'variant-group') const result = await uno.generate(s.toString(), { preflights: false })