{ "root": true, "ignorePatterns": ["projects/**/*"], "plugins": ["import", "prettier", "@stylistic/eslint-plugin-ts", "sort-class-members"], "overrides": [ { "files": ["*.ts"], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:@angular-eslint/recommended", "plugin:@angular-eslint/template/process-inline-templates", "prettier", "plugin:prettier/recommended" ], "rules": { "@stylistic/ts/lines-between-class-members": [ "error", { "enforce": [ { "blankLine": "always", "prev": "*", "next": "method" }, { "blankLine": "always", "prev": "method", "next": "*" }, { "blankLine": "never", "prev": "field", "next": "field" } ] } ], "@stylistic/ts/block-spacing": ["error"], "@stylistic/ts/brace-style": "off", "@stylistic/ts/key-spacing": ["error", { "afterColon": true }], "@stylistic/ts/keyword-spacing": ["error", { "before": true }], "@stylistic/ts/no-extra-parens": ["error", "all", { "nestedBinaryExpressions": false, "ternaryOperandBinaryExpressions": false }], "@stylistic/ts/no-extra-semi": ["error"], "@stylistic/ts/object-curly-spacing": ["error", "always"], "@stylistic/ts/quotes": ["error", "single"], "@stylistic/ts/semi": ["error", "always"], "@stylistic/ts/space-before-blocks": ["error"], "@stylistic/ts/space-before-function-paren": ["error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}], "@stylistic/ts/space-infix-ops": ["error"], // "@stylistic/ts/max-statements-per-line": ["error", { "max": 1 }], // "@stylistic/ts/multiline-ternary": ["error", "always"], // "@stylistic/ts/newline-per-chained-call": ["error", { "ignoreChainWithDepth": 2 }], // "@stylistic/ts/no-confusing-arrow": ["error"], // "@stylistic/ts/no-floating-decimal": ["error"], // "@stylistic/ts/no-mixed-operators": ["error"], // "@stylistic/ts/no-mixed-spaces-and-tabs": ["error"],/ // "@stylistic/ts/no-multi-spaces": ["error"], // "@stylistic/ts/no-multiple-empty-lines": ["error", { "max": 2 }], // "@stylistic/ts/no-tabs": ["error", { "allowIndentationTabs": true }], // "@stylistic/ts/no-whitespace-before-property": ["error"], // "@stylistic/ts/nonblock-statement-body-position": ["error", "below"], // "@stylistic/ts/object-curly-newline": ["error", "always"], // "@stylistic/ts/object-property-newline": ["error"], // "@stylistic/ts/one-var-declaration-per-line": ["error", "always"], // "@stylistic/ts/operator-linebreak": ["error", "before"], // "@stylistic/ts/padded-blocks": ["error", "never"], // "@stylistic/ts/rest-spread-spacing": ["error", "never"], // "@stylistic/ts/semi-spacing": ["error"], // "@stylistic/ts/semi-style": ["error", "last"], // "@stylistic/ts/space-in-parens": ["error", "never"], // "@stylistic/ts/space-unary-ops": ["error"], // "@stylistic/ts/template-curly-spacing": ["error"], // "@stylistic/ts/template-tag-spacing": ["error"], // "@stylistic/ts/wrap-regex": ["error"], "no-var": ["error"], "no-unused-vars": "off", "prettier/prettier": ["error", { "printWidth": 80 }], "@angular-eslint/directive-selector": [ "error", { "type": "attribute", "prefix": "app", "style": "camelCase" } ], "@angular-eslint/component-selector": [ "error", { "type": "element", "prefix": "app", "style": "kebab-case" } ], "@typescript-eslint/explicit-member-accessibility": [ "error", { "accessibility": "explicit" } ], "@typescript-eslint/explicit-function-return-type": [ "error", { "allowExpressions": false, "allowTypedFunctionExpressions": true, "allowHigherOrderFunctions": false, "allowDirectConstAssertionInArrowFunctions": false, "allowConciseArrowFunctionExpressionsStartingWithVoid": false } ], "@typescript-eslint/member-ordering": [ "error", { "default": [ "public-static-field", "protected-static-field", "private-static-field", "public-instance-field", "protected-instance-field", "private-instance-field", "public-constructor", "protected-constructor", "private-constructor", "public-static-method", "protected-static-method", "private-static-method", "public-instance-method", "protected-instance-method", "private-instance-method" ] } ], // https://github.com/bryanrsmith/eslint-plugin-sort-class-members -> Read Docs and replace @typescript-eslint/member-ordering // "sort-class-members/sort-class-members": [ // 2, // { // "order": [ // "[public-properties]", // "[protected-properties]", // "[private-properties]", // "everything-else" // ], // "groups": { // "public-properties": [{ "type": "property", "accessibility": "public" }], // "protected-properties": [{ "type": "property", "accessibility": "protected" }], // "private-properties": [{ "type": "property", "accessibility": "private" }] // } // } // ], "padding-line-between-statements": [ "error", { "blankLine": "always", "prev": "const", "next": "*" }, { "blankLine": "always", "prev": "let", "next": "*" }, { "blankLine": "always", "prev": "var", "next": "*" }, { "blankLine": "any", "prev": ["const", "let", "var"], "next": ["const", "let", "var"] } ], "@typescript-eslint/no-unused-vars": [ "error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false } ], "@typescript-eslint/typedef": [ "error", { "arrayDestructuring": true, "arrowParameter": false, "memberVariableDeclaration": true, "objectDestructuring": true, "parameter": true, "propertyDeclaration": true, "variableDeclaration": false, "variableDeclarationIgnoreFunction": true } ], "import/order": [ "error", { "groups": [ "builtin", "external", "internal", "parent", "sibling", "index" ], "pathGroups": [ { "pattern": "@angular/**", "group": "external", "position": "before" }, { "pattern": "@app/**", "group": "internal", "position": "before" }, { "pattern": "@env/**", "group": "internal", "position": "before" } ], "pathGroupsExcludedImportTypes": ["builtin"], "newlines-between": "always", "alphabetize": { "order": "asc", "caseInsensitive": true } } ] } }, { "files": ["*.html"], "extends": [ "plugin:@angular-eslint/template/recommended", "plugin:@angular-eslint/template/accessibility" ], "rules": { "@angular-eslint/template/elements-content": [ "error", { "allowList": ["label"] } ] } } ] }