summaryrefslogtreecommitdiffstats
path: root/.eslintrc.js
diff options
context:
space:
mode:
authorYamagishi Kazutoshi <ykzts@desire.sh>2019-01-04 19:28:38 +0900
committerEugen Rochko <eugen@zeonfederated.com>2019-01-04 11:28:38 +0100
commitd5bdfaf0bb91d89bd29a6507dd7c9a7a6adfd7ca (patch)
tree3d9bc0d38d6313bed2728923bce9a5ab3477e7bf /.eslintrc.js
parentc39c112ced73d7942d31f8d49fdde70eed18aece (diff)
Increase files checked by ESLint (#9705)
Diffstat (limited to '.eslintrc.js')
-rw-r--r--.eslintrc.js199
1 files changed, 199 insertions, 0 deletions
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000000..56e3d0530f5
--- /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',
+ },
+};