Skip to content

Commit 2edd3d3

Browse files
committed
feat: add simple-import-sort to recommended-* configs
1 parent 7df50dd commit 2edd3d3

20 files changed

+300
-255
lines changed

airbnb.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ const defaultConfiguration = require('.')
44

55
module.exports = {
66
...defaultConfiguration,
7-
extends: ['airbnb-base', 'plugin:import/typescript', ...defaultConfiguration.extends],
7+
extends: [
8+
'airbnb-base',
9+
'plugin:import/recommended',
10+
'plugin:import/typescript',
11+
...defaultConfiguration.extends,
12+
],
813
rules: {
914
...defaultConfiguration.rules,
1015
'import/extensions': [

package-lock.json

Lines changed: 21 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@
7373
"eslint-plugin-jsx-a11y": "6.6.1",
7474
"eslint-plugin-prettier": "4.2.1",
7575
"eslint-plugin-react": "7.31.4",
76-
"eslint-plugin-react-hooks": "4.6.0"
76+
"eslint-plugin-react-hooks": "4.6.0",
77+
"eslint-plugin-simple-import-sort": "7.0.0"
7778
},
7879
"devDependencies": {
7980
"@commitlint/cli": "17.1.2",

recommended-react.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,33 @@ module.exports = {
2424
extensions: ['.jsx', '.tsx'],
2525
},
2626
],
27+
'simple-import-sort/imports': [
28+
'warn',
29+
{
30+
groups: [
31+
// Node.js builtins generated from a regex (ref: https://git.io/JMJfU)
32+
[`^(${require('module').builtinModules.join('|')})(/|$)`],
33+
// Third-party modules (side effects)
34+
['^\\u0000'],
35+
// Third-party stylesheets (side effects)
36+
['^\\u0000@?\\w.*\\.(s?css|less)$'],
37+
// Internal stylesheets (side effects)
38+
['^\\u0000\\..*\\.(s?css|less)$'],
39+
// React and related modules
40+
['^react'],
41+
// Third-party modules
42+
['^@?\\w'],
43+
// Internal parent-level modules
44+
['^\\.\\.(?!/?$)', '^\\.\\./?$'],
45+
// Internal same-level modules
46+
['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'],
47+
// Internal CSS Modules
48+
['^.*\\.module\\.css$'],
49+
// Internal type imports as a separate group
50+
// (sorting like non-type imports are grouped)
51+
['^@?\\w.*\\u0000$', '^[^.].*\\u0000$', '^\\..*\\u0000$'],
52+
],
53+
},
54+
],
2755
},
2856
}

recommended.js

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,39 @@ module.exports = {
1515
},
1616
],
1717
'@typescript-eslint/no-unused-vars': 'off',
18-
'import/exports-last': 'error',
19-
'import/group-exports': 'error',
20-
'import/no-extraneous-dependencies': [
21-
'error',
22-
{
23-
devDependencies: [
24-
'**/__{mocks,tests}__/**/*.{js,ts}',
25-
'**/*.{spec,test}.{js,ts}',
26-
'**/*.{config,setup}.{js,ts}',
27-
],
28-
},
29-
],
18+
'import/first': 'error',
19+
'import/newline-after-import': 'error',
20+
'import/no-named-as-default': 'error',
21+
'import/no-named-as-default-member': 'error',
22+
'import/no-duplicates': 'error',
3023
'import/no-default-export': 'error',
31-
'import/no-deprecated': 'warn',
32-
'import/order': [
33-
'error',
24+
'prettier/prettier': 'warn',
25+
'simple-import-sort/imports': [
26+
'warn',
3427
{
35-
alphabetize: {
36-
caseInsensitive: true,
37-
order: 'asc',
38-
},
39-
groups: ['object', 'builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
40-
'newlines-between': 'always',
28+
groups: [
29+
// Node.js builtins generated from a regex (ref: https://git.io/JMJfU)
30+
[`^(${require('module').builtinModules.join('|')})(/|$)`],
31+
// Third-party modules (side effects)
32+
['^\\u0000'],
33+
// Third-party stylesheets (side effects)
34+
['^\\u0000@?\\w.*\\.(s?css|less)$'],
35+
// Internal stylesheets (side effects)
36+
['^\\u0000\\..*\\.(s?css|less)$'],
37+
// React and related modules
38+
['^@?\\w'],
39+
// Internal parent-level modules
40+
['^\\.\\.(?!/?$)', '^\\.\\./?$'],
41+
// Internal same-level modules
42+
['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'],
43+
// Internal CSS Modules
44+
['^.*\\.module\\.css$'],
45+
// Internal type imports as a separate group
46+
// (sorting like non-type imports are grouped)
47+
['^@?\\w.*\\u0000$', '^[^.].*\\u0000$', '^\\..*\\u0000$'],
48+
],
4149
},
4250
],
43-
'import/prefer-default-export': 'off',
44-
'prettier/prettier': 'warn',
51+
'simple-import-sort/exports': 'warn',
4552
},
4653
}

