Skip to content

Commit

Permalink
Migrating from eslintrc.json to eslint.config.js (#2660)
Browse files Browse the repository at this point in the history
* performing the migration

* performing the migration

* Update eslint.config.mjs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* adding globals package

* fixing linting errors

* Apply suggestions from code review

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Excluding L15-L17 from codeCov

* refactoring the config file and updating package-lock.json

* re-making eslintrc.json and eslintignore to resolve conflicts

* adding @eslint/compat

* updating eslint.config.mjs

* upgrading eslint version to satisfy the peer deps for @eslint/compat

* updating globals package to resolve an error

* Adding test for eslint.config.mjs

* fixing lint

* linting fix

* fixing lint finally

* fixing failing test

* removing eslintrc.json and eslintignore and adding test for eslint.config.mjs

* refactoring eslint.config.js

* Adding eslint.config.js to ignores property

* Adding suggestions from coderabbit

* removing the test

* Update eslint.config.mjs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eslint.config.mjs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Peter Harrison <[email protected]>
  • Loading branch information
3 people authored Jan 5, 2025
1 parent 4798179 commit 1104967
Show file tree
Hide file tree
Showing 11 changed files with 441 additions and 1,915 deletions.
8 changes: 0 additions & 8 deletions .eslintignore

This file was deleted.

157 changes: 0 additions & 157 deletions .eslintrc.json

This file was deleted.

216 changes: 216 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
import react from 'eslint-plugin-react';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import jest from 'eslint-plugin-jest';
import _import from 'eslint-plugin-import';
import tsdoc from 'eslint-plugin-tsdoc';
import prettier from 'eslint-plugin-prettier';
import { fixupPluginRules } from '@eslint/compat';
import globals from 'globals';
import tsParser from '@typescript-eslint/parser';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';

export function createESLintCompat() {
const _filename = fileURLToPath(import.meta.url);
const _dirname = path.dirname(_filename);

return new FlatCompat({
baseDirectory: _dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
}

const compat = createESLintCompat();

export default [
export default [
{
ignores: [
'**/*.css',
'**/*.scss',
'**/*.less',
'**/*.json',
'**/*.svg',
'docs/docusaurus.config.ts',
'docs/sidebars.ts',
'docs/src/**/*',
'docs/blog/**/*',
'src/components/CheckIn/tagTemplate.ts',
'**/package.json',
'**/package-lock.json',
'**/tsconfig.json',
'docs/**/*'
],
},
...compat.extends(
'plugin:react/recommended',
'eslint:recommended',
'plugin:jest/recommended',
'plugin:prettier/recommended',
'plugin:@typescript-eslint/recommended',
'eslint-config-prettier',
'prettier',
),
{
plugins: {
react,
'@typescript-eslint': typescriptEslint,
jest,
import: fixupPluginRules(_import),
tsdoc,
prettier,
},

languageOptions: {
globals: {
...globals.browser,
...globals.node,
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},

parser: tsParser,
ecmaVersion: 2018,
sourceType: 'module',

parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},

settings: {
react: {
version: 'detect',
},
},

rules: {
'react/destructuring-assignment': 'error',
'@typescript-eslint/explicit-module-boundary-types': 'error',

'react/no-multi-comp': [
'error',
{
ignoreStateless: false,
},
],

'react/jsx-filename-extension': [
'error',
{
extensions: ['.tsx'],
},
],

'import/no-duplicates': 'error',
'tsdoc/syntax': 'error',
'@typescript-eslint/ban-ts-comment': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-inferrable-types': 'error',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
'@typescript-eslint/no-non-null-assertion': 'error',
'@typescript-eslint/no-var-requires': 'error',
'@typescript-eslint/no-unsafe-function-type': 'error',
'@typescript-eslint/no-wrapper-object-types': 'error',
'@typescript-eslint/no-empty-object-type': 'error',
'@typescript-eslint/no-duplicate-enum-values': 'error',
'@typescript-eslint/array-type': 'error',
'@typescript-eslint/consistent-type-assertions': 'error',
'@typescript-eslint/consistent-type-imports': 'error',

'@typescript-eslint/explicit-function-return-type': [
2,
{
allowExpressions: true,
allowTypedFunctionExpressions: true,
},
],

camelcase: 'off',

'@typescript-eslint/naming-convention': [
'error',
{
selector: 'interface',
format: ['PascalCase'],
prefix: ['Interface', 'TestInterface'],
},
{
selector: ['typeAlias', 'typeLike', 'enum'],
format: ['PascalCase'],
},
{
selector: 'typeParameter',
format: ['PascalCase'],
prefix: ['T'],
},
{
selector: 'variable',
format: ['camelCase', 'UPPER_CASE', 'PascalCase'],
leadingUnderscore: 'allow',
},
{
selector: 'parameter',
format: ['camelCase'],
leadingUnderscore: 'allow',
},
{
selector: 'function',
format: ['camelCase', 'PascalCase'],
},
{
selector: 'memberLike',
modifiers: ['private'],
format: ['camelCase'],
leadingUnderscore: 'require',
},
{
selector: 'variable',
modifiers: ['exported'],
format: null,
},
],

'react/jsx-pascal-case': [
'error',
{
allowAllCaps: false,
allowNamespace: false,
},
],

'react/jsx-equals-spacing': ['warn', 'never'],
'react/no-this-in-sfc': 'error',
'jest/expect-expect': 0,

'react/no-unstable-nested-components': [
'error',
{
allowAsProps: true,
},
],

'react/function-component-definition': [
0,
{
namedComponents: 'function-declaration',
},
],

'prettier/prettier': 'error',
},
},
{
files: ['eslint.config.mjs'],
rules: {
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
},
},
];
Loading

0 comments on commit 1104967

Please sign in to comment.