@depup/typescript-eslint__eslint-plugin 8.57.1-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/dist/configs/eslint-recommended-raw.d.ts +10 -0
- package/dist/configs/eslint-recommended-raw.js +46 -0
- package/dist/configs/eslintrc/all.d.ts +159 -0
- package/dist/configs/eslintrc/all.js +165 -0
- package/dist/configs/eslintrc/base.d.ts +8 -0
- package/dist/configs/eslintrc/base.js +6 -0
- package/dist/configs/eslintrc/disable-type-checked.d.ts +71 -0
- package/dist/configs/eslintrc/disable-type-checked.js +73 -0
- package/dist/configs/eslintrc/eslint-recommended.d.ts +12 -0
- package/dist/configs/eslintrc/eslint-recommended.js +13 -0
- package/dist/configs/eslintrc/recommended-type-checked-only.d.ts +33 -0
- package/dist/configs/eslintrc/recommended-type-checked-only.js +39 -0
- package/dist/configs/eslintrc/recommended-type-checked.d.ts +56 -0
- package/dist/configs/eslintrc/recommended-type-checked.js +62 -0
- package/dist/configs/eslintrc/recommended.d.ts +29 -0
- package/dist/configs/eslintrc/recommended.js +35 -0
- package/dist/configs/eslintrc/strict-type-checked-only.d.ts +64 -0
- package/dist/configs/eslintrc/strict-type-checked-only.js +79 -0
- package/dist/configs/eslintrc/strict-type-checked.d.ts +98 -0
- package/dist/configs/eslintrc/strict-type-checked.js +114 -0
- package/dist/configs/eslintrc/strict.d.ts +40 -0
- package/dist/configs/eslintrc/strict.js +47 -0
- package/dist/configs/eslintrc/stylistic-type-checked-only.d.ts +15 -0
- package/dist/configs/eslintrc/stylistic-type-checked-only.js +21 -0
- package/dist/configs/eslintrc/stylistic-type-checked.d.ts +29 -0
- package/dist/configs/eslintrc/stylistic-type-checked.js +35 -0
- package/dist/configs/eslintrc/stylistic.d.ts +20 -0
- package/dist/configs/eslintrc/stylistic.js +26 -0
- package/dist/configs/flat/all.d.ts +7 -0
- package/dist/configs/flat/all.js +179 -0
- package/dist/configs/flat/base.d.ts +8 -0
- package/dist/configs/flat/base.js +17 -0
- package/dist/configs/flat/disable-type-checked.d.ts +7 -0
- package/dist/configs/flat/disable-type-checked.js +81 -0
- package/dist/configs/flat/eslint-recommended.d.ts +9 -0
- package/dist/configs/flat/eslint-recommended.js +16 -0
- package/dist/configs/flat/recommended-type-checked-only.d.ts +7 -0
- package/dist/configs/flat/recommended-type-checked-only.js +53 -0
- package/dist/configs/flat/recommended-type-checked.d.ts +7 -0
- package/dist/configs/flat/recommended-type-checked.js +76 -0
- package/dist/configs/flat/recommended.d.ts +7 -0
- package/dist/configs/flat/recommended.js +49 -0
- package/dist/configs/flat/strict-type-checked-only.d.ts +7 -0
- package/dist/configs/flat/strict-type-checked-only.js +93 -0
- package/dist/configs/flat/strict-type-checked.d.ts +7 -0
- package/dist/configs/flat/strict-type-checked.js +128 -0
- package/dist/configs/flat/strict.d.ts +7 -0
- package/dist/configs/flat/strict.js +61 -0
- package/dist/configs/flat/stylistic-type-checked-only.d.ts +7 -0
- package/dist/configs/flat/stylistic-type-checked-only.js +35 -0
- package/dist/configs/flat/stylistic-type-checked.d.ts +7 -0
- package/dist/configs/flat/stylistic-type-checked.js +49 -0
- package/dist/configs/flat/stylistic.d.ts +7 -0
- package/dist/configs/flat/stylistic.js +40 -0
- package/dist/index.d.ts +1128 -0
- package/dist/index.js +6 -0
- package/dist/raw-plugin.d.ts +1152 -0
- package/dist/raw-plugin.js +122 -0
- package/dist/rules/adjacent-overload-signatures.d.ts +4 -0
- package/dist/rules/adjacent-overload-signatures.js +124 -0
- package/dist/rules/array-type.d.ts +12 -0
- package/dist/rules/array-type.js +232 -0
- package/dist/rules/await-thenable.d.ts +6 -0
- package/dist/rules/await-thenable.js +228 -0
- package/dist/rules/ban-ts-comment.d.ts +17 -0
- package/dist/rules/ban-ts-comment.js +195 -0
- package/dist/rules/ban-tslint-comment.d.ts +4 -0
- package/dist/rules/ban-tslint-comment.js +53 -0
- package/dist/rules/class-literal-property-style.d.ts +7 -0
- package/dist/rules/class-literal-property-style.js +160 -0
- package/dist/rules/class-methods-use-this.d.ts +13 -0
- package/dist/rules/class-methods-use-this.js +219 -0
- package/dist/rules/consistent-generic-constructors.d.ts +6 -0
- package/dist/rules/consistent-generic-constructors.js +126 -0
- package/dist/rules/consistent-indexed-object-style.d.ts +7 -0
- package/dist/rules/consistent-indexed-object-style.js +256 -0
- package/dist/rules/consistent-return.d.ts +18 -0
- package/dist/rules/consistent-return.js +135 -0
- package/dist/rules/consistent-type-assertions.d.ts +14 -0
- package/dist/rules/consistent-type-assertions.js +256 -0
- package/dist/rules/consistent-type-definitions.d.ts +5 -0
- package/dist/rules/consistent-type-definitions.js +100 -0
- package/dist/rules/consistent-type-exports.d.ts +11 -0
- package/dist/rules/consistent-type-exports.js +335 -0
- package/dist/rules/consistent-type-imports.d.ts +15 -0
- package/dist/rules/consistent-type-imports.js +608 -0
- package/dist/rules/default-param-last.d.ts +4 -0
- package/dist/rules/default-param-last.js +68 -0
- package/dist/rules/dot-notation.d.ts +23 -0
- package/dist/rules/dot-notation.js +139 -0
- package/dist/rules/enum-utils/shared.d.ts +36 -0
- package/dist/rules/enum-utils/shared.js +121 -0
- package/dist/rules/explicit-function-return-type.d.ts +17 -0
- package/dist/rules/explicit-function-return-type.js +179 -0
- package/dist/rules/explicit-member-accessibility.d.ts +19 -0
- package/dist/rules/explicit-member-accessibility.js +299 -0
- package/dist/rules/explicit-module-boundary-types.d.ts +15 -0
- package/dist/rules/explicit-module-boundary-types.js +386 -0
- package/dist/rules/index.d.ts +448 -0
- package/dist/rules/index.js +275 -0
- package/dist/rules/init-declarations.d.ts +15 -0
- package/dist/rules/init-declarations.js +105 -0
- package/dist/rules/max-params.d.ts +25 -0
- package/dist/rules/max-params.js +72 -0
- package/dist/rules/member-ordering.d.ts +33 -0
- package/dist/rules/member-ordering.js +833 -0
- package/dist/rules/method-signature-style.d.ts +6 -0
- package/dist/rules/method-signature-style.js +186 -0
- package/dist/rules/naming-convention-utils/enums.d.ts +79 -0
- package/dist/rules/naming-convention-utils/enums.js +102 -0
- package/dist/rules/naming-convention-utils/format.d.ts +2 -0
- package/dist/rules/naming-convention-utils/format.js +89 -0
- package/dist/rules/naming-convention-utils/index.d.ts +6 -0
- package/dist/rules/naming-convention-utils/index.js +11 -0
- package/dist/rules/naming-convention-utils/parse-options.d.ts +2 -0
- package/dist/rules/naming-convention-utils/parse-options.js +69 -0
- package/dist/rules/naming-convention-utils/schema.d.ts +2 -0
- package/dist/rules/naming-convention-utils/schema.js +305 -0
- package/dist/rules/naming-convention-utils/shared.d.ts +5 -0
- package/dist/rules/naming-convention-utils/shared.js +16 -0
- package/dist/rules/naming-convention-utils/types.d.ts +39 -0
- package/dist/rules/naming-convention-utils/types.js +2 -0
- package/dist/rules/naming-convention-utils/validator.d.ts +3 -0
- package/dist/rules/naming-convention-utils/validator.js +349 -0
- package/dist/rules/naming-convention.d.ts +8 -0
- package/dist/rules/naming-convention.js +505 -0
- package/dist/rules/no-array-constructor.d.ts +4 -0
- package/dist/rules/no-array-constructor.js +62 -0
- package/dist/rules/no-array-delete.d.ts +6 -0
- package/dist/rules/no-array-delete.js +80 -0
- package/dist/rules/no-base-to-string.d.ts +11 -0
- package/dist/rules/no-base-to-string.js +324 -0
- package/dist/rules/no-confusing-non-null-assertion.d.ts +6 -0
- package/dist/rules/no-confusing-non-null-assertion.js +142 -0
- package/dist/rules/no-confusing-void-expression.d.ts +13 -0
- package/dist/rules/no-confusing-void-expression.js +357 -0
- package/dist/rules/no-deprecated.d.ts +11 -0
- package/dist/rules/no-deprecated.js +402 -0
- package/dist/rules/no-dupe-class-members.d.ts +14 -0
- package/dist/rules/no-dupe-class-members.js +39 -0
- package/dist/rules/no-duplicate-enum-values.d.ts +4 -0
- package/dist/rules/no-duplicate-enum-values.js +83 -0
- package/dist/rules/no-duplicate-type-constituents.d.ts +11 -0
- package/dist/rules/no-duplicate-type-constituents.js +219 -0
- package/dist/rules/no-dynamic-delete.d.ts +4 -0
- package/dist/rules/no-dynamic-delete.js +42 -0
- package/dist/rules/no-empty-function.d.ts +16 -0
- package/dist/rules/no-empty-function.js +134 -0
- package/dist/rules/no-empty-interface.d.ts +11 -0
- package/dist/rules/no-empty-interface.js +102 -0
- package/dist/rules/no-empty-object-type.d.ts +15 -0
- package/dist/rules/no-empty-object-type.js +143 -0
- package/dist/rules/no-explicit-any.d.ts +12 -0
- package/dist/rules/no-explicit-any.js +197 -0
- package/dist/rules/no-extra-non-null-assertion.d.ts +4 -0
- package/dist/rules/no-extra-non-null-assertion.js +35 -0
- package/dist/rules/no-extraneous-class.d.ts +13 -0
- package/dist/rules/no-extraneous-class.js +120 -0
- package/dist/rules/no-floating-promises.d.ts +16 -0
- package/dist/rules/no-floating-promises.js +365 -0
- package/dist/rules/no-for-in-array.d.ts +4 -0
- package/dist/rules/no-for-in-array.js +86 -0
- package/dist/rules/no-implied-eval.d.ts +4 -0
- package/dist/rules/no-implied-eval.js +152 -0
- package/dist/rules/no-import-type-side-effects.d.ts +7 -0
- package/dist/rules/no-import-type-side-effects.js +53 -0
- package/dist/rules/no-inferrable-types.d.ts +11 -0
- package/dist/rules/no-inferrable-types.js +182 -0
- package/dist/rules/no-invalid-this.d.ts +15 -0
- package/dist/rules/no-invalid-this.js +75 -0
- package/dist/rules/no-invalid-void-type.d.ts +9 -0
- package/dist/rules/no-invalid-void-type.js +210 -0
- package/dist/rules/no-loop-func.d.ts +13 -0
- package/dist/rules/no-loop-func.js +187 -0
- package/dist/rules/no-loss-of-precision.d.ts +9 -0
- package/dist/rules/no-loss-of-precision.js +35 -0
- package/dist/rules/no-magic-numbers.d.ts +29 -0
- package/dist/rules/no-magic-numbers.js +248 -0
- package/dist/rules/no-meaningless-void-operator.d.ts +10 -0
- package/dist/rules/no-meaningless-void-operator.js +102 -0
- package/dist/rules/no-misused-new.d.ts +4 -0
- package/dist/rules/no-misused-new.js +81 -0
- package/dist/rules/no-misused-promises.d.ts +21 -0
- package/dist/rules/no-misused-promises.js +765 -0
- package/dist/rules/no-misused-spread.d.ts +12 -0
- package/dist/rules/no-misused-spread.js +260 -0
- package/dist/rules/no-mixed-enums.d.ts +4 -0
- package/dist/rules/no-mixed-enums.js +200 -0
- package/dist/rules/no-namespace.d.ts +11 -0
- package/dist/rules/no-namespace.js +60 -0
- package/dist/rules/no-non-null-asserted-nullish-coalescing.d.ts +5 -0
- package/dist/rules/no-non-null-asserted-nullish-coalescing.js +73 -0
- package/dist/rules/no-non-null-asserted-optional-chain.d.ts +5 -0
- package/dist/rules/no-non-null-asserted-optional-chain.js +65 -0
- package/dist/rules/no-non-null-assertion.d.ts +6 -0
- package/dist/rules/no-non-null-assertion.js +93 -0
- package/dist/rules/no-redeclare.d.ts +12 -0
- package/dist/rules/no-redeclare.js +199 -0
- package/dist/rules/no-redundant-type-constituents.d.ts +4 -0
- package/dist/rules/no-redundant-type-constituents.js +431 -0
- package/dist/rules/no-require-imports.d.ts +11 -0
- package/dist/rules/no-require-imports.js +115 -0
- package/dist/rules/no-restricted-imports.d.ts +9 -0
- package/dist/rules/no-restricted-imports.js +243 -0
- package/dist/rules/no-restricted-types.d.ts +16 -0
- package/dist/rules/no-restricted-types.js +165 -0
- package/dist/rules/no-shadow.d.ts +16 -0
- package/dist/rules/no-shadow.js +521 -0
- package/dist/rules/no-this-alias.d.ts +11 -0
- package/dist/rules/no-this-alias.js +66 -0
- package/dist/rules/no-type-alias.d.ts +18 -0
- package/dist/rules/no-type-alias.js +268 -0
- package/dist/rules/no-unnecessary-boolean-literal-compare.d.ts +12 -0
- package/dist/rules/no-unnecessary-boolean-literal-compare.js +263 -0
- package/dist/rules/no-unnecessary-condition.d.ts +14 -0
- package/dist/rules/no-unnecessary-condition.js +675 -0
- package/dist/rules/no-unnecessary-parameter-property-assignment.d.ts +4 -0
- package/dist/rules/no-unnecessary-parameter-property-assignment.js +148 -0
- package/dist/rules/no-unnecessary-qualifier.d.ts +4 -0
- package/dist/rules/no-unnecessary-qualifier.js +156 -0
- package/dist/rules/no-unnecessary-template-expression.d.ts +6 -0
- package/dist/rules/no-unnecessary-template-expression.js +361 -0
- package/dist/rules/no-unnecessary-type-arguments.d.ts +5 -0
- package/dist/rules/no-unnecessary-type-arguments.js +197 -0
- package/dist/rules/no-unnecessary-type-assertion.d.ts +11 -0
- package/dist/rules/no-unnecessary-type-assertion.js +353 -0
- package/dist/rules/no-unnecessary-type-constraint.d.ts +5 -0
- package/dist/rules/no-unnecessary-type-constraint.js +119 -0
- package/dist/rules/no-unnecessary-type-conversion.d.ts +5 -0
- package/dist/rules/no-unnecessary-type-conversion.js +356 -0
- package/dist/rules/no-unnecessary-type-parameters.d.ts +5 -0
- package/dist/rules/no-unnecessary-type-parameters.js +422 -0
- package/dist/rules/no-unsafe-argument.d.ts +5 -0
- package/dist/rules/no-unsafe-argument.js +272 -0
- package/dist/rules/no-unsafe-assignment.d.ts +4 -0
- package/dist/rules/no-unsafe-assignment.js +322 -0
- package/dist/rules/no-unsafe-call.d.ts +5 -0
- package/dist/rules/no-unsafe-call.js +136 -0
- package/dist/rules/no-unsafe-declaration-merging.d.ts +4 -0
- package/dist/rules/no-unsafe-declaration-merging.js +54 -0
- package/dist/rules/no-unsafe-enum-comparison.d.ts +5 -0
- package/dist/rules/no-unsafe-enum-comparison.js +192 -0
- package/dist/rules/no-unsafe-function-type.d.ts +4 -0
- package/dist/rules/no-unsafe-function-type.js +45 -0
- package/dist/rules/no-unsafe-member-access.d.ts +10 -0
- package/dist/rules/no-unsafe-member-access.js +183 -0
- package/dist/rules/no-unsafe-return.d.ts +4 -0
- package/dist/rules/no-unsafe-return.js +183 -0
- package/dist/rules/no-unsafe-type-assertion.d.ts +4 -0
- package/dist/rules/no-unsafe-type-assertion.js +158 -0
- package/dist/rules/no-unsafe-unary-minus.d.ts +6 -0
- package/dist/rules/no-unsafe-unary-minus.js +78 -0
- package/dist/rules/no-unused-expressions.d.ts +19 -0
- package/dist/rules/no-unused-expressions.js +64 -0
- package/dist/rules/no-unused-private-class-members.d.ts +6 -0
- package/dist/rules/no-unused-private-class-members.js +44 -0
- package/dist/rules/no-unused-vars.d.ts +24 -0
- package/dist/rules/no-unused-vars.js +1033 -0
- package/dist/rules/no-use-before-define.d.ts +16 -0
- package/dist/rules/no-use-before-define.js +303 -0
- package/dist/rules/no-useless-constructor.d.ts +11 -0
- package/dist/rules/no-useless-constructor.js +57 -0
- package/dist/rules/no-useless-default-assignment.d.ts +11 -0
- package/dist/rules/no-useless-default-assignment.js +318 -0
- package/dist/rules/no-useless-empty-export.d.ts +4 -0
- package/dist/rules/no-useless-empty-export.js +70 -0
- package/dist/rules/no-var-requires.d.ts +10 -0
- package/dist/rules/no-var-requires.js +83 -0
- package/dist/rules/no-wrapper-object-types.d.ts +5 -0
- package/dist/rules/no-wrapper-object-types.js +60 -0
- package/dist/rules/non-nullable-type-assertion-style.d.ts +4 -0
- package/dist/rules/non-nullable-type-assertion-style.js +132 -0
- package/dist/rules/only-throw-error.d.ts +14 -0
- package/dist/rules/only-throw-error.js +158 -0
- package/dist/rules/parameter-properties.d.ts +13 -0
- package/dist/rules/parameter-properties.js +164 -0
- package/dist/rules/prefer-as-const.d.ts +5 -0
- package/dist/rules/prefer-as-const.js +72 -0
- package/dist/rules/prefer-destructuring.d.ts +19 -0
- package/dist/rules/prefer-destructuring.js +216 -0
- package/dist/rules/prefer-enum-initializers.d.ts +6 -0
- package/dist/rules/prefer-enum-initializers.js +62 -0
- package/dist/rules/prefer-find.d.ts +5 -0
- package/dist/rules/prefer-find.js +247 -0
- package/dist/rules/prefer-for-of.d.ts +5 -0
- package/dist/rules/prefer-for-of.js +115 -0
- package/dist/rules/prefer-function-type.d.ts +9 -0
- package/dist/rules/prefer-function-type.js +186 -0
- package/dist/rules/prefer-includes.d.ts +5 -0
- package/dist/rules/prefer-includes.js +242 -0
- package/dist/rules/prefer-literal-enum-member.d.ts +6 -0
- package/dist/rules/prefer-literal-enum-member.js +116 -0
- package/dist/rules/prefer-namespace-keyword.d.ts +4 -0
- package/dist/rules/prefer-namespace-keyword.js +42 -0
- package/dist/rules/prefer-nullish-coalescing.d.ts +22 -0
- package/dist/rules/prefer-nullish-coalescing.js +647 -0
- package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.d.ts +11 -0
- package/dist/rules/prefer-optional-chain-utils/PreferOptionalChainOptions.js +2 -0
- package/dist/rules/prefer-optional-chain-utils/analyzeChain.d.ts +7 -0
- package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +569 -0
- package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.d.ts +6 -0
- package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +45 -0
- package/dist/rules/prefer-optional-chain-utils/compareNodes.d.ts +15 -0
- package/dist/rules/prefer-optional-chain-utils/compareNodes.js +326 -0
- package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.d.ts +61 -0
- package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +411 -0
- package/dist/rules/prefer-optional-chain.d.ts +5 -0
- package/dist/rules/prefer-optional-chain.js +150 -0
- package/dist/rules/prefer-promise-reject-errors.d.ts +14 -0
- package/dist/rules/prefer-promise-reject-errors.js +124 -0
- package/dist/rules/prefer-readonly-parameter-types.d.ts +14 -0
- package/dist/rules/prefer-readonly-parameter-types.js +89 -0
- package/dist/rules/prefer-readonly.d.ts +10 -0
- package/dist/rules/prefer-readonly.js +439 -0
- package/dist/rules/prefer-reduce-type-parameter.d.ts +4 -0
- package/dist/rules/prefer-reduce-type-parameter.js +114 -0
- package/dist/rules/prefer-regexp-exec.d.ts +4 -0
- package/dist/rules/prefer-regexp-exec.js +178 -0
- package/dist/rules/prefer-return-this-type.d.ts +4 -0
- package/dist/rules/prefer-return-this-type.js +154 -0
- package/dist/rules/prefer-string-starts-ends-with.d.ts +12 -0
- package/dist/rules/prefer-string-starts-ends-with.js +512 -0
- package/dist/rules/prefer-ts-expect-error.d.ts +5 -0
- package/dist/rules/prefer-ts-expect-error.js +71 -0
- package/dist/rules/promise-function-async.d.ts +15 -0
- package/dist/rules/promise-function-async.js +204 -0
- package/dist/rules/related-getter-setter-pairs.d.ts +4 -0
- package/dist/rules/related-getter-setter-pairs.js +71 -0
- package/dist/rules/require-array-sort-compare.d.ts +10 -0
- package/dist/rules/require-array-sort-compare.js +63 -0
- package/dist/rules/require-await.d.ts +4 -0
- package/dist/rules/require-await.js +263 -0
- package/dist/rules/restrict-plus-operands.d.ts +15 -0
- package/dist/rules/restrict-plus-operands.js +231 -0
- package/dist/rules/restrict-template-expressions.d.ts +19 -0
- package/dist/rules/restrict-template-expressions.js +119 -0
- package/dist/rules/return-await.d.ts +5 -0
- package/dist/rules/return-await.js +363 -0
- package/dist/rules/sort-type-constituents.d.ts +14 -0
- package/dist/rules/sort-type-constituents.js +272 -0
- package/dist/rules/strict-boolean-expressions.d.ts +19 -0
- package/dist/rules/strict-boolean-expressions.js +882 -0
- package/dist/rules/strict-void-return.d.ts +10 -0
- package/dist/rules/strict-void-return.js +374 -0
- package/dist/rules/switch-exhaustiveness-check.d.ts +33 -0
- package/dist/rules/switch-exhaustiveness-check.js +291 -0
- package/dist/rules/triple-slash-reference.d.ts +12 -0
- package/dist/rules/triple-slash-reference.js +110 -0
- package/dist/rules/typedef.d.ts +16 -0
- package/dist/rules/typedef.js +239 -0
- package/dist/rules/unbound-method.d.ts +9 -0
- package/dist/rules/unbound-method.js +334 -0
- package/dist/rules/unified-signatures.d.ts +11 -0
- package/dist/rules/unified-signatures.js +465 -0
- package/dist/rules/use-unknown-in-catch-callback-variable.d.ts +6 -0
- package/dist/rules/use-unknown-in-catch-callback-variable.js +261 -0
- package/dist/util/assertionFunctionUtils.d.ts +16 -0
- package/dist/util/assertionFunctionUtils.js +116 -0
- package/dist/util/astUtils.d.ts +17 -0
- package/dist/util/astUtils.js +143 -0
- package/dist/util/baseTypeUtils.d.ts +13 -0
- package/dist/util/baseTypeUtils.js +75 -0
- package/dist/util/class-scope-analyzer/classScopeAnalyzer.d.ts +52 -0
- package/dist/util/class-scope-analyzer/classScopeAnalyzer.js +566 -0
- package/dist/util/class-scope-analyzer/extractComputedName.d.ts +17 -0
- package/dist/util/class-scope-analyzer/extractComputedName.js +70 -0
- package/dist/util/class-scope-analyzer/types.d.ts +12 -0
- package/dist/util/class-scope-analyzer/types.js +10 -0
- package/dist/util/collectUnusedVariables.d.ts +15 -0
- package/dist/util/collectUnusedVariables.js +598 -0
- package/dist/util/createRule.d.ts +5 -0
- package/dist/util/createRule.js +5 -0
- package/dist/util/escapeRegExp.d.ts +1 -0
- package/dist/util/escapeRegExp.js +14 -0
- package/dist/util/explicitReturnTypeUtils.d.ts +47 -0
- package/dist/util/explicitReturnTypeUtils.js +238 -0
- package/dist/util/getBaseTypesOfClassMember.d.ts +11 -0
- package/dist/util/getBaseTypesOfClassMember.js +31 -0
- package/dist/util/getConstraintInfo.d.ts +35 -0
- package/dist/util/getConstraintInfo.js +70 -0
- package/dist/util/getESLintCoreRule.d.ts +27 -0
- package/dist/util/getESLintCoreRule.js +16 -0
- package/dist/util/getFixOrSuggest.d.ts +9 -0
- package/dist/util/getFixOrSuggest.js +13 -0
- package/dist/util/getForStatementHeadLoc.d.ts +17 -0
- package/dist/util/getForStatementHeadLoc.js +26 -0
- package/dist/util/getFunctionHeadLoc.d.ts +101 -0
- package/dist/util/getFunctionHeadLoc.js +161 -0
- package/dist/util/getMemberHeadLoc.d.ts +36 -0
- package/dist/util/getMemberHeadLoc.js +79 -0
- package/dist/util/getOperatorPrecedence.d.ts +39 -0
- package/dist/util/getOperatorPrecedence.js +421 -0
- package/dist/util/getParentFunctionNode.d.ts +2 -0
- package/dist/util/getParentFunctionNode.js +18 -0
- package/dist/util/getStaticStringValue.d.ts +11 -0
- package/dist/util/getStaticStringValue.js +44 -0
- package/dist/util/getStringLength.d.ts +1 -0
- package/dist/util/getStringLength.js +14 -0
- package/dist/util/getTextWithParentheses.d.ts +3 -0
- package/dist/util/getTextWithParentheses.js +16 -0
- package/dist/util/getThisExpression.d.ts +2 -0
- package/dist/util/getThisExpression.js +24 -0
- package/dist/util/getValueOfLiteralType.d.ts +2 -0
- package/dist/util/getValueOfLiteralType.js +16 -0
- package/dist/util/getWrappedCode.d.ts +2 -0
- package/dist/util/getWrappedCode.js +6 -0
- package/dist/util/getWrappingFixer.d.ts +42 -0
- package/dist/util/getWrappingFixer.js +184 -0
- package/dist/util/hasOverloadSignatures.d.ts +6 -0
- package/dist/util/hasOverloadSignatures.js +47 -0
- package/dist/util/index.d.ts +40 -0
- package/dist/util/index.js +53 -0
- package/dist/util/isArrayMethodCallWithPredicate.d.ts +3 -0
- package/dist/util/isArrayMethodCallWithPredicate.js +64 -0
- package/dist/util/isAssignee.d.ts +2 -0
- package/dist/util/isAssignee.js +50 -0
- package/dist/util/isHigherPrecedenceThanAwait.d.ts +2 -0
- package/dist/util/isHigherPrecedenceThanAwait.js +46 -0
- package/dist/util/isNodeEqual.d.ts +2 -0
- package/dist/util/isNodeEqual.js +25 -0
- package/dist/util/isNullLiteral.d.ts +2 -0
- package/dist/util/isNullLiteral.js +7 -0
- package/dist/util/isPromiseAggregatorMethod.d.ts +3 -0
- package/dist/util/isPromiseAggregatorMethod.js +22 -0
- package/dist/util/isStartOfExpressionStatement.d.ts +7 -0
- package/dist/util/isStartOfExpressionStatement.js +22 -0
- package/dist/util/isTypeImport.d.ts +12 -0
- package/dist/util/isTypeImport.js +21 -0
- package/dist/util/isUndefinedIdentifier.d.ts +2 -0
- package/dist/util/isUndefinedIdentifier.js +7 -0
- package/dist/util/misc.d.ts +115 -0
- package/dist/util/misc.js +270 -0
- package/dist/util/needsPrecedingSemiColon.d.ts +11 -0
- package/dist/util/needsPrecedingSemiColon.js +97 -0
- package/dist/util/needsToBeAwaited.d.ts +7 -0
- package/dist/util/needsToBeAwaited.js +63 -0
- package/dist/util/objectIterators.d.ts +3 -0
- package/dist/util/objectIterators.js +25 -0
- package/dist/util/promiseUtils.d.ts +27 -0
- package/dist/util/promiseUtils.js +98 -0
- package/dist/util/rangeToLoc.d.ts +2 -0
- package/dist/util/rangeToLoc.js +9 -0
- package/dist/util/referenceContainsTypeQuery.d.ts +5 -0
- package/dist/util/referenceContainsTypeQuery.js +19 -0
- package/dist/util/scopeUtils.d.ts +3 -0
- package/dist/util/scopeUtils.js +10 -0
- package/dist/util/skipChainExpression.d.ts +2 -0
- package/dist/util/skipChainExpression.js +7 -0
- package/dist/util/truthinessUtils.d.ts +3 -0
- package/dist/util/truthinessUtils.js +60 -0
- package/dist/util/types.d.ts +2 -0
- package/dist/util/types.js +2 -0
- package/dist/util/walkStatements.d.ts +7 -0
- package/dist/util/walkStatements.js +56 -0
- package/index.d.ts +13 -0
- package/package.json +137 -0
- package/raw-plugin.d.ts +25 -0
- package/rules.d.ts +87 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
|
+
const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
|
|
6
|
+
const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-loop-func');
|
|
7
|
+
exports.default = (0, util_1.createRule)({
|
|
8
|
+
name: 'no-loop-func',
|
|
9
|
+
meta: {
|
|
10
|
+
type: 'suggestion',
|
|
11
|
+
// defaultOptions, -- base rule does not use defaultOptions
|
|
12
|
+
docs: {
|
|
13
|
+
description: 'Disallow function declarations that contain unsafe references inside loop statements',
|
|
14
|
+
extendsBaseRule: true,
|
|
15
|
+
},
|
|
16
|
+
hasSuggestions: baseRule.meta.hasSuggestions,
|
|
17
|
+
messages: baseRule.meta.messages,
|
|
18
|
+
schema: [],
|
|
19
|
+
},
|
|
20
|
+
defaultOptions: [],
|
|
21
|
+
create(context) {
|
|
22
|
+
const SKIPPED_IIFE_NODES = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* Gets the containing loop node of a specified node.
|
|
25
|
+
*
|
|
26
|
+
* We don't need to check nested functions, so this ignores those.
|
|
27
|
+
* `Scope.through` contains references of nested functions.
|
|
28
|
+
*
|
|
29
|
+
* @param node An AST node to get.
|
|
30
|
+
* @returns The containing loop node of the specified node, or `null`.
|
|
31
|
+
*/
|
|
32
|
+
function getContainingLoopNode(node) {
|
|
33
|
+
for (let currentNode = node; currentNode.parent; currentNode = currentNode.parent) {
|
|
34
|
+
const parent = currentNode.parent;
|
|
35
|
+
switch (parent.type) {
|
|
36
|
+
case utils_1.AST_NODE_TYPES.WhileStatement:
|
|
37
|
+
case utils_1.AST_NODE_TYPES.DoWhileStatement:
|
|
38
|
+
return parent;
|
|
39
|
+
case utils_1.AST_NODE_TYPES.ForStatement:
|
|
40
|
+
// `init` is outside of the loop.
|
|
41
|
+
if (parent.init !== currentNode) {
|
|
42
|
+
return parent;
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case utils_1.AST_NODE_TYPES.ForInStatement:
|
|
46
|
+
case utils_1.AST_NODE_TYPES.ForOfStatement:
|
|
47
|
+
// `right` is outside of the loop.
|
|
48
|
+
if (parent.right !== currentNode) {
|
|
49
|
+
return parent;
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
case utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
53
|
+
case utils_1.AST_NODE_TYPES.FunctionExpression:
|
|
54
|
+
case utils_1.AST_NODE_TYPES.FunctionDeclaration:
|
|
55
|
+
// We don't need to check nested functions.
|
|
56
|
+
// We need to check nested functions only in case of IIFE.
|
|
57
|
+
if (SKIPPED_IIFE_NODES.has(parent)) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
default:
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Gets the containing loop node of a given node.
|
|
69
|
+
* If the loop was nested, this returns the most outer loop.
|
|
70
|
+
* @param node A node to get. This is a loop node.
|
|
71
|
+
* @param excludedNode A node that the result node should not include.
|
|
72
|
+
* @returns The most outer loop node.
|
|
73
|
+
*/
|
|
74
|
+
function getTopLoopNode(node, excludedNode) {
|
|
75
|
+
const border = excludedNode ? excludedNode.range[1] : 0;
|
|
76
|
+
let retv = node;
|
|
77
|
+
let containingLoopNode = node;
|
|
78
|
+
while (containingLoopNode && containingLoopNode.range[0] >= border) {
|
|
79
|
+
retv = containingLoopNode;
|
|
80
|
+
containingLoopNode = getContainingLoopNode(containingLoopNode);
|
|
81
|
+
}
|
|
82
|
+
return retv;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Checks whether a given reference which refers to an upper scope's variable is
|
|
86
|
+
* safe or not.
|
|
87
|
+
* @param loopNode A containing loop node.
|
|
88
|
+
* @param reference A reference to check.
|
|
89
|
+
* @returns `true` if the reference is safe or not.
|
|
90
|
+
*/
|
|
91
|
+
function isSafe(loopNode, reference) {
|
|
92
|
+
const variable = reference.resolved;
|
|
93
|
+
const definition = variable?.defs[0];
|
|
94
|
+
const declaration = definition?.parent;
|
|
95
|
+
const kind = declaration?.type === utils_1.AST_NODE_TYPES.VariableDeclaration
|
|
96
|
+
? declaration.kind
|
|
97
|
+
: '';
|
|
98
|
+
// type references are all safe
|
|
99
|
+
// this only really matters for global types that haven't been configured
|
|
100
|
+
if (reference.isTypeReference) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
// Variables which are declared by `const` is safe.
|
|
104
|
+
if (kind === 'const') {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
/*
|
|
108
|
+
* Variables which are declared by `let` in the loop is safe.
|
|
109
|
+
* It's a different instance from the next loop step's.
|
|
110
|
+
*/
|
|
111
|
+
if (kind === 'let' &&
|
|
112
|
+
declaration &&
|
|
113
|
+
declaration.range[0] > loopNode.range[0] &&
|
|
114
|
+
declaration.range[1] < loopNode.range[1]) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
/*
|
|
118
|
+
* WriteReferences which exist after this border are unsafe because those
|
|
119
|
+
* can modify the variable.
|
|
120
|
+
*/
|
|
121
|
+
const border = getTopLoopNode(loopNode, kind === 'let' ? declaration : null).range[0];
|
|
122
|
+
/**
|
|
123
|
+
* Checks whether a given reference is safe or not.
|
|
124
|
+
* The reference is every reference of the upper scope's variable we are
|
|
125
|
+
* looking now.
|
|
126
|
+
*
|
|
127
|
+
* It's safe if the reference matches one of the following condition.
|
|
128
|
+
* - is readonly.
|
|
129
|
+
* - doesn't exist inside a local function and after the border.
|
|
130
|
+
*
|
|
131
|
+
* @param upperRef A reference to check.
|
|
132
|
+
* @returns `true` if the reference is safe.
|
|
133
|
+
*/
|
|
134
|
+
function isSafeReference(upperRef) {
|
|
135
|
+
const id = upperRef.identifier;
|
|
136
|
+
return (!upperRef.isWrite() ||
|
|
137
|
+
(variable?.scope.variableScope === upperRef.from.variableScope &&
|
|
138
|
+
id.range[0] < border));
|
|
139
|
+
}
|
|
140
|
+
return variable?.references.every(isSafeReference) ?? false;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reports functions which match the following condition:
|
|
144
|
+
* - has a loop node in ancestors.
|
|
145
|
+
* - has any references which refers to an unsafe variable.
|
|
146
|
+
*
|
|
147
|
+
* @param node The AST node to check.
|
|
148
|
+
*/
|
|
149
|
+
function checkForLoops(node) {
|
|
150
|
+
const loopNode = getContainingLoopNode(node);
|
|
151
|
+
if (!loopNode) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const references = context.sourceCode.getScope(node).through;
|
|
155
|
+
if (!(node.async || node.generator) && isIIFE(node)) {
|
|
156
|
+
const isFunctionExpression = node.type === utils_1.AST_NODE_TYPES.FunctionExpression;
|
|
157
|
+
// Check if the function is referenced elsewhere in the code
|
|
158
|
+
const isFunctionReferenced = isFunctionExpression && node.id
|
|
159
|
+
? references.some(r => r.identifier.name === node.id?.name)
|
|
160
|
+
: false;
|
|
161
|
+
if (!isFunctionReferenced) {
|
|
162
|
+
SKIPPED_IIFE_NODES.add(node);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const unsafeRefs = references
|
|
167
|
+
.filter(r => r.resolved && !isSafe(loopNode, r))
|
|
168
|
+
.map(r => r.identifier.name);
|
|
169
|
+
if (unsafeRefs.length > 0) {
|
|
170
|
+
context.report({
|
|
171
|
+
node,
|
|
172
|
+
messageId: 'unsafeRefs',
|
|
173
|
+
data: { varNames: `'${unsafeRefs.join("', '")}'` },
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
ArrowFunctionExpression: checkForLoops,
|
|
179
|
+
FunctionDeclaration: checkForLoops,
|
|
180
|
+
FunctionExpression: checkForLoops,
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
function isIIFE(node) {
|
|
185
|
+
return (node.parent.type === utils_1.AST_NODE_TYPES.CallExpression &&
|
|
186
|
+
node.parent.callee === node);
|
|
187
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InferMessageIdsTypeFromRule, InferOptionsTypeFromRule } from '../util';
|
|
2
|
+
import { getESLintCoreRule } from '../util/getESLintCoreRule';
|
|
3
|
+
declare const baseRule: ReturnType<typeof getESLintCoreRule>;
|
|
4
|
+
export type Options = InferOptionsTypeFromRule<NonNullable<typeof baseRule>>;
|
|
5
|
+
export type MessageIds = InferMessageIdsTypeFromRule<NonNullable<typeof baseRule>>;
|
|
6
|
+
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noLossOfPrecision", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const util_1 = require("../util");
|
|
4
|
+
const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
|
|
5
|
+
const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-loss-of-precision');
|
|
6
|
+
exports.default = (0, util_1.createRule)({
|
|
7
|
+
name: 'no-loss-of-precision',
|
|
8
|
+
meta: {
|
|
9
|
+
type: 'problem',
|
|
10
|
+
// defaultOptions, -- base rule does not use defaultOptions
|
|
11
|
+
deprecated: {
|
|
12
|
+
deprecatedSince: '8.0.0',
|
|
13
|
+
replacedBy: [
|
|
14
|
+
{
|
|
15
|
+
rule: {
|
|
16
|
+
name: 'no-loss-of-precision',
|
|
17
|
+
url: 'https://eslint.org/docs/latest/rules/no-loss-of-precision',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
url: 'https://github.com/typescript-eslint/typescript-eslint/pull/8832',
|
|
22
|
+
},
|
|
23
|
+
docs: {
|
|
24
|
+
description: 'Disallow literal numbers that lose precision',
|
|
25
|
+
extendsBaseRule: true,
|
|
26
|
+
},
|
|
27
|
+
hasSuggestions: baseRule.meta.hasSuggestions,
|
|
28
|
+
messages: baseRule.meta.messages,
|
|
29
|
+
schema: [],
|
|
30
|
+
},
|
|
31
|
+
defaultOptions: [],
|
|
32
|
+
create(context) {
|
|
33
|
+
return baseRule.create(context);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { TSESTree } from '@typescript-eslint/utils';
|
|
2
|
+
import type { InferMessageIdsTypeFromRule, InferOptionsTypeFromRule } from '../util';
|
|
3
|
+
declare const baseRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noMagic", [{
|
|
4
|
+
detectObjects?: boolean;
|
|
5
|
+
enforceConst?: boolean;
|
|
6
|
+
ignore?: (number | string)[];
|
|
7
|
+
ignoreArrayIndexes?: boolean;
|
|
8
|
+
ignoreEnums?: boolean;
|
|
9
|
+
ignoreNumericLiteralTypes?: boolean;
|
|
10
|
+
ignoreReadonlyClassProperties?: boolean;
|
|
11
|
+
ignoreTypeIndexes?: boolean;
|
|
12
|
+
}], unknown, {
|
|
13
|
+
Literal(node: TSESTree.Literal): void;
|
|
14
|
+
}>;
|
|
15
|
+
export type Options = InferOptionsTypeFromRule<typeof baseRule>;
|
|
16
|
+
export type MessageIds = InferMessageIdsTypeFromRule<typeof baseRule>;
|
|
17
|
+
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noMagic", [{
|
|
18
|
+
detectObjects?: boolean;
|
|
19
|
+
enforceConst?: boolean;
|
|
20
|
+
ignore?: (number | string)[];
|
|
21
|
+
ignoreArrayIndexes?: boolean;
|
|
22
|
+
ignoreEnums?: boolean;
|
|
23
|
+
ignoreNumericLiteralTypes?: boolean;
|
|
24
|
+
ignoreReadonlyClassProperties?: boolean;
|
|
25
|
+
ignoreTypeIndexes?: boolean;
|
|
26
|
+
}], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
export default _default;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
|
+
const util_1 = require("../util");
|
|
5
|
+
const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
|
|
6
|
+
const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('no-magic-numbers');
|
|
7
|
+
// Extend base schema with additional property to ignore TS numeric literal types
|
|
8
|
+
const schema = (0, util_1.deepMerge)(
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- https://github.com/microsoft/TypeScript/issues/17002
|
|
10
|
+
Array.isArray(baseRule.meta.schema)
|
|
11
|
+
? baseRule.meta.schema[0]
|
|
12
|
+
: baseRule.meta.schema, {
|
|
13
|
+
properties: {
|
|
14
|
+
ignoreEnums: {
|
|
15
|
+
type: 'boolean',
|
|
16
|
+
description: 'Whether enums used in TypeScript are considered okay.',
|
|
17
|
+
},
|
|
18
|
+
ignoreNumericLiteralTypes: {
|
|
19
|
+
type: 'boolean',
|
|
20
|
+
description: 'Whether numbers used in TypeScript numeric literal types are considered okay.',
|
|
21
|
+
},
|
|
22
|
+
ignoreReadonlyClassProperties: {
|
|
23
|
+
type: 'boolean',
|
|
24
|
+
description: 'Whether `readonly` class properties are considered okay.',
|
|
25
|
+
},
|
|
26
|
+
ignoreTypeIndexes: {
|
|
27
|
+
type: 'boolean',
|
|
28
|
+
description: 'Whether numbers used to index types are okay.',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
exports.default = (0, util_1.createRule)({
|
|
33
|
+
name: 'no-magic-numbers',
|
|
34
|
+
meta: {
|
|
35
|
+
type: 'suggestion',
|
|
36
|
+
// defaultOptions, -- base rule does not use defaultOptions
|
|
37
|
+
docs: {
|
|
38
|
+
description: 'Disallow magic numbers',
|
|
39
|
+
extendsBaseRule: true,
|
|
40
|
+
frozen: true,
|
|
41
|
+
},
|
|
42
|
+
messages: baseRule.meta.messages,
|
|
43
|
+
schema: [schema],
|
|
44
|
+
},
|
|
45
|
+
defaultOptions: [
|
|
46
|
+
{
|
|
47
|
+
detectObjects: false,
|
|
48
|
+
enforceConst: false,
|
|
49
|
+
ignore: [],
|
|
50
|
+
ignoreArrayIndexes: false,
|
|
51
|
+
ignoreEnums: false,
|
|
52
|
+
ignoreNumericLiteralTypes: false,
|
|
53
|
+
ignoreReadonlyClassProperties: false,
|
|
54
|
+
ignoreTypeIndexes: false,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
create(context, [options]) {
|
|
58
|
+
const rules = baseRule.create(context);
|
|
59
|
+
const ignored = new Set((options.ignore ?? []).map(normalizeIgnoreValue));
|
|
60
|
+
return {
|
|
61
|
+
Literal(node) {
|
|
62
|
+
// If it’s not a numeric literal we’re not interested
|
|
63
|
+
if (typeof node.value !== 'number' && typeof node.value !== 'bigint') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// This will be `true` if we’re configured to ignore this case (eg. it’s
|
|
67
|
+
// an enum and `ignoreEnums` is `true`). It will be `false` if we’re not
|
|
68
|
+
// configured to ignore this case. It will remain `undefined` if this is
|
|
69
|
+
// not one of our exception cases, and we’ll fall back to the base rule.
|
|
70
|
+
let isAllowed;
|
|
71
|
+
// Check if the node is ignored
|
|
72
|
+
if (ignored.has(normalizeLiteralValue(node, node.value))) {
|
|
73
|
+
isAllowed = true;
|
|
74
|
+
}
|
|
75
|
+
// Check if the node is a TypeScript enum declaration
|
|
76
|
+
else if (isParentTSEnumDeclaration(node)) {
|
|
77
|
+
isAllowed = options.ignoreEnums === true;
|
|
78
|
+
}
|
|
79
|
+
// Check TypeScript specific nodes for Numeric Literal
|
|
80
|
+
else if (isTSNumericLiteralType(node)) {
|
|
81
|
+
isAllowed = options.ignoreNumericLiteralTypes === true;
|
|
82
|
+
}
|
|
83
|
+
// Check if the node is a type index
|
|
84
|
+
else if (isAncestorTSIndexedAccessType(node)) {
|
|
85
|
+
isAllowed = options.ignoreTypeIndexes === true;
|
|
86
|
+
}
|
|
87
|
+
// Check if the node is a readonly class property
|
|
88
|
+
else if (isParentTSReadonlyPropertyDefinition(node)) {
|
|
89
|
+
isAllowed = options.ignoreReadonlyClassProperties === true;
|
|
90
|
+
}
|
|
91
|
+
// If we’ve hit a case where the ignore option is true we can return now
|
|
92
|
+
if (isAllowed === true) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// If the ignore option is *not* set we can report it now
|
|
96
|
+
if (isAllowed === false) {
|
|
97
|
+
let fullNumberNode = node;
|
|
98
|
+
let raw = node.raw;
|
|
99
|
+
if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
|
|
100
|
+
// the base rule only shows the operator for negative numbers
|
|
101
|
+
// https://github.com/eslint/eslint/blob/9dfc8501fb1956c90dc11e6377b4cb38a6bea65d/lib/rules/no-magic-numbers.js#L126
|
|
102
|
+
node.parent.operator === '-') {
|
|
103
|
+
fullNumberNode = node.parent;
|
|
104
|
+
raw = `${node.parent.operator}${node.raw}`;
|
|
105
|
+
}
|
|
106
|
+
context.report({
|
|
107
|
+
node: fullNumberNode,
|
|
108
|
+
messageId: 'noMagic',
|
|
109
|
+
data: { raw },
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Let the base rule deal with the rest
|
|
114
|
+
rules.Literal(node);
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Convert the value to bigint if it's a string. Otherwise, return the value as-is.
|
|
121
|
+
* @param value The value to normalize.
|
|
122
|
+
* @returns The normalized value.
|
|
123
|
+
*/
|
|
124
|
+
function normalizeIgnoreValue(value) {
|
|
125
|
+
if (typeof value === 'string') {
|
|
126
|
+
return BigInt(value.slice(0, -1));
|
|
127
|
+
}
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Converts the node to its numeric value, handling prefixed numbers (-1 / +1)
|
|
132
|
+
* @param node the node to normalize.
|
|
133
|
+
* @param value the node's value.
|
|
134
|
+
*/
|
|
135
|
+
function normalizeLiteralValue(node, value) {
|
|
136
|
+
if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
|
|
137
|
+
['-', '+'].includes(node.parent.operator) &&
|
|
138
|
+
node.parent.operator === '-') {
|
|
139
|
+
return -value;
|
|
140
|
+
}
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets the true parent of the literal, handling prefixed numbers (-1 / +1)
|
|
145
|
+
*/
|
|
146
|
+
function getLiteralParent(node) {
|
|
147
|
+
if (node.parent.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
|
|
148
|
+
['-', '+'].includes(node.parent.operator)) {
|
|
149
|
+
return node.parent.parent;
|
|
150
|
+
}
|
|
151
|
+
return node.parent;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Checks if the node grandparent is a Typescript type alias declaration
|
|
155
|
+
* @param node the node to be validated.
|
|
156
|
+
* @returns true if the node grandparent is a Typescript type alias declaration
|
|
157
|
+
* @private
|
|
158
|
+
*/
|
|
159
|
+
function isGrandparentTSTypeAliasDeclaration(node) {
|
|
160
|
+
return node.parent?.parent?.type === utils_1.AST_NODE_TYPES.TSTypeAliasDeclaration;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Checks if the node grandparent is a Typescript union type and its parent is a type alias declaration
|
|
164
|
+
* @param node the node to be validated.
|
|
165
|
+
* @returns true if the node grandparent is a Typescript union type and its parent is a type alias declaration
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
function isGrandparentTSUnionType(node) {
|
|
169
|
+
if (node.parent?.parent?.type === utils_1.AST_NODE_TYPES.TSUnionType) {
|
|
170
|
+
return isGrandparentTSTypeAliasDeclaration(node.parent);
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Checks if the node parent is a Typescript enum member
|
|
176
|
+
* @param node the node to be validated.
|
|
177
|
+
* @returns true if the node parent is a Typescript enum member
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
function isParentTSEnumDeclaration(node) {
|
|
181
|
+
const parent = getLiteralParent(node);
|
|
182
|
+
return parent?.type === utils_1.AST_NODE_TYPES.TSEnumMember;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Checks if the node parent is a Typescript literal type
|
|
186
|
+
* @param node the node to be validated.
|
|
187
|
+
* @returns true if the node parent is a Typescript literal type
|
|
188
|
+
* @private
|
|
189
|
+
*/
|
|
190
|
+
function isParentTSLiteralType(node) {
|
|
191
|
+
return node.parent?.type === utils_1.AST_NODE_TYPES.TSLiteralType;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Checks if the node is a valid TypeScript numeric literal type.
|
|
195
|
+
* @param node the node to be validated.
|
|
196
|
+
* @returns true if the node is a TypeScript numeric literal type.
|
|
197
|
+
* @private
|
|
198
|
+
*/
|
|
199
|
+
function isTSNumericLiteralType(node) {
|
|
200
|
+
// For negative numbers, use the parent node
|
|
201
|
+
if (node.parent?.type === utils_1.AST_NODE_TYPES.UnaryExpression &&
|
|
202
|
+
node.parent.operator === '-') {
|
|
203
|
+
node = node.parent;
|
|
204
|
+
}
|
|
205
|
+
// If the parent node is not a TSLiteralType, early return
|
|
206
|
+
if (!isParentTSLiteralType(node)) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
// If the grandparent is a TSTypeAliasDeclaration, ignore
|
|
210
|
+
if (isGrandparentTSTypeAliasDeclaration(node)) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
// If the grandparent is a TSUnionType and it's parent is a TSTypeAliasDeclaration, ignore
|
|
214
|
+
if (isGrandparentTSUnionType(node)) {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Checks if the node parent is a readonly class property
|
|
221
|
+
* @param node the node to be validated.
|
|
222
|
+
* @returns true if the node parent is a readonly class property
|
|
223
|
+
* @private
|
|
224
|
+
*/
|
|
225
|
+
function isParentTSReadonlyPropertyDefinition(node) {
|
|
226
|
+
const parent = getLiteralParent(node);
|
|
227
|
+
if (parent?.type === utils_1.AST_NODE_TYPES.PropertyDefinition && parent.readonly) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Checks if the node is part of a type indexed access (eg. Foo[4])
|
|
234
|
+
* @param node the node to be validated.
|
|
235
|
+
* @returns true if the node is part of an indexed access
|
|
236
|
+
* @private
|
|
237
|
+
*/
|
|
238
|
+
function isAncestorTSIndexedAccessType(node) {
|
|
239
|
+
// Handle unary expressions (eg. -4)
|
|
240
|
+
let ancestor = getLiteralParent(node);
|
|
241
|
+
// Go up another level while we’re part of a type union (eg. 1 | 2) or
|
|
242
|
+
// intersection (eg. 1 & 2)
|
|
243
|
+
while (ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSUnionType ||
|
|
244
|
+
ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSIntersectionType) {
|
|
245
|
+
ancestor = ancestor.parent;
|
|
246
|
+
}
|
|
247
|
+
return ancestor?.parent?.type === utils_1.AST_NODE_TYPES.TSIndexedAccessType;
|
|
248
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TSESLint } from '@typescript-eslint/utils';
|
|
2
|
+
export type Options = [
|
|
3
|
+
{
|
|
4
|
+
checkNever: boolean;
|
|
5
|
+
}
|
|
6
|
+
];
|
|
7
|
+
declare const _default: TSESLint.RuleModule<"meaninglessVoidOperator" | "removeVoid", Options, import("../../rules").ESLintPluginDocs, TSESLint.RuleListener> & {
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
37
|
+
const tsutils = __importStar(require("ts-api-utils"));
|
|
38
|
+
const ts = __importStar(require("typescript"));
|
|
39
|
+
const util_1 = require("../util");
|
|
40
|
+
exports.default = (0, util_1.createRule)({
|
|
41
|
+
name: 'no-meaningless-void-operator',
|
|
42
|
+
meta: {
|
|
43
|
+
type: 'suggestion',
|
|
44
|
+
docs: {
|
|
45
|
+
description: 'Disallow the `void` operator except when used to discard a value',
|
|
46
|
+
recommended: 'strict',
|
|
47
|
+
requiresTypeChecking: true,
|
|
48
|
+
},
|
|
49
|
+
fixable: 'code',
|
|
50
|
+
hasSuggestions: true,
|
|
51
|
+
messages: {
|
|
52
|
+
meaninglessVoidOperator: "void operator shouldn't be used on {{type}}; it should convey that a return value is being ignored",
|
|
53
|
+
removeVoid: "Remove 'void'",
|
|
54
|
+
},
|
|
55
|
+
schema: [
|
|
56
|
+
{
|
|
57
|
+
type: 'object',
|
|
58
|
+
additionalProperties: false,
|
|
59
|
+
properties: {
|
|
60
|
+
checkNever: {
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
description: 'Whether to suggest removing `void` when the argument has type `never`.',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
defaultOptions: [{ checkNever: false }],
|
|
69
|
+
create(context, [{ checkNever }]) {
|
|
70
|
+
const services = utils_1.ESLintUtils.getParserServices(context);
|
|
71
|
+
const checker = services.program.getTypeChecker();
|
|
72
|
+
return {
|
|
73
|
+
'UnaryExpression[operator="void"]'(node) {
|
|
74
|
+
const fix = (fixer) => {
|
|
75
|
+
return fixer.removeRange([
|
|
76
|
+
context.sourceCode.getTokens(node)[0].range[0],
|
|
77
|
+
context.sourceCode.getTokens(node)[1].range[0],
|
|
78
|
+
]);
|
|
79
|
+
};
|
|
80
|
+
const argType = services.getTypeAtLocation(node.argument);
|
|
81
|
+
const unionParts = tsutils.unionConstituents(argType);
|
|
82
|
+
if (unionParts.every(part => tsutils.isTypeFlagSet(part, ts.TypeFlags.Void | ts.TypeFlags.Undefined))) {
|
|
83
|
+
context.report({
|
|
84
|
+
node,
|
|
85
|
+
messageId: 'meaninglessVoidOperator',
|
|
86
|
+
data: { type: checker.typeToString(argType) },
|
|
87
|
+
fix,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else if (checkNever &&
|
|
91
|
+
unionParts.every(part => tsutils.isTypeFlagSet(part, ts.TypeFlags.Void | ts.TypeFlags.Undefined | ts.TypeFlags.Never))) {
|
|
92
|
+
context.report({
|
|
93
|
+
node,
|
|
94
|
+
messageId: 'meaninglessVoidOperator',
|
|
95
|
+
data: { type: checker.typeToString(argType) },
|
|
96
|
+
suggest: [{ messageId: 'removeVoid', fix }],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"errorMessageClass" | "errorMessageInterface", [], import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
2
|
+
name: string;
|
|
3
|
+
};
|
|
4
|
+
export default _default;
|