@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":"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"}
|
@@ -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
|