Skip to content
This repository was archived by the owner on Feb 11, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 53 additions & 37 deletions eslint/_base.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,65 @@
const { FlatCompat } = require('@eslint/eslintrc');
const jseslint = require('@eslint/js');
const eslintImport = require('eslint-plugin-import');
const eslintComments = require('eslint-plugin-eslint-comments');
const babelParser = require('@babel/eslint-parser');

const { ECMA_VERSION, JAVASCRIPT_FILES } = require('./constants');

// See: https://github.com/eslint/eslint/issues/3458
require('@rushstack/eslint-patch/modern-module-resolution');
// require('@rushstack/eslint-patch/modern-module-resolution');

const { rules: bestPracticeRules } = require('./rules/best-practice');
const { rules: commentsRules } = require('./rules/comments');
const { rules: es6Rules } = require('./rules/es6');
const { rules: importRules } = require('./rules/import');
const { rules: possibleErrorsRules } = require('./rules/possible-errors');
const { rules: stylisticRules } = require('./rules/stylistic');
const { rules: unicornRules } = require('./rules/unicorn');
const { rules: variablesRules } = require('./rules/variables');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

/**
* This is the base for both our browser and Node ESLint config files.
*/
module.exports = {
extends: [
'eslint:recommended',
'plugin:import/recommended',
'prettier',
require.resolve('./rules/best-practice'),
require.resolve('./rules/comments'),
require.resolve('./rules/es6'),
require.resolve('./rules/import'),
require.resolve('./rules/possible-errors'),
require.resolve('./rules/stylistic'),
require.resolve('./rules/unicorn'),
require.resolve('./rules/variables'),
],
env: {
module.exports = [
jseslint.configs.recommended,
...flatCompat.plugins('prettier', 'unicorn'),
...flatCompat.config(eslintImport.configs.recommended),
...flatCompat.config(eslintComments.configs.recommended),
...flatCompat.env({
[`es${ECMA_VERSION}`]: true,
},
// Report unused `eslint-disable` comments.
reportUnusedDisableDirectives: true,
// Tell ESLint not to ignore dot-files, which are ignored by default.
ignorePatterns: ['!.*.js'],
// Global settings used by all overrides.
settings: {
// Use the Node resolver by default.
'import/resolver': { node: {} },
},
// Global parser options.
parserOptions: {
ecmaVersion: ECMA_VERSION,
sourceType: 'module',
},
overrides: [
{
files: JAVASCRIPT_FILES,
parser: '@babel/eslint-parser',
}),
{
files: JAVASCRIPT_FILES,
languageOptions: {
ecmaVersion: ECMA_VERSION,
sourceType: 'module',
parser: babelParser,
parserOptions: {
// Report unused `eslint-disable` comments.
reportUnusedDisableDirectives: true,
requireConfigFile: false,
},
},
],
};
// Tell ESLint not to ignore dot-files, which are ignored by default.
ignores: ['!.*.js'],
settings: {
// Use the Node resolver by default.
'import/resolver': { node: {} },
},
rules: {
...bestPracticeRules,
...commentsRules,
...es6Rules,
...importRules,
...possibleErrorsRules,
...stylisticRules,
...unicornRules,
...variablesRules,
},
},
];
18 changes: 13 additions & 5 deletions eslint/browser.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
module.exports = {
extends: './_base',
env: {
const { FlatCompat } = require('@eslint/eslintrc');

const baseConfig = require('./_base');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...baseConfig,
...flatCompat.env({
browser: true,
},
};
}),
];
23 changes: 17 additions & 6 deletions eslint/comments.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
module.exports = {
extends: [
'plugin:eslint-comments/recommended',
require.resolve('./rules/comments'),
],
};
const { FlatCompat } = require('@eslint/eslintrc');
const comments = require('eslint-plugin-eslint-comments');

const { rules } = require('./rules/comments');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...flatCompat.config(comments.configs.recommended),
{
rules,
},
];

// 'plugin:eslint-comments/recommended',
31 changes: 25 additions & 6 deletions eslint/jest-react.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
module.exports = {
plugins: ['testing-library'],
extends: [
require.resolve('./jest'),
const { FlatCompat } = require('@eslint/eslintrc');

const { TYPESCRIPT_FILES } = require('./constants');
const { rules } = require('./rules/jest');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...flatCompat.plugins('testing-library'),
...flatCompat.extends(
// We may want to separate this out in future, as it's only needed when
// using React with Testing Library.
'plugin:testing-library/react',
],
};
),
...flatCompat.plugins('jest'),
{
files: TYPESCRIPT_FILES,
rules: {
...rules,
// Prefer the Jest version of this rule. This silently fails when type
// information is not available.
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
},
},
];
32 changes: 19 additions & 13 deletions eslint/jest.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
const { FlatCompat } = require('@eslint/eslintrc');

