From 44d9e94d80fc0affd2685dbffeb676c20c77fef1 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 22 Nov 2023 11:48:31 +0100 Subject: [PATCH] feat: allow customize `files`, close #327 --- src/configs/javascript.ts | 1 + src/configs/jsonc.ts | 9 ++++++--- src/configs/markdown.ts | 9 ++++++--- src/configs/react.ts | 7 ++++--- src/configs/test.ts | 9 ++++++--- src/configs/typescript.ts | 16 +++++++++------- src/configs/vue.ts | 7 ++++--- src/configs/yaml.ts | 7 ++++--- src/types.ts | 7 +++++++ 9 files changed, 47 insertions(+), 25 deletions(-) diff --git a/src/configs/javascript.ts b/src/configs/javascript.ts index ada312cecd..2127e46232 100644 --- a/src/configs/javascript.ts +++ b/src/configs/javascript.ts @@ -10,6 +10,7 @@ export async function javascript( isInEditor = false, overrides = {}, } = options + return [ { languageOptions: { diff --git a/src/configs/jsonc.ts b/src/configs/jsonc.ts index 30eb29cc9c..b456dbe126 100644 --- a/src/configs/jsonc.ts +++ b/src/configs/jsonc.ts @@ -1,9 +1,12 @@ -import type { FlatConfigItem, OptionsOverrides, OptionsStylistic } from '../types' +import type { FlatConfigItem, OptionsFiles, OptionsOverrides, OptionsStylistic } from '../types' import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs' import { interopDefault } from '../utils' -export async function jsonc(options: OptionsStylistic & OptionsOverrides = {}): Promise { +export async function jsonc( + options: OptionsFiles & OptionsStylistic & OptionsOverrides = {}, +): Promise { const { + files = [GLOB_JSON, GLOB_JSON5, GLOB_JSONC], overrides = {}, stylistic = true, } = options @@ -28,7 +31,7 @@ export async function jsonc(options: OptionsStylistic & OptionsOverrides = {}): }, }, { - files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC], + files, languageOptions: { parser: parserJsonc, }, diff --git a/src/configs/markdown.ts b/src/configs/markdown.ts index 47d810cdeb..d7a6226eee 100644 --- a/src/configs/markdown.ts +++ b/src/configs/markdown.ts @@ -1,10 +1,13 @@ -import type { FlatConfigItem, OptionsComponentExts, OptionsOverrides } from '../types' +import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides } from '../types' import { GLOB_MARKDOWN, GLOB_MARKDOWN_CODE } from '../globs' import { interopDefault } from '../utils' -export async function markdown(options: OptionsComponentExts & OptionsOverrides = {}): Promise { +export async function markdown( + options: OptionsFiles & OptionsComponentExts & OptionsOverrides = {}, +): Promise { const { componentExts = [], + files = [GLOB_MARKDOWN], overrides = {}, } = options @@ -17,7 +20,7 @@ export async function markdown(options: OptionsComponentExts & OptionsOverrides }, }, { - files: [GLOB_MARKDOWN], + files, name: 'antfu:markdown:processor', processor: 'markdown/markdown', }, diff --git a/src/configs/react.ts b/src/configs/react.ts index 53f22ecd74..6df228708d 100644 --- a/src/configs/react.ts +++ b/src/configs/react.ts @@ -1,6 +1,6 @@ import { isPackageExists } from 'local-pkg' import { ensurePackages, interopDefault } from '../utils' -import type { FlatConfigItem, OptionsHasTypeScript, OptionsOverrides, OptionsStylistic } from '../types' +import type { FlatConfigItem, OptionsFiles, OptionsHasTypeScript, OptionsOverrides } from '../types' import { GLOB_JSX, GLOB_TSX } from '../globs' // react refresh @@ -9,9 +9,10 @@ const ReactRefreshAllowConstantExportPackages = [ ] export async function react( - options: OptionsHasTypeScript & OptionsOverrides & OptionsStylistic = {}, + options: OptionsHasTypeScript & OptionsOverrides & OptionsFiles = {}, ): Promise { const { + files = [GLOB_JSX, GLOB_TSX], overrides = {}, typescript = true, } = options @@ -46,7 +47,7 @@ export async function react( }, }, { - files: [GLOB_JSX, GLOB_TSX], + files, languageOptions: { parserOptions: { ecmaFeatures: { diff --git a/src/configs/test.ts b/src/configs/test.ts index 99142ac231..a374b8c3e8 100644 --- a/src/configs/test.ts +++ b/src/configs/test.ts @@ -1,9 +1,12 @@ import { interopDefault } from '../utils' -import type { FlatConfigItem, OptionsIsInEditor, OptionsOverrides } from '../types' +import type { FlatConfigItem, OptionsFiles, OptionsIsInEditor, OptionsOverrides } from '../types' import { GLOB_TESTS } from '../globs' -export async function test(options: OptionsIsInEditor & OptionsOverrides = {}): Promise { +export async function test( + options: OptionsFiles & OptionsIsInEditor & OptionsOverrides = {}, +): Promise { const { + files = GLOB_TESTS, isInEditor = false, overrides = {}, } = options @@ -32,7 +35,7 @@ export async function test(options: OptionsIsInEditor & OptionsOverrides = {}): }, }, { - files: GLOB_TESTS, + files, name: 'antfu:test:rules', rules: { 'node/prefer-global/process': 'off', diff --git a/src/configs/typescript.ts b/src/configs/typescript.ts index ad9b0c3958..ffd624719a 100644 --- a/src/configs/typescript.ts +++ b/src/configs/typescript.ts @@ -1,17 +1,22 @@ import process from 'node:process' -import type { FlatConfigItem, OptionsComponentExts, OptionsOverrides, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes } from '../types' +import type { FlatConfigItem, OptionsComponentExts, OptionsFiles, OptionsOverrides, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes } from '../types' import { GLOB_SRC } from '../globs' import { pluginAntfu } from '../plugins' import { interopDefault, renameRules, toArray } from '../utils' export async function typescript( - options?: OptionsComponentExts & OptionsOverrides & OptionsTypeScriptWithTypes & OptionsTypeScriptParserOptions, + options: OptionsFiles & OptionsComponentExts & OptionsOverrides & OptionsTypeScriptWithTypes & OptionsTypeScriptParserOptions = {}, ): Promise { const { componentExts = [], overrides = {}, parserOptions = {}, - } = options ?? {} + } = options + + const files = options.files ?? [ + GLOB_SRC, + ...componentExts.map(ext => `**/*.${ext}`), + ] const typeAwareRules: FlatConfigItem['rules'] = { 'dot-notation': 'off', @@ -57,10 +62,7 @@ export async function typescript( }, }, { - files: [ - GLOB_SRC, - ...componentExts.map(ext => `**/*.${ext}`), - ], + files, languageOptions: { parser: parserTs, parserOptions: { diff --git a/src/configs/vue.ts b/src/configs/vue.ts index ab88d65523..658a5b75ab 100644 --- a/src/configs/vue.ts +++ b/src/configs/vue.ts @@ -1,11 +1,12 @@ import { interopDefault } from '../utils' -import type { FlatConfigItem, OptionsHasTypeScript, OptionsOverrides, OptionsStylistic } from '../types' +import type { FlatConfigItem, OptionsFiles, OptionsHasTypeScript, OptionsOverrides, OptionsStylistic } from '../types' import { GLOB_VUE } from '../globs' export async function vue( - options: OptionsHasTypeScript & OptionsOverrides & OptionsStylistic = {}, + options: OptionsHasTypeScript & OptionsOverrides & OptionsStylistic & OptionsFiles = {}, ): Promise { const { + files = [GLOB_VUE], overrides = {}, stylistic = true, } = options @@ -31,7 +32,7 @@ export async function vue( }, }, { - files: [GLOB_VUE], + files, languageOptions: { parser: parserVue, parserOptions: { diff --git a/src/configs/yaml.ts b/src/configs/yaml.ts index e15c0c7b11..46e5d4af9f 100644 --- a/src/configs/yaml.ts +++ b/src/configs/yaml.ts @@ -1,11 +1,12 @@ -import type { FlatConfigItem, OptionsOverrides, OptionsStylistic } from '../types' +import type { FlatConfigItem, OptionsFiles, OptionsOverrides, OptionsStylistic } from '../types' import { GLOB_YAML } from '../globs' import { interopDefault } from '../utils' export async function yaml( - options: OptionsOverrides & OptionsStylistic = {}, + options: OptionsOverrides & OptionsStylistic & OptionsFiles = {}, ): Promise { const { + files = [GLOB_YAML], overrides = {}, stylistic = true, } = options @@ -31,7 +32,7 @@ export async function yaml( }, }, { - files: [GLOB_YAML], + files, languageOptions: { parser: parserYaml, }, diff --git a/src/types.ts b/src/types.ts index 20879f8d14..a3963e4e7e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,6 +70,13 @@ export type FlatConfigItem = Omit, 'plugins'> export type UserConfigItem = FlatConfigItem | Linter.FlatConfig +export interface OptionsFiles { + /** + * Override the `files` option to provide custom globs. + */ + files?: string[] +} + export interface OptionsComponentExts { /** * Additional extensions for components.