-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cd2cd18
commit bdda5dc
Showing
89 changed files
with
886 additions
and
986 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,120 +1,6 @@ | ||
// ! If we don't have this file, running ESLint will fail because of the import/no-unused-modules rule | ||
// ! See: https://github.com/import-js/eslint-plugin-import/issues/3079 | ||
// ! When this issue is resolved, this file can be removed | ||
{ | ||
"env": { | ||
"commonjs": true, | ||
"es2021": true, | ||
"node": true | ||
}, | ||
"parserOptions": { | ||
"ecmaVersion": "latest", | ||
"sourceType": "commonjs" | ||
}, | ||
"extends": [ | ||
"eslint:recommended", | ||
"airbnb", | ||
"plugin:cypress/recommended", | ||
"plugin:import/recommended", | ||
"plugin:prettier/recommended" | ||
], | ||
"overrides": [ | ||
{ | ||
"files": ["**/*.ts"], | ||
"env": { | ||
"es2021": true, | ||
"node": true | ||
}, | ||
"extends": [ | ||
"eslint:recommended", | ||
"plugin:@typescript-eslint/recommended", | ||
"airbnb-typescript", | ||
"plugin:prettier/recommended" | ||
], | ||
"parser": "@typescript-eslint/parser", | ||
"parserOptions": { | ||
"ecmaVersion": 2021, | ||
"sourceType": "module", | ||
"project": true | ||
}, | ||
"rules": { | ||
"import/prefer-default-export": "off", | ||
"@typescript-eslint/lines-between-class-members": "off", | ||
"@typescript-eslint/no-explicit-any": "off", | ||
"@typescript-eslint/no-shadow": "off", | ||
"@typescript-eslint/return-await": "off", | ||
"@typescript-eslint/no-unnecessary-type-assertion": "error" | ||
} | ||
}, | ||
{ | ||
"files": ["services/backend/src/rapodiff/**/*"], | ||
"rules": { | ||
"no-console": "off" | ||
} | ||
} | ||
], | ||
"rules": { | ||
"camelcase": "off", | ||
"consistent-return": "off", | ||
"cypress/no-assigning-return-values": "off", | ||
"cypress/unsafe-to-chain-command": "off", | ||
"default-param-last": "off", | ||
"id-denylist": ["error", "c", "d", "e", "err", "t"], | ||
"import/extensions": ["error", "never"], | ||
"import/order": [ | ||
"error", | ||
{ | ||
"alphabetize": { "order": "asc", "caseInsensitive": true }, | ||
"groups": [["builtin", "external"], ["internal"], ["parent"], ["sibling", "index"]], | ||
"pathGroups": [ | ||
{ | ||
"pattern": "../../../**", | ||
"group": "internal", | ||
"position": "before" | ||
}, | ||
{ | ||
"pattern": "../../**", | ||
"group": "internal", | ||
"position": "after" | ||
}, | ||
{ | ||
"pattern": "../**", | ||
"group": "parent", | ||
"position": "before" | ||
}, | ||
{ | ||
"pattern": "./**", | ||
"group": "sibling", | ||
"position": "before" | ||
} | ||
], | ||
"pathGroupsExcludedImportTypes": ["builtin", "external"] | ||
} | ||
], | ||
"no-async-promise-executor": "off", | ||
"no-await-in-loop": "off", | ||
"no-console": "error", | ||
"no-continue": "off", | ||
"no-param-reassign": "off", | ||
"no-plusplus": "off", | ||
"no-promise-executor-return": "off", | ||
"no-restricted-syntax": [ | ||
"error", | ||
{ | ||
"selector": "ForInStatement", | ||
"message": "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array." | ||
}, | ||
"LabeledStatement", | ||
"WithStatement" | ||
], | ||
"no-return-await": "off", | ||
"no-shadow": "off", | ||
"prettier/prettier": "error", | ||
"quotes": ["error", "single", { "avoidEscape": true }] | ||
}, | ||
"settings": { | ||
"import/resolver": { | ||
"node": { | ||
"extensions": [".js", ".jsx", ".ts", ".tsx"] | ||
} | ||
} | ||
}, | ||
"ignorePatterns": ["build/", "dist/", "instrumented/", "node_modules/", "**/*migrations*/**"] | ||
"ignorePatterns": ["**/node_modules/", "**/dist/", "**/build/"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
import pluginJs from '@eslint/js' | ||
import globals from 'globals' | ||
import pluginCypress from 'eslint-plugin-cypress/flat' | ||
import pluginImport from 'eslint-plugin-import' | ||
import pluginPrettierRecommended from 'eslint-plugin-prettier/recommended' | ||
import pluginReact from 'eslint-plugin-react' | ||
import pluginReactHooks from 'eslint-plugin-react-hooks' | ||
import tsEslint from 'typescript-eslint' | ||
|
||
/** @type {import('eslint').Linter.Config[]} */ | ||
export default [ | ||
{ | ||
files: ['**/*.{js,ts,jsx,tsx}'], | ||
}, | ||
{ | ||
ignores: ['eslint.config.mjs', '**/build/', '**/dist/', '**/node_modules/'], | ||
}, | ||
{ | ||
languageOptions: { | ||
globals: { | ||
...globals.browser, | ||
...globals.node, | ||
}, | ||
}, | ||
}, | ||
{ | ||
linterOptions: { | ||
reportUnusedDisableDirectives: 'error', | ||
}, | ||
}, | ||
{ | ||
files: ['**/*.{ts,tsx}'], | ||
languageOptions: { | ||
parserOptions: { | ||
project: [ | ||
'services/frontend/tsconfig.json', | ||
'services/frontend/tsconfig.node.json', | ||
'services/backend/tsconfig.json', | ||
'services/shared/tsconfig.json', | ||
], | ||
}, | ||
}, | ||
}, | ||
pluginJs.configs.recommended, | ||
...tsEslint.configs.recommendedTypeChecked, | ||
...tsEslint.configs.stylisticTypeChecked, | ||
pluginCypress.configs.recommended, | ||
pluginReact.configs.flat.recommended, | ||
pluginReact.configs.flat['jsx-runtime'], | ||
pluginImport.flatConfigs.recommended, | ||
pluginImport.flatConfigs.typescript, | ||
pluginPrettierRecommended, // This must be the last plugin so it can override other configs | ||
{ | ||
plugins: { | ||
'react-hooks': pluginReactHooks, | ||
}, | ||
}, | ||
{ | ||
rules: { | ||
camelcase: 'off', // TODO: Enable this rule (at least for frontend) | ||
'class-methods-use-this': 'error', | ||
'consistent-return': 'error', | ||
'id-denylist': ['error', 'c', 'd', 'e', 'err', 't'], | ||
'import/no-commonjs': 'error', | ||
'import/no-default-export': 'error', | ||
'import/no-extraneous-dependencies': ['error', { devDependencies: false }], | ||
'import/no-unused-modules': ['error', { missingExports: true, unusedExports: true }], | ||
'import/order': [ | ||
'error', | ||
{ | ||
alphabetize: { order: 'asc', caseInsensitive: true }, | ||
groups: [['builtin', 'external'], ['internal'], ['parent'], ['sibling', 'index']], | ||
}, | ||
], | ||
'no-alert': 'error', | ||
'no-async-promise-executor': 'error', | ||
'no-await-in-loop': 'error', | ||
'no-console': 'error', | ||
'no-implied-eval': 'error', | ||
'no-param-reassign': ['error', { props: false }], | ||
'no-promise-executor-return': 'error', | ||
'no-return-assign': 'error', | ||
'no-return-await': 'error', | ||
'object-shorthand': ['error', 'always'], | ||
'prefer-destructuring': ['error', { VariableDeclarator: { object: true } }], | ||
quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }], | ||
'react/display-name': 'off', // TODO: Delete this override | ||
'react/function-component-definition': [ | ||
'error', | ||
{ namedComponents: 'arrow-function', unnamedComponents: 'arrow-function' }, | ||
], | ||
'react/jsx-filename-extension': ['error', { allow: 'as-needed', extensions: ['.jsx', '.tsx'] }], | ||
'react/jsx-sort-props': ['error', { reservedFirst: false }], | ||
'react/no-array-index-key': 'error', | ||
'react/no-this-in-sfc': 'error', | ||
'react/no-unescaped-entities': 'off', | ||
'react/no-unknown-property': 'off', // TODO: Delete this override | ||
'react/prefer-stateless-function': 'error', | ||
'react/prop-types': 'off', | ||
...pluginReactHooks.configs.recommended.rules, | ||
'react-hooks/exhaustive-deps': 'off', // TODO: Delete this override | ||
'@typescript-eslint/array-type': 'off', | ||
'@typescript-eslint/consistent-indexed-object-style': 'off', | ||
'@typescript-eslint/consistent-type-definitions': 'off', | ||
'@typescript-eslint/no-empty-function': 'off', | ||
'@typescript-eslint/no-empty-object-type': ['error', { allowInterfaces: 'with-single-extends' }], | ||
'@typescript-eslint/no-explicit-any': 'off', | ||
'@typescript-eslint/no-misused-promises': 'off', // Most of these errors come from Express route handlers that are handled correctly by express-async-errors | ||
'@typescript-eslint/no-unsafe-argument': 'off', | ||
'@typescript-eslint/no-unsafe-assignment': 'off', | ||
'@typescript-eslint/no-unsafe-call': 'off', | ||
'@typescript-eslint/no-unsafe-member-access': 'off', | ||
'@typescript-eslint/no-unsafe-return': 'off', | ||
'@typescript-eslint/no-unused-vars': [ | ||
'error', | ||
{ argsIgnorePattern: '^_', caughtErrors: 'none', ignoreRestSiblings: true, varsIgnorePattern: '^_' }, | ||
], | ||
'@typescript-eslint/restrict-template-expressions': 'off', | ||
}, | ||
}, | ||
{ | ||
files: ['**/*.{js,jsx}'], | ||
rules: { | ||
...tsEslint.configs.disableTypeChecked.rules, | ||
'dot-notation': 'error', | ||
}, | ||
}, | ||
{ | ||
files: ['services/backend/src/rapodiff/**/*'], | ||
rules: { | ||
'no-console': 'off', | ||
}, | ||
}, | ||
{ | ||
files: ['cypress/**/*.js', 'services/backend/**/*.js', 'updater/**/*.js'], | ||
languageOptions: { | ||
sourceType: 'commonjs', | ||
}, | ||
rules: { | ||
'@typescript-eslint/no-require-imports': 'off', | ||
'import/no-commonjs': 'off', | ||
}, | ||
}, | ||
{ | ||
files: ['services/backend/**/*.{js,ts}', 'updater/**/*.js'], | ||
rules: { | ||
// TODO: Most of these overrides should probably be removed | ||
'consistent-return': 'off', | ||
'import/no-default-export': 'off', | ||
'import/no-unused-modules': 'off', | ||
'no-await-in-loop': 'off', | ||
'no-param-reassign': 'off', | ||
'no-promise-executor-return': 'off', | ||
'no-return-await': 'off', | ||
}, | ||
}, | ||
{ | ||
settings: { | ||
'import/internal-regex': '^@/shared/', | ||
'import/resolver': { | ||
typescript: { | ||
project: [ | ||
'services/frontend/tsconfig.json', | ||
'services/frontend/tsconfig.node.json', | ||
'services/backend/tsconfig.json', | ||
'services/shared/tsconfig.json', | ||
], | ||
}, | ||
}, | ||
react: { | ||
version: '18.3', | ||
}, | ||
}, | ||
}, | ||
] |
Oops, something went wrong.