const { TYPESCRIPT_FILES } = require('./constants');
const { rules } = require('./rules/jest');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = {
extends: ['plugin:jest/recommended', require.resolve('./rules/jest')],
overrides: [
// Prefer the Jest version of this rule. This silently fails when type
// information is not available.
{
files: TYPESCRIPT_FILES,
rules: {
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
},
module.exports = [
...flatCompat.plugins('jest'),
{
files: TYPESCRIPT_FILES,
rules: {
...rules,
// Prefer the Jest version of this rule. This silently fails when type
// information is not available.
'@typescript-eslint/unbound-method': 'off',
'jest/unbound-method': 'error',
},
],
};
},
];
25 changes: 5 additions & 20 deletions eslint/next.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,10 @@
const { JAVASCRIPT_FILES } = require('./constants');
const requirePackage = require('./utils/require-package');

requirePackage('next', '@next/eslint-plugin-next');

const babelOptions = {
presets: (() => {
try {
require.resolve('next/babel');
return ['next/babel'];
} catch (e) {
return [];
}
})(),
};
const { FlatCompat } = require('@eslint/eslintrc');
const next = require('@next/eslint-plugin-next');

module.exports = {
extends: ['plugin:@next/next/recommended'],
overrides: [
{
files: JAVASCRIPT_FILES,
parserOptions: { babelOptions },
},
],
};
const flatCompat = new FlatCompat({});

module.exports = [...flatCompat.config(next.configs.recommended)];
18 changes: 13 additions & 5 deletions eslint/node.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
module.exports = {
extends: require.resolve('./_base'),
env: {
const { FlatCompat } = require('@eslint/eslintrc');

const baseConfig = require('./_base');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...baseConfig,
...flatCompat.env({
node: true,
},
};
}),
];
20 changes: 15 additions & 5 deletions eslint/playwright-test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
module.exports = {
plugins: ['playwright'],
extends: [require.resolve('./rules/playwright-test.js')],
env: {
const { FlatCompat } = require('@eslint/eslintrc');

const { rules } = require('./rules/playwright-test');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...flatCompat.plugins('playwright'),
...flatCompat.env({
'shared-node-browser': true,
}),
{
rules,
},
};
];
44 changes: 30 additions & 14 deletions eslint/react.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
module.exports = {
extends: [
'plugin:react/recommended',
'plugin:react-hooks/recommended',
'plugin:jsx-a11y/recommended',
'plugin:import/react',
'prettier',
require.resolve('./rules/react'),
require.resolve('./rules/jsx-a11y'),
],
settings: {
react: {
version: 'detect',
const { FlatCompat } = require('@eslint/eslintrc');
const react = require('eslint-plugin-react');
const reactHooks = require('eslint-plugin-react-hooks');
const jsxA11y = require('eslint-plugin-jsx-a11y');
const eslintImport = require('eslint-plugin-import');

const { rules: reactRules } = require('./rules/react');
const { rules: jsxA11yRules } = require('./rules/jsx-a11y');

const flatCompat = new FlatCompat({
baseDirectory: __dirname,
});

module.exports = [
...flatCompat.config(react.configs.recommended),
...flatCompat.config(reactHooks.configs.recommended),
...flatCompat.config(jsxA11y.configs.recommended),
...flatCompat.config(eslintImport.configs.recommended),
...flatCompat.config(eslintImport.configs.react),
...flatCompat.plugins('prettier'),
{
settings: {
react: {
version: 'detect',
},
},
rules: {
...reactRules,
...jsxA11yRules,
},
},
};
];
1 change: 0 additions & 1 deletion eslint/rules/comments.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
module.exports = {
plugins: ['eslint-comments'],
rules: {
/**
* Require comments on ESlint disable directives.
Expand Down
1 change: 0 additions & 1 deletion eslint/rules/tsdoc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
module.exports = {
plugins: ['eslint-plugin-tsdoc'],
rules: {
/**
* Require TSDoc comments conform to the TSDoc specification.
Expand Down
9 changes: 8 additions & 1 deletion eslint/rules/unicorn.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
/**
* These are enabled by `unicorn/recommended`.
*/
const disabledRules = {
'unicorn/prevent-abbreviations': 'off',
};

module.exports = {
plugins: ['unicorn'],
rules: {
...disabledRules,
/**
* Require consistent filename case for all linted files.
*
Expand Down
Loading