113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
/**
|
|
* @remarks
|
|
* Notes on plugins we _don't_ use:
|
|
*
|
|
* ## plugin:react-hooks
|
|
* We don't use the react hooks plugin because it disallows valid use-cases
|
|
* such as this:
|
|
*
|
|
* ```ts
|
|
* export default function useValToAtom<S>(val: S): Atom<S> {
|
|
* const atom = useMemo(() => {
|
|
* return new Atom(val)
|
|
* }, []) // <-- we don't _need_ to include `val` here, but the lint rule will require it
|
|
*
|
|
* useLayoutEffect(() => {
|
|
* atom.setState(val)
|
|
* }, [val]) // <-- we also know `atom` will never change, but the lint rule doesn't
|
|
*
|
|
* return atom
|
|
* ```
|
|
*
|
|
* @type {import("eslint").Linter.Config}
|
|
*/
|
|
module.exports = {
|
|
root: true,
|
|
plugins: ['unused-imports', 'eslint-plugin-tsdoc', 'import', 'react'],
|
|
settings: {
|
|
react: {
|
|
version: '18.2',
|
|
},
|
|
},
|
|
extends: [],
|
|
rules: {
|
|
'unused-imports/no-unused-imports': 'warn',
|
|
'tsdoc/syntax': 'warn',
|
|
'no-debugger': 'error',
|
|
'react/no-deprecated': 'error',
|
|
|
|
'no-restricted-imports': [
|
|
'error',
|
|
{
|
|
paths: [
|
|
{
|
|
name: 'lodash',
|
|
message: 'Use lodash-es which is tree-shaking friendly',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
ignorePatterns: ['*.d.ts', '*.ignore.ts', 'compat-tests/*'],
|
|
overrides: [
|
|
{
|
|
files: ['*.ts', '*.tsx'],
|
|
parser: '@typescript-eslint/parser',
|
|
plugins: ['@typescript-eslint'],
|
|
parserOptions: {
|
|
project: [
|
|
'./theatre/tsconfig.json',
|
|
'./packages/*/tsconfig.json',
|
|
'./packages/*/devEnv/tsconfig.json',
|
|
'./examples/*/tsconfig.json',
|
|
'./devEnv/tsconfig.json',
|
|
'./compat-tests/tsconfig.json',
|
|
'./scripts/tsconfig.json',
|
|
],
|
|
},
|
|
rules: {
|
|
'@typescript-eslint/await-thenable': 'warn',
|
|
'@typescript-eslint/no-throw-literal': 'warn',
|
|
'@typescript-eslint/switch-exhaustiveness-check': 'error',
|
|
'@typescript-eslint/consistent-type-imports': [
|
|
'warn',
|
|
{
|
|
prefer: 'type-imports',
|
|
},
|
|
],
|
|
'@typescript-eslint/no-unused-vars': 'off',
|
|
'@typescript-eslint/no-floating-promises': 'warn',
|
|
},
|
|
},
|
|
{
|
|
plugins: ['react'],
|
|
files: ['*.mjs', '*.js'],
|
|
rules: {
|
|
'react/jsx-uses-react': 'error',
|
|
'react/jsx-uses-vars': 'error',
|
|
'tsdoc/syntax': 'off',
|
|
},
|
|
parser: 'espree',
|
|
parserOptions: {
|
|
sourceType: 'module',
|
|
ecmaVersion: 2021,
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
files: [
|
|
`packages/*/**/*.ts`,
|
|
`packages/*/**/*.tsx`,
|
|
`packages/*/**/*.js`,
|
|
],
|
|
rules: {
|
|
'import/no-extraneous-dependencies': [
|
|
'error',
|
|
// {optionalDependencies: false, peerDependencies: false},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
}
|