|
2 | 2 | "parser": "@typescript-eslint/parser", |
3 | 3 | "parserOptions": { |
4 | 4 | "warnOnUnsupportedTypeScriptVersion": false, |
5 | | - "ecmaVersion": 6, |
6 | 5 | "sourceType": "module" |
7 | 6 | }, |
8 | 7 | "env": { |
|
11 | 10 | "es6": true |
12 | 11 | }, |
13 | 12 | "plugins": [ |
14 | | - "@typescript-eslint", "jsdoc", "no-null", "import" |
| 13 | + "@typescript-eslint", "no-null", "import", "eslint-plugin-local" |
15 | 14 | ], |
16 | 15 | "rules": { |
| 16 | + "sort-imports": ["error", { |
| 17 | + "ignoreCase": true, |
| 18 | + "ignoreDeclarationSort": true, |
| 19 | + "allowSeparatedGroups": true |
| 20 | + }], |
| 21 | + |
17 | 22 | "@typescript-eslint/adjacent-overload-signatures": "error", |
18 | 23 | "@typescript-eslint/array-type": "error", |
| 24 | + "@typescript-eslint/no-array-constructor": "error", |
19 | 25 |
|
20 | 26 | "brace-style": "off", |
21 | 27 | "@typescript-eslint/brace-style": ["error", "stroustrup", { "allowSingleLine": true }], |
|
51 | 57 | "@typescript-eslint/prefer-for-of": "error", |
52 | 58 | "@typescript-eslint/prefer-function-type": "error", |
53 | 59 | "@typescript-eslint/prefer-namespace-keyword": "error", |
| 60 | + "@typescript-eslint/prefer-as-const": "error", |
54 | 61 |
|
55 | 62 | "quotes": "off", |
56 | 63 | "@typescript-eslint/quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }], |
57 | 64 |
|
58 | 65 | "semi": "off", |
59 | 66 | "@typescript-eslint/semi": "error", |
| 67 | + "@typescript-eslint/no-extra-semi": "error", |
60 | 68 |
|
61 | 69 | "space-before-function-paren": "off", |
62 | 70 | "@typescript-eslint/space-before-function-paren": ["error", { |
|
69 | 77 | "@typescript-eslint/type-annotation-spacing": "error", |
70 | 78 | "@typescript-eslint/unified-signatures": "error", |
71 | 79 |
|
| 80 | + "@typescript-eslint/no-extra-non-null-assertion": "error", |
| 81 | + |
72 | 82 | // scripts/eslint/rules |
73 | | - "object-literal-surrounding-space": "error", |
74 | | - "no-type-assertion-whitespace": "error", |
75 | | - "type-operator-spacing": "error", |
76 | | - "only-arrow-functions": ["error", { |
| 83 | + "local/object-literal-surrounding-space": "error", |
| 84 | + "local/no-type-assertion-whitespace": "error", |
| 85 | + "local/type-operator-spacing": "error", |
| 86 | + "local/only-arrow-functions": ["error", { |
77 | 87 | "allowNamedFunctions": true , |
78 | 88 | "allowDeclarations": true |
79 | 89 | }], |
80 | | - "no-double-space": "error", |
81 | | - "boolean-trivia": "error", |
82 | | - "no-in-operator": "error", |
83 | | - "simple-indent": "error", |
84 | | - "debug-assert": "error", |
85 | | - "no-keywords": "error", |
86 | | - "one-namespace-per-file": "error", |
| 90 | + "local/no-double-space": "error", |
| 91 | + "local/boolean-trivia": "error", |
| 92 | + "local/no-in-operator": "error", |
| 93 | + "local/simple-indent": "error", |
| 94 | + "local/debug-assert": "error", |
| 95 | + "local/no-keywords": "error", |
| 96 | + "local/jsdoc-format": "error", |
87 | 97 |
|
88 | 98 | // eslint-plugin-import |
89 | 99 | "import/no-extraneous-dependencies": ["error", { "optionalDependencies": false }], |
90 | 100 |
|
91 | 101 | // eslint-plugin-no-null |
92 | 102 | "no-null/no-null": "error", |
93 | 103 |
|
94 | | - // eslint-plugin-jsdoc |
95 | | - "jsdoc/check-alignment": "error", |
96 | | - |
97 | 104 | // eslint |
98 | 105 | "constructor-super": "error", |
99 | 106 | "curly": ["error", "multi-line"], |
|
132 | 139 | "quote-props": ["error", "consistent-as-needed"], |
133 | 140 | "space-in-parens": "error", |
134 | 141 | "unicode-bom": ["error", "never"], |
135 | | - "use-isnan": "error" |
136 | | - } |
| 142 | + "use-isnan": "error", |
| 143 | + "no-prototype-builtins": "error", |
| 144 | + "no-self-assign": "error", |
| 145 | + "no-dupe-else-if": "error" |
| 146 | + }, |
| 147 | + "overrides": [ |
| 148 | + // By default, the ESLint CLI only looks at .js files. But, it will also look at |
| 149 | + // any files which are referenced in an override config. Most users of typescript-eslint |
| 150 | + // get this behavior by default by extending a recommended typescript-eslint config, which |
| 151 | + // just so happens to override some core ESLint rules. We don't extend from any config, so |
| 152 | + // explicitly reference TS files here so the CLI picks them up. |
| 153 | + // |
| 154 | + // ESLint in VS Code will lint any opened file (so long as it's not eslintignore'd), so |
| 155 | + // that will work regardless of the below. |
| 156 | + // |
| 157 | + // The same applies to mjs files; ESLint appears to not scan those either. |
| 158 | + { "files": ["*.ts", "*.mts", "*.cts", "*.mjs", "*.cjs"] }, |
| 159 | + { |
| 160 | + "files": ["*.mjs", "*.mts"], |
| 161 | + "rules": { |
| 162 | + // These globals don't exist outside of CJS files. |
| 163 | + "no-restricted-globals": ["error", |
| 164 | + { "name": "__filename" }, |
| 165 | + { "name": "__dirname" }, |
| 166 | + { "name": "require" }, |
| 167 | + { "name": "module" }, |
| 168 | + { "name": "exports" } |
| 169 | + ] |
| 170 | + } |
| 171 | + } |
| 172 | + ] |
137 | 173 | } |
0 commit comments