Skip to content

Commit

Permalink
feat!: use unified stylistic rules
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Sep 25, 2023
1 parent d41a614 commit 0ce3a69
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 115 deletions.
3 changes: 1 addition & 2 deletions README.md
Expand Up @@ -208,8 +208,7 @@ Since flat config requires us to explicitly provide the plugin names (instead of
| `i/*` | `import/*` | [eslint-plugin-i](https://github.com/un-es/eslint-plugin-i) |
| `n/*` | `node/*` | [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n)
| `@typescript-eslint/*` | `ts/*` | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) |
| `@stylistic/js/*` | `style/*` | [@stylistic/eslint-plugin-js](https://github.com/eslint-stylistic/eslint-stylistic) |
| `@stylistic/ts/*` | `style-ts/*` | [@stylistic/eslint-plugin-ts](https://github.com/eslint-stylistic/eslint-stylistic) |
| `@stylistic/*` | `style/*` | [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic) |

When you want to overrides rules, or disable them inline, you need to update to the new prefix:

Expand Down
3 changes: 0 additions & 3 deletions eslint.config.js
@@ -1,4 +1,3 @@
import stylisticMigrate from '@stylistic/eslint-plugin-migrate'
import sortKeys from 'eslint-plugin-sort-keys'
import antfu from '@antfu/eslint-config'

Expand All @@ -12,11 +11,9 @@ export default antfu(
{
files: ['src/**/*.ts'],
plugins: {
'@stylistic/migrate': stylisticMigrate,
'sort-keys': sortKeys,
},
rules: {
'@stylistic/migrate/rules': 'error',
'sort-keys/sort-keys-fix': 'error',
},
},
Expand Down
5 changes: 1 addition & 4 deletions package.json
Expand Up @@ -36,9 +36,7 @@
"eslint": ">=8.0.0"
},
"dependencies": {
"@eslint-stylistic/metadata": "0.0.4",
"@stylistic/eslint-plugin-js": "0.0.4",
"@stylistic/eslint-plugin-ts": "0.0.4",
"@stylistic/eslint-plugin": "0.0.5",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
"eslint-config-flat-gitignore": "^0.1.0",
Expand All @@ -64,7 +62,6 @@
"devDependencies": {
"@antfu/eslint-config": "workspace:*",
"@antfu/ni": "^0.21.8",
"@stylistic/eslint-plugin-migrate": "0.0.4",
"@types/fs-extra": "^11.0.2",
"@types/node": "^20.6.4",
"bumpp": "^9.2.0",
Expand Down
59 changes: 28 additions & 31 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

73 changes: 8 additions & 65 deletions src/configs/stylistic.ts
@@ -1,28 +1,22 @@
import type { FlatESLintConfigItem } from 'eslint-define-config'
import { packages } from '@eslint-stylistic/metadata'
import { pluginStylisticJs, pluginStylisticTs, pluginTs } from '../plugins'
import { OFF } from '../flags'
import { pluginStylistic } from '../plugins'

const tsPackage = packages.find(i => i.shortId === 'ts')!

export const javascriptStylistic: FlatESLintConfigItem[] = [
export const stylistic: FlatESLintConfigItem[] = [
{
plugins: {
style: pluginStylisticJs,
style: pluginStylistic,
},
rules: {
'antfu/consistent-list-newline': 'error',
'antfu/if-newline': 'error',

'comma-dangle': ['error', 'always-multiline'],
'curly': ['error', 'multi-or-nest', 'consistent'],
'quotes': ['error', 'single'],
'semi': ['error', 'never'],

'style/array-bracket-spacing': ['error', 'never'],
'style/arrow-spacing': ['error', { after: true, before: true }],
'style/block-spacing': ['error', 'always'],
'style/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
'style/comma-dangle': ['error', 'always-multiline'],
'style/comma-spacing': ['error', { after: true, before: false }],
'style/comma-style': ['error', 'last'],
'style/computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }],
Expand Down Expand Up @@ -68,6 +62,7 @@ export const javascriptStylistic: FlatESLintConfigItem[] = [
'style/key-spacing': ['error', { afterColon: true, beforeColon: false }],
'style/keyword-spacing': ['error', { after: true, before: true }],
'style/lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
'style/member-delimiter-style': ['error', { multiline: { delimiter: 'none' } }],
'style/multiline-ternary': ['error', 'always-multiline'],
'style/no-mixed-spaces-and-tabs': 'error',
'style/no-multi-spaces': 'error',
Expand All @@ -79,7 +74,9 @@ export const javascriptStylistic: FlatESLintConfigItem[] = [
'style/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
'style/operator-linebreak': ['error', 'before'],
'style/padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],
'style/quotes': ['error', 'single'],
'style/rest-spread-spacing': ['error', 'never'],
'style/semi': ['error', 'never'],
'style/semi-spacing': ['error', { after: true, before: false }],
'style/space-before-blocks': ['error', 'always'],
'style/space-before-function-paren': ['error', { anonymous: 'always', asyncArrow: 'always', named: 'never' }],
Expand All @@ -99,62 +96,8 @@ export const javascriptStylistic: FlatESLintConfigItem[] = [
}],
'style/template-curly-spacing': 'error',
'style/template-tag-spacing': ['error', 'never'],
'style/type-annotation-spacing': ['error', {}],
'style/yield-star-spacing': ['error', 'both'],
},
},
]

export const typescriptStylistic: FlatESLintConfigItem[] = [
{
plugins: {
'style-ts': pluginStylisticTs,
'ts': pluginTs as any,
},
rules: {
...stylisticJsToTS(javascriptStylistic[0].rules!),

'comma-dangle': OFF,
'quotes': OFF,
'semi': OFF,

'style-ts/member-delimiter-style': ['error', { multiline: { delimiter: 'none' } }],
'style-ts/type-annotation-spacing': ['error', {}],

'ts/comma-dangle': ['error', 'always-multiline'],
'ts/quotes': ['error', 'single'],
'ts/semi': ['error', 'never'],
},
},
]

// TODO: move to ESLint Stylistic
function stylisticJsToTS(input: Record<string, any>) {
return {
// turn off all stylistic rules from style
...Object.fromEntries(
Object.entries(input)
.map(([key]) => {
if (!key.startsWith('style/'))
return null!
const basename = key.replace('style/', '')
if (tsPackage.rules.find(i => i.name === basename))
return [key, OFF]
return null!
})
.filter(Boolean),
),
// rename all stylistic rules from style to style/ts
...Object.fromEntries(
Object.entries(input)
.map(([key, value]) => {
if (!key.startsWith('style/'))
return null!
const basename = key.replace('style/', '')
return tsPackage.rules.find(i => i.name === basename)
? [`style-ts/${basename}`, value]
: null!
})
.filter(Boolean),
),
}
}
12 changes: 4 additions & 8 deletions src/factory.ts
Expand Up @@ -8,16 +8,15 @@ import {
ignores,
imports,
javascript,
javascriptStylistic,
jsdoc,
jsonc,
markdown,
node,
sortPackageJson,
sortTsconfig,
stylistic,
test,
typescript,
typescriptStylistic,
typescriptWithLanguageServer,
unicorn,
vue,
Expand Down Expand Up @@ -76,9 +75,6 @@ export function antfu(options: OptionsConfig & FlatESLintConfigItem = {}, ...use
if (enableVue)
componentExts.push('vue')

if (enableStylistic)
configs.push(javascriptStylistic)

if (enableTypeScript) {
configs.push(typescript({ componentExts }))

Expand All @@ -88,11 +84,11 @@ export function antfu(options: OptionsConfig & FlatESLintConfigItem = {}, ...use
componentExts,
}))
}

if (enableStylistic)
configs.push(typescriptStylistic)
}

if (enableStylistic)
configs.push(stylistic)

if (options.test ?? true)
configs.push(test({ isInEditor }))

Expand Down
3 changes: 1 addition & 2 deletions src/plugins.ts
Expand Up @@ -8,8 +8,7 @@ export { default as pluginJsdoc } from 'eslint-plugin-jsdoc'
export { default as pluginJsonc } from 'eslint-plugin-jsonc'
export { default as pluginMarkdown } from 'eslint-plugin-markdown'
export { default as pluginNode } from 'eslint-plugin-n'
export { default as pluginStylisticJs } from '@stylistic/eslint-plugin-js'
export { default as pluginStylisticTs } from '@stylistic/eslint-plugin-ts'
export { default as pluginStylistic } from '@stylistic/eslint-plugin'
export { default as pluginTs } from '@typescript-eslint/eslint-plugin'
export { default as pluginUnicorn } from 'eslint-plugin-unicorn'
export { default as pluginUnusedImports } from 'eslint-plugin-unused-imports'
Expand Down

0 comments on commit 0ce3a69

Please sign in to comment.