@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,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodeComparisonResult = void 0;
|
|
4
|
+
exports.compareNodes = compareNodes;
|
|
5
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
6
|
+
const visitor_keys_1 = require("@typescript-eslint/visitor-keys");
|
|
7
|
+
var NodeComparisonResult;
|
|
8
|
+
(function (NodeComparisonResult) {
|
|
9
|
+
/** the two nodes are comparably the same */
|
|
10
|
+
NodeComparisonResult["Equal"] = "Equal";
|
|
11
|
+
/** the left node is a subset of the right node */
|
|
12
|
+
NodeComparisonResult["Subset"] = "Subset";
|
|
13
|
+
/** the left node is not the same or is a superset of the right node */
|
|
14
|
+
NodeComparisonResult["Invalid"] = "Invalid";
|
|
15
|
+
})(NodeComparisonResult || (exports.NodeComparisonResult = NodeComparisonResult = {}));
|
|
16
|
+
function compareArrays(arrayA, arrayB) {
|
|
17
|
+
if (arrayA.length !== arrayB.length) {
|
|
18
|
+
return NodeComparisonResult.Invalid;
|
|
19
|
+
}
|
|
20
|
+
const result = arrayA.every((elA, idx) => {
|
|
21
|
+
const elB = arrayB[idx];
|
|
22
|
+
if (elA == null || elB == null) {
|
|
23
|
+
return elA === elB;
|
|
24
|
+
}
|
|
25
|
+
return compareUnknownValues(elA, elB) === NodeComparisonResult.Equal;
|
|
26
|
+
});
|
|
27
|
+
if (result) {
|
|
28
|
+
return NodeComparisonResult.Equal;
|
|
29
|
+
}
|
|
30
|
+
return NodeComparisonResult.Invalid;
|
|
31
|
+
}
|
|
32
|
+
function isValidNode(x) {
|
|
33
|
+
return (typeof x === 'object' &&
|
|
34
|
+
x != null &&
|
|
35
|
+
'type' in x &&
|
|
36
|
+
typeof x.type === 'string');
|
|
37
|
+
}
|
|
38
|
+
function isValidChainExpressionToLookThrough(node) {
|
|
39
|
+
return (!(node.parent?.type === utils_1.AST_NODE_TYPES.MemberExpression &&
|
|
40
|
+
node.parent.object === node) &&
|
|
41
|
+
!(node.parent?.type === utils_1.AST_NODE_TYPES.CallExpression &&
|
|
42
|
+
node.parent.callee === node) &&
|
|
43
|
+
node.type === utils_1.AST_NODE_TYPES.ChainExpression);
|
|
44
|
+
}
|
|
45
|
+
function compareUnknownValues(valueA, valueB) {
|
|
46
|
+
/* istanbul ignore if -- not possible for us to test this - it's just a sanity safeguard */
|
|
47
|
+
if (valueA == null || valueB == null) {
|
|
48
|
+
if (valueA !== valueB) {
|
|
49
|
+
return NodeComparisonResult.Invalid;
|
|
50
|
+
}
|
|
51
|
+
return NodeComparisonResult.Equal;
|
|
52
|
+
}
|
|
53
|
+
/* istanbul ignore if -- not possible for us to test this - it's just a sanity safeguard */
|
|
54
|
+
if (!isValidNode(valueA) || !isValidNode(valueB)) {
|
|
55
|
+
return NodeComparisonResult.Invalid;
|
|
56
|
+
}
|
|
57
|
+
return compareNodes(valueA, valueB);
|
|
58
|
+
}
|
|
59
|
+
function compareByVisiting(nodeA, nodeB) {
|
|
60
|
+
const currentVisitorKeys = visitor_keys_1.visitorKeys[nodeA.type];
|
|
61
|
+
/* istanbul ignore if -- not possible for us to test this - it's just a sanity safeguard */
|
|
62
|
+
if (currentVisitorKeys == null) {
|
|
63
|
+
// we don't know how to visit this node, so assume it's invalid to avoid false-positives / broken fixers
|
|
64
|
+
return NodeComparisonResult.Invalid;
|
|
65
|
+
}
|
|
66
|
+
if (currentVisitorKeys.length === 0) {
|
|
67
|
+
// assume nodes with no keys are constant things like keywords
|
|
68
|
+
return NodeComparisonResult.Equal;
|
|
69
|
+
}
|
|
70
|
+
for (const key of currentVisitorKeys) {
|
|
71
|
+
// @ts-expect-error - dynamic access but it's safe
|
|
72
|
+
const nodeAChildOrChildren = nodeA[key];
|
|
73
|
+
// @ts-expect-error - dynamic access but it's safe
|
|
74
|
+
const nodeBChildOrChildren = nodeB[key];
|
|
75
|
+
if (Array.isArray(nodeAChildOrChildren)) {
|
|
76
|
+
const arrayA = nodeAChildOrChildren;
|
|
77
|
+
const arrayB = nodeBChildOrChildren;
|
|
78
|
+
const result = compareArrays(arrayA, arrayB);
|
|
79
|
+
if (result !== NodeComparisonResult.Equal) {
|
|
80
|
+
return NodeComparisonResult.Invalid;
|
|
81
|
+
}
|
|
82
|
+
// fallthrough to the next key as the key was "equal"
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const result = compareUnknownValues(nodeAChildOrChildren, nodeBChildOrChildren);
|
|
86
|
+
if (result !== NodeComparisonResult.Equal) {
|
|
87
|
+
return NodeComparisonResult.Invalid;
|
|
88
|
+
}
|
|
89
|
+
// fallthrough to the next key as the key was "equal"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return NodeComparisonResult.Equal;
|
|
93
|
+
}
|
|
94
|
+
function compareNodesUncached(nodeA, nodeB) {
|
|
95
|
+
if (nodeA.type !== nodeB.type) {
|
|
96
|
+
// special cases where nodes are allowed to be non-equal
|
|
97
|
+
// look through a chain expression node at the top-level because it only
|
|
98
|
+
// exists to delimit the end of an optional chain
|
|
99
|
+
//
|
|
100
|
+
// a?.b && a.b.c
|
|
101
|
+
// ^^^^ ChainExpression, MemberExpression
|
|
102
|
+
// ^^^^^ MemberExpression
|
|
103
|
+
//
|
|
104
|
+
// except for in this class of cases
|
|
105
|
+
// (a?.b).c && a.b.c
|
|
106
|
+
// because the parentheses have runtime meaning (sad face)
|
|
107
|
+
if (isValidChainExpressionToLookThrough(nodeA)) {
|
|
108
|
+
return compareNodes(nodeA.expression, nodeB);
|
|
109
|
+
}
|
|
110
|
+
if (isValidChainExpressionToLookThrough(nodeB)) {
|
|
111
|
+
return compareNodes(nodeA, nodeB.expression);
|
|
112
|
+
}
|
|
113
|
+
// look through the type-only non-null assertion because its existence could
|
|
114
|
+
// possibly be replaced by an optional chain instead
|
|
115
|
+
//
|
|
116
|
+
// a.b! && a.b.c
|
|
117
|
+
// ^^^^ TSNonNullExpression
|
|
118
|
+
if (nodeA.type === utils_1.AST_NODE_TYPES.TSNonNullExpression) {
|
|
119
|
+
return compareNodes(nodeA.expression, nodeB);
|
|
120
|
+
}
|
|
121
|
+
if (nodeB.type === utils_1.AST_NODE_TYPES.TSNonNullExpression) {
|
|
122
|
+
return compareNodes(nodeA, nodeB.expression);
|
|
123
|
+
}
|
|
124
|
+
// special case for subset optional chains where the node types don't match,
|
|
125
|
+
// but we want to try comparing by discarding the "extra" code
|
|
126
|
+
//
|
|
127
|
+
// a && a.b
|
|
128
|
+
// ^ compare this
|
|
129
|
+
// a && a()
|
|
130
|
+
// ^ compare this
|
|
131
|
+
// a.b && a.b()
|
|
132
|
+
// ^^^ compare this
|
|
133
|
+
// a() && a().b
|
|
134
|
+
// ^^^ compare this
|
|
135
|
+
// import.meta && import.meta.b
|
|
136
|
+
// ^^^^^^^^^^^ compare this
|
|
137
|
+
if (nodeA.type === utils_1.AST_NODE_TYPES.CallExpression ||
|
|
138
|
+
nodeA.type === utils_1.AST_NODE_TYPES.Identifier ||
|
|
139
|
+
nodeA.type === utils_1.AST_NODE_TYPES.MemberExpression ||
|
|
140
|
+
nodeA.type === utils_1.AST_NODE_TYPES.MetaProperty) {
|
|
141
|
+
switch (nodeB.type) {
|
|
142
|
+
case utils_1.AST_NODE_TYPES.MemberExpression:
|
|
143
|
+
if (nodeB.property.type === utils_1.AST_NODE_TYPES.PrivateIdentifier) {
|
|
144
|
+
// Private identifiers in optional chaining is not currently allowed
|
|
145
|
+
// TODO - handle this once TS supports it (https://github.com/microsoft/TypeScript/issues/42734)
|
|
146
|
+
return NodeComparisonResult.Invalid;
|
|
147
|
+
}
|
|
148
|
+
if (compareNodes(nodeA, nodeB.object) !== NodeComparisonResult.Invalid) {
|
|
149
|
+
return NodeComparisonResult.Subset;
|
|
150
|
+
}
|
|
151
|
+
return NodeComparisonResult.Invalid;
|
|
152
|
+
case utils_1.AST_NODE_TYPES.CallExpression:
|
|
153
|
+
if (compareNodes(nodeA, nodeB.callee) !== NodeComparisonResult.Invalid) {
|
|
154
|
+
return NodeComparisonResult.Subset;
|
|
155
|
+
}
|
|
156
|
+
return NodeComparisonResult.Invalid;
|
|
157
|
+
default:
|
|
158
|
+
return NodeComparisonResult.Invalid;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return NodeComparisonResult.Invalid;
|
|
162
|
+
}
|
|
163
|
+
switch (nodeA.type) {
|
|
164
|
+
// these expressions create a new instance each time - so it makes no sense to compare the chain
|
|
165
|
+
case utils_1.AST_NODE_TYPES.ArrayExpression:
|
|
166
|
+
case utils_1.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
167
|
+
case utils_1.AST_NODE_TYPES.ClassExpression:
|
|
168
|
+
case utils_1.AST_NODE_TYPES.FunctionExpression:
|
|
169
|
+
case utils_1.AST_NODE_TYPES.JSXElement:
|
|
170
|
+
case utils_1.AST_NODE_TYPES.JSXFragment:
|
|
171
|
+
case utils_1.AST_NODE_TYPES.NewExpression:
|
|
172
|
+
case utils_1.AST_NODE_TYPES.ObjectExpression:
|
|
173
|
+
return NodeComparisonResult.Invalid;
|
|
174
|
+
// chaining from assignments could change the value irrevocably - so it makes no sense to compare the chain
|
|
175
|
+
case utils_1.AST_NODE_TYPES.AssignmentExpression:
|
|
176
|
+
return NodeComparisonResult.Invalid;
|
|
177
|
+
case utils_1.AST_NODE_TYPES.CallExpression: {
|
|
178
|
+
const nodeBCall = nodeB;
|
|
179
|
+
// check for cases like
|
|
180
|
+
// foo() && foo()(bar)
|
|
181
|
+
// ^^^^^ nodeA
|
|
182
|
+
// ^^^^^^^^^^ nodeB
|
|
183
|
+
// we don't want to check the arguments in this case
|
|
184
|
+
const aSubsetOfB = compareNodes(nodeA, nodeBCall.callee);
|
|
185
|
+
if (aSubsetOfB !== NodeComparisonResult.Invalid) {
|
|
186
|
+
return NodeComparisonResult.Subset;
|
|
187
|
+
}
|
|
188
|
+
const calleeCompare = compareNodes(nodeA.callee, nodeBCall.callee);
|
|
189
|
+
if (calleeCompare !== NodeComparisonResult.Equal) {
|
|
190
|
+
return NodeComparisonResult.Invalid;
|
|
191
|
+
}
|
|
192
|
+
// NOTE - we purposely ignore optional flag because for our purposes
|
|
193
|
+
// foo?.bar() && foo.bar?.()?.baz
|
|
194
|
+
// or
|
|
195
|
+
// foo.bar() && foo?.bar?.()?.baz
|
|
196
|
+
// are going to be exactly the same
|
|
197
|
+
const argumentCompare = compareArrays(nodeA.arguments, nodeBCall.arguments);
|
|
198
|
+
if (argumentCompare !== NodeComparisonResult.Equal) {
|
|
199
|
+
return NodeComparisonResult.Invalid;
|
|
200
|
+
}
|
|
201
|
+
const typeParamCompare = compareNodes(nodeA.typeArguments, nodeBCall.typeArguments);
|
|
202
|
+
if (typeParamCompare === NodeComparisonResult.Equal) {
|
|
203
|
+
return NodeComparisonResult.Equal;
|
|
204
|
+
}
|
|
205
|
+
return NodeComparisonResult.Invalid;
|
|
206
|
+
}
|
|
207
|
+
case utils_1.AST_NODE_TYPES.ChainExpression:
|
|
208
|
+
// special case handling for ChainExpression because it's allowed to be a subset
|
|
209
|
+
return compareNodes(nodeA, nodeB.expression);
|
|
210
|
+
case utils_1.AST_NODE_TYPES.Identifier:
|
|
211
|
+
case utils_1.AST_NODE_TYPES.PrivateIdentifier:
|
|
212
|
+
if (nodeA.name === nodeB.name) {
|
|
213
|
+
return NodeComparisonResult.Equal;
|
|
214
|
+
}
|
|
215
|
+
return NodeComparisonResult.Invalid;
|
|
216
|
+
case utils_1.AST_NODE_TYPES.Literal: {
|
|
217
|
+
const nodeBLiteral = nodeB;
|
|
218
|
+
if (nodeA.raw === nodeBLiteral.raw &&
|
|
219
|
+
nodeA.value === nodeBLiteral.value) {
|
|
220
|
+
return NodeComparisonResult.Equal;
|
|
221
|
+
}
|
|
222
|
+
return NodeComparisonResult.Invalid;
|
|
223
|
+
}
|
|
224
|
+
case utils_1.AST_NODE_TYPES.MemberExpression: {
|
|
225
|
+
const nodeBMember = nodeB;
|
|
226
|
+
if (nodeBMember.property.type === utils_1.AST_NODE_TYPES.PrivateIdentifier) {
|
|
227
|
+
// Private identifiers in optional chaining is not currently allowed
|
|
228
|
+
// TODO - handle this once TS supports it (https://github.com/microsoft/TypeScript/issues/42734)
|
|
229
|
+
return NodeComparisonResult.Invalid;
|
|
230
|
+
}
|
|
231
|
+
// check for cases like
|
|
232
|
+
// foo.bar && foo.bar.baz
|
|
233
|
+
// ^^^^^^^ nodeA
|
|
234
|
+
// ^^^^^^^^^^^ nodeB
|
|
235
|
+
// result === Equal
|
|
236
|
+
//
|
|
237
|
+
// foo.bar && foo.bar.baz.bam
|
|
238
|
+
// ^^^^^^^ nodeA
|
|
239
|
+
// ^^^^^^^^^^^^^^^ nodeB
|
|
240
|
+
// result === Subset
|
|
241
|
+
//
|
|
242
|
+
// we don't want to check the property in this case
|
|
243
|
+
const aSubsetOfB = compareNodes(nodeA, nodeBMember.object);
|
|
244
|
+
if (aSubsetOfB !== NodeComparisonResult.Invalid) {
|
|
245
|
+
return NodeComparisonResult.Subset;
|
|
246
|
+
}
|
|
247
|
+
if (nodeA.computed !== nodeBMember.computed) {
|
|
248
|
+
return NodeComparisonResult.Invalid;
|
|
249
|
+
}
|
|
250
|
+
// NOTE - we purposely ignore optional flag because for our purposes
|
|
251
|
+
// foo?.bar && foo.bar?.baz
|
|
252
|
+
// or
|
|
253
|
+
// foo.bar && foo?.bar?.baz
|
|
254
|
+
// are going to be exactly the same
|
|
255
|
+
const objectCompare = compareNodes(nodeA.object, nodeBMember.object);
|
|
256
|
+
if (objectCompare !== NodeComparisonResult.Equal) {
|
|
257
|
+
return NodeComparisonResult.Invalid;
|
|
258
|
+
}
|
|
259
|
+
return compareNodes(nodeA.property, nodeBMember.property);
|
|
260
|
+
}
|
|
261
|
+
case utils_1.AST_NODE_TYPES.TSTemplateLiteralType:
|
|
262
|
+
case utils_1.AST_NODE_TYPES.TemplateLiteral: {
|
|
263
|
+
const nodeBTemplate = nodeB;
|
|
264
|
+
const areQuasisEqual = nodeA.quasis.length === nodeBTemplate.quasis.length &&
|
|
265
|
+
nodeA.quasis.every((elA, idx) => {
|
|
266
|
+
const elB = nodeBTemplate.quasis[idx];
|
|
267
|
+
return elA.value.cooked === elB.value.cooked;
|
|
268
|
+
});
|
|
269
|
+
if (!areQuasisEqual) {
|
|
270
|
+
return NodeComparisonResult.Invalid;
|
|
271
|
+
}
|
|
272
|
+
return NodeComparisonResult.Equal;
|
|
273
|
+
}
|
|
274
|
+
case utils_1.AST_NODE_TYPES.TemplateElement: {
|
|
275
|
+
const nodeBElement = nodeB;
|
|
276
|
+
if (nodeA.value.cooked === nodeBElement.value.cooked) {
|
|
277
|
+
return NodeComparisonResult.Equal;
|
|
278
|
+
}
|
|
279
|
+
return NodeComparisonResult.Invalid;
|
|
280
|
+
}
|
|
281
|
+
// these aren't actually valid expressions.
|
|
282
|
+
// https://github.com/typescript-eslint/typescript-eslint/blob/20d7caee35ab84ae6381fdf04338c9e2b9e2bc48/packages/ast-spec/src/unions/Expression.ts#L37-L43
|
|
283
|
+
case utils_1.AST_NODE_TYPES.ArrayPattern:
|
|
284
|
+
case utils_1.AST_NODE_TYPES.ObjectPattern:
|
|
285
|
+
/* istanbul ignore next */
|
|
286
|
+
return NodeComparisonResult.Invalid;
|
|
287
|
+
// update expression returns a number and also changes the value each time - so it makes no sense to compare the chain
|
|
288
|
+
case utils_1.AST_NODE_TYPES.UpdateExpression:
|
|
289
|
+
return NodeComparisonResult.Invalid;
|
|
290
|
+
// yield returns the value passed to the `next` function, so it may not be the same each time - so it makes no sense to compare the chain
|
|
291
|
+
case utils_1.AST_NODE_TYPES.YieldExpression:
|
|
292
|
+
return NodeComparisonResult.Invalid;
|
|
293
|
+
// general-case automatic handling of nodes to save us implementing every
|
|
294
|
+
// single case by hand. This just iterates the visitor keys to recursively
|
|
295
|
+
// check the children.
|
|
296
|
+
//
|
|
297
|
+
// Any specific logic cases or short-circuits should be listed as separate
|
|
298
|
+
// cases so that they don't fall into this generic handling
|
|
299
|
+
default:
|
|
300
|
+
return compareByVisiting(nodeA, nodeB);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
const COMPARE_NODES_CACHE = new WeakMap();
|
|
304
|
+
/**
|
|
305
|
+
* Compares two nodes' ASTs to determine if the A is equal to or a subset of B
|
|
306
|
+
*/
|
|
307
|
+
function compareNodes(nodeA, nodeB) {
|
|
308
|
+
if (nodeA == null || nodeB == null) {
|
|
309
|
+
if (nodeA !== nodeB) {
|
|
310
|
+
return NodeComparisonResult.Invalid;
|
|
311
|
+
}
|
|
312
|
+
return NodeComparisonResult.Equal;
|
|
313
|
+
}
|
|
314
|
+
const cached = COMPARE_NODES_CACHE.get(nodeA)?.get(nodeB);
|
|
315
|
+
if (cached) {
|
|
316
|
+
return cached;
|
|
317
|
+
}
|
|
318
|
+
const result = compareNodesUncached(nodeA, nodeB);
|
|
319
|
+
let mapA = COMPARE_NODES_CACHE.get(nodeA);
|
|
320
|
+
if (mapA == null) {
|
|
321
|
+
mapA = new WeakMap();
|
|
322
|
+
COMPARE_NODES_CACHE.set(nodeA, mapA);
|
|
323
|
+
}
|
|
324
|
+
mapA.set(nodeB, result);
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ParserServicesWithTypeInformation, TSESTree } from '@typescript-eslint/utils';
|
|
2
|
+
import type { SourceCode } from '@typescript-eslint/utils/ts-eslint';
|
|
3
|
+
import type { PreferOptionalChainOptions } from './PreferOptionalChainOptions';
|
|
4
|
+
export declare const enum Yoda {
|
|
5
|
+
Yes = 0,
|
|
6
|
+
No = 1,
|
|
7
|
+
Unknown = 2
|
|
8
|
+
}
|
|
9
|
+
export declare const enum OperandValidity {
|
|
10
|
+
Valid = "Valid",
|
|
11
|
+
Last = "Last",
|
|
12
|
+
Invalid = "Invalid"
|
|
13
|
+
}
|
|
14
|
+
export declare const enum NullishComparisonType {
|
|
15
|
+
/** `x != null`, `x != undefined` */
|
|
16
|
+
NotEqualNullOrUndefined = "NotEqualNullOrUndefined",
|
|
17
|
+
/** `x == null`, `x == undefined` */
|
|
18
|
+
EqualNullOrUndefined = "EqualNullOrUndefined",
|
|
19
|
+
/** `x !== null` */
|
|
20
|
+
NotStrictEqualNull = "NotStrictEqualNull",
|
|
21
|
+
/** `x === null` */
|
|
22
|
+
StrictEqualNull = "StrictEqualNull",
|
|
23
|
+
/** `x !== undefined`, `typeof x !== 'undefined'` */
|
|
24
|
+
NotStrictEqualUndefined = "NotStrictEqualUndefined",
|
|
25
|
+
/** `x === undefined`, `typeof x === 'undefined'` */
|
|
26
|
+
StrictEqualUndefined = "StrictEqualUndefined",
|
|
27
|
+
/** `!x` */
|
|
28
|
+
NotBoolean = "NotBoolean",
|
|
29
|
+
/** `x` */
|
|
30
|
+
Boolean = "Boolean"
|
|
31
|
+
}
|
|
32
|
+
export declare const enum ComparisonType {
|
|
33
|
+
NotEqual = "NotEqual",
|
|
34
|
+
Equal = "Equal",
|
|
35
|
+
NotStrictEqual = "NotStrictEqual",
|
|
36
|
+
StrictEqual = "StrictEqual"
|
|
37
|
+
}
|
|
38
|
+
export interface ValidOperand {
|
|
39
|
+
comparedName: TSESTree.Node;
|
|
40
|
+
comparisonType: NullishComparisonType;
|
|
41
|
+
isYoda: boolean;
|
|
42
|
+
node: TSESTree.Expression;
|
|
43
|
+
type: OperandValidity.Valid;
|
|
44
|
+
}
|
|
45
|
+
export interface LastChainOperand {
|
|
46
|
+
comparedName: TSESTree.Node;
|
|
47
|
+
comparisonType: ComparisonType;
|
|
48
|
+
comparisonValue: TSESTree.Node;
|
|
49
|
+
yoda: Yoda;
|
|
50
|
+
node: TSESTree.BinaryExpression;
|
|
51
|
+
type: OperandValidity.Last;
|
|
52
|
+
}
|
|
53
|
+
export interface InvalidOperand {
|
|
54
|
+
type: OperandValidity.Invalid;
|
|
55
|
+
}
|
|
56
|
+
type Operand = InvalidOperand | LastChainOperand | ValidOperand;
|
|
57
|
+
export declare function gatherLogicalOperands(node: TSESTree.LogicalExpression, parserServices: ParserServicesWithTypeInformation, sourceCode: Readonly<SourceCode>, options: PreferOptionalChainOptions): {
|
|
58
|
+
newlySeenLogicals: Set<TSESTree.LogicalExpression>;
|
|
59
|
+
operands: Operand[];
|
|
60
|
+
};
|
|
61
|
+
export {};
|