Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "env": {
- "browser": true,
- "es6": true,
- "node": true
- },
- "globals": {
- "__static": "readonly",
- "$": "readonly",
- "Svelto": "readonly"
- },
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true
- },
- "ecmaVersion": 2020,
- "project": "tsconfig.json",
- "sourceType": "module",
- "useJSXTextNode": true
- },
- "settings": {
- "react": {
- "pragma": "React",
- "version": "detect"
- }
- },
- "plugins": [
- "@typescript-eslint",
- "react",
- "react-hooks",
- "unicorn"
- ],
- "rules": {
- /* ESLINT STYLE */
- "array-bracket-spacing": ["error", "never"],
- "array-element-newline": ["error", "consistent"],
- "arrow-parens": ["error", "as-needed"],
- "arrow-spacing": "error",
- "block-spacing": ["error", "always"],
- "comma-dangle": ["error", "never"],
- "comma-spacing": ["error", { "before": false, "after": true }],
- "comma-style": ["error", "last"],
- "computed-property-spacing": ["error", "never"],
- "consistent-this": ["error", "self"],
- "curly": ["error", "multi-line"],
- "dot-notation": "error",
- "eol-last": ["error", "always"],
- "func-name-matching": ["error", "always"],
- "func-names": ["error", "always"],
- "func-style": ["error", "declaration", { "allowArrowFunctions": true }],
- "function-paren-newline": ["error", "consistent"],
- "generator-star-spacing": ["error", { "before": false, "after": false }],
- "id-blacklist": ["error", "e", "cb"],
- "implicit-arrow-linebreak": ["error", "beside"],
- "jsx-quotes": ["error", "prefer-double"],
- "key-spacing": ["error", { "beforeColon": false, "afterColon": true, "mode": "strict" }],
- "keyword-spacing": ["error", { "before": true, "after": true }],
- "linebreak-style": ["error", "unix"],
- "max-depth": ["error", 5],
- "max-nested-callbacks": ["error", 3],
- "new-cap": "error",
- "new-parens": "error",
- "no-mixed-operators": ["error", { "groups": [["+", "-", "*", "/", "%", "**"], ["&", "|", "^", "~", "<<", ">>", ">>>"], ["==", "!=", "===", "!==", ">", ">=", "<", "<="], ["&&", "||"], ["in", "instanceof"]], "allowSamePrecedence": true }],
- "no-mixed-spaces-and-tabs": "error",
- "no-multiple-empty-lines": "error",
- "no-new-object": "error",
- "no-tabs": "error",
- "no-trailing-spaces": "error",
- "no-unneeded-ternary": "error",
- "no-whitespace-before-property": "error",
- "nonblock-statement-body-position": ["error", "beside"],
- "object-curly-newline": ["error", { "consistent": true }],
- "one-var-declaration-per-line": ["error", "always"],
- "prefer-object-spread": "error",
- "quote-props": ["error", "consistent-as-needed"],
- "rest-spread-spacing": ["error", "never"],
- "semi-spacing": ["error", { "before": false, "after": true }],
- "semi-style": ["error", "last"],
- "space-before-blocks": "error",
- "space-before-function-paren": "error",
- "space-unary-ops": ["error", { "words": false, "nonwords": false }],
- "switch-colon-spacing": ["error", { "after": true, "before": false }],
- "template-curly-spacing": ["error", "never"],
- "template-tag-spacing": ["error", "never"],
- "unicode-bom": ["error", "never"],
- "yield-star-spacing": ["error", "after"],
- /* ESLINT */
- "accessor-pairs": ["error", { "enforceForClassMembers": true }],
- "array-callback-return": ["error", { "allowImplicit": true }],
- "block-scoped-var": "error",
- "callback-return": ["error", ["callback", "cb", "next"]],
- "constructor-super": "error",
- "default-case": "error",
- "eqeqeq": ["error", "always"],
- "for-direction": "warn",
- "getter-return": ["error", { "allowImplicit": true }],
- "handle-callback-err": "error",
- "no-async-promise-executor": "error",
- "no-buffer-constructor": "error",
- "no-caller": "error",
- "no-case-declarations": "error",
- "no-class-assign": "error",
- "no-compare-neg-zero": "error",
- "no-cond-assign": "error",
- "no-const-assign": "error",
- "no-constant-condition": ["error", { "checkLoops": false }],
- "no-control-regex": "error",
- "no-debugger": "error",
- "no-delete-var": "error",
- "no-dupe-args": "error",
- "no-dupe-class-members": "error",
- "no-dupe-keys": "error",
- "no-duplicate-case": "error",
- "no-empty-character-class": "error",
- "no-empty-pattern": "error",
- "no-empty": ["error", { "allowEmptyCatch": true }],
- "no-eq-null": "error",
- "no-eval": ["error", { "allowIndirect": false }],
- "no-ex-assign": "error",
- "no-extend-native": "error",
- "no-extra-bind":"error",
- "no-extra-boolean-cast": "error",
- "no-extra-label": "error",
- "no-fallthrough": "error",
- "no-func-assign": "error",
- "no-global-assign": "error",
- "no-implicit-globals": "error",
- "no-implied-eval": "error",
- "no-import-assign": "error",
- "no-inner-declarations": "error",
- "no-invalid-regexp": "error",
- "no-irregular-whitespace": ["error", { "skipRegExps": true }],
- "no-iterator": "error",
- "no-label-var": "error",
- "no-labels": "error",
- "no-lone-blocks": "error",
- "no-loop-func": "error",
- "no-misleading-character-class": "error",
- "no-mixed-requires": ["error", { "allowCall": true }],
- "no-multi-spaces": "error",
- "no-multi-str": "error",
- "no-new-func": "error",
- "no-new-require": "error",
- "no-new-symbol": "error",
- "no-new-wrappers": "error",
- "no-obj-calls": "error",
- "no-octal-escape": "error",
- "no-octal": "error",
- "no-path-concat": "error",
- "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }],
- "no-process-exit": "error",
- "no-proto": "error",
- "no-redeclare": "error",
- "no-regex-spaces": "error",
- "no-return-await": "error",
- "no-script-url": "error",
- "no-self-assign": "error",
- "no-self-compare": "error",
- "no-sequences": "error",
- "no-shadow-restricted-names": "error",
- "no-sparse-arrays": "error",
- "no-template-curly-in-string": "error",
- "no-this-before-super": "error",
- "no-throw-literal": "error",
- "no-undef-init": "error",
- "no-unexpected-multiline": "error",
- "no-unmodified-loop-condition": "error",
- "no-unreachable": "error",
- "no-unsafe-finally": "error",
- "no-unsafe-negation": "error",
- "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }],
- "no-unused-labels": "error",
- "no-useless-call": "error",
- "no-useless-catch": "error",
- "no-useless-computed-key": "error",
- "no-useless-concat": "error",
- "no-useless-escape": "error",
- "no-useless-rename": "error",
- "no-var": "error",
- "no-void": "error",
- "no-with": "error",
- "object-shorthand": ["error", "always"],
- "operator-linebreak": ["error", "none", { "overrides": { "||": "after", "&&": "after", "?": "before", ":": "before" } }],
- "prefer-arrow-callback": "error",
- "prefer-const": ["error", { "destructuring": "all" }],
- "prefer-promise-reject-errors": "error",
- "prefer-regex-literals": "error",
- "prefer-template": "error",
- "radix": ["error", "as-needed"],
- "require-yield": "error",
- "symbol-description": "error",
- "use-isnan": ["error", { "enforceForSwitchCase": true }],
- "valid-typeof": "error",
- "wrap-iife": ["error", "inside"],
- "yoda": "error",
- /* TYPESCRIPT STYLE */
- "@typescript-eslint/adjacent-overload-signatures": "error",
- "@typescript-eslint/array-type": ["error", { "default": "array" }],
- "@typescript-eslint/ban-ts-ignore": "error",
- "@typescript-eslint/brace-style": ["error", "1tbs", { "allowSingleLine": true }],
- "@typescript-eslint/camelcase": ["error", { "allow": ["^UNSAFE_", "^__"] }],
- "@typescript-eslint/class-name-casing": "error",
- "@typescript-eslint/consistent-type-assertions": ["error", { "assertionStyle": "as", "objectLiteralTypeAssertions": "allow" }],
- "@typescript-eslint/consistent-type-definitions": ["error", "type"],
- "@typescript-eslint/indent": ["error", 2, { "SwitchCase": 1, "VariableDeclarator": "first", "ignoredNodes": ["ConditionalExpression"] }],
- "@typescript-eslint/interface-name-prefix": ["error", { "prefixWithI": "always" }],
- "@typescript-eslint/member-delimiter-style": ["error", { "singleline": { "delimiter": "comma", "requireLast": false }, "multiline": { "delimiter": "comma", "requireLast": false }}],
- "@typescript-eslint/quotes": ["error", "single", { "avoidEscape": false }],
- "@typescript-eslint/semi": ["error", "always"],
- "@typescript-eslint/type-annotation-spacing": ["error", { "before": true, "after": true, "overrides": { "colon": { "before": false, "after": true } } }],
- /* TYPESCRIPT */
- "@typescript-eslint/await-thenable": "error",
- "@typescript-eslint/explicit-function-return-type": ["error", { "allowExpressions": true, "allowTypedFunctionExpressions": true, "allowHigherOrderFunctions": true }],
- "@typescript-eslint/no-extraneous-class": "error",
- "@typescript-eslint/no-for-in-array": "error",
- "@typescript-eslint/no-inferrable-types": ["error", { "ignoreParameters": true, "ignoreProperties": true }],
- "@typescript-eslint/no-misused-new": "error",
- "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }],
- "@typescript-eslint/no-namespace": "error",
- "@typescript-eslint/no-non-null-assertion": "error",
- "@typescript-eslint/no-this-alias": "error",
- "@typescript-eslint/no-unnecessary-qualifier": "error",
- "@typescript-eslint/no-unnecessary-type-assertion": "error",
- "@typescript-eslint/no-unused-vars": ["error", { "args": "none", "ignoreRestSiblings": true }],
- "@typescript-eslint/no-use-before-define": "error",
- "@typescript-eslint/no-useless-constructor": "error",
- "@typescript-eslint/no-var-requires": "error",
- "@typescript-eslint/prefer-includes": "error",
- "@typescript-eslint/prefer-string-starts-ends-with": "error",
- "@typescript-eslint/unified-signatures": "error",
- /* REACT */
- "react/boolean-prop-naming": ["error", { "rule": "^(is|has)[A-Z]([A-Za-z0-9]?)+" }],
- "react/button-has-type": "error",
- "react/display-name": "error",
- "react/no-access-state-in-setstate": "error", // It shouldn't analyze Overstated stores
- "react/no-array-index-key": "error",
- "react/no-children-prop": "error",
- "react/no-danger-with-children": "error",
- "react/no-danger": "warn",
- "react/no-deprecated": "warn",
- "react/no-did-mount-set-state": "error",
- "react/no-did-update-set-state": "error",
- "react/no-direct-mutation-state": "error",
- "react/no-find-dom-node": "error",
- "react/no-is-mounted": "error",
- "react/no-multi-comp": ["error", { "ignoreStateless": true }],
- "react/no-redundant-should-component-update": "error",
- "react/no-render-return-value": "error",
- "react/no-set-state": "warn",
- "react/no-string-refs": ["error", { "noTemplateLiterals": true }],
- "react/no-this-in-sfc": "error",
- "react/no-typos": "error",
- "react/no-unescaped-entities": "error",
- "react/no-unknown-property": "error",
- "react/no-unsafe": ["warn", { "checkAliases": true }],
- "react/no-unused-state": "error",
- "react/no-will-update-set-state": "error",
- "react/prefer-stateless-function": "error",
- "react/react-in-jsx-scope": "error",
- "react/require-render-return": "error",
- "react/self-closing-comp": "error",
- "react/style-prop-object": "error",
- "react/void-dom-elements-no-children": "error",
- /* REACT HOOKS */
- "react-hooks/exhaustive-deps": "warn",
- "react-hooks/rules-of-hooks": "error",
- /* JSX STYLE */
- "react/jsx-child-element-spacing": "error",
- "react/jsx-closing-bracket-location": ["error", "tag-aligned"],
- "react/jsx-closing-tag-location": "error",
- "react/jsx-curly-brace-presence": ["error", "never"],
- "react/jsx-curly-newline": "error",
- "react/jsx-curly-spacing": ["error", { "when": "never" }],
- "react/jsx-equals-spacing": ["error", "never"],
- "react/jsx-first-prop-new-line": ["error", "multiline-multiprop"],
- "react/jsx-indent-props": ["error", 2],
- "react/jsx-indent": ["error", 2],
- "react/jsx-one-expression-per-line": ["error", { "allow": "single-child" }],
- "react/jsx-pascal-case": ["error", { "allowAllCaps": true }],
- "react/jsx-props-no-multi-spaces": "error",
- "react/jsx-tag-spacing": ["error", { "closingSlash": "never", "beforeSelfClosing": "always", "afterOpening": "never", "beforeClosing": "never" }],
- "react/jsx-wrap-multilines": "error",
- /* JSX */
- "react/jsx-boolean-value": ["error", "always"],
- "react/jsx-filename-extension": ["error", { "extensions": [".tsx"] }],
- "react/jsx-fragments": ["error", "syntax"],
- "react/jsx-handler-names": "error",
- "react/jsx-key": ["error", { "checkFragmentShorthand": true }],
- "react/jsx-max-depth": ["warn", { "max": 5 }],
- "react/jsx-no-bind": ["error", { "allowArrowFunctions": true }],
- "react/jsx-no-comment-textnodes": "error",
- "react/jsx-no-duplicate-props": "error",
- "react/jsx-no-target-blank": ["error", { "enforceDynamicLinks": "always" }],
- "react/jsx-no-undef": "error",
- "react/jsx-no-useless-fragment": "error",
- "react/jsx-uses-react": "error",
- "react/jsx-uses-vars": "error",
- /* UNICORN */
- "unicorn/catch-error-name": ["error", { "name": "err" }],
- "unicorn/custom-error-definition": "error",
- "unicorn/error-message": "error",
- "unicorn/escape-case": "error",
- "unicorn/filename-case": ["error", { "case": "snakeCase" }],
- "unicorn/import-index": "error",
- "unicorn/new-for-builtins": "error",
- "unicorn/no-abusive-eslint-disable": "error",
- "unicorn/no-array-instanceof": "error",
- "unicorn/no-console-spaces": "error",
- "unicorn/no-hex-escape": "error",
- "unicorn/no-unreadable-array-destructuring": "error",
- "unicorn/no-zero-fractions": "error",
- "unicorn/number-literal-case": "error",
- "unicorn/prefer-add-event-listener": "error",
- "unicorn/prefer-exponentiation-operator": "error",
- "unicorn/prefer-string-slice": "error",
- "unicorn/prefer-type-error": "error",
- "unicorn/throw-new-error": "error"
- /* BROKEN */
- // "no-invalid-this": "error" // It doesn't properly detect classes
- // "no-undef": "warn" // It doesn't work when exporting types
- // "@typescript-eslint/no-unnecessary-type-arguments": "error" // It throws
- // "@typescript-eslint/require-await": "error" // It throws
- /* TOO SIMPLISTIC */
- // "array-bracket-newline": ["error", "consistent"] // Comments count as array elements
- // "arrow-body-style": ["error", "as-needed"], // It shouldn't analyze class arrow methods too
- // "@typescript-eslint/func-call-spacing": ["error", "always"] // Exception for jQuery
- // "function-call-argument-newline": ["error", "consistent"] // Multi-line arrow function argument triggers it
- // "lines-between-class-members": ["error", "always"] // It should work only for methods
- // "multiline-ternary": ["error", "always-multiline"], // It doesn't allow common ternary operators in React
- // "object-curly-spacing": ["error", "always"] // Make exception for object destructuring
- // "require-atomic-updates": "warn" // It seems to have a lot of false positivies
- // "sort-imports" "error" // It doesn't support custom member syntaxes
- // "space-in-parens": ["error", "always", { "exceptions": ["{}"] }] // Doesn't work great with arrow functions returning objects
- /* OPTIONAL */ //TODO: Periodially enable these
- // "no-await-in-loop": "warn"
- // "no-new": "warn"
- // "no-sync": ["warn", { "allowAtRootLevel": true }]
- // "@typescript-eslint/no-floating-promises": "warn"
- // "@typescript-eslint/no-unnecessary-condition": ["warn", { "ignoreRhs": true }]
- },
- "overrides": [
- //TODO: Set-up more overrides
- //TODO: Sort imports with my rule
- // "no-restricted-modules": ["error", "assert", "buffer", "child_process", "cluster", "crypto", "dgram", "dns", "domain", "events", "freelist", "fs", "http", "https", "module", "net", "os", "path", "punycode", "querystring", "readline", "repl", "smalloc", "stream", "string_decoder", "sys", "timers", "tls", "tracing", "tty", "url", "util", "vm", "zlib"],
- {
- "files": "**/*.tsx",
- "rules": {
- "@typescript-eslint/explicit-function-return-type": "off"
- }
- }
- ]
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement