parent
43bbe13ded
commit
c5aaaf8124
@ -0,0 +1,175 @@ |
||||
// Code taken from https://github.com/preactjs/eslint-config-preact/blob/v1.3.0/index.js |
||||
// and modified to remove all jest mentions, because jest plugin is incompatible with typescript-eslint plugin v6 |
||||
// (see https://github.com/jest-community/eslint-plugin-jest/pull/1401 for more details) |
||||
// and to change it from JSM to CJS |
||||
|
||||
module.exports = { |
||||
// TODO: this is really only required for class property initializer methods, which are seeing declining usage. |
||||
// At some point, we should un-ship the custom parser and let ESLint use esprima. |
||||
parser: require.resolve('@babel/eslint-parser'), |
||||
|
||||
// Currently ignored due to the custom parser. |
||||
parserOptions: { |
||||
ecmaVersion: 2020, |
||||
sourceType: 'module', |
||||
ecmaFeatures: { |
||||
modules: true, |
||||
impliedStrict: true, |
||||
jsx: true, |
||||
}, |
||||
requireConfigFile: false, |
||||
babelOptions: { |
||||
plugins: [ |
||||
'@babel/plugin-syntax-class-properties', |
||||
[ |
||||
'@babel/plugin-syntax-decorators', |
||||
{ decoratorsBeforeExport: false }, |
||||
], |
||||
'@babel/plugin-syntax-jsx', |
||||
], |
||||
}, |
||||
}, |
||||
|
||||
// We don't use plugin:react/recommended here to avoid React-specific rules. |
||||
extends: ['eslint:recommended'], |
||||
|
||||
// TODO: preact-cli ships Jest now, Mocha may be a candidate for removal. |
||||
plugins: ['compat', 'react', 'react-hooks'], |
||||
|
||||
env: { |
||||
browser: true, |
||||
es6: true, |
||||
node: true, |
||||
}, |
||||
|
||||
globals: { |
||||
expect: true, |
||||
browser: true, |
||||
global: true, |
||||
}, |
||||
|
||||
settings: { |
||||
// Preact CLI provides these defaults |
||||
targets: ['last 2 versions'], |
||||
polyfills: ['fetch', 'Promise'], |
||||
react: { |
||||
// eslint-plugin-preact interprets this as "h.createElement", |
||||
// however we only care about marking h() as being a used variable. |
||||
pragma: 'h', |
||||
// We use "react 16.0" to avoid pushing folks to UNSAFE_ methods. |
||||
version: '16.0', |
||||
}, |
||||
}, |
||||
|
||||
rules: { |
||||
/** |
||||
* Preact / JSX rules |
||||
*/ |
||||
'react/no-deprecated': 2, |
||||
'react/react-in-jsx-scope': 0, // handled this automatically |
||||
'react/display-name': [1, { ignoreTranspilerName: false }], |
||||
'react/jsx-no-bind': [ |
||||
1, |
||||
{ |
||||
ignoreRefs: true, |
||||
allowFunctions: true, |
||||
allowArrowFunctions: true, |
||||
}, |
||||
], |
||||
'react/jsx-no-comment-textnodes': 2, |
||||
'react/jsx-no-duplicate-props': 2, |
||||
'react/jsx-no-target-blank': 2, |
||||
'react/jsx-no-undef': 2, |
||||
'react/jsx-tag-spacing': [2, { beforeSelfClosing: 'always' }], |
||||
'react/jsx-uses-react': 2, // debatable |
||||
'react/jsx-uses-vars': 2, |
||||
'react/jsx-key': [2, { checkFragmentShorthand: true }], |
||||
'react/self-closing-comp': 2, |
||||
'react/prefer-es6-class': 2, |
||||
'react/prefer-stateless-function': 1, |
||||
'react/require-render-return': 2, |
||||
'react/no-danger': 1, |
||||
// Legacy APIs not supported in Preact: |
||||
'react/no-did-mount-set-state': 2, |
||||
'react/no-did-update-set-state': 2, |
||||
'react/no-find-dom-node': 2, |
||||
'react/no-is-mounted': 2, |
||||
'react/no-string-refs': 2, |
||||
|
||||
/** |
||||
* Hooks |
||||
*/ |
||||
'react-hooks/rules-of-hooks': 2, |
||||
'react-hooks/exhaustive-deps': 1, |
||||
|
||||
/** |
||||
* General JavaScript error avoidance |
||||
*/ |
||||
'constructor-super': 2, |
||||
'no-caller': 2, |
||||
'no-const-assign': 2, |
||||
'no-delete-var': 2, |
||||
'no-dupe-class-members': 2, |
||||
'no-dupe-keys': 2, |
||||
'no-duplicate-imports': 2, |
||||
'no-else-return': 1, |
||||
'no-empty-pattern': 0, |
||||
'no-empty': 0, |
||||
'no-extra-parens': 0, |
||||
'no-iterator': 2, |
||||
'no-lonely-if': 2, |
||||
'no-mixed-spaces-and-tabs': [1, 'smart-tabs'], |
||||
'no-multi-str': 1, |
||||
'no-new-wrappers': 2, |
||||
'no-proto': 2, |
||||
'no-redeclare': 2, |
||||
'no-shadow-restricted-names': 2, |
||||
'no-shadow': 0, |
||||
'no-spaced-func': 2, |
||||
'no-this-before-super': 2, |
||||
'no-undef-init': 2, |
||||
'no-unneeded-ternary': 2, |
||||
'no-unused-vars': [ |
||||
2, |
||||
{ |
||||
args: 'after-used', |
||||
ignoreRestSiblings: true, |
||||
}, |
||||
], |
||||
'no-useless-call': 1, |
||||
'no-useless-computed-key': 1, |
||||
'no-useless-concat': 1, |
||||
'no-useless-constructor': 1, |
||||
'no-useless-escape': 1, |
||||
'no-useless-rename': 1, |
||||
'no-var': 1, |
||||
'no-with': 2, |
||||
|
||||
/** |
||||
* General JavaScript stylistic rules (disabled) |
||||
*/ |
||||
semi: 0, |
||||
strict: [2, 'never'], // assume type=module output (cli default) |
||||
'object-curly-spacing': [0, 'always'], |
||||
'rest-spread-spacing': 0, |
||||
'space-before-function-paren': [0, 'always'], |
||||
'space-in-parens': [0, 'never'], |
||||
'object-shorthand': 1, |
||||
'prefer-arrow-callback': 1, |
||||
'prefer-rest-params': 1, |
||||
'prefer-spread': 1, |
||||
'prefer-template': 1, |
||||
quotes: [ |
||||
0, |
||||
'single', |
||||
{ |
||||
avoidEscape: true, |
||||
allowTemplateLiterals: true, |
||||
}, |
||||
], |
||||
'quote-props': [2, 'as-needed'], |
||||
radix: 1, // parseInt(x, 10) |
||||
'unicode-bom': 2, |
||||
'valid-jsdoc': 0, |
||||
}, |
||||
}; |
@ -0,0 +1,33 @@ |
||||
module.exports = { |
||||
parser: '@typescript-eslint/parser', |
||||
parserOptions: { |
||||
project: 'tsconfig.json', |
||||
tsconfigRootDir: __dirname, |
||||
sourceType: 'module', |
||||
}, |
||||
plugins: ['@typescript-eslint/eslint-plugin'], |
||||
extends: [ |
||||
'./.eslint-config-preact-nojest.cjs', |
||||
'plugin:@typescript-eslint/strict-type-checked', |
||||
'plugin:prettier/recommended', |
||||
], |
||||
root: true, |
||||
env: { |
||||
/*node: true, |
||||
jest: true,*/ |
||||
}, |
||||
ignorePatterns: ['.eslintrc.js'], |
||||
rules: { |
||||
'@typescript-eslint/no-confusing-void-expression': [ |
||||
'error', |
||||
{ ignoreArrowShorthand: true }, |
||||
], |
||||
/*'@typescript-eslint/no-invalid-void-type': [ |
||||
'error', |
||||
{ allowAsThisParameter: true }, |
||||
], |
||||
'@typescript-eslint/interface-name-prefix': 'off', |
||||
'@typescript-eslint/explicit-function-return-type': 'off', |
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',*/ |
||||
}, |
||||
}; |
@ -0,0 +1,5 @@ |
||||
{ |
||||
"tabWidth": 4, |
||||
"singleQuote": true, |
||||
"trailingComma": "all" |
||||
} |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue