Skip to content

Commit f68e736

Browse files
committed
[infra] eslint: migrate to import-x
1 parent d55fa4f commit f68e736

File tree

9 files changed

+97
-36
lines changed

9 files changed

+97
-36
lines changed

eslint.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default defineConfig(
2323
'jsx-a11y/no-autofocus': 'off',
2424
},
2525
settings: {
26-
'import/resolver': {
26+
'import-x/resolver': {
2727
typescript: {
2828
project: ['tsconfig.json'],
2929
},
@@ -47,7 +47,7 @@ export default defineConfig(
4747
files: ['packages/bundle-size-checker/**/*'],
4848
rules: {
4949
// Allow .js file extensions in import statements for ESM compatibility
50-
'import/extensions': [
50+
'import-x/extensions': [
5151
'error',
5252
'ignorePackages',
5353
{

packages/babel-plugin-minify-errors/__fixtures__/eslint.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ export default {
77

88
// Babel import helpers do not add one.
99
// Since this is auto generated code we don't care about code style.
10-
'import/newline-after-import': 'off',
11-
'import/no-unresolved': 'off',
10+
'import-x/newline-after-import': 'off',
11+
'import-x/no-unresolved': 'off',
1212
'@typescript-eslint/no-unused-vars': 'off',
1313
'no-undef': 'off',
1414
},

packages/code-infra/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"eslint-config-prettier": "^10.1.8",
3737
"eslint-import-resolver-typescript": "^4.4.4",
3838
"eslint-module-utils": "^2.12.1",
39-
"eslint-plugin-import": "^2.32.0",
39+
"eslint-plugin-import-x": "^4.16.1",
4040
"eslint-plugin-jsx-a11y": "^6.10.2",
4141
"eslint-plugin-mocha": "^11.1.0",
4242
"eslint-plugin-react": "^7.37.5",

packages/code-infra/src/eslint/airbnb/base.mjs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import baseStyle from 'eslint-config-airbnb-base/rules/style';
1212
import baseVariables from 'eslint-config-airbnb-base/rules/variables';
1313
import airbnbReact from 'eslint-config-airbnb/rules/react';
1414
import airbnbReactA11y from 'eslint-config-airbnb/rules/react-a11y';
15-
import eslintPluginImport from 'eslint-plugin-import';
15+
import eslintPluginImportX from 'eslint-plugin-import-x';
1616
import eslintPluginJsxA11y from 'eslint-plugin-jsx-a11y';
1717
import eslintPluginReact from 'eslint-plugin-react';
1818

@@ -29,17 +29,40 @@ const baseES6Plugin = {
2929
rules: baseEs6.rules,
3030
};
3131

32+
/**
33+
* @param {Record<string, unknown>} obj
34+
* @returns {Record<string, unknown>}
35+
*/
36+
function migrateToImportX(obj) {
37+
/**
38+
* @type {Record<string, unknown>}
39+
*/
40+
const newObj = {};
41+
for (const [key, value] of Object.entries(obj)) {
42+
if (key.startsWith('import/')) {
43+
newObj[key.replace('import/', 'import-x/')] = value;
44+
} else {
45+
newObj[key] = value;
46+
}
47+
}
48+
return newObj;
49+
}
50+
3251
const baseImportPlugin = {
3352
languageOptions: {
3453
globals: {
3554
...globals.es2016,
3655
},
3756
parserOptions: baseImports.parserOptions,
3857
},
39-
settings: baseImports.settings,
40-
rules: baseImports.rules,
58+
settings: baseImports.settings ? migrateToImportX(baseImports.settings) : undefined,
59+
rules: baseImports.rules
60+
? /** @type {Partial<import('eslint').Linter.RulesRecord>} */ (
61+
migrateToImportX(baseImports.rules)
62+
)
63+
: undefined,
4164
plugins: {
42-
import: eslintPluginImport,
65+
'import-x': eslintPluginImportX,
4366
},
4467
};
4568

packages/code-infra/src/eslint/airbnb/typescript.mjs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ export default /** @type {import('typescript-eslint').ConfigArray} */ (
2121
tseslint.config(
2222
{
2323
settings: {
24-
'import/parsers': {
24+
'import-x/parsers': {
2525
'@typescript-eslint/parser': ['.ts', '.tsx', '.d.ts'],
2626
},
27-
'import/resolver': {
27+
'import-x/resolver': {
2828
node: {
2929
extensions: ['.mjs', '.js', '.jsx', '.json', '.ts', '.tsx', '.d.ts'],
3030
},
3131
},
32-
// Append 'ts' extensions to Airbnb 'import/extensions' setting
32+
// Append 'ts' extensions to Airbnb 'import-x/extensions' setting
3333
// Original: ['.js', '.mjs', '.jsx']
34-
'import/extensions': ['.js', '.mjs', '.jsx', '.ts', '.tsx', '.d.ts'],
34+
'import-x/extensions': ['.js', '.mjs', '.jsx', '.ts', '.tsx', '.d.ts'],
3535
// Resolve type definition packages
36-
'import/external-module-folders': ['node_modules', 'node_modules/@types'],
36+
'import-x/external-module-folders': ['node_modules', 'node_modules/@types'],
3737
},
3838
rules: {
3939
camelcase: 'off',
@@ -77,9 +77,9 @@ export default /** @type {import('typescript-eslint').ConfigArray} */ (
7777
'require-await': 'off',
7878
'@typescript-eslint/require-await': baseBestPractices.rules?.['require-await'],
7979

80-
// Append 'ts' and 'tsx' to Airbnb 'import/extensions' rule
80+
// Append 'ts' and 'tsx' to Airbnb 'import-x/extensions' rule
8181
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
82-
'import/extensions': [
82+
'import-x/extensions': [
8383
baseImportsRules['import/extensions'][0],
8484
baseImportsRules['import/extensions'][1],
8585
typeof baseImportsRules['import/extensions'][2] === 'object'
@@ -117,9 +117,9 @@ export default /** @type {import('typescript-eslint').ConfigArray} */ (
117117
'valid-typeof': 'off',
118118
// The following rules are enabled in Airbnb config, but are recommended to be disabled within TypeScript projects
119119
// See: https://github.com/typescript-eslint/typescript-eslint/blob/13583e65f5973da2a7ae8384493c5e00014db51b/docs/linting/TROUBLESHOOTING.md#eslint-plugin-import
120-
'import/named': 'off',
121-
'import/no-named-as-default-member': 'off',
122-
'import/no-unresolved': 'off',
120+
'import-x/named': 'off',
121+
'import-x/no-named-as-default-member': 'off',
122+
'import-x/no-unresolved': 'off',
123123
},
124124
},
125125
)

packages/code-infra/src/eslint/baseConfig.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ export function createBaseConfig(
5858
'material-ui': muiPlugin,
5959
},
6060
settings: {
61-
'import/parsers': {
61+
'import-x/parsers': {
6262
'@typescript-eslint/parser': ['.ts', '.tsx'],
6363
},
64-
'import/resolver': {
64+
'import-x/resolver': {
6565
typescript: {
6666
project: ['tsconfig.node.json', 'apps/*/tsconfig.json', 'packages/*/tsconfig.json'],
6767
},
@@ -72,7 +72,7 @@ export function createBaseConfig(
7272
{
7373
files: ['**/*.mjs'],
7474
rules: {
75-
'import/extensions': [
75+
'import-x/extensions': [
7676
'error',
7777
'ignorePackages',
7878
{

packages/code-infra/src/eslint/material-ui/config.mjs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ export function createCoreConfig(options = {}) {
6868
],
6969

7070
// Not needed in general, can be turned on for specific files
71-
'import/prefer-default-export': 'off',
71+
'import-x/prefer-default-export': 'off',
7272
// Not sure why it doesn't work
73-
'import/named': 'off',
74-
'import/no-cycle': 'off',
73+
'import-x/named': 'off',
74+
'import-x/no-cycle': 'off',
7575
// Missing yarn workspace support
76-
'import/no-extraneous-dependencies': 'off',
76+
'import-x/no-extraneous-dependencies': 'off',
7777
// The code is already coupled to webpack. Prefer explicit coupling.
78-
'import/no-webpack-loader-syntax': 'off',
79-
'import/no-relative-packages': 'error',
78+
'import-x/no-webpack-loader-syntax': 'off',
79+
'import-x/no-relative-packages': 'error',
8080

8181
// doesn't work?
8282
'jsx-a11y/label-has-associated-control': [

packages/code-infra/src/eslint/testConfig.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const baseSpecRules = {
1919
'@typescript-eslint/no-unused-vars': 'off',
2020
'@typescript-eslint/no-use-before-define': 'off',
2121

22-
'import/prefer-default-export': 'off',
22+
'import-x/prefer-default-export': 'off',
2323

2424
'jsx-a11y/anchor-has-content': 'off',
2525
'jsx-a11y/anchor-is-valid': 'off',
@@ -60,7 +60,7 @@ export function createTestConfig(options = {}) {
6060
},
6161
rules: {
6262
// does not work with wildcard imports. Mistakes will throw at runtime anyway
63-
'import/named': 'off',
63+
'import-x/named': 'off',
6464
'material-ui/disallow-active-element-as-key-event-target': 'error',
6565

6666
// disable eslint-plugin-jsx-a11y

pnpm-lock.yaml

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

0 commit comments

Comments
 (0)