aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/.eslintrc
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2017-10-23 20:38:19 +0200
committerStas Vilchik <stas.vilchik@sonarsource.com>2017-10-30 09:20:37 +0100
commit3aeea07185ebb2eceeab4a0ec520f7d641d02f39 (patch)
tree0406942e88fa3ae9d9539186ff31520beaac90ac /server/sonar-web/.eslintrc
parent973d117229fc17176e9ea3384ec4a737178b28c2 (diff)
downloadsonarqube-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/.eslintrc333
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$"]
}
}