Skip to content

Commit f50a3b9

Browse files
author
Matthieu Gicquel
committed
feat(eslint-plugin): add new imports config
1 parent fdaffef commit f50a3b9

File tree

7 files changed

+257
-6
lines changed

7 files changed

+257
-6
lines changed

example-app/.eslintrc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
22
"root": true,
3-
"extends": ["plugin:@bam.tech/recommended", "plugin:@bam.tech/a11y"],
3+
"extends": [
4+
"plugin:@bam.tech/recommended",
5+
"plugin:@bam.tech/a11y",
6+
"plugin:@bam.tech/imports"
7+
],
48
"overrides": [
59
{
610
"files": ["*.test.tsx"],

example-app/eslint-breaking-examples/not-breaking-rules.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import "react";
2+
13
import { StyleSheet, Text, View } from "react-native";
24

35
// This should not trigger a warning nor an error because explicit-function-return-type rule is off

example-app/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@
1616
"@types/react": "^18.2.14",
1717
"@typescript-eslint/eslint-plugin": "^6.0.0",
1818
"eslint": "^8.44.0",
19+
"eslint-config-prettier": "^9.0.0",
20+
"eslint-import-resolver-typescript": "^3.6.1",
21+
"eslint-plugin-import": "^2.29.1",
1922
"eslint-plugin-jest": "^27.2.2",
2023
"eslint-plugin-jest-formatting": "^3.1.0",
2124
"eslint-plugin-prettier": "^5.0.0",
2225
"eslint-plugin-react": "^7.31.11",
2326
"eslint-plugin-react-hooks": "^4.6.0",
2427
"eslint-plugin-react-native": "^4.0.0",
2528
"eslint-plugin-react-native-a11y": "^3.3.0",
29+
"eslint-plugin-simple-import-sort": "^10.0.0",
2630
"eslint-plugin-testing-library": "^6.0.1",
31+
"eslint-plugin-unused-imports": "^3.0.0",
2732
"jest": "^29.5.0",
2833
"prettier": "^3.0.0",
2934
"typescript": "^5.0.0"
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { defineConfig } from "eslint-define-config";
2+
3+
export const importsConfig = defineConfig({
4+
extends: ["plugin:import/typescript"],
5+
plugins: ["simple-import-sort", "import", "unused-imports"],
6+
settings: {
7+
"import/resolver": {
8+
typescript: true,
9+
node: true,
10+
},
11+
},
12+
rules: {
13+
/*
14+
* Standardized import syntax
15+
*/
16+
"@typescript-eslint/consistent-type-imports": "error", // use "import type" for types. Optimize import readability, bundle size, avoid circular dependencies
17+
"@typescript-eslint/no-require-imports": "error",
18+
"@typescript-eslint/no-var-requires": "off", // it's mostly a duplicate of no-require-imports
19+
20+
/*
21+
* The 3 rules below are duplicated with the recommended config -- deduplicate if we add this config to the recommended one
22+
*/
23+
"@typescript-eslint/no-unused-vars": "off", // eslint-plugin-unused-imports replaces this rule
24+
"unused-imports/no-unused-imports": "error", // Automatically remove unused imports on save
25+
"unused-imports/no-unused-vars": "error",
26+
27+
/*
28+
* Import sorting
29+
*/
30+
"simple-import-sort/imports": [
31+
"error",
32+
{
33+
groups: [
34+
["^\\u0000"], // side effect imports
35+
["^@?\\w"], // packages
36+
["^#"], // internal absolute imports
37+
["^[^.]"], // everything else
38+
["^\\."], // relative imports
39+
],
40+
},
41+
],
42+
"simple-import-sort/exports": "error",
43+
"import/first": "error",
44+
"import/newline-after-import": "error",
45+
"import/no-duplicates": "error",
46+
"import/no-unresolved": "error", // especially useful for "asset imports" in React Native projects
47+
48+
"import/no-relative-parent-imports": "off",
49+
},
50+
overrides: [
51+
{
52+
files: ["*.js"],
53+
rules: {
54+
"@typescript-eslint/no-require-imports": "off",
55+
},
56+
},
57+
],
58+
});
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { a11yconfig } from "./a11y";
2+
import { importsConfig } from "./imports";
23
import { recommendedConfig } from "./recommended";
34
import { testsConfig } from "./tests";
45

56
export default {
67
recommended: recommendedConfig,
78
tests: testsConfig,
89
a11y: a11yconfig,
10+
imports: importsConfig,
911
};

packages/eslint-plugin/package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,24 @@
2121
"build": "tsc",
2222
"lint": "npm-run-all \"lint:*\"",
2323
"lint:js": "eslint .",
24-
"lint:eslint-docs": "npm-run-all \"update:eslint-docs -- --check\"",
24+
"lint:eslint-docs": "npm-run-all \"update:eslint-docs --check\"",
2525
"test": "jest",
2626
"update:eslint-docs": "eslint-doc-generator --config-emoji tests,🧪"
2727
},
2828
"peerDependencies": {
2929
"@typescript-eslint/eslint-plugin": "^6.0.0",
3030
"eslint": "^8.44.0",
3131
"eslint-config-prettier": "^9.0.0",
32+
"eslint-import-resolver-typescript": "^3.6.1",
33+
"eslint-plugin-import": "^2.29.1",
3234
"eslint-plugin-jest": "^27.2.2",
3335
"eslint-plugin-jest-formatting": "^3.1.0",
3436
"eslint-plugin-prettier": "^5.0.0",
3537
"eslint-plugin-react": "^7.31.11",
3638
"eslint-plugin-react-hooks": "^4.6.0",
3739
"eslint-plugin-react-native": "^4.0.0",
3840
"eslint-plugin-react-native-a11y": "^3.3.0",
41+
"eslint-plugin-simple-import-sort": "^10.0.0",
3942
"eslint-plugin-testing-library": "^6.0.1",
4043
"eslint-plugin-unused-imports": "^3.0.0",
4144
"prettier": "^3.0.0"
@@ -50,14 +53,17 @@
5053
"eslint": "^8.44.0",
5154
"eslint-config-prettier": "^9.0.0",
5255
"eslint-doc-generator": "^1.4.3",
56+
"eslint-import-resolver-typescript": "^3.6.1",
5357
"eslint-plugin-eslint-plugin": "^5.1.0",
58+
"eslint-plugin-import": "^2.29.1",
5459
"eslint-plugin-jest": "^27.2.2",
5560
"eslint-plugin-jest-formatting": "^3.1.0",
5661
"eslint-plugin-prettier": "^5.0.0",
5762
"eslint-plugin-react": "^7.31.11",
5863
"eslint-plugin-react-hooks": "^4.6.0",
5964
"eslint-plugin-react-native": "^4.0.0",
6065
"eslint-plugin-react-native-a11y": "^3.3.0",
66+
"eslint-plugin-simple-import-sort": "^10.0.0",
6167
"eslint-plugin-testing-library": "6.0.1",
6268
"eslint-plugin-unused-imports": "^3.0.0",
6369
"jest": "^29.7.0",

0 commit comments

Comments
 (0)