mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-22 05:27:00 +02:00
chore: clean up ESLint config, enable a few rules (#6514)
* chore: clean up ESLint config, enable a few rules * enable max-len for comments * fix build
This commit is contained in:
parent
b8ccb869f1
commit
aa446b7a9c
167 changed files with 1157 additions and 960 deletions
226
.eslintrc.js
226
.eslintrc.js
|
@ -22,15 +22,14 @@ module.exports = {
|
|||
allowImportExportEverywhere: true,
|
||||
},
|
||||
globals: {
|
||||
testStylelintRule: true,
|
||||
JSX: true,
|
||||
},
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/eslint-recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:react-hooks/recommended',
|
||||
'plugin:jest/recommended',
|
||||
'airbnb',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'prettier',
|
||||
],
|
||||
settings: {
|
||||
|
@ -41,111 +40,37 @@ module.exports = {
|
|||
},
|
||||
},
|
||||
reportUnusedDisableDirectives: true,
|
||||
plugins: ['react-hooks', 'header', 'jest'],
|
||||
plugins: ['react-hooks', 'header', 'jest', '@typescript-eslint'],
|
||||
rules: {
|
||||
'react-hooks/rules-of-hooks': ERROR,
|
||||
'react-hooks/exhaustive-deps': ERROR,
|
||||
'class-methods-use-this': OFF, // It's a way of allowing private variables.
|
||||
'func-names': OFF,
|
||||
// Ignore certain webpack alias because it can't be resolved
|
||||
'import/no-unresolved': [
|
||||
ERROR,
|
||||
{
|
||||
ignore: ['^@theme', '^@docusaurus', '^@generated', '^@site'],
|
||||
},
|
||||
],
|
||||
'import/extensions': OFF,
|
||||
'no-restricted-exports': OFF,
|
||||
'header/header': [
|
||||
ERROR,
|
||||
'block',
|
||||
[
|
||||
'*',
|
||||
' * Copyright (c) Facebook, Inc. and its affiliates.',
|
||||
' *',
|
||||
' * This source code is licensed under the MIT license found in the',
|
||||
' * LICENSE file in the root directory of this source tree.',
|
||||
' ',
|
||||
],
|
||||
],
|
||||
'jsx-a11y/click-events-have-key-events': WARNING,
|
||||
'jsx-a11y/no-noninteractive-element-interactions': WARNING,
|
||||
'jsx-a11y/html-has-lang': OFF,
|
||||
'no-console': OFF,
|
||||
'no-else-return': OFF,
|
||||
'no-param-reassign': [WARNING, {props: false}],
|
||||
'no-underscore-dangle': OFF,
|
||||
curly: [WARNING, 'all'],
|
||||
'react/jsx-filename-extension': OFF,
|
||||
'react/no-array-index-key': OFF, // Sometimes its ok, e.g. non-changing data.
|
||||
'react/prop-types': OFF,
|
||||
'react/destructuring-assignment': OFF, // Too many lines.
|
||||
'react/prefer-stateless-function': WARNING,
|
||||
'react/jsx-props-no-spreading': OFF,
|
||||
'react/require-default-props': [ERROR, {ignoreFunctionalComponents: true}],
|
||||
'react/function-component-definition': [
|
||||
WARNING,
|
||||
{
|
||||
namedComponents: 'function-declaration',
|
||||
unnamedComponents: 'arrow-function',
|
||||
},
|
||||
],
|
||||
'react/no-unstable-nested-components': [WARNING, {allowAsProps: true}],
|
||||
'@typescript-eslint/no-inferrable-types': OFF,
|
||||
'@typescript-eslint/consistent-type-imports': [
|
||||
WARNING,
|
||||
{disallowTypeAnnotations: false},
|
||||
],
|
||||
'import/order': OFF,
|
||||
'import/prefer-default-export': OFF,
|
||||
'lines-between-class-members': OFF,
|
||||
'no-lonely-if': WARNING,
|
||||
'no-use-before-define': OFF,
|
||||
'@typescript-eslint/no-use-before-define': [
|
||||
ERROR,
|
||||
{functions: false, classes: false, variables: true},
|
||||
],
|
||||
'no-unused-vars': OFF,
|
||||
'no-nested-ternary': WARNING,
|
||||
'@typescript-eslint/no-empty-function': OFF,
|
||||
'@typescript-eslint/no-non-null-assertion': OFF,
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
ERROR,
|
||||
{argsIgnorePattern: '^_', ignoreRestSiblings: true},
|
||||
],
|
||||
'@typescript-eslint/explicit-module-boundary-types': WARNING,
|
||||
'@typescript-eslint/ban-ts-comment': [
|
||||
ERROR,
|
||||
{'ts-expect-error': 'allow-with-description'},
|
||||
],
|
||||
'import/no-extraneous-dependencies': ERROR,
|
||||
'no-useless-escape': WARNING,
|
||||
'prefer-template': WARNING,
|
||||
'no-template-curly-in-string': WARNING,
|
||||
'array-callback-return': WARNING,
|
||||
camelcase: WARNING,
|
||||
'no-restricted-syntax': WARNING,
|
||||
'no-unused-expressions': [WARNING, {allowTaggedTemplates: true}],
|
||||
'class-methods-use-this': OFF, // It's a way of allowing private variables.
|
||||
curly: [WARNING, 'all'],
|
||||
'global-require': WARNING,
|
||||
'prefer-destructuring': WARNING,
|
||||
yoda: WARNING,
|
||||
'no-await-in-loop': OFF,
|
||||
'no-control-regex': WARNING,
|
||||
'no-empty': [WARNING, {allowEmptyCatch: true}],
|
||||
'no-prototype-builtins': WARNING,
|
||||
'no-case-declarations': WARNING,
|
||||
'no-undef': OFF,
|
||||
'no-shadow': OFF,
|
||||
'@typescript-eslint/no-shadow': ERROR,
|
||||
'no-redeclare': OFF,
|
||||
'@typescript-eslint/no-redeclare': ERROR,
|
||||
'@typescript-eslint/no-empty-interface': [
|
||||
ERROR,
|
||||
'lines-between-class-members': OFF,
|
||||
'max-len': [
|
||||
WARNING,
|
||||
{
|
||||
allowSingleExtends: true,
|
||||
code: Infinity, // Code width is already enforced by Prettier
|
||||
tabWidth: 2,
|
||||
comments: 80,
|
||||
ignoreUrls: true,
|
||||
ignorePattern: '(eslint-disable|@)',
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/method-signature-style': ERROR,
|
||||
'no-await-in-loop': OFF,
|
||||
'no-case-declarations': WARNING,
|
||||
'no-console': OFF,
|
||||
'no-control-regex': WARNING,
|
||||
'no-else-return': [WARNING, {allowElseIf: true}],
|
||||
'no-empty': [WARNING, {allowEmptyCatch: true}],
|
||||
'no-lonely-if': WARNING,
|
||||
'no-nested-ternary': WARNING,
|
||||
'no-param-reassign': [WARNING, {props: false}],
|
||||
'no-prototype-builtins': WARNING,
|
||||
'no-restricted-exports': OFF,
|
||||
'no-useless-escape': WARNING,
|
||||
'no-template-curly-in-string': WARNING,
|
||||
'no-restricted-imports': [
|
||||
ERROR,
|
||||
{
|
||||
|
@ -153,7 +78,9 @@ module.exports = {
|
|||
{
|
||||
name: 'lodash',
|
||||
importNames: [
|
||||
// 'compact', // TODO: TS doesn't make Boolean a narrowing function yet, so filter(Boolean) is problematic type-wise
|
||||
// TODO: TS doesn't make Boolean a narrowing function yet,
|
||||
// so filter(Boolean) is problematic type-wise
|
||||
// 'compact',
|
||||
'filter',
|
||||
'flatten',
|
||||
'flatMap',
|
||||
|
@ -170,16 +97,104 @@ module.exports = {
|
|||
],
|
||||
},
|
||||
],
|
||||
'no-restricted-syntax': WARNING,
|
||||
'no-unused-expressions': [WARNING, {allowTaggedTemplates: true}],
|
||||
'prefer-destructuring': WARNING,
|
||||
'prefer-template': WARNING,
|
||||
yoda: WARNING,
|
||||
|
||||
'header/header': [
|
||||
ERROR,
|
||||
'block',
|
||||
[
|
||||
'*',
|
||||
' * Copyright (c) Facebook, Inc. and its affiliates.',
|
||||
' *',
|
||||
' * This source code is licensed under the MIT license found in the',
|
||||
' * LICENSE file in the root directory of this source tree.',
|
||||
' ',
|
||||
],
|
||||
],
|
||||
|
||||
'import/extensions': OFF,
|
||||
// Ignore certain webpack aliases because they can't be resolved
|
||||
'import/no-unresolved': [
|
||||
ERROR,
|
||||
{
|
||||
ignore: ['^@theme', '^@docusaurus', '^@generated', '^@site'],
|
||||
},
|
||||
],
|
||||
'import/order': OFF,
|
||||
'import/prefer-default-export': OFF,
|
||||
|
||||
'jest/prefer-expect-resolves': WARNING,
|
||||
'jest/expect-expect': OFF,
|
||||
'jest/valid-title': OFF,
|
||||
|
||||
'jsx-a11y/click-events-have-key-events': WARNING,
|
||||
'jsx-a11y/no-noninteractive-element-interactions': WARNING,
|
||||
'jsx-a11y/html-has-lang': OFF,
|
||||
|
||||
'react-hooks/rules-of-hooks': ERROR,
|
||||
'react-hooks/exhaustive-deps': ERROR,
|
||||
|
||||
// Sometimes we do need the props as a whole, e.g. when spreading
|
||||
'react/destructuring-assignment': OFF,
|
||||
'react/function-component-definition': [
|
||||
WARNING,
|
||||
{
|
||||
namedComponents: 'function-declaration',
|
||||
unnamedComponents: 'arrow-function',
|
||||
},
|
||||
],
|
||||
'react/jsx-filename-extension': OFF,
|
||||
'react/jsx-props-no-spreading': OFF,
|
||||
'react/no-array-index-key': OFF, // We build a static site, and nearly all components don't change.
|
||||
'react/no-unstable-nested-components': [WARNING, {allowAsProps: true}],
|
||||
'react/prefer-stateless-function': WARNING,
|
||||
'react/prop-types': OFF,
|
||||
'react/require-default-props': [ERROR, {ignoreFunctionalComponents: true}],
|
||||
|
||||
'@typescript-eslint/ban-ts-comment': [
|
||||
ERROR,
|
||||
{'ts-expect-error': 'allow-with-description'},
|
||||
],
|
||||
'@typescript-eslint/consistent-type-imports': [
|
||||
WARNING,
|
||||
{disallowTypeAnnotations: false},
|
||||
],
|
||||
'@typescript-eslint/explicit-module-boundary-types': WARNING,
|
||||
'@typescript-eslint/method-signature-style': ERROR,
|
||||
'@typescript-eslint/no-empty-function': OFF,
|
||||
'@typescript-eslint/no-empty-interface': [
|
||||
ERROR,
|
||||
{
|
||||
allowSingleExtends: true,
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/no-inferrable-types': OFF,
|
||||
'no-use-before-define': OFF,
|
||||
'@typescript-eslint/no-use-before-define': [
|
||||
ERROR,
|
||||
{functions: false, classes: false, variables: true},
|
||||
],
|
||||
'@typescript-eslint/no-non-null-assertion': OFF,
|
||||
'no-redeclare': OFF,
|
||||
'@typescript-eslint/no-redeclare': ERROR,
|
||||
'no-shadow': OFF,
|
||||
'@typescript-eslint/no-shadow': ERROR,
|
||||
'no-unused-vars': OFF,
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
ERROR,
|
||||
{argsIgnorePattern: '^_', ignoreRestSiblings: true},
|
||||
],
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'packages/docusaurus-theme-*/src/theme/**/*.js',
|
||||
'packages/docusaurus-theme-*/src/theme/**/*.ts',
|
||||
'packages/docusaurus-theme-*/src/theme/**/*.tsx',
|
||||
'packages/docusaurus-*/src/theme/**/*.js',
|
||||
'packages/docusaurus-*/src/theme/**/*.ts',
|
||||
'packages/docusaurus-*/src/theme/**/*.tsx',
|
||||
],
|
||||
rules: {
|
||||
'import/no-named-export': ERROR,
|
||||
|
@ -206,6 +221,7 @@ module.exports = {
|
|||
{
|
||||
files: ['*.ts', '*.tsx'],
|
||||
rules: {
|
||||
'no-undef': OFF,
|
||||
'import/no-import-module-exports': OFF,
|
||||
},
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue