Skip to content

Commit

Permalink
feat(core)!: always apply default extractor (#2472)
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Apr 9, 2023
1 parent aae131b commit 3af1e6e
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 26 deletions.
30 changes: 28 additions & 2 deletions docs/config/extractors.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,34 @@

Extractors are used to extract the usage of utilities from your source code.

By default [extractorSplit](https://github.com/unocss/unocss/blob/main/packages/core/src/extractors/split.ts) will be applied, which split the source code into tokens and directly feed to the engine.
```ts
// unocss.config.ts
import { defineConfig } from '@unocss/core'

You can also provide your own extractors to extract the usage of utilities from your source code.
export default defineConfig({
extractors: [
// your extractors
],
})
```

By default [extractorSplit](https://github.com/unocss/unocss/blob/main/packages/core/src/extractors/split.ts) will always be applied, which split the source code into tokens and directly feed to the engine.

To override the default extractors, you can use `extractorDefault` option.

```ts
// unocss.config.ts
import { defineConfig } from '@unocss/core'

export default defineConfig({
extractors: [
// your extractors
],
// disable the default extractor
extractorDefault: false,
// override the default extractor with your own
extractorDefault: myExtractor,
})
```

For example, you could check how we implement the [pug extractor](https://github.com/unocss/unocss/tree/main/packages/extractor-pug) or the [attributify extractor](https://github.com/unocss/unocss/blob/main/packages/preset-attributify/src/extractor.ts).
2 changes: 0 additions & 2 deletions docs/extractors/pug.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,11 @@ Pug extractor for UnoCSS: `@unocss/extractor-pug`.

```ts
import { defineConfig } from 'unocss'
import { extractorSplit } from '@unocss/core'
import extractorPug from '@unocss/extractor-pug'

export default defineConfig({
extractors: [
extractorPug(),
extractorSplit,
],
})
```
1 change: 1 addition & 0 deletions docs/integrations/vite.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ You can use simple rules with `class:`, for example `class:bg-red-500={foo}` or
import { sveltekit } from '@sveltejs/kit/vite'
import UnoCSS from 'unocss/vite'
import { extractorSvelte } from '@unocss/core'

/** @type {import('vite').UserConfig} */
const config = {
plugins: [
Expand Down
2 changes: 0 additions & 2 deletions examples/vite-pug/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { defineConfig } from 'vite'
import Vue from '@vitejs/plugin-vue'
import Inspect from 'vite-plugin-inspect'
import UnoCSS from '@unocss/vite'
import { extractorSplit } from '@unocss/core'
import extractorPug from '@unocss/extractor-pug'
import presetUno from '@unocss/preset-uno'

Expand All @@ -14,7 +13,6 @@ export default defineConfig({
presetUno(),
],
extractors: [
extractorSplit,
extractorPug(),
],
}),
Expand Down
8 changes: 6 additions & 2 deletions packages/core/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,12 @@ export function resolveConfig<Theme extends {} = {}>(
}

const extractors = mergePresets('extractors')
if (!extractors.length)
extractors.push(extractorSplit)
let extractorDefault = [...sortedPresets, config].reverse().find(i => i.extractorDefault !== undefined)?.extractorDefault
if (extractorDefault === undefined)
extractorDefault = extractorSplit
if (extractorDefault && !extractors.includes(extractorDefault))
extractors.unshift(extractorDefault)

extractors.sort((a, b) => (a.order || 0) - (b.order || 0))

const rules = mergePresets('rules')
Expand Down
9 changes: 8 additions & 1 deletion packages/core/src/extractors/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
export { extractorSplit, arbitraryPropertyRE, quotedArbitraryValuesRE, defaultSplitRE, splitWithVariantGroupRE } from './split'
export {
extractorSplit,
extractorSplit as extractorDefault,
arbitraryPropertyRE,
quotedArbitraryValuesRE,
defaultSplitRE,
splitWithVariantGroupRE,
} from './split'
export { extractorSvelte } from './svelte'
15 changes: 15 additions & 0 deletions packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,21 @@ export interface ConfigBase<Theme extends {} = {}> {
*/
extractors?: Extractor[]

/**
* Default extractor that are always applied.
* By default it split the source code by whitespace and quotes.
*
* It maybe be replaced by preset or user config,
* only one default extractor can be presented,
* later one will override the previous one.
*
* Pass `null` or `false` to disable the default extractor.
*
* @see https://github.com/antfu/unocss/blob/main/packages/core/src/extractors/split.ts
* @default import('@unocss/core').defaultExtractor
*/
extractorDefault?: Extractor | null | false

/**
* Raw CSS injections.
*/
Expand Down
2 changes: 0 additions & 2 deletions packages/extractor-pug/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ npm i -D @unocss/extractor-pug

```ts
import extractorPug from '@unocss/extractor-pug'
import { extractorSplit } from '@unocss/core'

UnoCSS({
extractors: [
extractorPug(),
extractorSplit,
],
})
```
Expand Down
5 changes: 1 addition & 4 deletions packages/preset-attributify/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { Preset } from '@unocss/core'
import { extractorSplit } from '@unocss/core'
import { autocompleteExtractorAttributify } from './autocomplete'
import { defaultIgnoreAttributes, extractorAttributify } from './extractor'
import type { AttributifyOptions } from './types'
Expand Down Expand Up @@ -28,9 +27,6 @@ function preset(options: AttributifyOptions = {}): Preset {
autocompleteExtractorAttributify,
]

if (!options.strict)
extractors.unshift(extractorSplit)

return {
name: '@unocss/preset-attributify',
variants,
Expand All @@ -39,6 +35,7 @@ function preset(options: AttributifyOptions = {}): Preset {
autocomplete: {
extractors: autocompleteExtractors,
},
extractorDefault: options.strict ? false : undefined,
}
}

Expand Down
7 changes: 3 additions & 4 deletions packages/preset-tagify/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { Preset } from '@unocss/core'
import { extractorSplit } from '@unocss/core'
import type { TagifyOptions } from './types'
import { extractorTagify } from './extractor'
import { variantTagify } from './variant'
Expand All @@ -20,13 +19,13 @@ function tagifyPreset(options: TagifyOptions = {}): Preset {
extractorTagify(options),
]

if (defaultExtractor)
extractors.push(extractorSplit)

return {
name: '@unocss/preset-tagify',
variants,
extractors,
extractorDefault: defaultExtractor
? undefined
: false,
}
}

Expand Down
8 changes: 1 addition & 7 deletions test/pos.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { describe, expect, test } from 'vitest'
import presetAttributify from '@unocss/preset-attributify'
import presetUno from '@unocss/preset-uno'
import type { UnoGenerator } from '@unocss/core'
import { createGenerator, extractorSplit } from '@unocss/core'
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'
Expand Down Expand Up @@ -265,7 +265,6 @@ describe('matched-positions-pug', async () => {
presetAttributify({ strict: true }),
],
extractors: [
extractorSplit,
extractorPug(),
],
transformers: [
Expand Down Expand Up @@ -304,11 +303,6 @@ describe('matched-positions-pug', async () => {
30,
"p4",
],
[
39,
40,
"b",
],
[
39,
40,
Expand Down

0 comments on commit 3af1e6e

Please sign in to comment.