@typescript-eslint/eslint-plugin 8.0.0-alpha.4 → 8.0.0-alpha.40

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.
Files changed (259) hide show
  1. package/dist/configs/all.js +6 -6
  2. package/dist/configs/all.js.map +1 -1
  3. package/dist/configs/disable-type-checked.js +3 -3
  4. package/dist/configs/disable-type-checked.js.map +1 -1
  5. package/dist/configs/recommended-type-checked-only.js +6 -0
  6. package/dist/configs/recommended-type-checked-only.js.map +1 -1
  7. package/dist/configs/recommended-type-checked.js +13 -2
  8. package/dist/configs/recommended-type-checked.js.map +1 -1
  9. package/dist/configs/recommended.js +7 -2
  10. package/dist/configs/recommended.js.map +1 -1
  11. package/dist/configs/strict-type-checked-only.js +2 -2
  12. package/dist/configs/strict-type-checked-only.js.map +1 -1
  13. package/dist/configs/strict-type-checked.js +9 -5
  14. package/dist/configs/strict-type-checked.js.map +1 -1
  15. package/dist/configs/strict.js +7 -3
  16. package/dist/configs/strict.js.map +1 -1
  17. package/dist/configs/stylistic-type-checked-only.js +3 -0
  18. package/dist/configs/stylistic-type-checked-only.js.map +1 -1
  19. package/dist/configs/stylistic-type-checked.js +3 -2
  20. package/dist/configs/stylistic-type-checked.js.map +1 -1
  21. package/dist/configs/stylistic.js +0 -2
  22. package/dist/configs/stylistic.js.map +1 -1
  23. package/dist/rules/adjacent-overload-signatures.js +2 -6
  24. package/dist/rules/adjacent-overload-signatures.js.map +1 -1
  25. package/dist/rules/array-type.js +14 -5
  26. package/dist/rules/array-type.js.map +1 -1
  27. package/dist/rules/class-literal-property-style.js +9 -7
  28. package/dist/rules/class-literal-property-style.js.map +1 -1
  29. package/dist/rules/consistent-type-assertions.js +5 -19
  30. package/dist/rules/consistent-type-assertions.js.map +1 -1
  31. package/dist/rules/consistent-type-definitions.js +1 -1
  32. package/dist/rules/consistent-type-definitions.js.map +1 -1
  33. package/dist/rules/default-param-last.js +6 -1
  34. package/dist/rules/default-param-last.js.map +1 -1
  35. package/dist/rules/dot-notation.js +8 -1
  36. package/dist/rules/dot-notation.js.map +1 -1
  37. package/dist/rules/enum-utils/shared.js +3 -4
  38. package/dist/rules/enum-utils/shared.js.map +1 -1
  39. package/dist/rules/explicit-member-accessibility.js +49 -37
  40. package/dist/rules/explicit-member-accessibility.js.map +1 -1
  41. package/dist/rules/index.js +12 -6
  42. package/dist/rules/index.js.map +1 -1
  43. package/dist/rules/init-declarations.js +57 -1
  44. package/dist/rules/init-declarations.js.map +1 -1
  45. package/dist/rules/member-ordering.js +8 -2
  46. package/dist/rules/member-ordering.js.map +1 -1
  47. package/dist/rules/naming-convention-utils/parse-options.js +2 -5
  48. package/dist/rules/naming-convention-utils/parse-options.js.map +1 -1
  49. package/dist/rules/naming-convention-utils/shared.js +3 -4
  50. package/dist/rules/naming-convention-utils/shared.js.map +1 -1
  51. package/dist/rules/naming-convention-utils/validator.js +1 -2
  52. package/dist/rules/naming-convention-utils/validator.js.map +1 -1
  53. package/dist/rules/naming-convention.js +3 -1
  54. package/dist/rules/naming-convention.js.map +1 -1
  55. package/dist/rules/no-array-delete.js +1 -1
  56. package/dist/rules/no-array-delete.js.map +1 -1
  57. package/dist/rules/no-base-to-string.js +1 -1
  58. package/dist/rules/no-base-to-string.js.map +1 -1
  59. package/dist/rules/no-duplicate-type-constituents.js +1 -1
  60. package/dist/rules/no-duplicate-type-constituents.js.map +1 -1
  61. package/dist/rules/no-dynamic-delete.js +8 -40
  62. package/dist/rules/no-dynamic-delete.js.map +1 -1
  63. package/dist/rules/no-empty-interface.js +2 -1
  64. package/dist/rules/no-empty-interface.js.map +1 -1
  65. package/dist/rules/no-empty-object-type.js +141 -0
  66. package/dist/rules/no-empty-object-type.js.map +1 -0
  67. package/dist/rules/no-extraneous-class.js +11 -3
  68. package/dist/rules/no-extraneous-class.js.map +1 -1
  69. package/dist/rules/no-floating-promises.js +62 -39
  70. package/dist/rules/no-floating-promises.js.map +1 -1
  71. package/dist/rules/no-implied-eval.js +1 -8
  72. package/dist/rules/no-implied-eval.js.map +1 -1
  73. package/dist/rules/no-inferrable-types.js +1 -2
  74. package/dist/rules/no-inferrable-types.js.map +1 -1
  75. package/dist/rules/no-invalid-this.js +6 -0
  76. package/dist/rules/no-invalid-this.js.map +1 -1
  77. package/dist/rules/no-magic-numbers.js +32 -1
  78. package/dist/rules/no-magic-numbers.js.map +1 -1
  79. package/dist/rules/no-misused-new.js +4 -3
  80. package/dist/rules/no-misused-new.js.map +1 -1
  81. package/dist/rules/no-require-imports.js +13 -3
  82. package/dist/rules/no-require-imports.js.map +1 -1
  83. package/dist/rules/no-restricted-imports.js +3 -6
  84. package/dist/rules/no-restricted-imports.js.map +1 -1
  85. package/dist/rules/{ban-types.js → no-restricted-types.js} +17 -91
  86. package/dist/rules/no-restricted-types.js.map +1 -0
  87. package/dist/rules/no-shadow.js +4 -9
  88. package/dist/rules/no-shadow.js.map +1 -1
  89. package/dist/rules/{no-useless-template-literals.js → no-unnecessary-template-expression.js} +6 -6
  90. package/dist/rules/no-unnecessary-template-expression.js.map +1 -0
  91. package/dist/rules/no-unnecessary-type-assertion.js +15 -13
  92. package/dist/rules/no-unnecessary-type-assertion.js.map +1 -1
  93. package/dist/rules/no-unnecessary-type-parameters.js +302 -0
  94. package/dist/rules/no-unnecessary-type-parameters.js.map +1 -0
  95. package/dist/rules/no-unsafe-argument.js +4 -2
  96. package/dist/rules/no-unsafe-argument.js.map +1 -1
  97. package/dist/rules/no-unsafe-assignment.js +24 -9
  98. package/dist/rules/no-unsafe-assignment.js.map +1 -1
  99. package/dist/rules/no-unsafe-function-type.js +47 -0
  100. package/dist/rules/no-unsafe-function-type.js.map +1 -0
  101. package/dist/rules/no-unsafe-member-access.js +8 -2
  102. package/dist/rules/no-unsafe-member-access.js.map +1 -1
  103. package/dist/rules/no-unsafe-return.js +7 -2
  104. package/dist/rules/no-unsafe-return.js.map +1 -1
  105. package/dist/rules/no-unsafe-unary-minus.js +1 -0
  106. package/dist/rules/no-unsafe-unary-minus.js.map +1 -1
  107. package/dist/rules/no-unused-expressions.js +1 -0
  108. package/dist/rules/no-unused-expressions.js.map +1 -1
  109. package/dist/rules/no-unused-vars.js +196 -75
  110. package/dist/rules/no-unused-vars.js.map +1 -1
  111. package/dist/rules/no-use-before-define.js +2 -16
  112. package/dist/rules/no-use-before-define.js.map +1 -1
  113. package/dist/rules/no-useless-constructor.js +0 -1
  114. package/dist/rules/no-useless-constructor.js.map +1 -1
  115. package/dist/rules/no-var-requires.js +2 -1
  116. package/dist/rules/no-var-requires.js.map +1 -1
  117. package/dist/rules/no-wrapper-object-types.js +61 -0
  118. package/dist/rules/no-wrapper-object-types.js.map +1 -0
  119. package/dist/rules/only-throw-error.js +1 -1
  120. package/dist/rules/only-throw-error.js.map +1 -1
  121. package/dist/rules/prefer-as-const.js +1 -1
  122. package/dist/rules/prefer-as-const.js.map +1 -1
  123. package/dist/rules/prefer-destructuring.js +3 -1
  124. package/dist/rules/prefer-destructuring.js.map +1 -1
  125. package/dist/rules/prefer-find.js +1 -0
  126. package/dist/rules/prefer-find.js.map +1 -1
  127. package/dist/rules/prefer-includes.js +1 -1
  128. package/dist/rules/prefer-includes.js.map +1 -1
  129. package/dist/rules/prefer-literal-enum-member.js +43 -2
  130. package/dist/rules/prefer-literal-enum-member.js.map +1 -1
  131. package/dist/rules/prefer-namespace-keyword.js +1 -1
  132. package/dist/rules/prefer-namespace-keyword.js.map +1 -1
  133. package/dist/rules/prefer-nullish-coalescing.js +8 -6
  134. package/dist/rules/prefer-nullish-coalescing.js.map +1 -1
  135. package/dist/rules/prefer-optional-chain-utils/analyzeChain.js +1 -2
  136. package/dist/rules/prefer-optional-chain-utils/analyzeChain.js.map +1 -1
  137. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js +1 -2
  138. package/dist/rules/prefer-optional-chain-utils/checkNullishAndReport.js.map +1 -1
  139. package/dist/rules/prefer-optional-chain-utils/compareNodes.js +1 -2
  140. package/dist/rules/prefer-optional-chain-utils/compareNodes.js.map +1 -1
  141. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js +6 -11
  142. package/dist/rules/prefer-optional-chain-utils/gatherLogicalOperands.js.map +1 -1
  143. package/dist/rules/prefer-promise-reject-errors.js +1 -1
  144. package/dist/rules/prefer-promise-reject-errors.js.map +1 -1
  145. package/dist/rules/prefer-readonly.js +24 -12
  146. package/dist/rules/prefer-readonly.js.map +1 -1
  147. package/dist/rules/prefer-regexp-exec.js +15 -6
  148. package/dist/rules/prefer-regexp-exec.js.map +1 -1
  149. package/dist/rules/prefer-string-starts-ends-with.js.map +1 -1
  150. package/dist/rules/prefer-ts-expect-error.js +2 -1
  151. package/dist/rules/prefer-ts-expect-error.js.map +1 -1
  152. package/dist/rules/require-await.js +1 -1
  153. package/dist/rules/require-await.js.map +1 -1
  154. package/dist/rules/restrict-template-expressions.js +2 -2
  155. package/dist/rules/restrict-template-expressions.js.map +1 -1
  156. package/dist/rules/return-await.js +117 -52
  157. package/dist/rules/return-await.js.map +1 -1
  158. package/dist/rules/sort-type-constituents.js +23 -1
  159. package/dist/rules/sort-type-constituents.js.map +1 -1
  160. package/dist/rules/strict-boolean-expressions.js +1 -3
  161. package/dist/rules/strict-boolean-expressions.js.map +1 -1
  162. package/dist/rules/switch-exhaustiveness-check.js +7 -9
  163. package/dist/rules/switch-exhaustiveness-check.js.map +1 -1
  164. package/dist/rules/unified-signatures.js +3 -1
  165. package/dist/rules/unified-signatures.js.map +1 -1
  166. package/dist/util/astUtils.js +2 -3
  167. package/dist/util/astUtils.js.map +1 -1
  168. package/dist/util/collectUnusedVariables.js +110 -73
  169. package/dist/util/collectUnusedVariables.js.map +1 -1
  170. package/dist/util/createRule.js.map +1 -1
  171. package/dist/util/escapeRegExp.js +1 -2
  172. package/dist/util/escapeRegExp.js.map +1 -1
  173. package/dist/util/explicitReturnTypeUtils.js +11 -7
  174. package/dist/util/explicitReturnTypeUtils.js.map +1 -1
  175. package/dist/util/getESLintCoreRule.js +2 -2
  176. package/dist/util/getESLintCoreRule.js.map +1 -1
  177. package/dist/util/getForStatementHeadLoc.js +1 -2
  178. package/dist/util/getForStatementHeadLoc.js.map +1 -1
  179. package/dist/util/getFunctionHeadLoc.js +1 -2
  180. package/dist/util/getFunctionHeadLoc.js.map +1 -1
  181. package/dist/util/getMemberHeadLoc.js +80 -0
  182. package/dist/util/getMemberHeadLoc.js.map +1 -0
  183. package/dist/util/getOperatorPrecedence.js +5 -5
  184. package/dist/util/getOperatorPrecedence.js.map +1 -1
  185. package/dist/util/getStaticStringValue.js +1 -2
  186. package/dist/util/getStaticStringValue.js.map +1 -1
  187. package/dist/util/getStringLength.js +1 -2
  188. package/dist/util/getStringLength.js.map +1 -1
  189. package/dist/util/getTextWithParentheses.js +17 -0
  190. package/dist/util/getTextWithParentheses.js.map +1 -0
  191. package/dist/util/getThisExpression.js +1 -2
  192. package/dist/util/getThisExpression.js.map +1 -1
  193. package/dist/util/getWrappedCode.js +1 -2
  194. package/dist/util/getWrappedCode.js.map +1 -1
  195. package/dist/util/getWrappingFixer.js +2 -3
  196. package/dist/util/getWrappingFixer.js.map +1 -1
  197. package/dist/util/index.js +2 -0
  198. package/dist/util/index.js.map +1 -1
  199. package/dist/util/isAssignee.js +1 -2
  200. package/dist/util/isAssignee.js.map +1 -1
  201. package/dist/util/isNodeEqual.js +1 -2
  202. package/dist/util/isNodeEqual.js.map +1 -1
  203. package/dist/util/isNullLiteral.js +1 -2
  204. package/dist/util/isNullLiteral.js.map +1 -1
  205. package/dist/util/isTypeImport.js +22 -0
  206. package/dist/util/isTypeImport.js.map +1 -0
  207. package/dist/util/isUndefinedIdentifier.js +1 -2
  208. package/dist/util/isUndefinedIdentifier.js.map +1 -1
  209. package/dist/util/misc.js +14 -14
  210. package/dist/util/misc.js.map +1 -1
  211. package/dist/util/objectIterators.js +3 -4
  212. package/dist/util/objectIterators.js.map +1 -1
  213. package/dist/util/referenceContainsTypeQuery.js +20 -0
  214. package/dist/util/referenceContainsTypeQuery.js.map +1 -0
  215. package/dist/util/scopeUtils.js +11 -0
  216. package/dist/util/scopeUtils.js.map +1 -0
  217. package/docs/rules/array-type.mdx +4 -1
  218. package/docs/rules/ban-types.md +22 -0
  219. package/docs/rules/consistent-indexed-object-style.mdx +1 -1
  220. package/docs/rules/consistent-type-imports.mdx +1 -1
  221. package/docs/rules/naming-convention.mdx +16 -0
  222. package/docs/rules/no-base-to-string.mdx +1 -1
  223. package/docs/rules/no-duplicate-imports.mdx +1 -1
  224. package/docs/rules/no-dynamic-delete.mdx +12 -7
  225. package/docs/rules/no-empty-interface.mdx +10 -0
  226. package/docs/rules/no-empty-object-type.mdx +145 -0
  227. package/docs/rules/no-extraneous-class.mdx +6 -0
  228. package/docs/rules/no-floating-promises.mdx +103 -4
  229. package/docs/rules/no-import-type-side-effects.mdx +1 -1
  230. package/docs/rules/no-misused-promises.mdx +18 -20
  231. package/docs/rules/no-require-imports.mdx +28 -1
  232. package/docs/rules/no-restricted-types.mdx +71 -0
  233. package/docs/rules/no-type-alias.mdx +1 -1
  234. package/docs/rules/no-unnecessary-boolean-literal-compare.mdx +12 -12
  235. package/docs/rules/no-unnecessary-template-expression.mdx +85 -0
  236. package/docs/rules/no-unnecessary-type-parameters.mdx +115 -0
  237. package/docs/rules/no-unsafe-function-type.mdx +63 -0
  238. package/docs/rules/no-unused-expressions.mdx +41 -1
  239. package/docs/rules/no-unused-vars.mdx +5 -0
  240. package/docs/rules/no-useless-template-literals.mdx +3 -59
  241. package/docs/rules/no-var-requires.mdx +6 -0
  242. package/docs/rules/no-wrapper-object-types.mdx +67 -0
  243. package/docs/rules/only-throw-error.mdx +7 -0
  244. package/docs/rules/prefer-readonly-parameter-types.mdx +10 -4
  245. package/docs/rules/prefer-ts-expect-error.mdx +10 -0
  246. package/docs/rules/require-await.mdx +2 -2
  247. package/docs/rules/restrict-template-expressions.mdx +1 -1
  248. package/docs/rules/return-await.mdx +55 -21
  249. package/docs/rules/sort-type-constituents.mdx +29 -9
  250. package/docs/rules/sort-type-union-intersection-members.mdx +12 -0
  251. package/docs/rules/unbound-method.mdx +3 -2
  252. package/package.json +14 -19
  253. package/rules.d.ts +34 -2
  254. package/dist/rules/ban-types.js.map +0 -1
  255. package/dist/rules/no-throw-literal.js +0 -97
  256. package/dist/rules/no-throw-literal.js.map +0 -1
  257. package/dist/rules/no-useless-template-literals.js.map +0 -1
  258. package/docs/rules/ban-types.mdx +0 -138
  259. package/docs/rules/no-throw-literal.mdx +0 -25
