diff options
Diffstat (limited to '.eslintrc.js')
-rw-r--r-- | .eslintrc.js | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..56e3d0530 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,199 @@ +module.exports = { + root: true, + + env: { + browser: true, + node: true, + es6: true, + jest: true, + }, + + globals: { + ATTACHMENT_HOST: false, + }, + + parser: 'babel-eslint', + + plugins: [ + 'react', + 'jsx-a11y', + 'import', + 'promise', + ], + + parserOptions: { + sourceType: 'module', + ecmaFeatures: { + experimentalObjectRestSpread: true, + jsx: true, + }, + ecmaVersion: 2018, + }, + + settings: { + react: { + version: 'detect', + }, + 'import/extensions': [ + '.js', + ], + 'import/ignore': [ + 'node_modules', + '\\.(css|scss|json)$', + ], + }, + + rules: { + 'brace-style': 'warn', + 'comma-dangle': ['error', 'always-multiline'], + 'comma-spacing': [ + 'warn', + { + before: false, + after: true, + }, + ], + 'comma-style': ['warn', 'last'], + 'consistent-return': 'error', + 'dot-notation': 'error', + eqeqeq: 'error', + indent: ['warn', 2], + 'jsx-quotes': ['error', 'prefer-single'], + 'no-catch-shadow': 'error', + 'no-cond-assign': 'error', + 'no-console': [ + 'warn', + { + allow: [ + 'error', + 'warn', + ], + }, + ], + 'no-fallthrough': 'error', + 'no-irregular-whitespace': 'error', + 'no-mixed-spaces-and-tabs': 'warn', + 'no-nested-ternary': 'warn', + 'no-trailing-spaces': 'warn', + 'no-undef': 'error', + 'no-unreachable': 'error', + 'no-unused-expressions': 'error', + 'no-unused-vars': [ + 'error', + { + vars: 'all', + args: 'after-used', + ignoreRestSiblings: true, + }, + ], + 'object-curly-spacing': ['error', 'always'], + 'padded-blocks': [ + 'error', + { + classes: 'always', + }, + ], + quotes: ['error', 'single'], + semi: 'error', + strict: 'off', + 'valid-typeof': 'error', + + 'react/jsx-boolean-value': 'error', + 'react/jsx-closing-bracket-location': ['error', 'line-aligned'], + 'react/jsx-curly-spacing': 'error', + 'react/jsx-equals-spacing': 'error', + 'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'], + 'react/jsx-indent': ['error', 2], + 'react/jsx-no-bind': 'error', + 'react/jsx-no-duplicate-props': 'error', + 'react/jsx-no-undef': 'error', + 'react/jsx-tag-spacing': 'error', + 'react/jsx-uses-react': 'error', + 'react/jsx-uses-vars': 'error', + 'react/jsx-wrap-multilines': 'error', + 'react/no-multi-comp': 'off', + 'react/no-string-refs': 'error', + 'react/prop-types': 'error', + 'react/self-closing-comp': 'error', + + 'jsx-a11y/accessible-emoji': 'warn', + 'jsx-a11y/alt-text': 'warn', + 'jsx-a11y/anchor-has-content': 'warn', + 'jsx-a11y/anchor-is-valid': [ + 'warn', + { + components: [ + 'Link', + 'NavLink', + ], + specialLink: [ + 'to', + ], + aspect: [ + 'noHref', + 'invalidHref', + 'preferButton', + ], + }, + ], + 'jsx-a11y/aria-activedescendant-has-tabindex': 'warn', + 'jsx-a11y/aria-props': 'warn', + 'jsx-a11y/aria-proptypes': 'warn', + 'jsx-a11y/aria-role': 'warn', + 'jsx-a11y/aria-unsupported-elements': 'warn', + 'jsx-a11y/heading-has-content': 'warn', + 'jsx-a11y/html-has-lang': 'warn', + 'jsx-a11y/iframe-has-title': 'warn', + 'jsx-a11y/img-redundant-alt': 'warn', + 'jsx-a11y/interactive-supports-focus': 'warn', + 'jsx-a11y/label-has-for': 'off', + 'jsx-a11y/mouse-events-have-key-events': 'warn', + 'jsx-a11y/no-access-key': 'warn', + 'jsx-a11y/no-distracting-elements': 'warn', + 'jsx-a11y/no-noninteractive-element-interactions': [ + 'warn', + { + handlers: [ + 'onClick', + ], + }, + ], + 'jsx-a11y/no-onchange': 'warn', + 'jsx-a11y/no-redundant-roles': 'warn', + 'jsx-a11y/no-static-element-interactions': [ + 'warn', + { + handlers: [ + 'onClick', + ], + }, + ], + 'jsx-a11y/role-has-required-aria-props': 'warn', + 'jsx-a11y/role-supports-aria-props': 'off', + 'jsx-a11y/scope': 'warn', + 'jsx-a11y/tabindex-no-positive': 'warn', + + 'import/extensions': [ + 'error', + 'always', + { + js: 'never', + }, + ], + 'import/newline-after-import': 'error', + 'import/no-extraneous-dependencies': [ + 'error', + { + devDependencies: [ + 'config/webpack/**', + 'app/javascript/mastodon/test_setup.js', + 'app/javascript/**/__tests__/**', + ], + }, + ], + 'import/no-unresolved': 'error', + 'import/no-webpack-loader-syntax': 'error', + + 'promise/catch-or-return': 'error', + }, +}; |