1
1
# Roadmap
2
2
3
- ## TSLint rules
3
+ ✅ (27) = done
4
+ 🌟 (79) = in ESLint core
5
+ 🔌 (33) = in another plugin
6
+ 🌓 (16) = implementations differ or ESLint version is missing functionality
7
+ 🛑 (71) = unimplemented
4
8
5
- ✅ = done
6
- 🌟 = in ESLint core
7
- 🔌 = in another plugin
8
- 🛑 = unimplemented
9
- ◐ = implementations differ or ESLint version is missing functionality
9
+ ## TSLint rules
10
10
11
11
### TypeScript-specific
12
12
72
72
| [ ` no-sparse-arrays ` ] | 🌟 | [ ` no-sparse-arrays ` ] [ no-sparse-arrays ] |
73
73
| [ ` no-string-literal ` ] | 🌟 | [ ` dot-notation ` ] [ dot-notation ] |
74
74
| [ ` no-string-throw ` ] | 🌟 | [ ` no-throw-literal ` ] [ no-throw-literal ] |
75
- | [ ` no-submodule-imports ` ] | ◐ | [ ` import/no-internal-modules ` ] (slightly different) |
75
+ | [ ` no-submodule-imports ` ] | 🌓 | [ ` import/no-internal-modules ` ] (slightly different) |
76
76
| [ ` no-switch-case-fall-through ` ] | 🌟 | [ ` no-fallthrough ` ] [ no-fallthrough ] |
77
77
| [ ` no-this-assignment ` ] | ✅ | [ ` typescript/no-this-alias ` ] |
78
78
| [ ` no-unbound-method ` ] | 🛑 | N/A |
79
79
| [ ` no-unnecessary-class ` ] | ✅ | [ ` typescript/no-extraneous-class ` ] |
80
80
| [ ` no-unsafe-any ` ] | 🛑 | N/A |
81
81
| [ ` no-unsafe-finally ` ] | 🌟 | [ ` no-unsafe-finally ` ] [ no-unsafe-finally ] |
82
82
| [ ` no-unused-expression ` ] | 🌟 | [ ` no-unused-expression ` ] [ no-unused-expressions ] |
83
- | [ ` no-unused-variable ` ] | ◐ | [ ` no-unused-vars ` ] [ no-unused-vars ] <sup >[ 2] </sup > |
83
+ | [ ` no-unused-variable ` ] | 🌓 | [ ` no-unused-vars ` ] [ no-unused-vars ] <sup >[ 2] </sup > |
84
84
| [ ` no-use-before-declare ` ] | ✅ | [ ` typescript/no-use-before-define ` ] |
85
85
| [ ` no-var-keyword ` ] | 🌟 | [ ` no-var ` ] [ no-var ] |
86
86
| [ ` no-void-expression ` ] | 🌟 | [ ` no-void ` ] [ no-void ] |
104
104
| TSLint rule | | ESLint rule |
105
105
| ---------------------------- | :-: | -------------------------------------------------- |
106
106
| [ ` cyclomatic-complexity ` ] | 🌟 | [ ` complexity ` ] [ complexity ] |
107
- | [ ` deprecation ` ] | ◐ | [ ` import/no-deprecated ` ] <sup >[ 1] </sup > |
107
+ | [ ` deprecation ` ] | 🌓 | [ ` import/no-deprecated ` ] <sup >[ 1] </sup > |
108
108
| [ ` eofline ` ] | 🌟 | [ ` eol-last ` ] [ eol-last ] |
109
109
| [ ` indent ` ] | ✅ | [ ` typescript/indent ` ] or [ Prettier] |
110
110
| [ ` linebreak-style ` ] | 🌟 | [ ` linebreak-style ` ] [ linebreak-style ] or [ Prettier] |
115
115
| [ ` no-duplicate-imports ` ] | 🔌 | [ ` import/no-duplicates ` ] |
116
116
| [ ` no-mergeable-namespace ` ] | 🛑 | N/A |
117
117
| [ ` no-require-imports ` ] | 🛑 | N/A |
118
- | [ ` object-literal-sort-keys ` ] | ◐ | [ ` sort-keys ` ] [ sort-keys ] <sup >[ 2] </sup > |
118
+ | [ ` object-literal-sort-keys ` ] | 🌓 | [ ` sort-keys ` ] [ sort-keys ] <sup >[ 2] </sup > |
119
119
| [ ` prefer-const ` ] | 🌟 | [ ` prefer-const ` ] [ prefer-const ] |
120
120
| [ ` prefer-readonly ` ] | 🛑 | N/A |
121
- | [ ` trailing-comma ` ] | ◐ | [ ` comma-dangle ` ] [ comma-dangle ] or [ Prettier] |
121
+ | [ ` trailing-comma ` ] | 🌓 | [ ` comma-dangle ` ] [ comma-dangle ] or [ Prettier] |
122
122
123
123
<sup >[ 1] </sup > Only warns when importing deprecated symbols
124
124
<sup >[ 2] </sup > Missing support for blank-line-delimited sections
142
142
| [ ` import-spacing ` ] | 🔌 | Use [ Prettier] |
143
143
| [ ` interface-name ` ] | ✅ | [ ` typescript/interface-name-prefix ` ] |
144
144
| [ ` interface-over-type-literal ` ] | ✅ | [ ` typescript/prefer-interface ` ] |
145
- | [ ` jsdoc-format ` ] | ◐ | [ ` valid-jsdoc ` ] [ valid-jsdoc ] or [ ` eslint-plugin-jsdoc ` ] [ plugin:jsdoc ] |
145
+ | [ ` jsdoc-format ` ] | 🌓 | [ ` valid-jsdoc ` ] [ valid-jsdoc ] or [ ` eslint-plugin-jsdoc ` ] [ plugin:jsdoc ] |
146
146
| [ ` match-default-export-name ` ] | 🛑 | N/A |
147
147
| [ ` newline-before-return ` ] | 🌟 | [ ` padding-line-between-statements ` ] [ padding-line-between-statements ] <sup >[ 1] </sup > |
148
148
| [ ` newline-per-chained-call ` ] | 🌟 | [ ` newline-per-chained-call ` ] [ newline-per-chained-call ] |
@@ -202,7 +202,7 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
202
202
203
203
| tslint-microsoft-contrib rule | | ESLint rule |
204
204
| ----------------------------- | :-: | -------------------------------------------------- |
205
- | ` prefer-array-literal ` | ◐ | [ ` typescript/no-array-constructor ` ] <sup >[ 1] </sup > |
205
+ | ` prefer-array-literal ` | 🌓 | [ ` typescript/no-array-constructor ` ] <sup >[ 1] </sup > |
206
206
| ` prefer-type-cast ` | 🛑 | N/A |
207
207
208
208
<sup >[ 1] </sup > ESLint rule is slightly less strict, allowing ` new Array<Foo>() ` and ` Array(2) ` .
@@ -211,17 +211,17 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
211
211
212
212
| tslint-microsoft-contrib rule | | ESLint rule |
213
213
| ------------------------------------- | :-: | ---------------------------------------------------------------------- |
214
- | ` export-name ` | 🛑 | N/A ([ relevant plugin] ( plugin:import ) ) |
214
+ | ` export-name ` | 🛑 | N/A ([ relevant plugin] [ plugin:import ] ) |
215
215
| ` function-name ` | 🛑 | N/A |
216
- | ` import-name ` | 🛑 | N/A ([ relevant plugin] ( plugin:import ) ) |
216
+ | ` import-name ` | 🛑 | N/A ([ relevant plugin] [ plugin:import ] ) |
217
217
| ` function-name ` | 🛑 | N/A |
218
218
| ` informative-docs ` | 🛑 | N/A |
219
219
| ` insecure-random ` | 🔌 | [ custom implementation] [ insecure-random ] |
220
220
| ` max-func-body-length ` | 🌟 | [ ` max-statements ` ] [ max-statements ] |
221
- | ` no-banned-terms ` | 🌟 | [ ` no-callee ` ] [ no-callee ] & [ ` no-eval ` ] [ no-eval ] |
221
+ | ` no-banned-terms ` | 🌟 | [ ` no-caller ` ] [ no-caller ] & [ ` no-eval ` ] [ no-eval ] |
222
222
| ` no-constant-condition ` | 🌟 | [ ` no-constant-condition ` ] [ no-constant-condition ] |
223
223
| ` no-control-regex ` | 🌟 | [ ` no-control-regex ` ] [ no-control-regex ] |
224
- | ` no-delete-expression ` | ◐ | [ ` no-delete-var ` ] [ no-delete-var ] |
224
+ | ` no-delete-expression ` | 🌓 | [ ` no-delete-var ` ] [ no-delete-var ] |
225
225
| ` no-empty-line-after-opening-brace ` | 🌟 | [ ` padded-blocks ` ] [ padded-blocks ] <sup >[ 1] </sup > or [ Prettier] |
226
226
| ` no-for-in ` | 🌟 | [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] <sup >[ 2] </sup > |
227
227
| ` no-function-expression ` | 🌟 | [ ` func-style ` ] [ func-style ] <sup >[ 3] </sup > |
@@ -234,7 +234,7 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
234
234
| ` no-suspicious-comment ` | 🌟 | [ ` no-warning-comments ` ] [ no-warning-comments ] <sup >[ 4] </sup > |
235
235
| ` no-typeof-undefined ` | 🛑 | N/A (this actually has a valid use: checking if a variable is defined) |
236
236
| ` no-unexternalized-strings ` | 🛑 | N/A |
237
- | ` no-unnecessary-field-initialization ` | ◐ | [ ` no-undef-init ` ] [ no-undef-init ] <sup >[ 5] </sup > |
237
+ | ` no-unnecessary-field-initialization ` | 🌓 | [ ` no-undef-init ` ] [ no-undef-init ] <sup >[ 5] </sup > |
238
238
| ` no-unnecessary-local-variable ` | 🛑 | N/A |
239
239
| ` no-unnecessary-override ` | 🛑 | N/A |
240
240
| ` no-unnecessary-semicolons ` | 🌟 | [ ` no-extra-semi ` ] [ no-extra-semi ] or [ Prettier] |
@@ -258,7 +258,7 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
258
258
| tslint-microsoft-contrib rule | | ESLint rule |
259
259
| ------------------------------------------ | :-: | -------------------------------------------------- |
260
260
| ` no-disable-auto-sanitization ` | 🛑 | N/A |
261
- | ` no-document-domain ` | ◐ | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
261
+ | ` no-document-domain ` | 🌓 | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
262
262
| ` no-function-constructor-with-string-args ` | 🌟 | [ ` no-new-func ` ] [ no-new-func ] |
263
263
| ` no-http-string ` | 🛑 | N/A |
264
264
| ` no-inner-html ` | 🛑 | N/A |
@@ -277,23 +277,23 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
277
277
| ----------------------------------- | :-: | -------------------------------------------------- |
278
278
| ` jquery-deferred-must-complete ` | 🛑 | N/A |
279
279
| ` no-backbone-get-set-outside-model ` | 🛑 | N/A |
280
- | ` no-cookies ` | ◐ | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
281
- | ` no-document-write ` | ◐ | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
282
- | ` no-exec-script ` | ◐ | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
280
+ | ` no-cookies ` | 🌓 | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
281
+ | ` no-document-write ` | 🌓 | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
282
+ | ` no-exec-script ` | 🌓 | Use [ ` no-restricted-syntax ` ] [ no-restricted-syntax ] |
283
283
| ` no-jquery-raw-elements ` | 🛑 | N/A |
284
284
| ` no-unsupported-browser-code ` | 🔌 | [ ` eslint-plugin-compat ` ] [ plugin:compat ] |
285
285
| ` react-this-binding-issue ` | 🛑 | |
286
286
| ` react-tsx-curly-spacing ` | 🔌 | [ ` react/jsx-curly-spacing ` ] |
287
- | ` react-unused-props-and-state ` | ◐ | [ ` react/no-unused-state ` ] |
287
+ | ` react-unused-props-and-state ` | 🌓 | [ ` react/no-unused-state ` ] |
288
288
289
289
### React A11y
290
290
291
291
| tslint-microsoft-contrib rule | | ESLint rule |
292
292
| ----------------------------------------- | :-: | ---------------------------------------------------------- |
293
- | ` react-a11y-accessible-headings ` | ◐ | [ ` jsx-a11y/heading-has-content ` ] <sup >[ 1] </sup > |
293
+ | ` react-a11y-accessible-headings ` | 🌓 | [ ` jsx-a11y/heading-has-content ` ] <sup >[ 1] </sup > |
294
294
| ` react-a11y-anchors ` | 🔌 | [ ` jsx-a11y/anchor-is-valid ` ] |
295
295
| ` react-a11y-aria-unsupported-elements ` | 🔌 | [ ` jsx-a11y/aria-unsupported-elements ` ] |
296
- | ` react-a11y-event-has-role ` | ◐ | [ ` jsx-a11y/no-static-element-interactions ` ] <sup >[ 2] </sup > |
296
+ | ` react-a11y-event-has-role ` | 🌓 | [ ` jsx-a11y/no-static-element-interactions ` ] <sup >[ 2] </sup > |
297
297
| ` react-a11y-image-button-has-alt ` | 🔌 | [ ` jsx-a11y/alt-text ` ] |
298
298
| ` react-a11y-img-has-alt ` | 🔌 | [ ` jsx-a11y/alt-text ` ] |
299
299
| ` react-a11y-input-elements ` | 🛑 | N/A |
@@ -553,6 +553,7 @@ Relevant plugins: [`chai-expect-keywords`](https://github.com/gavinaiken/eslint-
553
553
[ no-octal-escape ] : https://eslint.org/docs/rules/no-octal-escape
554
554
[ no-extra-semi ] : https://eslint.org/docs/rules/no-extra-semi
555
555
[ no-with ] : https://eslint.org/docs/rules/no-with
556
+ [ no-warning-comments ] : https://eslint.org/docs/rules/no-warning-comments
556
557
557
558
<!-- eslint-plugin-typescript -->
558
559
0 commit comments