@typescript-eslint/eslint-plugin 8.0.0-alpha.8 → 8.0.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/dist/configs/all.js +7 -6
- package/dist/configs/all.js.map +1 -1
- package/dist/configs/disable-type-checked.js +3 -3
- package/dist/configs/disable-type-checked.js.map +1 -1
- package/dist/configs/recommended-type-checked-only.js +6 -0
- package/dist/configs/recommended-type-checked-only.js.map +1 -1
- package/dist/configs/recommended-type-checked.js +13 -2
- package/dist/configs/recommended-type-checked.js.map +1 -1
- package/dist/configs/recommended.js +7 -2
- package/dist/configs/recommended.js.map +1 -1
- package/dist/configs/strict-type-checked-only.js +8 -2
- package/dist/configs/strict-type-checked-only.js.map +1 -1
- package/dist/configs/strict-type-checked.js +15 -5
- package/dist/configs/strict-type-checked.js.map +1 -1
- package/dist/configs/strict.js +7 -3
- package/dist/configs/strict.js.map +1 -1
- package/dist/configs/stylistic-type-checked-only.js +3 -0
- package/dist/configs/stylistic-type-checked-only.js.map +1 -1
- package/dist/configs/stylistic-type-checked.js +3 -2
- package/dist/configs/stylistic-type-checked.js.map +1 -1
- package/dist/configs/stylistic.js +0 -2
- package/dist/configs/stylistic.js.map +1 -1
- package/dist/rules/adjacent-overload-signatures.js +2 -6
- package/dist/rules/adjacent-overload-signatures.js.map +1 -1
- package/dist/rules/array-type.js +14 -5
- package/dist/rules/array-type.js.map +1 -1
- package/dist/rules/class-literal-property-style.js +16 -16
- package/dist/rules/class-literal-property-style.js.map +1 -1
- package/dist/rules/class-methods-use-this.js.map +1 -1
- package/dist/rules/consistent-type-assertions.js +5 -19
- package/dist/rules/consistent-type-assertions.js.map +1 -1
- package/dist/rules/consistent-type-definitions.js +1 -1
- package/dist/rules/consistent-type-definitions.js.map +1 -1
- package/dist/rules/consistent-type-imports.js +13 -13
- package/dist/rules/consistent-type-imports.js.map +1 -1
- package/dist/rules/default-param-last.js +6 -1
- package/dist/rules/default-param-last.js.map +1 -1
- package/dist/rules/dot-notation.js +8 -1
- package/dist/rules/dot-notation.js.map +1 -1
- package/dist/rules/enum-utils/shared.js +3 -4
- package/dist/rules/enum-utils/shared.js.map +1 -1
- package/dist/rules/explicit-member-accessibility.js +49 -37
- package/dist/rules/explicit-member-accessibility.js.map +1 -1
- package/dist/rules/index.js +14 -6
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/init-declarations.js +57 -1
- package/dist/rules/init-declarations.js.map +1 -1
- package/dist/rules/member-ordering.js +8 -2
- package/dist/rules/member-ordering.js.map +1 -1
- package/dist/rules/method-signature-style.js +1 -3
- package/dist/rules/method-signature-style.js.map +1 -1
- package/dist/rules/naming-convention-utils/parse-options.js +2 -5
- package/dist/rules/naming-convention-utils/parse-options.js.map +1 -1
- package/dist/rules/naming-convention-utils/shared.js +3 -4
- package/dist/rules/naming-convention-utils/shared.js.map +1 -1
- package/dist/rules/naming-convention-utils/validator.js +1 -2
- package/dist/rules/naming-convention-utils/validator.js.map +1 -1
- package/dist/rules/naming-convention.js +3 -1
- package/dist/rules/naming-convention.js.map +1 -1
- package/dist/rules/no-array-delete.js +1 -1
- package/dist/rules/no-array-delete.js.map +1 -1
- package/dist/rules/no-base-to-string.js +1 -1
- package/dist/rules/no-base-to-string.js.map +1 -1
- package/dist/rules/no-duplicate-type-constituents.js +29 -3
- package/dist/rules/no-duplicate-type-constituents.js.map +1 -1
- package/dist/rules/no-dynamic-delete.js +8 -40
- package/dist/rules/no-dynamic-delete.js.map +1 -1
- package/dist/rules/no-empty-interface.js +2 -1
- package/dist/rules/no-empty-interface.js.map +1 -1
- package/dist/rules/no-empty-object-type.js +141 -0
- package/dist/rules/no-empty-object-type.js.map +1 -0
- package/dist/rules/no-extraneous-class.js +11 -3
- package/dist/rules/no-extraneous-class.js.map +1 -1
- package/dist/rules/no-floating-promises.js +91 -55
- package/dist/rules/no-floating-promises.js.map +1 -1
- package/dist/rules/no-implied-eval.js +6 -24
- package/dist/rules/no-implied-eval.js.map +1 -1
- package/dist/rules/no-inferrable-types.js +1 -2
- package/dist/rules/no-inferrable-types.js.map +1 -1
- package/dist/rules/no-invalid-this.js +6 -0
- package/dist/rules/no-invalid-this.js.map +1 -1
- package/dist/rules/no-magic-numbers.js +32 -1
- package/dist/rules/no-magic-numbers.js.map +1 -1
- package/dist/rules/no-misused-new.js +4 -3
- package/dist/rules/no-misused-new.js.map +1 -1
- package/dist/rules/no-misused-promises.js +76 -1
- package/dist/rules/no-misused-promises.js.map +1 -1
- package/dist/rules/no-mixed-enums.js +6 -9
- package/dist/rules/no-mixed-enums.js.map +1 -1
- package/dist/rules/no-non-null-assertion.js +12 -14
- package/dist/rules/no-non-null-assertion.js.map +1 -1
- package/dist/rules/no-require-imports.js +13 -3
- package/dist/rules/no-require-imports.js.map +1 -1
- package/dist/rules/no-restricted-imports.js +5 -6
- package/dist/rules/no-restricted-imports.js.map +1 -1
- package/dist/rules/{ban-types.js → no-restricted-types.js} +17 -91
- package/dist/rules/no-restricted-types.js.map +1 -0
- package/dist/rules/no-shadow.js +4 -9
- package/dist/rules/no-shadow.js.map +1 -1
- package/dist/rules/no-unnecessary-condition.js +8 -6
- package/dist/rules/no-unnecessary-condition.js.map +1 -1
- package/dist/rules/no-unnecessary-parameter-property-assignment.js +151 -0
- package/dist/rules/no-unnecessary-parameter-property-assignment.js.map +1 -0
- package/dist/rules/no-unnecessary-qualifier.js.map +1 -1
- package/dist/rules/no-unnecessary-template-expression.js +223 -0
- package/dist/rules/no-unnecessary-template-expression.js.map +1 -0
- package/dist/rules/no-unnecessary-type-assertion.js +16 -13
- package/dist/rules/no-unnecessary-type-assertion.js.map +1 -1
- package/dist/rules/no-unnecessary-type-parameters.js +309 -0
- package/dist/rules/no-unnecessary-type-parameters.js.map +1 -0
- package/dist/rules/no-unsafe-argument.js +4 -2
- package/dist/rules/no-unsafe-argument.js.map +1 -1
- package/dist/rules/no-unsafe-assignment.js +24 -9
- package/dist/rules/no-unsafe-assignment.js.map +1 -1
- package/dist/rules/no-unsafe-call.js +5 -1
- package/dist/rules/no-unsafe-call.js.map +1 -1
- package/dist/rules/no-unsafe-enum-comparison.js +1 -5
- package/dist/rules/no-unsafe-enum-comparison.js.map +1 -1
- package/dist/rules/no-unsafe-function-type.js +47 -0
- package/dist/rules/no-unsafe-function-type.js.map +1 -0
- package/dist/rules/no-unsafe-member-access.js +10 -4
- package/dist/rules/no-unsafe-member-access.js.map +1 -1
- package/dist/rules/no-unsafe-return.js +9 -3
- package/dist/rules/no-unsafe-return.js.map +1 -1
- package/dist/rules/no-unsafe-unary-minus.js +1 -0
- package/dist/rules/no-unsafe-unary-minus.js.map +1 -1
- package/dist/rules/no-unused-expressions.js +1 -0
- package/dist/rules/no-unused-expressions.js.map +1 -1
- package/dist/rules/no-unused-vars.js +198 -79
- package/dist/rules/no-unused-vars.js.map +1 -1
- package/dist/rules/no-use-before-define.js +2 -16
- package/dist/rules/no-use-before-define.js.map +1 -1
- package/dist/rules/no-useless-constructor.js +1 -3
- package/dist/rules/no-useless-constructor.js.map +1 -1
- package/dist/rules/no-var-requires.js +2 -1
- package/dist/rules/no-var-requires.js.map +1 -1
- package/dist/rules/no-wrapper-object-types.js +61 -0
- package/dist/rules/no-wrapper-object-types.js.map +1 -0
- package/dist/rules/only-throw-error.js +1 -1
- package/dist/rules/only-throw-error.js.map +1 -1
- package/dist/rules/prefer-as-const.js +1 -1
- package/dist/rules/prefer-as-const.js.map +1 -1
- package/dist/rules/prefer-destructuring.js +3 -1
- package/dist/rules/prefer-destructuring.js.map +1 -1
- package/dist/rules/prefer-find.js +2 -1
- package/dist/rules/prefer-find.js.map +1 -1
- package/dist/rules/prefer-includes.js +1 -1
- package/dist/rules/prefer-includes.js.map +1 -1
- package/dist/rules/prefer-literal-enum-member.js +43 -2
- package/dist/rules/prefer-literal-enum-member.js.map +1 -1
- package/dist/rules/prefer-namespace-keyword.js +1 -1
- package/dist/rules/prefer-namespace-keyword.js.map +1 -1
- package/dist/rules/prefer-nullish-coalescing.js +8 -6
- package/dist/rules/prefer-nullish-coalescing.js.map +1 -1
- package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +32 -37
- package/dist/rules/prefer-optional-chain-utils/analyzeChain.js.map +1 -1
- package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +1 -2
- package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js.map +1 -1
- package/dist/rules/prefer-optional-chain-utils/compareNodes.js +1 -2
- package/dist/rules/prefer-optional-chain-utils/compareNodes.js.map +1 -1
- package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +6 -11
- package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js.map +1 -1
- package/dist/rules/prefer-promise-reject-errors.js +1 -1
- package/dist/rules/prefer-promise-reject-errors.js.map +1 -1
- package/dist/rules/prefer-readonly.js +24 -12
- package/dist/rules/prefer-readonly.js.map +1 -1
- package/dist/rules/prefer-regexp-exec.js +15 -6
- package/dist/rules/prefer-regexp-exec.js.map +1 -1
- package/dist/rules/prefer-string-starts-ends-with.js.map +1 -1
- package/dist/rules/prefer-ts-expect-error.js +2 -1
- package/dist/rules/prefer-ts-expect-error.js.map +1 -1
- package/dist/rules/require-await.js +1 -1
- package/dist/rules/require-await.js.map +1 -1
- package/dist/rules/restrict-template-expressions.js +3 -3
- package/dist/rules/restrict-template-expressions.js.map +1 -1
- package/dist/rules/return-await.js +167 -86
- package/dist/rules/return-await.js.map +1 -1
- package/dist/rules/sort-type-constituents.js +23 -1
- package/dist/rules/sort-type-constituents.js.map +1 -1
- package/dist/rules/strict-boolean-expressions.js +112 -5
- package/dist/rules/strict-boolean-expressions.js.map +1 -1
- package/dist/rules/switch-exhaustiveness-check.js +7 -9
- package/dist/rules/switch-exhaustiveness-check.js.map +1 -1
- package/dist/rules/unbound-method.js +96 -27
- package/dist/rules/unbound-method.js.map +1 -1
- package/dist/rules/unified-signatures.js +3 -1
- package/dist/rules/unified-signatures.js.map +1 -1
- package/dist/util/astUtils.js +2 -3
- package/dist/util/astUtils.js.map +1 -1
- package/dist/util/collectUnusedVariables.js +110 -73
- package/dist/util/collectUnusedVariables.js.map +1 -1
- package/dist/util/createRule.js.map +1 -1
- package/dist/util/escapeRegExp.js +1 -2
- package/dist/util/escapeRegExp.js.map +1 -1
- package/dist/util/explicitReturnTypeUtils.js +11 -7
- package/dist/util/explicitReturnTypeUtils.js.map +1 -1
- package/dist/util/getESLintCoreRule.js +2 -2
- package/dist/util/getESLintCoreRule.js.map +1 -1
- package/dist/util/getForStatementHeadLoc.js +1 -2
- package/dist/util/getForStatementHeadLoc.js.map +1 -1
- package/dist/util/getFunctionHeadLoc.js +3 -4
- package/dist/util/getFunctionHeadLoc.js.map +1 -1
- package/dist/util/getMemberHeadLoc.js +80 -0
- package/dist/util/getMemberHeadLoc.js.map +1 -0
- package/dist/util/getOperatorPrecedence.js +5 -5
- package/dist/util/getOperatorPrecedence.js.map +1 -1
- package/dist/util/getStaticStringValue.js +1 -2
- package/dist/util/getStaticStringValue.js.map +1 -1
- package/dist/util/getStringLength.js +1 -2
- package/dist/util/getStringLength.js.map +1 -1
- package/dist/util/getTextWithParentheses.js +17 -0
- package/dist/util/getTextWithParentheses.js.map +1 -0
- package/dist/util/getThisExpression.js +1 -2
- package/dist/util/getThisExpression.js.map +1 -1
- package/dist/util/getWrappedCode.js +1 -2
- package/dist/util/getWrappedCode.js.map +1 -1
- package/dist/util/getWrappingFixer.js +2 -3
- package/dist/util/getWrappingFixer.js.map +1 -1
- package/dist/util/index.js +2 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/isAssignee.js +1 -2
- package/dist/util/isAssignee.js.map +1 -1
- package/dist/util/isNodeEqual.js +1 -2
- package/dist/util/isNodeEqual.js.map +1 -1
- package/dist/util/isNullLiteral.js +1 -2
- package/dist/util/isNullLiteral.js.map +1 -1
- package/dist/util/isTypeImport.js +22 -0
- package/dist/util/isTypeImport.js.map +1 -0
- package/dist/util/isUndefinedIdentifier.js +1 -2
- package/dist/util/isUndefinedIdentifier.js.map +1 -1
- package/dist/util/misc.js +15 -15
- package/dist/util/misc.js.map +1 -1
- package/dist/util/objectIterators.js +3 -4
- package/dist/util/objectIterators.js.map +1 -1
- package/dist/util/referenceContainsTypeQuery.js +20 -0
- package/dist/util/referenceContainsTypeQuery.js.map +1 -0
- package/dist/util/scopeUtils.js +11 -0
- package/dist/util/scopeUtils.js.map +1 -0
- package/docs/rules/array-type.mdx +4 -1
- package/docs/rules/ban-types.md +22 -0
- package/docs/rules/class-methods-use-this.mdx +1 -1
- package/docs/rules/consistent-indexed-object-style.mdx +1 -1
- package/docs/rules/naming-convention.mdx +16 -0
- package/docs/rules/no-base-to-string.mdx +1 -1
- package/docs/rules/no-duplicate-type-constituents.mdx +6 -2
- package/docs/rules/no-dynamic-delete.mdx +12 -7
- package/docs/rules/no-empty-interface.mdx +10 -0
- package/docs/rules/no-empty-object-type.mdx +145 -0
- package/docs/rules/no-extraneous-class.mdx +6 -0
- package/docs/rules/no-floating-promises.mdx +146 -2
- package/docs/rules/no-misused-promises.mdx +18 -20
- package/docs/rules/no-redundant-type-constituents.mdx +4 -0
- package/docs/rules/no-require-imports.mdx +28 -1
- package/docs/rules/no-restricted-types.mdx +71 -0
- package/docs/rules/no-type-alias.mdx +1 -1
- package/docs/rules/no-unnecessary-parameter-property-assignment.mdx +42 -0
- package/docs/rules/no-unnecessary-template-expression.mdx +85 -0
- package/docs/rules/no-unnecessary-type-parameters.mdx +114 -0
- package/docs/rules/no-unsafe-function-type.mdx +63 -0
- package/docs/rules/no-unused-expressions.mdx +41 -1
- package/docs/rules/no-unused-vars.mdx +5 -0
- package/docs/rules/no-useless-template-literals.mdx +3 -59
- package/docs/rules/no-var-requires.mdx +6 -0
- package/docs/rules/no-wrapper-object-types.mdx +75 -0
- package/docs/rules/only-throw-error.mdx +7 -0
- package/docs/rules/prefer-readonly-parameter-types.mdx +10 -4
- package/docs/rules/prefer-ts-expect-error.mdx +10 -0
- package/docs/rules/require-await.mdx +2 -2
- package/docs/rules/restrict-template-expressions.mdx +1 -1
- package/docs/rules/return-await.mdx +119 -23
- package/docs/rules/sort-type-constituents.mdx +29 -9
- package/docs/rules/sort-type-union-intersection-members.mdx +12 -0
- package/docs/rules/strict-boolean-expressions.mdx +6 -0
- package/docs/rules/unbound-method.mdx +2 -1
- package/package.json +14 -20
- package/rules.d.ts +31 -4
- package/dist/rules/ban-types.js.map +0 -1
- package/dist/rules/no-throw-literal.js +0 -97
- package/dist/rules/no-throw-literal.js.map +0 -1
- package/dist/rules/no-useless-template-literals.js +0 -153
- package/dist/rules/no-useless-template-literals.js.map +0 -1
- package/docs/rules/ban-types.mdx +0 -138
- package/docs/rules/no-throw-literal.mdx +0 -25
|
@@ -149,11 +149,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
const { parent } = node;
|
|
152
|
-
|
|
153
|
-
* @see https://github.com/typescript-eslint/typescript-eslint/issues/6225
|
|
154
|
-
*/
|
|
155
|
-
const switchStatement = parent;
|
|
156
|
-
const leftType = parserServices.getTypeAtLocation(switchStatement.discriminant);
|
|
152
|
+
const leftType = parserServices.getTypeAtLocation(parent.discriminant);
|
|
157
153
|
const rightType = parserServices.getTypeAtLocation(node.test);
|
|
158
154
|
if (isMismatchedComparison(leftType, rightType)) {
|
|
159
155
|
context.report({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
exports.default = (0, util_1.createRule)({
|
|
6
|
+
name: 'no-unsafe-function-type',
|
|
7
|
+
meta: {
|
|
8
|
+
type: 'problem',
|
|
9
|
+
docs: {
|
|
10
|
+
description: 'Disallow using the unsafe built-in Function type',
|
|
11
|
+
recommended: 'recommended',
|
|
12
|
+
},
|
|
13
|
+
fixable: 'code',
|
|
14
|
+
messages: {
|
|
15
|
+
bannedFunctionType: [
|
|
16
|
+
'The `Function` type accepts any function-like value.',
|
|
17
|
+
'Prefer explicitly defining any function parameters and return type.',
|
|
18
|
+
].join('\n'),
|
|
19
|
+
},
|
|
20
|
+
schema: [],
|
|
21
|
+
},
|
|
22
|
+
defaultOptions: [],
|
|
23
|
+
create(context) {
|
|
24
|
+
function checkBannedTypes(node) {
|
|
25
|
+
if (node.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
26
|
+
node.name === 'Function' &&
|
|
27
|
+
(0, util_1.isReferenceToGlobalFunction)('Function', node, context.sourceCode)) {
|
|
28
|
+
context.report({
|
|
29
|
+
node,
|
|
30
|
+
messageId: 'bannedFunctionType',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
TSClassImplements(node) {
|
|
36
|
+
checkBannedTypes(node.expression);
|
|
37
|
+
},
|
|
38
|
+
TSInterfaceHeritage(node) {
|
|
39
|
+
checkBannedTypes(node.expression);
|
|
40
|
+
},
|
|
41
|
+
TSTypeReference(node) {
|
|
42
|
+
checkBannedTypes(node.typeName);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=no-unsafe-function-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-unsafe-function-type.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-function-type.ts"],"names":[],"mappings":";;AACA,oDAA0D;AAE1D,kCAAkE;AAElE,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,kDAAkD;YAC/D,WAAW,EAAE,aAAa;SAC3B;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACR,kBAAkB,EAAE;gBAClB,sDAAsD;gBACtD,qEAAqE;aACtE,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,gBAAgB,CAAC,IAAmB;YAC3C,IACE,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,UAAU;gBACvC,IAAI,CAAC,IAAI,KAAK,UAAU;gBACxB,IAAA,kCAA2B,EAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EACjE,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,oBAAoB;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,iBAAiB,CAAC,IAAI;gBACpB,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,mBAAmB,CAAC,IAAI;gBACtB,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,eAAe,CAAC,IAAI;gBAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -26,6 +26,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
const utils_1 = require("@typescript-eslint/utils");
|
|
27
27
|
const tsutils = __importStar(require("ts-api-utils"));
|
|
28
28
|
const util_1 = require("../util");
|
|
29
|
+
function createDataType(type) {
|
|
30
|
+
const isErrorType = tsutils.isIntrinsicErrorType(type);
|
|
31
|
+
return isErrorType ? '`error` typed' : '`any`';
|
|
32
|
+
}
|
|
29
33
|
exports.default = (0, util_1.createRule)({
|
|
30
34
|
name: 'no-unsafe-member-access',
|
|
31
35
|
meta: {
|
|
@@ -36,12 +40,12 @@ exports.default = (0, util_1.createRule)({
|
|
|
36
40
|
requiresTypeChecking: true,
|
|
37
41
|
},
|
|
38
42
|
messages: {
|
|
39
|
-
unsafeMemberExpression: 'Unsafe member access {{property}} on an
|
|
43
|
+
unsafeMemberExpression: 'Unsafe member access {{property}} on an {{type}} value.',
|
|
40
44
|
unsafeThisMemberExpression: [
|
|
41
45
|
'Unsafe member access {{property}} on an `any` value. `this` is typed as `any`.',
|
|
42
46
|
'You can try to fix this by turning on the `noImplicitThis` compiler option, or adding a `this` parameter to the function.',
|
|
43
47
|
].join('\n'),
|
|
44
|
-
unsafeComputedMemberAccess: 'Computed name {{property}} resolves to an
|
|
48
|
+
unsafeComputedMemberAccess: 'Computed name {{property}} resolves to an {{type}} value.',
|
|
45
49
|
},
|
|
46
50
|
schema: [],
|
|
47
51
|
},
|
|
@@ -84,14 +88,15 @@ exports.default = (0, util_1.createRule)({
|
|
|
84
88
|
messageId,
|
|
85
89
|
data: {
|
|
86
90
|
property: node.computed ? `[${propertyName}]` : `.${propertyName}`,
|
|
91
|
+
type: createDataType(type),
|
|
87
92
|
},
|
|
88
93
|
});
|
|
89
94
|
}
|
|
90
95
|
return state;
|
|
91
96
|
}
|
|
92
97
|
return {
|
|
93
|
-
// ignore
|
|
94
|
-
':not(TSClassImplements, TSInterfaceHeritage
|
|
98
|
+
// ignore MemberExpressions with ancestors of type `TSClassImplements` or `TSInterfaceHeritage`
|
|
99
|
+
'MemberExpression:not(TSClassImplements MemberExpression, TSInterfaceHeritage MemberExpression)': checkMemberExpression,
|
|
95
100
|
'MemberExpression[computed = true] > *.property'(node) {
|
|
96
101
|
if (
|
|
97
102
|
// x[1]
|
|
@@ -111,6 +116,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
111
116
|
messageId: 'unsafeComputedMemberAccess',
|
|
112
117
|
data: {
|
|
113
118
|
property: `[${propertyName}]`,
|
|
119
|
+
type: createDataType(type),
|
|
114
120
|
},
|
|
115
121
|
});
|
|
116
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unsafe-member-access.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-member-access.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAA0D;AAC1D,sDAAwC;
|
|
1
|
+
{"version":3,"file":"no-unsafe-member-access.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-member-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
37
37
|
requiresTypeChecking: true,
|
|
38
38
|
},
|
|
39
39
|
messages: {
|
|
40
|
-
unsafeReturn: 'Unsafe return of an
|
|
40
|
+
unsafeReturn: 'Unsafe return of an {{type}} typed value.',
|
|
41
41
|
unsafeReturnThis: [
|
|
42
42
|
'Unsafe return of an `{{type}}` typed value. `this` is typed as `any`.',
|
|
43
43
|
'You can try to fix this by turning on the `noImplicitThis` compiler option, or adding a `this` parameter to the function.',
|
|
@@ -112,6 +112,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
let messageId = 'unsafeReturn';
|
|
115
|
+
const isErrorType = tsutils.isIntrinsicErrorType(returnNodeType);
|
|
115
116
|
if (!isNoImplicitThis) {
|
|
116
117
|
// `return this`
|
|
117
118
|
const thisExpression = (0, util_1.getThisExpression)(returnNode);
|
|
@@ -125,11 +126,16 @@ exports.default = (0, util_1.createRule)({
|
|
|
125
126
|
node: reportingNode,
|
|
126
127
|
messageId,
|
|
127
128
|
data: {
|
|
128
|
-
type:
|
|
129
|
+
type: isErrorType
|
|
130
|
+
? 'error'
|
|
131
|
+
: anyType === util_1.AnyType.Any
|
|
132
|
+
? '`any`'
|
|
133
|
+
: '`any[]`',
|
|
129
134
|
},
|
|
130
135
|
});
|
|
131
136
|
}
|
|
132
|
-
|
|
137
|
+
const signature = functionType.getCallSignatures().at(0);
|
|
138
|
+
if (signature) {
|
|
133
139
|
const functionReturnType = signature.getReturnType();
|
|
134
140
|
const result = (0, util_1.isUnsafeAssignment)(returnNodeType, functionReturnType, checker, returnNode);
|
|
135
141
|
if (!result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unsafe-return.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-return.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAA0D;AAC1D,sDAAwC;AACxC,+CAAiC;AAEjC,kCAaiB;AAEjB,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"no-unsafe-return.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-return.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAA0D;AAC1D,sDAAwC;AACxC,+CAAiC;AAEjC,kCAaiB;AAEjB,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,2CAA2C;YACzD,gBAAgB,EAAE;gBAChB,uEAAuE;gBACvE,2HAA2H;aAC5H,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,sBAAsB,EACpB,mFAAmF;SACtF;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAC5D,eAAe,EACf,gBAAgB,CACjB,CAAC;QAEF,SAAS,qBAAqB,CAC5B,IAAmB;YAMnB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,OAAO,OAAO,EAAE,CAAC;gBACf,IACE,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,uBAAuB;oBACvD,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,mBAAmB;oBACnD,OAAO,CAAC,IAAI,KAAK,sBAAc,CAAC,kBAAkB,EAClD,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAED,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,mFAAmF;YACnF,qDAAqD;YACrD,0BAA0B,CAAC,OAAO,IAAI,CAAC;QACzC,CAAC;QAED,SAAS,WAAW,CAClB,UAAyB,EACzB,gBAA+B,UAAU;YAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAA,uCAAgC,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACvD,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,qEAAqE;YACrE,MAAM,cAAc,GAAG,IAAA,mCAA4B,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1E,MAAM,cAAc,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAExE,yFAAyF;YACzF,+DAA+D;YAC/D,wDAAwD;YACxD,qGAAqG;YACrG,IAAI,YAAY,GACd,EAAE,CAAC,oBAAoB,CAAC,cAAc,CAAC;gBACvC,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC;gBAChC,CAAC,CAAC,IAAA,wBAAiB,EAAC,OAAO,EAAE,cAAc,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC1D,CAAC;YAED,6EAA6E;YAC7E,iFAAiF;YACjF,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;gBACxB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtE,IACE,cAAc,KAAK,SAAS,CAAC,aAAa,EAAE;wBAC5C,IAAA,oBAAa,EACX,SAAS,CAAC,aAAa,EAAE,EACzB,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CACxC,EACD,CAAC;wBACD,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,OAAO,KAAK,cAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,2FAA2F;gBAC3F,8CAA8C;gBAC9C,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBACzD,MAAM,kBAAkB,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;oBACrD,IACE,OAAO,KAAK,cAAO,CAAC,GAAG;wBACvB,IAAA,wBAAiB,EAAC,kBAAkB,CAAC,EACrC,CAAC;wBACD,OAAO;oBACT,CAAC;oBACD,IACE,OAAO,KAAK,cAAO,CAAC,QAAQ;wBAC5B,IAAA,6BAAsB,EAAC,kBAAkB,EAAE,OAAO,CAAC,EACnD,CAAC;wBACD,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,IAAI,SAAS,GAAwC,cAAc,CAAC;gBACpE,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;gBAEjE,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,gBAAgB;oBAChB,MAAM,cAAc,GAAG,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC;oBACrD,IACE,cAAc;wBACd,IAAA,oBAAa,EACX,IAAA,mCAA4B,EAAC,QAAQ,EAAE,cAAc,CAAC,CACvD,EACD,CAAC;wBACD,SAAS,GAAG,kBAAkB,CAAC;oBACjC,CAAC;gBACH,CAAC;gBAED,qFAAqF;gBACrF,OAAO,OAAO,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,aAAa;oBACnB,SAAS;oBACT,IAAI,EAAE;wBACJ,IAAI,EAAE,WAAW;4BACf,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,OAAO,KAAK,cAAO,CAAC,GAAG;gCACvB,CAAC,CAAC,OAAO;gCACT,CAAC,CAAC,SAAS;qBAChB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,kBAAkB,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,IAAA,yBAAkB,EAC/B,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,UAAU,CACX,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;gBACpC,OAAO,OAAO,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,wBAAwB;oBACnC,IAAI,EAAE;wBACJ,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;wBACpC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;qBACzC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,eAAe,CAAC,IAAI;gBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,qDAAqD,EAAE,WAAW;SACnE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unsafe-unary-minus.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-unary-minus.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AACxC,+CAAiC;AAEjC,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,yCAAyC;YACtD,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,UAAU,EACR,6FAA6F;SAChG;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,eAAe,CAAC,IAAI;gBAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAC/C,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;gBACF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAClD,IACE,OAAO;qBACJ,cAAc,CAAC,OAAO,CAAC;qBACvB,IAAI,CACH,IAAI,CAAC,EAAE,CACL,CAAC,OAAO,CAAC,aAAa,CACpB,IAAI,EACJ,EAAE,CAAC,SAAS,CAAC,GAAG;oBACd,EAAE,CAAC,SAAS,CAAC,KAAK;oBAClB,EAAE,CAAC,SAAS,CAAC,UAAU;oBACvB,EAAE,CAAC,SAAS,CAAC,UAAU,CAC1B,CACJ,EACH,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC;wBACb,SAAS,EAAE,YAAY;wBACvB,IAAI;wBACJ,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;qBAC9C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"no-unsafe-unary-minus.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-unary-minus.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AACxC,+CAAiC;AAEjC,8CAAgC;AAKhC,kBAAe,IAAI,CAAC,UAAU,CAAsB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,yCAAyC;YACtD,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,UAAU,EACR,6FAA6F;SAChG;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,eAAe,CAAC,IAAI;gBAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAC/C,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;gBACF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAClD,IACE,OAAO;qBACJ,cAAc,CAAC,OAAO,CAAC;qBACvB,IAAI,CACH,IAAI,CAAC,EAAE,CACL,CAAC,OAAO,CAAC,aAAa,CACpB,IAAI,EACJ,EAAE,CAAC,SAAS,CAAC,GAAG;oBACd,EAAE,CAAC,SAAS,CAAC,KAAK;oBAClB,EAAE,CAAC,SAAS,CAAC,UAAU;oBACvB,EAAE,CAAC,SAAS,CAAC,UAAU,CAC1B,CACJ,EACH,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC;wBACb,SAAS,EAAE,YAAY;wBACvB,IAAI;wBACJ,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;qBAC9C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-unused-expressions.js","sourceRoot":"","sources":["../../src/rules/no-unused-expressions.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AAMpE,kCAAqC;AACrC,iEAA8D;AAE9D,MAAM,QAAQ,GAAG,IAAA,qCAAiB,EAAC,uBAAuB,CAAC,CAAC;AAK5D,kBAAe,IAAA,iBAAU,EAAsB;IAC7C,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,6BAA6B;YAC1C,eAAe,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"no-unused-expressions.js","sourceRoot":"","sources":["../../src/rules/no-unused-expressions.ts"],"names":[],"mappings":";;AAAA,oDAAoE;AAMpE,kCAAqC;AACrC,iEAA8D;AAE9D,MAAM,QAAQ,GAAG,IAAA,qCAAiB,EAAC,uBAAuB,CAAC,CAAC;AAK5D,kBAAe,IAAA,iBAAU,EAAsB;IAC7C,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,6BAA6B;YAC1C,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,aAAa;SAC3B;QACD,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc;QAC5C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;QAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;KACjC;IACD,cAAc,EAAE;QACd;YACE,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,iBAAiB,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC,SAAS,iBAAiB,CAAC,IAAmB;YAC5C,IAAI,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,iBAAiB,EAAE,CAAC;gBACxE,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,qBAAqB,EAAE,CAAC;gBACvE,OAAO,CACL,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC;YACJ,CAAC;YACD,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,eAAe;gBAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,sBAAc,CAAC,cAAc,CAAC;gBACzD,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,CAC9C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,mBAAmB,CAAC,IAAI;gBACtB,IAAI,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBACzD,OAAO;gBACT,CAAC;gBAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAE5C,IACE,cAAc;oBACZ,gBAAQ,CAAC,cAAc,CAAC,yBAAyB;oBACnD,cAAc,KAAK,gBAAQ,CAAC,cAAc,CAAC,cAAc;oBACzD,cAAc,KAAK,gBAAQ,CAAC,cAAc,CAAC,mBAAmB;oBAC9D,cAAc,KAAK,gBAAQ,CAAC,cAAc,CAAC,eAAe,EAC1D,CAAC;oBACD,KAAK,CAAC,mBAAmB,CAAC;wBACxB,GAAG,IAAI;wBACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;qBACvC,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const scope_manager_1 = require("@typescript-eslint/scope-manager");
|
|
4
4
|
const utils_1 = require("@typescript-eslint/utils");
|
|
5
5
|
const util_1 = require("../util");
|
|
6
|
+
const referenceContainsTypeQuery_1 = require("../util/referenceContainsTypeQuery");
|
|
6
7
|
exports.default = (0, util_1.createRule)({
|
|
7
8
|
name: 'no-unused-vars',
|
|
8
9
|
meta: {
|
|
@@ -49,6 +50,12 @@ exports.default = (0, util_1.createRule)({
|
|
|
49
50
|
destructuredArrayIgnorePattern: {
|
|
50
51
|
type: 'string',
|
|
51
52
|
},
|
|
53
|
+
ignoreClassWithStaticInitBlock: {
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
},
|
|
56
|
+
reportUsedIgnorePattern: {
|
|
57
|
+
type: 'boolean',
|
|
58
|
+
},
|
|
52
59
|
},
|
|
53
60
|
additionalProperties: false,
|
|
54
61
|
},
|
|
@@ -57,6 +64,8 @@ exports.default = (0, util_1.createRule)({
|
|
|
57
64
|
],
|
|
58
65
|
messages: {
|
|
59
66
|
unusedVar: "'{{varName}}' is {{action}} but never used{{additional}}.",
|
|
67
|
+
usedIgnoredVar: "'{{varName}}' is marked as ignored but is used{{additional}}.",
|
|
68
|
+
usedOnlyAsType: "'{{varName}}' is {{action}} but only used as a type{{additional}}.",
|
|
60
69
|
},
|
|
61
70
|
},
|
|
62
71
|
defaultOptions: [{}],
|
|
@@ -68,6 +77,8 @@ exports.default = (0, util_1.createRule)({
|
|
|
68
77
|
args: 'after-used',
|
|
69
78
|
ignoreRestSiblings: false,
|
|
70
79
|
caughtErrors: 'all',
|
|
80
|
+
ignoreClassWithStaticInitBlock: false,
|
|
81
|
+
reportUsedIgnorePattern: false,
|
|
71
82
|
};
|
|
72
83
|
if (typeof firstOption === 'string') {
|
|
73
84
|
options.vars = firstOption;
|
|
@@ -78,6 +89,12 @@ exports.default = (0, util_1.createRule)({
|
|
|
78
89
|
options.ignoreRestSiblings =
|
|
79
90
|
firstOption.ignoreRestSiblings ?? options.ignoreRestSiblings;
|
|
80
91
|
options.caughtErrors = firstOption.caughtErrors ?? options.caughtErrors;
|
|
92
|
+
options.ignoreClassWithStaticInitBlock =
|
|
93
|
+
firstOption.ignoreClassWithStaticInitBlock ??
|
|
94
|
+
options.ignoreClassWithStaticInitBlock;
|
|
95
|
+
options.reportUsedIgnorePattern =
|
|
96
|
+
firstOption.reportUsedIgnorePattern ??
|
|
97
|
+
options.reportUsedIgnorePattern;
|
|
81
98
|
if (firstOption.varsIgnorePattern) {
|
|
82
99
|
options.varsIgnorePattern = new RegExp(firstOption.varsIgnorePattern, 'u');
|
|
83
100
|
}
|
|
@@ -93,6 +110,125 @@ exports.default = (0, util_1.createRule)({
|
|
|
93
110
|
}
|
|
94
111
|
return options;
|
|
95
112
|
})();
|
|
113
|
+
/**
|
|
114
|
+
* Determines what variable type a def is.
|
|
115
|
+
* @param def the declaration to check
|
|
116
|
+
* @returns a simple name for the types of variables that this rule supports
|
|
117
|
+
*/
|
|
118
|
+
function defToVariableType(def) {
|
|
119
|
+
/*
|
|
120
|
+
* This `destructuredArrayIgnorePattern` error report works differently from the catch
|
|
121
|
+
* clause and parameter error reports. _Both_ the `varsIgnorePattern` and the
|
|
122
|
+
* `destructuredArrayIgnorePattern` will be checked for array destructuring. However,
|
|
123
|
+
* for the purposes of the report, the currently defined behavior is to only inform the
|
|
124
|
+
* user of the `destructuredArrayIgnorePattern` if it's present (regardless of the fact
|
|
125
|
+
* that the `varsIgnorePattern` would also apply). If it's not present, the user will be
|
|
126
|
+
* informed of the `varsIgnorePattern`, assuming that's present.
|
|
127
|
+
*/
|
|
128
|
+
if (options.destructuredArrayIgnorePattern &&
|
|
129
|
+
def.name.parent.type === utils_1.AST_NODE_TYPES.ArrayPattern) {
|
|
130
|
+
return 'array-destructure';
|
|
131
|
+
}
|
|
132
|
+
switch (def.type) {
|
|
133
|
+
case scope_manager_1.DefinitionType.CatchClause:
|
|
134
|
+
return 'catch-clause';
|
|
135
|
+
case scope_manager_1.DefinitionType.Parameter:
|
|
136
|
+
return 'parameter';
|
|
137
|
+
default:
|
|
138
|
+
return 'variable';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets a given variable's description and configured ignore pattern
|
|
143
|
+
* based on the provided variableType
|
|
144
|
+
* @param variableType a simple name for the types of variables that this rule supports
|
|
145
|
+
* @returns the given variable's description and
|
|
146
|
+
* ignore pattern
|
|
147
|
+
*/
|
|
148
|
+
function getVariableDescription(variableType) {
|
|
149
|
+
switch (variableType) {
|
|
150
|
+
case 'array-destructure':
|
|
151
|
+
return {
|
|
152
|
+
pattern: options.destructuredArrayIgnorePattern?.toString(),
|
|
153
|
+
variableDescription: 'elements of array destructuring',
|
|
154
|
+
};
|
|
155
|
+
case 'catch-clause':
|
|
156
|
+
return {
|
|
157
|
+
pattern: options.caughtErrorsIgnorePattern?.toString(),
|
|
158
|
+
variableDescription: 'caught errors',
|
|
159
|
+
};
|
|
160
|
+
case 'parameter':
|
|
161
|
+
return {
|
|
162
|
+
pattern: options.argsIgnorePattern?.toString(),
|
|
163
|
+
variableDescription: 'args',
|
|
164
|
+
};
|
|
165
|
+
case 'variable':
|
|
166
|
+
return {
|
|
167
|
+
pattern: options.varsIgnorePattern?.toString(),
|
|
168
|
+
variableDescription: 'vars',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Generates the message data about the variable being defined and unused,
|
|
174
|
+
* including the ignore pattern if configured.
|
|
175
|
+
* @param unusedVar eslint-scope variable object.
|
|
176
|
+
* @returns The message data to be used with this unused variable.
|
|
177
|
+
*/
|
|
178
|
+
function getDefinedMessageData(unusedVar) {
|
|
179
|
+
const def = unusedVar.defs.at(0);
|
|
180
|
+
let additionalMessageData = '';
|
|
181
|
+
if (def) {
|
|
182
|
+
const { variableDescription, pattern } = getVariableDescription(defToVariableType(def));
|
|
183
|
+
if (pattern && variableDescription) {
|
|
184
|
+
additionalMessageData = `. Allowed unused ${variableDescription} must match ${pattern}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
varName: unusedVar.name,
|
|
189
|
+
action: 'defined',
|
|
190
|
+
additional: additionalMessageData,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Generate the warning message about the variable being
|
|
195
|
+
* assigned and unused, including the ignore pattern if configured.
|
|
196
|
+
* @param unusedVar eslint-scope variable object.
|
|
197
|
+
* @returns The message data to be used with this unused variable.
|
|
198
|
+
*/
|
|
199
|
+
function getAssignedMessageData(unusedVar) {
|
|
200
|
+
const def = unusedVar.defs.at(0);
|
|
201
|
+
let additionalMessageData = '';
|
|
202
|
+
if (def) {
|
|
203
|
+
const { variableDescription, pattern } = getVariableDescription(defToVariableType(def));
|
|
204
|
+
if (pattern && variableDescription) {
|
|
205
|
+
additionalMessageData = `. Allowed unused ${variableDescription} must match ${pattern}`;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
varName: unusedVar.name,
|
|
210
|
+
action: 'assigned a value',
|
|
211
|
+
additional: additionalMessageData,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Generate the warning message about a variable being used even though
|
|
216
|
+
* it is marked as being ignored.
|
|
217
|
+
* @param variable eslint-scope variable object
|
|
218
|
+
* @param variableType a simple name for the types of variables that this rule supports
|
|
219
|
+
* @returns The message data to be used with this used ignored variable.
|
|
220
|
+
*/
|
|
221
|
+
function getUsedIgnoredMessageData(variable, variableType) {
|
|
222
|
+
const { variableDescription, pattern } = getVariableDescription(variableType);
|
|
223
|
+
let additionalMessageData = '';
|
|
224
|
+
if (pattern && variableDescription) {
|
|
225
|
+
additionalMessageData = `. Used ${variableDescription} must not match ${pattern}`;
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
varName: variable.name,
|
|
229
|
+
additional: additionalMessageData,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
96
232
|
function collectUnusedVariables() {
|
|
97
233
|
/**
|
|
98
234
|
* Checks whether a node is a sibling of the rest property or not.
|
|
@@ -130,12 +266,24 @@ exports.default = (0, util_1.createRule)({
|
|
|
130
266
|
// If any used parameters occur after this parameter, do not report.
|
|
131
267
|
return !posteriorParams.some(v => v.references.length > 0 || v.eslintUsed);
|
|
132
268
|
}
|
|
133
|
-
const
|
|
269
|
+
const analysisResults = (0, util_1.collectVariables)(context);
|
|
270
|
+
const variables = [
|
|
271
|
+
...Array.from(analysisResults.unusedVariables, variable => ({
|
|
272
|
+
used: false,
|
|
273
|
+
variable,
|
|
274
|
+
})),
|
|
275
|
+
...Array.from(analysisResults.usedVariables, variable => ({
|
|
276
|
+
used: true,
|
|
277
|
+
variable,
|
|
278
|
+
})),
|
|
279
|
+
];
|
|
134
280
|
const unusedVariablesReturn = [];
|
|
135
|
-
for (const variable of
|
|
281
|
+
for (const { used, variable } of variables) {
|
|
136
282
|
// explicit global variables don't have definitions.
|
|
137
283
|
if (variable.defs.length === 0) {
|
|
138
|
-
|
|
284
|
+
if (!used) {
|
|
285
|
+
unusedVariablesReturn.push(variable);
|
|
286
|
+
}
|
|
139
287
|
continue;
|
|
140
288
|
}
|
|
141
289
|
const def = variable.defs[0];
|
|
@@ -148,18 +296,38 @@ exports.default = (0, util_1.createRule)({
|
|
|
148
296
|
// skip elements of array destructuring patterns
|
|
149
297
|
if ((def.name.parent.type === utils_1.AST_NODE_TYPES.ArrayPattern ||
|
|
150
298
|
refUsedInArrayPatterns) &&
|
|
151
|
-
|
|
299
|
+
def.name.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
152
300
|
options.destructuredArrayIgnorePattern?.test(def.name.name)) {
|
|
301
|
+
if (options.reportUsedIgnorePattern && used) {
|
|
302
|
+
context.report({
|
|
303
|
+
node: def.name,
|
|
304
|
+
messageId: 'usedIgnoredVar',
|
|
305
|
+
data: getUsedIgnoredMessageData(variable, 'array-destructure'),
|
|
306
|
+
});
|
|
307
|
+
}
|
|
153
308
|
continue;
|
|
154
309
|
}
|
|
310
|
+
if (def.type === utils_1.TSESLint.Scope.DefinitionType.ClassName) {
|
|
311
|
+
const hasStaticBlock = def.node.body.body.some(node => node.type === utils_1.AST_NODE_TYPES.StaticBlock);
|
|
312
|
+
if (options.ignoreClassWithStaticInitBlock && hasStaticBlock) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
155
316
|
// skip catch variables
|
|
156
317
|
if (def.type === utils_1.TSESLint.Scope.DefinitionType.CatchClause) {
|
|
157
318
|
if (options.caughtErrors === 'none') {
|
|
158
319
|
continue;
|
|
159
320
|
}
|
|
160
321
|
// skip ignored parameters
|
|
161
|
-
if (
|
|
322
|
+
if (def.name.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
162
323
|
options.caughtErrorsIgnorePattern?.test(def.name.name)) {
|
|
324
|
+
if (options.reportUsedIgnorePattern && used) {
|
|
325
|
+
context.report({
|
|
326
|
+
node: def.name,
|
|
327
|
+
messageId: 'usedIgnoredVar',
|
|
328
|
+
data: getUsedIgnoredMessageData(variable, 'catch-clause'),
|
|
329
|
+
});
|
|
330
|
+
}
|
|
163
331
|
continue;
|
|
164
332
|
}
|
|
165
333
|
}
|
|
@@ -169,8 +337,15 @@ exports.default = (0, util_1.createRule)({
|
|
|
169
337
|
continue;
|
|
170
338
|
}
|
|
171
339
|
// skip ignored parameters
|
|
172
|
-
if (
|
|
340
|
+
if (def.name.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
173
341
|
options.argsIgnorePattern?.test(def.name.name)) {
|
|
342
|
+
if (options.reportUsedIgnorePattern && used) {
|
|
343
|
+
context.report({
|
|
344
|
+
node: def.name,
|
|
345
|
+
messageId: 'usedIgnoredVar',
|
|
346
|
+
data: getUsedIgnoredMessageData(variable, 'parameter'),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
174
349
|
continue;
|
|
175
350
|
}
|
|
176
351
|
// if "args" option is "after-used", skip used variables
|
|
@@ -180,12 +355,17 @@ exports.default = (0, util_1.createRule)({
|
|
|
180
355
|
continue;
|
|
181
356
|
}
|
|
182
357
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
358
|
+
// skip ignored variables
|
|
359
|
+
else if (def.name.type === utils_1.AST_NODE_TYPES.Identifier &&
|
|
360
|
+
options.varsIgnorePattern?.test(def.name.name)) {
|
|
361
|
+
if (options.reportUsedIgnorePattern && used) {
|
|
362
|
+
context.report({
|
|
363
|
+
node: def.name,
|
|
364
|
+
messageId: 'usedIgnoredVar',
|
|
365
|
+
data: getUsedIgnoredMessageData(variable, 'variable'),
|
|
366
|
+
});
|
|
188
367
|
}
|
|
368
|
+
continue;
|
|
189
369
|
}
|
|
190
370
|
if (hasRestSpreadSibling(variable)) {
|
|
191
371
|
continue;
|
|
@@ -195,7 +375,9 @@ exports.default = (0, util_1.createRule)({
|
|
|
195
375
|
if (variable.eslintUsed) {
|
|
196
376
|
continue;
|
|
197
377
|
}
|
|
198
|
-
|
|
378
|
+
if (!used) {
|
|
379
|
+
unusedVariablesReturn.push(variable);
|
|
380
|
+
}
|
|
199
381
|
}
|
|
200
382
|
return unusedVariablesReturn;
|
|
201
383
|
}
|
|
@@ -224,62 +406,6 @@ exports.default = (0, util_1.createRule)({
|
|
|
224
406
|
},
|
|
225
407
|
// collect
|
|
226
408
|
'Program:exit'(programNode) {
|
|
227
|
-
/**
|
|
228
|
-
* Generates the message data about the variable being defined and unused,
|
|
229
|
-
* including the ignore pattern if configured.
|
|
230
|
-
* @param unusedVar eslint-scope variable object.
|
|
231
|
-
* @returns The message data to be used with this unused variable.
|
|
232
|
-
*/
|
|
233
|
-
function getDefinedMessageData(unusedVar) {
|
|
234
|
-
const defType = unusedVar.defs[0]?.type;
|
|
235
|
-
let type;
|
|
236
|
-
let pattern;
|
|
237
|
-
if (defType === utils_1.TSESLint.Scope.DefinitionType.CatchClause &&
|
|
238
|
-
options.caughtErrorsIgnorePattern) {
|
|
239
|
-
type = 'args';
|
|
240
|
-
pattern = options.caughtErrorsIgnorePattern.toString();
|
|
241
|
-
}
|
|
242
|
-
else if (defType === utils_1.TSESLint.Scope.DefinitionType.Parameter &&
|
|
243
|
-
options.argsIgnorePattern) {
|
|
244
|
-
type = 'args';
|
|
245
|
-
pattern = options.argsIgnorePattern.toString();
|
|
246
|
-
}
|
|
247
|
-
else if (defType !== utils_1.TSESLint.Scope.DefinitionType.Parameter &&
|
|
248
|
-
options.varsIgnorePattern) {
|
|
249
|
-
type = 'vars';
|
|
250
|
-
pattern = options.varsIgnorePattern.toString();
|
|
251
|
-
}
|
|
252
|
-
const additional = type
|
|
253
|
-
? `. Allowed unused ${type} must match ${pattern}`
|
|
254
|
-
: '';
|
|
255
|
-
return {
|
|
256
|
-
varName: unusedVar.name,
|
|
257
|
-
action: 'defined',
|
|
258
|
-
additional,
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Generate the warning message about the variable being
|
|
263
|
-
* assigned and unused, including the ignore pattern if configured.
|
|
264
|
-
* @param unusedVar eslint-scope variable object.
|
|
265
|
-
* @returns The message data to be used with this unused variable.
|
|
266
|
-
*/
|
|
267
|
-
function getAssignedMessageData(unusedVar) {
|
|
268
|
-
const def = unusedVar.defs.at(0);
|
|
269
|
-
let additional = '';
|
|
270
|
-
if (options.destructuredArrayIgnorePattern &&
|
|
271
|
-
def?.name.parent.type === utils_1.AST_NODE_TYPES.ArrayPattern) {
|
|
272
|
-
additional = `. Allowed unused elements of array destructuring patterns must match ${options.destructuredArrayIgnorePattern.toString()}`;
|
|
273
|
-
}
|
|
274
|
-
else if (options.varsIgnorePattern) {
|
|
275
|
-
additional = `. Allowed unused vars must match ${options.varsIgnorePattern.toString()}`;
|
|
276
|
-
}
|
|
277
|
-
return {
|
|
278
|
-
varName: unusedVar.name,
|
|
279
|
-
action: 'assigned a value',
|
|
280
|
-
additional,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
409
|
const unusedVars = collectUnusedVariables();
|
|
284
410
|
for (const unusedVar of unusedVars) {
|
|
285
411
|
// Report the first declaration.
|
|
@@ -289,6 +415,8 @@ exports.default = (0, util_1.createRule)({
|
|
|
289
415
|
const id = writeReferences.length
|
|
290
416
|
? writeReferences[writeReferences.length - 1].identifier
|
|
291
417
|
: unusedVar.identifiers[0];
|
|
418
|
+
const usedOnlyAsType = unusedVar.references.some(ref => (0, referenceContainsTypeQuery_1.referenceContainsTypeQuery)(ref.identifier));
|
|
419
|
+
const messageId = usedOnlyAsType ? 'usedOnlyAsType' : 'unusedVar';
|
|
292
420
|
const { start } = id.loc;
|
|
293
421
|
const idLength = id.name.length;
|
|
294
422
|
const loc = {
|
|
@@ -300,7 +428,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
300
428
|
};
|
|
301
429
|
context.report({
|
|
302
430
|
loc,
|
|
303
|
-
messageId
|
|
431
|
+
messageId,
|
|
304
432
|
data: unusedVar.references.some(ref => ref.isWrite())
|
|
305
433
|
? getAssignedMessageData(unusedVar)
|
|
306
434
|
: getDefinedMessageData(unusedVar),
|
|
@@ -458,16 +586,7 @@ namespace Test {
|
|
|
458
586
|
}
|
|
459
587
|
type T = Test.Foo.T; // Error: Namespace 'Test' has no exported member 'Foo'.
|
|
460
588
|
|
|
461
|
-
|
|
462
|
-
/*
|
|
463
|
-
|
|
464
|
-
###### TODO ######
|
|
465
|
-
|
|
466
|
-
We currently extend base `no-unused-vars` implementation because it's easier and lighter-weight.
|
|
467
|
-
|
|
468
|
-
Because of this, there are a few false-negatives which won't get caught.
|
|
469
|
-
We could fix these if we fork the base rule; but that's a lot of code (~650 lines) to add in.
|
|
470
|
-
I didn't want to do that just yet without some real-world issues, considering these are pretty rare edge-cases.
|
|
589
|
+
---
|
|
471
590
|
|
|
472
591
|
These cases are mishandled because the base rule assumes that each variable has one def, but type-value shadowing
|
|
473
592
|
creates a variable with two defs
|