tests/airbnb-react-hooks-semantics.test.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@ describe('Airbnb (React + Hooks)', () => {
77
extends: [
88
'airbnb',
99
'airbnb/hooks',
10+
'plugin:import/recommended',
1011
'plugin:import/typescript',
11-
'plugin:@typescript-eslint/recommended',
1212
'plugin:@typescript-eslint/recommended-requiring-type-checking',
13+
'plugin:@typescript-eslint/recommended',
1314
'plugin:prettier/recommended',
1415
],
1516
parser: '@typescript-eslint/parser',
16-
parserOptions: { project: './tsconfig.json' },
17+
parserOptions: {
18+
project: './tsconfig.json',
19+
},
1720
rules: {
1821
'no-undef': 'off',
1922
'import/extensions': [

tests/airbnb-react-hooks.test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ describe('Airbnb (React + Hooks)', () => {
66
extends: [
77
'airbnb',
88
'airbnb/hooks',
9+
'plugin:import/recommended',
910
'plugin:import/typescript',
1011
'plugin:@typescript-eslint/recommended',
1112
'plugin:prettier/recommended',
1213
],
1314
parser: '@typescript-eslint/parser',
14-
parserOptions: { project: './tsconfig.json' },
15+
parserOptions: {
16+
project: './tsconfig.json',
17+
},
1518
rules: {
1619
'no-undef': 'off',
1720
'import/extensions': [

tests/airbnb-react-semantics.test.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ describe('Airbnb (React)', () => {
66
expect(airbnbReactSemanticsConfiguration).toEqual({
77
extends: [
88
'airbnb',
9+
'plugin:import/recommended',
910
'plugin:import/typescript',
10-
'plugin:@typescript-eslint/recommended',
1111
'plugin:@typescript-eslint/recommended-requiring-type-checking',
12+
'plugin:@typescript-eslint/recommended',
1213
'plugin:prettier/recommended',
1314
],
1415
parser: '@typescript-eslint/parser',
15-
parserOptions: { project: './tsconfig.json' },
16+
parserOptions: {
17+
project: './tsconfig.json',
18+
},
1619
rules: {
1720
'no-undef': 'off',
1821
'import/extensions': [

tests/airbnb-react.test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ describe('Airbnb (React)', () => {
55
expect(airbnbReactConfiguration).toEqual({
66
extends: [
77
'airbnb',
8+
'plugin:import/recommended',
89
'plugin:import/typescript',
910
'plugin:@typescript-eslint/recommended',
1011
'plugin:prettier/recommended',
1112
],
1213
parser: '@typescript-eslint/parser',
13-
parserOptions: { project: './tsconfig.json' },
14+
parserOptions: {
15+
project: './tsconfig.json',
16+
},
1417
rules: {
1518
'no-undef': 'off',
1619
'import/extensions': [

tests/airbnb-semantics.test.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ describe('Airbnb', () => {
66
expect(airbnbSemanticsConfiguration).toEqual({
77
extends: [
88
'airbnb-base',
9+
'plugin:import/recommended',
910
'plugin:import/typescript',
10-
'plugin:@typescript-eslint/recommended',
1111
'plugin:@typescript-eslint/recommended-requiring-type-checking',
12+
'plugin:@typescript-eslint/recommended',
1213
'plugin:prettier/recommended',
1314
],
1415
parser: '@typescript-eslint/parser',
15-
parserOptions: { project: './tsconfig.json' },
16+
parserOptions: {
17+
project: './tsconfig.json',
18+
},
1619
rules: {
1720
'no-undef': 'off',
1821
'import/extensions': [

tests/airbnb.test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ describe('Airbnb', () => {
55
expect(airbnbConfiguration).toEqual({
66
extends: [
77
'airbnb-base',
8+
'plugin:import/recommended',
89
'plugin:import/typescript',
910
'plugin:@typescript-eslint/recommended',
1011
'plugin:prettier/recommended',
1112
],
1213
parser: '@typescript-eslint/parser',
13-
parserOptions: { project: './tsconfig.json' },
14+
parserOptions: {
15+
project: './tsconfig.json',
16+
},
1417
rules: {
1518
'no-undef': 'off',
1619
'import/extensions': [

tests/eslint-semantics.test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@ describe('ESLint', () => {
1212
'plugin:prettier/recommended',
1313
],
1414
parser: '@typescript-eslint/parser',
15-
parserOptions: { project: './tsconfig.json' },
16-
rules: { 'no-undef': 'off' },
15+
parserOptions: {
16+
project: './tsconfig.json',
17+
},
18+
rules: {
19+
'no-undef': 'off',
20+
},
1721
})
1822
})
1923
})

tests/eslint.test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ describe('ESLint', () => {
1010
'plugin:prettier/recommended',
1111
],
1212
parser: '@typescript-eslint/parser',
13-
parserOptions: { project: './tsconfig.json' },
14-
rules: { 'no-undef': 'off' },
13+
parserOptions: {
14+
project: './tsconfig.json',
15+
},
16+
rules: {
17+
'no-undef': 'off',
18+
},
1519
})
1620
})
1721
})

tests/index.test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ describe('Default', () => {
55
expect(defaultConfiguration).toEqual({
66
extends: ['plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
77
parser: '@typescript-eslint/parser',
8-
parserOptions: { project: './tsconfig.json' },
9-
rules: { 'no-undef': 'off' },
8+
parserOptions: {
9+
project: './tsconfig.json',
10+
},
11+
rules: {
12+
'no-undef': 'off',
13+
},
1014
})
1115
})
1216
})

0 commit comments

Comments
 (0)