@@ -27,17 +27,17 @@ const utils_1 = require("@typescript-eslint/utils");
27
27
  const ts = __importStar(require("typescript"));
28
28
  const util_1 = require("../util");
29
29
  exports.default = (0, util_1.createRule)({
30
- name: 'no-useless-template-literals',
30
+ name: 'no-unnecessary-template-expression',
31
31
  meta: {
32
32
  fixable: 'code',
33
33
  type: 'suggestion',
34
34
  docs: {
35
- description: 'Disallow unnecessary template literals',
35
+ description: 'Disallow unnecessary template expressions',
36
36
  recommended: 'strict',
37
37
  requiresTypeChecking: true,
38
38
  },
39
39
  messages: {
40
- noUselessTemplateLiteral: 'Template literal expression is unnecessary and can be simplified.',
40
+ noUnnecessaryTemplateExpression: 'Template literal expression is unnecessary and can be simplified.',
41
41
  },
42
42
  schema: [],
43
43
  },
@@ -84,7 +84,7 @@ exports.default = (0, util_1.createRule)({
84
84
  if (hasSingleStringVariable) {
85
85
  context.report({
86
86
  node: node.expressions[0],
87
- messageId: 'noUselessTemplateLiteral',
87
+ messageId: 'noUnnecessaryTemplateExpression',
88
88
  fix(fixer) {
89
89
  const [prevQuasi, nextQuasi] = node.quasis;
90
90
  // Remove the quasis and backticks.
@@ -110,7 +110,7 @@ exports.default = (0, util_1.createRule)({
110
110
  fixableExpressions.forEach(expression => {
111
111
  context.report({
112
112
  node: expression,
113
- messageId: 'noUselessTemplateLiteral',
113
+ messageId: 'noUnnecessaryTemplateExpression',
114
114
  fix(fixer) {
115
115
  const index = node.expressions.indexOf(expression);
116
116
  const prevQuasi = node.quasis[index];
@@ -150,4 +150,4 @@ exports.default = (0, util_1.createRule)({
150
150
  };
151
151
  },
152
152
  });
153
- //# sourceMappingURL=no-useless-template-literals.js.map
153
+ //# sourceMappingURL=no-unnecessary-template-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-unnecessary-template-expression.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-template-expression.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,10 @@ exports.default = (0, util_1.createRule)({
84
84
  // check if the defined variable type has changed since assignment
85
85
  const declarationType = checker.getTypeFromTypeNode(declaration.type);
86
86
  const type = (0, util_1.getConstrainedTypeAtLocation)(services, node);
87
- if (declarationType === type) {
87
+ if (declarationType === type &&
88
+ // `declare`s are never narrowed, so never skip them
89
+ !services.tsNodeToESTreeNodeMap.get(declaration)
90
+ .parent.declare) {
88
91
  // possibly used before assigned, so just skip it
89
92
  // better to false negative and skip it, than false positive and fix to compile erroring code
90
93
  //
@@ -100,19 +103,18 @@ exports.default = (0, util_1.createRule)({
100
103
  node.typeName.type === utils_1.AST_NODE_TYPES.Identifier &&
101
104
  node.typeName.name === 'const');
102
105
  }
103
- function isLiteralVariableDeclarationChangingTypeWithConst(node) {
104
- /**
105
- * If the type assertion is on a template literal WITH expressions we
106
- * should keep the `const` casting
107
- * @see https://github.com/typescript-eslint/typescript-eslint/issues/8737
108
- */
109
- if (node.expression.type === utils_1.AST_NODE_TYPES.TemplateLiteral) {
110
- return node.expression.expressions.length === 0;
111
- }
106
+ function isImplicitlyNarrowedConstDeclaration({ expression, parent, }) {
112
107
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
113
- const maybeDeclarationNode = node.parent.parent;
108
+ const maybeDeclarationNode = parent.parent;
109
+ const isTemplateLiteralWithExpressions = expression.type === utils_1.AST_NODE_TYPES.TemplateLiteral &&
110
+ expression.expressions.length !== 0;
114
111
  return (maybeDeclarationNode.type === utils_1.AST_NODE_TYPES.VariableDeclaration &&
115
- maybeDeclarationNode.kind === 'const');
112
+ maybeDeclarationNode.kind === 'const' &&
113
+ /**
114
+ * Even on `const` variable declarations, template literals with expressions can sometimes be widened without a type assertion.
115
+ * @see https://github.com/typescript-eslint/typescript-eslint/issues/8737
116
+ */
117
+ !isTemplateLiteralWithExpressions);
116
118
  }
117
119
  function isTypeUnchanged(uncast, cast) {
118
120
  if (uncast === cast) {
@@ -219,7 +221,7 @@ exports.default = (0, util_1.createRule)({
219
221
  const uncastType = services.getTypeAtLocation(node.expression);
220
222
  const typeIsUnchanged = isTypeUnchanged(uncastType, castType);
221
223
  const wouldSameTypeBeInferred = castType.isLiteral()
222
- ? isLiteralVariableDeclarationChangingTypeWithConst(node)
224
+ ? isImplicitlyNarrowedConstDeclaration(node)
223
225
  : !isConstAssertion(node.typeAnnotation);
224
226
  if (typeIsUnchanged && wouldSameTypeBeInferred) {
225
227
  context.report({
@@ -1 +1 @@
1
- {"version":3,"file":"no-unnecessary-type-assertion.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-assertion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-unnecessary-type-assertion.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-assertion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const utils_1 = require("@typescript-eslint/utils");
27
+ const tsutils = __importStar(require("ts-api-utils"));
28
+ const ts = __importStar(require("typescript"));
29
+ const util_1 = require("../util");
30
+ exports.default = (0, util_1.createRule)({
31
+ defaultOptions: [],
32
+ meta: {
33
+ docs: {
34
+ description: 'Disallow type parameters that only appear once',
35
+ requiresTypeChecking: true,
36
+ },
37
+ messages: {
38
+ sole: 'Type parameter {{name}} is used only once.',
39
+ },
40
+ schema: [],
41
+ type: 'problem',
42
+ },
43
+ name: 'no-unnecessary-type-parameters',
44
+ create(context) {
45
+ const parserServices = (0, util_1.getParserServices)(context);
46
+ return {
47
+ [[
48
+ 'ArrowFunctionExpression[typeParameters]',
49
+ 'ClassDeclaration[typeParameters]',
50
+ 'ClassExpression[typeParameters]',
51
+ 'FunctionDeclaration[typeParameters]',
52
+ 'FunctionExpression[typeParameters]',
53
+ 'TSCallSignatureDeclaration[typeParameters]',
54
+ 'TSConstructorType[typeParameters]',
55
+ 'TSDeclareFunction[typeParameters]',
56
+ 'TSEmptyBodyFunctionExpression[typeParameters]',
57
+ 'TSFunctionType[typeParameters]',
58
+ 'TSMethodSignature[typeParameters]',
59
+ ].join(', ')](node) {
60
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node);
61
+ const checker = parserServices.program.getTypeChecker();
62
+ let counts;
63
+ for (const typeParameter of tsNode.typeParameters) {
64
+ const esTypeParameter = parserServices.tsNodeToESTreeNodeMap.get(typeParameter);
65
+ const scope = context.sourceCode.getScope(esTypeParameter);
66
+ // Quick path: if the type parameter is used multiple times in the AST,
67
+ // we don't need to dip into types to know it's repeated.
68
+ if (isTypeParameterRepeatedInAST(esTypeParameter, scope.references)) {
69
+ continue;
70
+ }
71
+ // For any inferred types, we have to dip into type checking.
72
+ counts ??= countTypeParameterUsage(checker, tsNode);
73
+ const identifierCounts = counts.get(typeParameter.name);
74
+ if (!identifierCounts || identifierCounts > 2) {
75
+ continue;
76
+ }
77
+ context.report({
78
+ data: {
79
+ name: typeParameter.name.text,
80
+ },
81
+ node: esTypeParameter,
82
+ messageId: 'sole',
83
+ });
84
+ }
85
+ },
86
+ };
87
+ },
88
+ });
89
+ function isTypeParameterRepeatedInAST(node, references) {
90
+ let total = 0;
91
+ for (const reference of references) {
92
+ // References inside the type parameter's definition don't count.
93
+ if (reference.identifier.range[0] < node.range[1] &&
94
+ reference.identifier.range[1] > node.range[0]) {
95
+ continue;
96
+ }
97
+ // Neither do references that aren't to the same type parameter,
98
+ // namely value-land (non-type) identifiers of the type parameter's type,
99
+ // and references to different type parameters or values.
100
+ if (!reference.isTypeReference ||
101
+ reference.identifier.name !== node.name.name) {
102
+ continue;
103
+ }
104
+ // If the type parameter is being used as a type argument, then we
105
+ // know the type parameter is being reused and can't be reported.
106
+ if (reference.identifier.parent.type === utils_1.AST_NODE_TYPES.TSTypeReference) {
107
+ const grandparent = skipConstituentsUpward(reference.identifier.parent.parent);
108
+ if (grandparent.type === utils_1.AST_NODE_TYPES.TSTypeParameterInstantiation &&
109
+ grandparent.params.includes(reference.identifier.parent)) {
110
+ return true;
111
+ }
112
+ }
113
+ total += 1;
114
+ if (total > 2) {
115
+ return true;
116
+ }
117
+ }
118
+ return false;
119
+ }
120
+ function skipConstituentsUpward(node) {
121
+ switch (node.type) {
122
+ case utils_1.AST_NODE_TYPES.TSIntersectionType:
123
+ case utils_1.AST_NODE_TYPES.TSUnionType:
124
+ return skipConstituentsUpward(node.parent);
125
+ default:
126
+ return node;
127
+ }
128
+ }
129
+ /**
130
+ * Count uses of type parameters in inferred return types.
131
+ * We need to resolve and analyze the inferred return type of a function
132
+ * to see whether it contains additional references to the type parameters.
133
+ * For classes, we need to do this for all their methods.
134
+ */
135
+ function countTypeParameterUsage(checker, node) {
136
+ const counts = new Map();
137
+ if (ts.isClassLike(node)) {
138
+ for (const typeParameter of node.typeParameters) {
139
+ collectTypeParameterUsageCounts(checker, typeParameter, counts);
140
+ }
141
+ for (const member of node.members) {
142
+ collectTypeParameterUsageCounts(checker, member, counts);
143
+ }
144
+ }
145
+ else {
146
+ collectTypeParameterUsageCounts(checker, node, counts);
147
+ }
148
+ return counts;
149
+ }
150
+ /**
151
+ * Populates {@link foundIdentifierUsages} by the number of times each type parameter
152
+ * appears in the given type by checking its uses through its type references.
153
+ * This is essentially a limited subset of the scope manager, but for types.
154
+ */
155
+ function collectTypeParameterUsageCounts(checker, node, foundIdentifierUsages) {
156
+ const visitedSymbolLists = new Set();
157
+ const type = checker.getTypeAtLocation(node);
158
+ const typeUsages = new Map();
159
+ const visitedConstraints = new Set();
160
+ let functionLikeType = false;
161
+ let visitedDefault = false;
162
+ if (ts.isCallSignatureDeclaration(node) ||
163
+ ts.isConstructorDeclaration(node)) {
164
+ functionLikeType = true;
165
+ visitSignature(checker.getSignatureFromDeclaration(node));
166
+ }
167
+ if (!functionLikeType) {
168
+ visitType(type, false);
169
+ }
170
+ function visitType(type, assumeMultipleUses) {
171
+ // Seeing the same type > (threshold=3 ** 2) times indicates a likely
172
+ // recursive type, like `type T = { [P in keyof T]: T }`.
173
+ // If it's not recursive, then heck, we've seen it enough times that any
174
+ // referenced types have been counted enough to qualify as used.
175
+ if (!type || incrementTypeUsages(type) > 9) {
176
+ return;
177
+ }
178
+ // https://github.com/JoshuaKGoldberg/ts-api-utils/issues/382
179
+ if (tsutils.isTypeParameter(type)) {
180
+ const declaration = type.getSymbol()?.getDeclarations()?.[0];
181
+ if (declaration) {
182
+ incrementIdentifierCount(declaration.name, assumeMultipleUses);
183
+ // Visiting the type of a constrained type parameter will recurse into
184
+ // the constraint. We avoid infinite loops by visiting each only once.
185
+ if (declaration.constraint &&
186
+ !visitedConstraints.has(declaration.constraint)) {
187
+ visitedConstraints.add(declaration.constraint);
188
+ visitType(checker.getTypeAtLocation(declaration.constraint), false);
189
+ }
190
+ if (declaration.default && !visitedDefault) {
191
+ visitedDefault = true;
192
+ visitType(checker.getTypeAtLocation(declaration.default), false);
193
+ }
194
+ }
195
+ }
196
+ // Intersections and unions like `0 | 1`
197
+ else if (tsutils.isUnionOrIntersectionType(type)) {
198
+ visitTypesList(type.types, assumeMultipleUses);
199
+ }
200
+ // Index access types like `T[K]`
201
+ else if (tsutils.isIndexedAccessType(type)) {
202
+ visitType(type.objectType, assumeMultipleUses);
203
+ visitType(type.indexType, assumeMultipleUses);
204
+ }
205
+ // Tuple types like `[K, V]`
206
+ // Generic type references like `Map<K, V>`
207
+ else if (tsutils.isTupleType(type) || tsutils.isTypeReference(type)) {
208
+ for (const typeArgument of type.typeArguments ?? []) {
209
+ visitType(typeArgument, true);
210
+ }
211
+ }
212
+ // Template literals like `a${T}b`
213
+ else if (tsutils.isTemplateLiteralType(type)) {
214
+ for (const subType of type.types) {
215
+ visitType(subType, assumeMultipleUses);
216
+ }
217
+ }
218
+ // Conditional types like `T extends string ? T : never`
219
+ else if (tsutils.isConditionalType(type)) {
220
+ visitType(type.checkType, assumeMultipleUses);
221
+ visitType(type.extendsType, assumeMultipleUses);
222
+ }
223
+ // Catch-all: inferred object types like `{ K: V }`.
224
+ // These catch-alls should be _after_ more specific checks like
225
+ // `isTypeReference` to avoid descending into all the properties of a
226
+ // generic interface/class, e.g. `Map<K, V>`.
227
+ else if (tsutils.isObjectType(type)) {
228
+ visitSymbolsListOnce(type.getProperties(), false);
229
+ if (isMappedType(type)) {
230
+ visitType(type.typeParameter, false);
231
+ }
232
+ for (const typeArgument of type.aliasTypeArguments ?? []) {
233
+ visitType(typeArgument, true);
234
+ }
235
+ visitType(type.getNumberIndexType(), true);
236
+ visitType(type.getStringIndexType(), true);
237
+ type.getCallSignatures().forEach(signature => {
238
+ functionLikeType = true;
239
+ visitSignature(signature);
240
+ });
241
+ type.getConstructSignatures().forEach(signature => {
242
+ functionLikeType = true;
243
+ visitSignature(signature);
244
+ });
245
+ }
246
+ // Catch-all: operator types like `keyof T`
247
+ else if (isOperatorType(type)) {
248
+ visitType(type.type, assumeMultipleUses);
249
+ }
250
+ // Catch-all: generic type references like `Exclude<T, null>`
251
+ else if (type.aliasTypeArguments) {
252
+ visitTypesList(type.aliasTypeArguments, true);
253
+ }
254
+ }
255
+ function incrementIdentifierCount(id, assumeMultipleUses) {
256
+ const identifierCount = foundIdentifierUsages.get(id) ?? 0;
257
+ const value = assumeMultipleUses ? 2 : 1;
258
+ foundIdentifierUsages.set(id, identifierCount + value);
259
+ }
260
+ function incrementTypeUsages(type) {
261
+ const count = (typeUsages.get(type) ?? 0) + 1;
262
+ typeUsages.set(type, count);
263
+ return count;
264
+ }
265
+ function visitSignature(signature) {
266
+ if (!signature) {
267
+ return;
268
+ }
269
+ if (signature.thisParameter) {
270
+ visitType(checker.getTypeOfSymbol(signature.thisParameter), false);
271
+ }
272
+ for (const parameter of signature.parameters) {
273
+ visitType(checker.getTypeOfSymbol(parameter), false);
274
+ }
275
+ for (const typeParameter of signature.getTypeParameters() ?? []) {
276
+ visitType(typeParameter, false);
277
+ }
278
+ visitType(checker.getTypePredicateOfSignature(signature)?.type ??
279
+ signature.getReturnType(), false);
280
+ }
281
+ function visitSymbolsListOnce(symbols, assumeMultipleUses) {
282
+ if (visitedSymbolLists.has(symbols)) {
283
+ return;
284
+ }
285
+ visitedSymbolLists.add(symbols);
286
+ for (const symbol of symbols) {
287
+ visitType(checker.getTypeOfSymbol(symbol), assumeMultipleUses);
288
+ }
289
+ }
290
+ function visitTypesList(types, assumeMultipleUses) {
291
+ for (const type of types) {
292
+ visitType(type, assumeMultipleUses);
293
+ }
294
+ }
295
+ }
296
+ function isMappedType(type) {
297
+ return 'typeParameter' in type;
298
+ }
299
+ function isOperatorType(type) {
300
+ return 'type' in type && !!type.type;
301
+ }
302
+ //# sourceMappingURL=no-unnecessary-type-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-unnecessary-type-parameters.js","sourceRoot":"","sources":["../../src/rules/no-unnecessary-type-parameters.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const utils_1 = require("@typescript-eslint/utils");
4
4
  const util_1 = require("../util");
5
5
  class FunctionSignature {
6
+ paramTypes;
7
+ restType;
8
+ parameterTypeIndex = 0;
6
9
  static create(checker, tsNode) {
7
10
  const signature = checker.getResolvedSignature(tsNode);
8
11
  if (!signature) {
@@ -44,11 +47,10 @@ class FunctionSignature {
44
47
  }
45
48
  return new this(paramTypes, restType);
46
49
  }
50
+ hasConsumedArguments = false;
47
51
  constructor(paramTypes, restType) {
48
52
  this.paramTypes = paramTypes;
49
53
  this.restType = restType;
50
- this.parameterTypeIndex = 0;
51
- this.hasConsumedArguments = false;
52
54
  }
53
55
  getNextParameterType() {
54
56
  const index = this.parameterTypeIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"no-unsafe-argument.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-argument.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-unsafe-argument.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-argument.ts"],"names":[],"mappings":"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"}
@@ -36,15 +36,15 @@ exports.default = (0, util_1.createRule)({
36
36
  requiresTypeChecking: true,
37
37
  },
38
38
  messages: {
39
- anyAssignment: 'Unsafe assignment of an `any` value.',
39
+ anyAssignment: 'Unsafe assignment of an {{sender}} value.',
40
40
  anyAssignmentThis: [
41
- 'Unsafe assignment of an `any` value. `this` is typed as `any`.',
41
+ 'Unsafe assignment of an {{sender}} value. `this` is typed as `any`.',
42
42
  'You can try to fix this by turning on the `noImplicitThis` compiler option, or adding a `this` parameter to the function.',
43
43
  ].join('\n'),
44
- unsafeArrayPattern: 'Unsafe array destructuring of an `any` array value.',
45
- unsafeArrayPatternFromTuple: 'Unsafe array destructuring of a tuple element with an `any` value.',
44
+ unsafeArrayPattern: 'Unsafe array destructuring of an {{sender}} array value.',
45
+ unsafeArrayPatternFromTuple: 'Unsafe array destructuring of a tuple element with an {{sender}} value.',
46
46
  unsafeAssignment: 'Unsafe assignment of type {{sender}} to a variable of type {{receiver}}.',
47
- unsafeArraySpread: 'Unsafe spread of an `any` value in an array.',
47
+ unsafeArraySpread: 'Unsafe spread of an {{sender}} value in an array.',
48
48
  },
49
49
  schema: [],
50
50
  },
@@ -71,6 +71,7 @@ exports.default = (0, util_1.createRule)({
71
71
  context.report({
72
72
  node: receiverNode,
73
73
  messageId: 'unsafeArrayPattern',
74
+ data: createData(senderType),
74
75
  });
75
76
  return false;
76
77
  }
@@ -99,6 +100,7 @@ exports.default = (0, util_1.createRule)({
99
100
  context.report({
100
101
  node: receiverElement,
101
102
  messageId: 'unsafeArrayPatternFromTuple',
103
+ data: createData(senderType),
102
104
  });
103
105
  // we want to report on every invalid element in the tuple
104
106
  didReport = true;
@@ -162,6 +164,7 @@ exports.default = (0, util_1.createRule)({
162
164
  context.report({
163
165
  node: receiverProperty.value,
164
166
  messageId: 'unsafeArrayPatternFromTuple',
167
+ data: createData(senderType),
165
168
  });
166
169
  didReport = true;
167
170
  }
@@ -199,6 +202,7 @@ exports.default = (0, util_1.createRule)({
199
202
  context.report({
200
203
  node: reportingNode,
201
204
  messageId,
205
+ data: createData(senderType),
202
206
  });
203
207
  return true;
204
208
  }
@@ -213,10 +217,7 @@ exports.default = (0, util_1.createRule)({
213
217
  context.report({
214
218
  node: reportingNode,
215
219
  messageId: 'unsafeAssignment',
216
- data: {
217
- sender: checker.typeToString(sender),
218
- receiver: checker.typeToString(receiver),
219
- },
220
+ data: createData(sender, receiver),
220
221
  });
221
222
  return true;
222
223
  }
@@ -227,6 +228,19 @@ exports.default = (0, util_1.createRule)({
227
228
  : // no type annotation means the variable's type will just be inferred, thus equal
228
229
  0 /* ComparisonType.None */;
229
230
  }
231
+ function createData(senderType, receiverType) {
232
+ if (receiverType) {
233
+ return {
234
+ sender: '`' + checker.typeToString(senderType) + '`',
235
+ receiver: '`' + checker.typeToString(receiverType) + '`',
236
+ };
237
+ }
238
+ return {
239
+ sender: tsutils.isIntrinsicErrorType(senderType)
240
+ ? 'error typed'
241
+ : '`any`',
242
+ };
243
+ }
230
244
  return {
231
245
  'VariableDeclarator[init != null]'(node) {
232
246
  const init = (0, util_1.nullThrows)(node.init, util_1.NullThrowsReasons.MissingToken(node.type, 'init'));
@@ -265,6 +279,7 @@ exports.default = (0, util_1.createRule)({
265
279
  context.report({
266
280
  node: node,
267
281
  messageId: 'unsafeArraySpread',
282
+ data: createData(restType),
268
283
  });
269
284
  }
270
285
  },