Skip to content

Commit c20339e

Browse files
committed
feat: make eslint config composable
1 parent 1a94532 commit c20339e

File tree

15 files changed

+77
-55
lines changed

15 files changed

+77
-55
lines changed

.eslintrc.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module.exports = {
2+
root: true,
3+
extends: [
4+
require.resolve('prefer-code-style/eslint/node'),
5+
require.resolve('prefer-code-style/eslint/typescript'),
6+
],
7+
ignorePatterns: ['/examples'],
8+
}

.prettierrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('prefer-code-style/prettier')

package.json

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"name": "prefer-code-style",
3-
"version": "0.7.3",
3+
"version": "0.8.0",
44
"description": "A collection of configuration files containing prettier, eslint, stylelint",
55
"keywords": [
66
"code lint",
7+
"lint set",
78
"eslint",
89
"stylelint",
910
"prettier"
@@ -18,51 +19,60 @@
1819
},
1920
"exports": {
2021
".": {
21-
"require": "./lib/index.js"
22+
"require": "./src/index.js"
2223
},
23-
"./eslint": {
24-
"require": "./lib/eslint.js"
24+
"./eslint/base": {
25+
"require": "./src/eslint/base.js"
26+
},
27+
"./eslint/browser": {
28+
"require": "./src/eslint/browser.js"
29+
},
30+
"./eslint/node": {
31+
"require": "./src/eslint/node.js"
32+
},
33+
"./eslint/typescript": {
34+
"require": "./src/eslint/typescript.js"
35+
},
36+
"./eslint/react": {
37+
"require": "./src/eslint/react.js"
38+
},
39+
"./eslint/next": {
40+
"require": "./src/eslint/next.js"
41+
},
42+
"./eslint/tailwindcss": {
43+
"require": "./src/eslint/tailwindcss.js"
44+
},
45+
"./eslint/preset-react": {
46+
"require": "./src/eslint/preset-react.js"
2547
},
2648
"./prettier": {
27-
"require": "./lib/prettier.js"
49+
"require": "./src/prettier.js"
2850
},
2951
"./stylelint": {
30-
"require": "./lib/stylelint.js"
52+
"require": "./src/stylelint.js"
53+
},
54+
"./constants": {
55+
"require": "./src/constants.js"
3156
}
3257
},
3358
"license": "MIT",
3459
"author": "LeoKu <[email protected]> (https://leoku.top)",
3560
"files": [
36-
"lib"
61+
"src"
3762
],
3863
"scripts": {
39-
"prebuild": "rimraf ./lib/",
40-
"build": "tsc --build tsconfig.json",
4164
"deps": "pnpm up --interactive --latest",
4265
"lint": "pnpm lint:es",
4366
"lint:es": "eslint \"./**/*.{js,jsx,ts,tsx}\"",
67+
"lint:prettier": "prettier --write \"!./examples/**\" \"**/*.{md,json,html}\"",
4468
"prepublishOnly": "pnpm build",
45-
"test": "pnpm build && cd \"./examples/green-wall\" && pnpm lint"
69+
"test": "cd \"./examples/green-wall\" && pnpm lint"
4670
},
4771
"config": {
4872
"commitizen": {
4973
"path": "./node_modules/cz-conventional-changelog"
5074
}
5175
},
52-
"prettier": "./lib/prettier.js",
53-
"eslintConfig": {
54-
"extends": [
55-
"./lib/eslint.js"
56-
],
57-
"ignorePatterns": [
58-
"node_modules",
59-
"lib",
60-
"examples",
61-
"!.prettierrc.js",
62-
"!.eslintrc.js",
63-
"!.stylelintrc.js"
64-
]
65-
},
6676
"dependencies": {
6777
"@babel/core": "^7.20.12",
6878
"@babel/eslint-parser": "^7.19.1",
@@ -92,8 +102,7 @@
92102
"devDependencies": {
93103
"@types/node": "^18.11.18",
94104
"cz-conventional-changelog": "3.3.0",
95-
"rimraf": "^3.0.2",
96-
"typescript": "4.9.4"
105+
"prefer-code-style": "workspace:*"
97106
},
98107
"engines": {
99108
"node": ">=14"
Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,48 @@
1-
const { ECMA_VERSION } = require('./constants')
1+
const { ECMA_VERSION, JAVASCRIPT_FILES } = require('../constants')
22

33
module.exports = {
44
env: {
55
[`es${ECMA_VERSION}`]: true,
66
},
77

8+
// Global parser options.
9+
parserOptions: {
10+
ecmaVersion: ECMA_VERSION,
11+
sourceType: 'module',
12+
},
13+
814
// Report unused `eslint-disable` comments.
915
reportUnusedDisableDirectives: true,
1016

1117
extends: ['eslint:recommended', 'plugin:import/recommended', 'plugin:prettier/recommended'],
1218

1319
rules: {
1420
'prettier/prettier': 1,
15-
1621
'sort-imports': [1, { ignoreDeclarationSort: true }],
17-
1822
'import/order': [
1923
1,
2024
{
2125
'newlines-between': 'always',
2226
alphabetize: { order: 'asc' },
2327
warnOnUnassignedImports: false,
24-
pathGroups: [
25-
{
26-
pattern: 'react',
27-
group: 'builtin',
28-
position: 'before',
29-
},
30-
],
31-
pathGroupsExcludedImportTypes: ['react'],
3228
},
3329
],
3430
'import/first': 1,
3531
'import/newline-after-import': 1,
36-
3732
'func-style': [1, 'declaration', { allowArrowFunctions: true }],
33+
'no-unused-vars': 1,
3834
},
35+
36+
overrides: [
37+
{
38+
files: JAVASCRIPT_FILES,
39+
parser: '@babel/eslint-parser',
40+
parserOptions: {
41+
requireConfigFile: false,
42+
},
43+
},
44+
],
45+
46+
// Tell ESLint not to ignore dot-files, which are ignored by default.
47+
ignorePatterns: ['!.*.js'],
3948
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
module.exports = {
22
extends: ['plugin:@next/next/recommended'],
3+
ignorePatterns: ['public', 'next-env.d.ts', '.next'],
34
}
File renamed without changes.

src/eslint/preset-react.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = {
2+
extends: [
3+
require.resolve('./node'),
4+
require.resolve('./browser'),
5+
require.resolve('./typescript'),
6+
require.resolve('./react'),
7+
require.resolve('./next'),
8+
require.resolve('./tailwindcss'),
9+
],
10+
}
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ module.exports = {
1919
'import/order': [
2020
1,
2121
{
22-
'newlines-between': 'always',
23-
alphabetize: { order: 'asc' },
24-
warnOnUnassignedImports: false,
2522
pathGroups: [
2623
{
2724
pattern: 'react',

0 commit comments

Comments
 (0)