From 985edf887a48cc4aba3d436baa5bb9c74278646a Mon Sep 17 00:00:00 2001 From: Maiko Tan Date: Tue, 6 Aug 2024 15:43:53 +0800 Subject: [PATCH] feat: add stylistic rules --- eslint.config.js | 4 +-- package.json | 1 + rollup.config.ts | 1 + src/base.ts | 7 +++-- src/stylistic.ts | 35 +++++++++++++++++++++ yarn.lock | 82 ++++++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 src/stylistic.ts diff --git a/eslint.config.js b/eslint.config.js index 5dc38d7..0dddee7 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,7 +1,7 @@ -import configs from './dist/typescript.js' +import { configs } from './dist/index.js' export default [ - ...configs, + ...configs.typescript, { ignores: ['dist/**/*'], }, diff --git a/package.json b/package.json index 3151c60..75fc134 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "dependencies": { "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.8.0", + "@stylistic/eslint-plugin": "^2.6.1", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import-x": "^3.1.0", "eslint-plugin-n": "^17.10.2", diff --git a/rollup.config.ts b/rollup.config.ts index 748db82..917466d 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -28,6 +28,7 @@ export default defineConfig({ /^eslint-plugin-.*/, 'globals', 'typescript-eslint', + /^@stylistic\//, ], treeshake: true, plugins: [nodeResolve(), commonjs(), typescript()], diff --git a/src/base.ts b/src/base.ts index ca868a5..422b0e7 100644 --- a/src/base.ts +++ b/src/base.ts @@ -3,11 +3,13 @@ import js from '@eslint/js' import { Linter } from 'eslint' import mochaPlugin from 'eslint-plugin-mocha' +import stylistic from './stylistic' + const compat = new FlatCompat() -const config: Linter.FlatConfig[] = [ +const config: Linter.Config[] = [ js.configs.recommended, - ...compat.extends('plugin:import-x/recommended'), + ...(compat.extends('plugin:import-x/recommended') as any), mochaPlugin.configs.flat.recommended, { ignores: [ @@ -77,6 +79,7 @@ const config: Linter.FlatConfig[] = [ ], }, }, + ...stylistic, ] export default config diff --git a/src/stylistic.ts b/src/stylistic.ts new file mode 100644 index 0000000..a72af66 --- /dev/null +++ b/src/stylistic.ts @@ -0,0 +1,35 @@ +import stylistic from '@stylistic/eslint-plugin' +import { Linter } from 'eslint' + +const config: Linter.BaseConfig[] = [ + stylistic.configs.customize({ + arrowParens: true, + blockSpacing: true, + commaDangle: 'always-multiline', + indent: 2, + quotes: 'single', + semi: false, + }), + { + rules: { + 'comma-dangle': 'off', + 'quotes': 'off', + '@stylistic/linebreak-style': ['error', 'unix'], + '@stylistic/multiline-ternary': ['error', 'always-multiline'], + '@stylistic/operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before' } }], + '@stylistic/function-call-spacing': 'error', + '@stylistic/keyword-spacing': 'error', + '@stylistic/member-delimiter-style': 'error', + 'max-len': 'off', + '@stylistic/max-len': ['error', { + code: 120, + ignoreTrailingComments: true, + ignoreUrls: true, ignoreTemplateLiterals: true, + ignoreRegExpLiterals: true, + }], + '@stylistic/multiline-comment-style': 'warn', + }, + }, +] + +export default config diff --git a/yarn.lock b/yarn.lock index 5836ee5..8490b3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -82,6 +82,7 @@ __metadata: "@rollup/plugin-commonjs": "npm:^26.0.1" "@rollup/plugin-node-resolve": "npm:^15.2.3" "@rollup/plugin-typescript": "npm:^11.1.6" + "@stylistic/eslint-plugin": "npm:^2.6.1" "@types/eslint": "npm:^9.6.0" "@types/eslint__eslintrc": "npm:^2.1.2" "@types/eslint__js": "npm:^8.42.3" @@ -388,6 +389,74 @@ __metadata: languageName: node linkType: hard +"@stylistic/eslint-plugin-js@npm:2.6.1, @stylistic/eslint-plugin-js@npm:^2.6.1": + version: 2.6.1 + resolution: "@stylistic/eslint-plugin-js@npm:2.6.1" + dependencies: + "@types/eslint": "npm:^9.6.0" + acorn: "npm:^8.12.1" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.1.0" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/d888887f6c40337fc368b1ffd02da1d3cc90076817a817b84745f9efd7b7cbb6363e9aa4106a59a1966358e8cdd11bef9e2bc4ab4fefb7ca29910df1be02cbae + languageName: node + linkType: hard + +"@stylistic/eslint-plugin-jsx@npm:2.6.1": + version: 2.6.1 + resolution: "@stylistic/eslint-plugin-jsx@npm:2.6.1" + dependencies: + "@stylistic/eslint-plugin-js": "npm:^2.6.1" + "@types/eslint": "npm:^9.6.0" + estraverse: "npm:^5.3.0" + picomatch: "npm:^4.0.2" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/7545cbcc39caf87f068d84fe5e4570d8d7047bd8c4d1f77568f742ac4fa02f08f891dd4b5cc14ed4e187f67dadb3af9b3bcaf21ae2a8d173aebf9d8268e77bc9 + languageName: node + linkType: hard + +"@stylistic/eslint-plugin-plus@npm:2.6.1": + version: 2.6.1 + resolution: "@stylistic/eslint-plugin-plus@npm:2.6.1" + dependencies: + "@types/eslint": "npm:^9.6.0" + "@typescript-eslint/utils": "npm:^8.0.0" + peerDependencies: + eslint: "*" + checksum: 10c0/06d0fe0c4b99cac89fa656922c68e36d916fddf1a18cb3777bd36abac4d436966734611b1e2a0e6a96d0bf70e51bf37f09b793a47ce89db7b685815d22992c97 + languageName: node + linkType: hard + +"@stylistic/eslint-plugin-ts@npm:2.6.1": + version: 2.6.1 + resolution: "@stylistic/eslint-plugin-ts@npm:2.6.1" + dependencies: + "@stylistic/eslint-plugin-js": "npm:2.6.1" + "@types/eslint": "npm:^9.6.0" + "@typescript-eslint/utils": "npm:^8.0.0" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/9360aec54ff04d1dad1e052496846b056abd22d8d1733b484c5b88ef007de4b346217d254f3e8cc17d83f9f9d4d817236eb8d049c1b47ce7e5097d4c34a57f2d + languageName: node + linkType: hard + +"@stylistic/eslint-plugin@npm:^2.6.1": + version: 2.6.1 + resolution: "@stylistic/eslint-plugin@npm:2.6.1" + dependencies: + "@stylistic/eslint-plugin-js": "npm:2.6.1" + "@stylistic/eslint-plugin-jsx": "npm:2.6.1" + "@stylistic/eslint-plugin-plus": "npm:2.6.1" + "@stylistic/eslint-plugin-ts": "npm:2.6.1" + "@types/eslint": "npm:^9.6.0" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/87cbbac0ea84161e6ccc03b7c5298279c2d5a0100be63af5a83f979ae0fa5328df371443a3da9eac833d58a1708bae2e5d8615530048c888e7f5b01d3ebf654a + languageName: node + linkType: hard + "@types/eslint@npm:*, @types/eslint@npm:^9.6.0": version: 9.6.0 resolution: "@types/eslint@npm:9.6.0" @@ -565,7 +634,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.0.1": +"@typescript-eslint/utils@npm:8.0.1, @typescript-eslint/utils@npm:^8.0.0": version: 8.0.1 resolution: "@typescript-eslint/utils@npm:8.0.1" dependencies: @@ -629,7 +698,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.12.0": +"acorn@npm:^8.12.0, acorn@npm:^8.12.1": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -1199,7 +1268,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 @@ -2060,6 +2129,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1"