diff options
author | Stas Vilchik <stas.vilchik@sonarsource.com> | 2017-10-23 20:38:19 +0200 |
---|---|---|
committer | Stas Vilchik <stas.vilchik@sonarsource.com> | 2017-10-30 09:20:37 +0100 |
commit | 3aeea07185ebb2eceeab4a0ec520f7d641d02f39 (patch) | |
tree | 0406942e88fa3ae9d9539186ff31520beaac90ac /server/sonar-web/.eslintrc | |
parent | 973d117229fc17176e9ea3384ec4a737178b28c2 (diff) | |
download | sonarqube-3aeea07185ebb2eceeab4a0ec520f7d641d02f39.tar.gz sonarqube-3aeea07185ebb2eceeab4a0ec520f7d641d02f39.zip |
use eslint for typescript, update eslint configuration (#2742)
Diffstat (limited to 'server/sonar-web/.eslintrc')
-rw-r--r-- | server/sonar-web/.eslintrc | 333 |
1 files changed, 169 insertions, 164 deletions
diff --git a/server/sonar-web/.eslintrc b/server/sonar-web/.eslintrc index 6bbf8a9e0d5..edb289cdb23 100644 --- a/server/sonar-web/.eslintrc +++ b/server/sonar-web/.eslintrc @@ -1,6 +1,10 @@ { "extends": [ - "eslint:recommended" + "eslint:recommended", + "plugin:import/errors", + "plugin:react/recommended", + "plugin:jsx-a11y/recommended", + "plugin:promise/recommended" ], "env": { @@ -10,180 +14,181 @@ "node": true }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "modules": true + } + }, + "globals": { "baseUrl": true, "SyntheticInputEvent": true }, - "parser": "babel-eslint", + "parser": "typescript-eslint-parser", - "plugins": [ - "import", - "jsx-a11y", - "flowtype", - "react" - ], + "plugins": ["import", "jsx-a11y", "react", "promise"], "rules": { - "array-bracket-spacing": 2, - "array-callback-return": 2, - // "arrow-parens": [2, "as-needed"], - "arrow-spacing": 2, - "block-scoped-var": 2, - "block-spacing": 2, - "brace-style": 2, - "comma-dangle": [2, "never"], - "comma-spacing": 2, - "comma-style": 2, - "computed-property-spacing": 2, - "consistent-this": [2, "that"], - "curly": 2, - "dot-location": [2, "property"], - "eol-last": 2, - "eqeqeq": [2, "smart"], - "func-call-spacing": 2, - "func-name-matching": 2, - "func-names": [2, "never"], - "generator-star-spacing": 2, - "jsx-quotes": 2, - "key-spacing": 2, - "keyword-spacing": 2, - // "max-len": [2, 100], - "new-parens": 2, - "no-lonely-if": 2, - "no-multi-spaces": 2, - "no-multiple-empty-lines": [2, { "max": 2 }], - "no-self-compare": 2, - "no-template-curly-in-string": 2, - "no-trailing-spaces": 2, - "no-unneeded-ternary": 2, - "no-unsafe-negation": 2, - "no-useless-computed-key": 2, - "no-useless-rename": 2, - "no-var": 2, - "no-whitespace-before-property": 2, - "object-curly-spacing": [2, "always"], - "object-shorthand": 2, - "one-var": [2, "never"], - "operator-assignment": 2, - "padded-blocks": [2, "never"], - "prefer-arrow-callback": 2, - "prefer-const": 2, - "prefer-spread": 2, - "quote-props": [2, "as-needed"], - "quotes": [2, "single", { "avoidEscape": true }], - "rest-spread-spacing": 2, - "semi": [2, "always"], - "semi-spacing": 2, - "space-before-blocks": 2, - "space-before-function-paren": [2, "never"], - "space-in-parens": 2, - "space-unary-ops": 2, - "template-curly-spacing": 2, - "yield-star-spacing": 2, - - "flowtype/boolean-style": 2, - "flowtype/generic-spacing": 2, - "flowtype/no-dupe-keys": 2, - "flowtype/no-primitive-constructor-types": 2, - "flowtype/no-weak-types": [2, { - "any": true, - "Object": false, - "Function": false - }], - "flowtype/object-type-delimiter": 2, - "flowtype/semi": 2, - "flowtype/space-after-type-colon": 2, - "flowtype/space-before-generic-bracket": 2, - "flowtype/space-before-type-colon": 2, - "flowtype/union-intersection-spacing": 2, - - "import/no-unresolved": 0, - "import/named": 2, - "import/default": 2, - "import/namespace": 2, - "import/no-named-as-default": 2, - "import/no-named-as-default-member": 2, - "import/no-amd": 2, - "import/first": 2, - "import/no-duplicates": 2, - "import/extensions": 2, - "import/order": [2, { - "groups": ["builtin", "external"], - "newlines-between": "never" - }], - "import/newline-after-import": 2, - "import/no-named-default": 2, - - "jsx-a11y/aria-props": 2, - "jsx-a11y/aria-proptypes": 2, - "jsx-a11y/aria-role": 2, - "jsx-a11y/aria-unsupported-elements": 2, - "jsx-a11y/heading-has-content": 2, - "jsx-a11y/html-has-lang": 2, - "jsx-a11y/img-has-alt": 2, - "jsx-a11y/img-redundant-alt": 2, - "jsx-a11y/lang": 2, - "jsx-a11y/mouse-events-have-key-events": 2, - "jsx-a11y/no-access-key": 2, - "jsx-a11y/no-marquee": 2, - "jsx-a11y/onclick-has-focus": 2, - "jsx-a11y/onclick-has-role": 2, - "jsx-a11y/role-has-required-aria-props": 2, - "jsx-a11y/role-supports-aria-props": 2, - "jsx-a11y/tabindex-no-positive": 2, - - "react/jsx-boolean-value": [2, "always"], - "react/jsx-closing-bracket-location": [2, { - "nonEmpty": "after-props", - "selfClosing": "tag-aligned" - }], - "react/jsx-curly-spacing": [2, "never"], - "react/jsx-equals-spacing": [2, "never"], - "react/jsx-key": 2, - "react/jsx-no-duplicate-props": 2, - "react/jsx-no-undef": 2, - "react/jsx-pascal-case": 2, - "react/jsx-space-before-closing": 2, - "react/jsx-tag-spacing": [2, { - "closingSlash": "never", - "beforeSelfClosing": "always", - "afterOpening": "never" - }], - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "react/no-children-prop": 2, - "react/no-danger-with-children": 2, - "react/no-deprecated": 2, - "react/no-direct-mutation-state": 2, - "react/no-is-mounted": 2, - "react/no-render-return-value": 2, - "react/no-unescaped-entities": 2, - "react/no-unknown-property": 2, - "react/react-in-jsx-scope": 2, - "react/require-render-return": 2, - "react/self-closing-comp": 2, - "react/sort-comp": [2, { - "order": [ - "type-annotations", - "static-methods", - "lifecycle", - "everything-else", - "rendering" - ], - "groups": { - "rendering": [ - "/^render.+$/", - "render" - ] + // possible errors + "for-direction": "error", + "no-prototype-builtins": "error", + "no-template-curly-in-string": "error", + "no-unsafe-negation": "error", + + // best practices + // TODO turn all rules to "error" eventually + "array-callback-return": "error", + "block-scoped-var": "error", + "complexity": "warn", + "consistent-return": "warn", + "eqeqeq": ["error", "smart"], + "guard-for-in": "error", + "no-alert": "error", + "no-caller": "error", + "no-div-regex": "error", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-floating-decimal": "error", + "no-implied-eval": "error", + "no-iterator": "error", + "no-labels": "error", + "no-lone-blocks": "error", + "no-loop-func": "error", + "no-new": "warn", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-proto": "error", + "no-restricted-properties": "error", + "no-return-assign": "error", + "no-return-await": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-throw-literal": "warn", + "no-unmodified-loop-condition": "error", + "no-unused-expressions": "warn", + "no-useless-call": "error", + "no-useless-concat": "warn", + "no-useless-escape": "warn", + "no-useless-return": "warn", + "no-void": "error", + "no-with": "error", + "radix": "error", + "require-await": "error", + "wrap-iife": "error", + "yoda": "warn", + + // stylistic + "camelcase": "warn", + "consistent-this": ["warn", "that"], + "func-name-matching": "error", + "func-style": ["warn", "declaration", { "allowArrowFunctions": true }], + "max-depth": "warn", + "max-lines": ["warn", 1000], + "max-params": ["warn", 4], + "no-array-constructor": "warn", + "no-bitwise": "warn", + "no-lonely-if": "error", + "no-mixed-operators": "warn", + "no-multi-assign": "warn", + "no-nested-ternary": "warn", + "no-new-object": "warn", + "no-underscore-dangle": "warn", + "no-unneeded-ternary": "warn", + "one-var": ["warn", "never"], + "operator-assignment": "warn", + + // es2015 + "no-duplicate-imports": "error", + "no-useless-computed-key": "error", + "no-useless-rename": "error", + "no-var": "error", + "object-shorthand": "error", + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-destructuring": ["warn", { "object": true, "array": false }], + "prefer-numeric-literals": "warn", + "prefer-rest-params": "warn", + "prefer-spread": "warn", + + // disabled because of the usage of typescript-eslint-parser + // https://github.com/eslint/typescript-eslint-parser/issues/77 + "no-undef": "off", + "no-unused-vars": "off", + + // import + "import/extensions": "error", + "import/first": "error", + "import/newline-after-import": "error", + "import/no-absolute-path": "error", + "import/no-amd": "error", + "import/no-deprecated": "error", + "import/no-duplicates": "error", + "import/no-dynamic-require": "error", + "import/no-extraneous-dependencies": "error", + "import/no-mutable-exports": "error", + "import/no-named-as-default": "error", + "import/no-named-as-default-member": "error", + "import/no-named-default": "error", + "import/no-webpack-loader-syntax": "error", + "import/order": ["error", { "groups": ["builtin", "external"], "newlines-between": "never" }], + + // does not properly work with ts + "import/no-unresolved": "off", + + // react + // TODO turn all rules to "error" eventually + "react/display-name": "warn", + "react/jsx-boolean-value": ["error", "always"], + "react/jsx-no-comment-textnodes": "warn", + "react/jsx-no-target-blank": "warn", + "react/jsx-pascal-case": "error", + "react/no-find-dom-node": "warn", + "react/no-string-refs": "warn", + "react/self-closing-comp": "error", + "react/sort-comp": [ + "error", + { + "order": [ + "type-annotations", + "static-methods", + "lifecycle", + "everything-else", + "rendering" + ], + "groups": { "rendering": ["/^render.+$/", "render"] } } - }] + ], + + // turn off prop types validation, better use ts ;) + "react/prop-types": "off", + + // jsx-a11y + "jsx-a11y/anchor-has-content": "warn", + "jsx-a11y/no-noninteractive-tabindex": "warn", + "jsx-a11y/no-redundant-roles": "warn", + "jsx-a11y/no-static-element-interactions": "warn", + + "jsx-a11y/anchor-is-valid": "off", + "jsx-a11y/click-events-have-key-events": "off", + "jsx-a11y/no-autofocus": "off", + "jsx-a11y/no-noninteractive-element-interactions": "off", + // has FPs + "jsx-a11y/label-has-for": "off", + + // promise + "promise/catch-or-return": ["warn", { "allowThen": true }], + + "promise/always-return": "off", + "promise/avoid-new": "off" }, "settings": { - "import/ignore": [ - "node_modules", - "hbs$" - ] + "import/ignore": ["node_modules", "hbs$"] } } |