diff --git a/README.md b/README.md index 4e1316ed4c..913838ba1e 100644 --- a/README.md +++ b/README.md @@ -242,6 +242,29 @@ When you want to override rules, or disable them inline, you need to update to t type foo = { bar: 2 } ``` +### Optional Rules + +This config also provides some optional plugins/rules for extended usages. + +#### `sort-keys` + +This plugin [`eslint-plugin-sort-keys`](https://github.com/namnm/eslint-plugin-sort-keys) allows you to keep object keys sorted with auto-fix. + +It's installed but no rules are enabled by default. + +It's recommended to opt-in on each file individually using [configuration comments](https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1). + +```js +/* eslint sort-keys/sort-keys-fix: "error" */ +const objectWantedToSort = { + a: 2, + b: 1, + c: 3, +} +/* eslint sort-keys/sort-keys-fix: "off" */ +``` + + ### Rules Overrides Certain rules would only be enabled in specific files, for example, `ts/*` rules would only be enabled in `.ts` files and `vue/*` rules would only be enabled in `.vue` files. If you want to override the rules, you need to specify the file extension: diff --git a/eslint.config.js b/eslint.config.js index b53b133d19..fdc274eef4 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,4 @@ // @ts-check -import sortKeys from 'eslint-plugin-sort-keys' import styleMigrate from '@stylistic/eslint-plugin-migrate' import antfu from './dist/index.js' @@ -14,9 +13,6 @@ export default antfu( }, { files: ['src/**/*.ts'], - plugins: { - 'sort-keys': sortKeys, - }, rules: { 'sort-keys/sort-keys-fix': 'error', }, diff --git a/package.json b/package.json index 181d21ddf5..e30f65f080 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "eslint-plugin-markdown": "^3.0.1", "eslint-plugin-n": "^16.2.0", "eslint-plugin-no-only-tests": "^3.1.0", + "eslint-plugin-sort-keys": "^2.3.5", "eslint-plugin-unicorn": "^48.0.1", "eslint-plugin-unused-imports": "^3.0.0", "eslint-plugin-vitest": "^0.3.2", @@ -71,7 +72,6 @@ "bumpp": "^9.2.0", "eslint": "^8.51.0", "eslint-flat-config-viewer": "^0.1.0", - "eslint-plugin-sort-keys": "^2.3.5", "esno": "^0.17.0", "fast-glob": "^3.3.1", "fs-extra": "^11.1.1", diff --git a/src/configs/index.ts b/src/configs/index.ts index 0805cad061..8cfc45b5bb 100644 --- a/src/configs/index.ts +++ b/src/configs/index.ts @@ -13,3 +13,4 @@ export * from './unicorn' export * from './vue' export * from './yaml' export * from './test' +export * from './sort-keys' diff --git a/src/configs/sort-keys.ts b/src/configs/sort-keys.ts new file mode 100644 index 0000000000..ccfd8306cd --- /dev/null +++ b/src/configs/sort-keys.ts @@ -0,0 +1,18 @@ +import type { ConfigItem } from '../types' +import { pluginSortKeys } from '../plugins' + +/** + * Optional sort-keys plugin + * + * @see https://github.com/namnm/eslint-plugin-sort-keys + */ +export function sortKeys(): ConfigItem[] { + return [ + { + name: 'antfu:sort-keys', + plugins: { + 'sort-keys': pluginSortKeys, + }, + }, + ] +} diff --git a/src/factory.ts b/src/factory.ts index fc6357d592..9564bdbcbc 100644 --- a/src/factory.ts +++ b/src/factory.ts @@ -12,6 +12,7 @@ import { jsonc, markdown, node, + sortKeys, sortPackageJson, sortTsconfig, stylistic, @@ -90,6 +91,9 @@ export function antfu(options: OptionsConfig & ConfigItem = {}, ...userConfigs: stylistic: stylisticOptions, }), unicorn(), + + // Optional plugins (not enabled by default) + sortKeys(), ) if (enableVue) diff --git a/src/plugins.ts b/src/plugins.ts index ff8a4d396e..b5099a253c 100644 --- a/src/plugins.ts +++ b/src/plugins.ts @@ -16,6 +16,7 @@ export { default as pluginVue } from 'eslint-plugin-vue' export * as pluginYaml from 'eslint-plugin-yml' export { default as pluginNoOnlyTests } from 'eslint-plugin-no-only-tests' export { default as pluginVitest } from 'eslint-plugin-vitest' +export { default as pluginSortKeys } from 'eslint-plugin-sort-keys' export * as parserTs from '@typescript-eslint/parser' export { default as parserVue } from 'vue-eslint-parser'