@flint.fyi/ts 0.14.5 → 0.15.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.
Files changed (433) hide show
  1. package/lib/collectReferencedFilePaths.d.ts +1 -0
  2. package/lib/collectReferencedFilePaths.js +3 -2
  3. package/lib/convertTypeScriptDiagnosticToLanguageFileDiagnostic.d.ts +14 -0
  4. package/lib/{formatDiagnostic.js → convertTypeScriptDiagnosticToLanguageFileDiagnostic.js} +23 -15
  5. package/lib/createTypeScriptFileFromProgram.d.ts +4 -1
  6. package/lib/createTypeScriptFileFromProgram.js +25 -30
  7. package/lib/createTypeScriptFileFromProjectService.d.ts +3 -6
  8. package/lib/createTypeScriptFileFromProjectService.js +5 -11
  9. package/lib/directives/parseDirectivesFromTypeScriptFile.d.ts +8 -0
  10. package/lib/directives/parseDirectivesFromTypeScriptFile.js +12 -4
  11. package/lib/directives/parseDirectivesFromTypeScriptFile.test.d.ts +1 -0
  12. package/lib/directives/parseDirectivesFromTypeScriptFile.test.js +1 -0
  13. package/lib/getFirstEnumValues.d.ts +1 -0
  14. package/lib/getFirstEnumValues.js +1 -0
  15. package/lib/getFirstEnumValues.test.d.ts +1 -0
  16. package/lib/getFirstEnumValues.test.js +1 -0
  17. package/lib/getTSNodeRange.d.ts +1 -0
  18. package/lib/getTSNodeRange.js +1 -0
  19. package/lib/index.d.ts +6 -0
  20. package/lib/index.js +5 -0
  21. package/lib/language.d.ts +3 -2
  22. package/lib/language.js +7 -52
  23. package/lib/nodes.d.ts +1 -0
  24. package/lib/nodes.js +1 -0
  25. package/lib/normalizeRange.d.ts +1 -0
  26. package/lib/normalizeRange.js +4 -6
  27. package/lib/plugin.d.ts +79 -50
  28. package/lib/plugin.js +16 -1
  29. package/lib/prepareTypeScriptBasedLanguage.d.ts +11 -0
  30. package/lib/prepareTypeScriptBasedLanguage.js +59 -0
  31. package/lib/prepareTypeScriptFile.d.ts +9 -4
  32. package/lib/prepareTypeScriptFile.js +8 -2
  33. package/lib/rules/anyReturns.d.ts +2 -1
  34. package/lib/rules/anyReturns.js +22 -22
  35. package/lib/rules/anyReturns.test.d.ts +1 -0
  36. package/lib/rules/anyReturns.test.js +1 -0
  37. package/lib/rules/asyncPromiseExecutors.d.ts +2 -1
  38. package/lib/rules/asyncPromiseExecutors.js +4 -3
  39. package/lib/rules/asyncPromiseExecutors.test.d.ts +1 -0
  40. package/lib/rules/asyncPromiseExecutors.test.js +1 -0
  41. package/lib/rules/caseDeclarations.d.ts +3 -1
  42. package/lib/rules/caseDeclarations.js +7 -6
  43. package/lib/rules/caseDeclarations.test.d.ts +1 -0
  44. package/lib/rules/caseDeclarations.test.js +1 -0
  45. package/lib/rules/caseDuplicates.d.ts +2 -1
  46. package/lib/rules/caseDuplicates.js +4 -3
  47. package/lib/rules/caseDuplicates.test.d.ts +1 -0
  48. package/lib/rules/caseDuplicates.test.js +1 -0
  49. package/lib/rules/chainedAssignments.d.ts +2 -1
  50. package/lib/rules/chainedAssignments.js +3 -2
  51. package/lib/rules/chainedAssignments.test.d.ts +1 -0
  52. package/lib/rules/chainedAssignments.test.js +1 -0
  53. package/lib/rules/classAssignments.d.ts +2 -1
  54. package/lib/rules/classAssignments.js +4 -3
  55. package/lib/rules/classAssignments.test.d.ts +1 -0
  56. package/lib/rules/classAssignments.test.js +1 -0
  57. package/lib/rules/consecutiveNonNullAssertions.d.ts +2 -1
  58. package/lib/rules/consecutiveNonNullAssertions.js +1 -0
  59. package/lib/rules/consecutiveNonNullAssertions.test.d.ts +1 -0
  60. package/lib/rules/consecutiveNonNullAssertions.test.js +1 -0
  61. package/lib/rules/constantAssignments.d.ts +2 -1
  62. package/lib/rules/constantAssignments.js +4 -3
  63. package/lib/rules/constantAssignments.test.d.ts +1 -0
  64. package/lib/rules/constantAssignments.test.js +1 -0
  65. package/lib/rules/constructorReturns.d.ts +2 -1
  66. package/lib/rules/constructorReturns.js +3 -2
  67. package/lib/rules/constructorReturns.test.d.ts +1 -0
  68. package/lib/rules/constructorReturns.test.js +1 -0
  69. package/lib/rules/debuggerStatements.d.ts +2 -1
  70. package/lib/rules/debuggerStatements.js +1 -0
  71. package/lib/rules/debuggerStatements.test.d.ts +1 -0
  72. package/lib/rules/debuggerStatements.test.js +1 -0
  73. package/lib/rules/defaultCaseLast.d.ts +2 -1
  74. package/lib/rules/defaultCaseLast.js +4 -3
  75. package/lib/rules/defaultCaseLast.test.d.ts +1 -0
  76. package/lib/rules/defaultCaseLast.test.js +1 -0
  77. package/lib/rules/duplicateArguments.d.ts +3 -1
  78. package/lib/rules/duplicateArguments.js +3 -2
  79. package/lib/rules/duplicateArguments.test.d.ts +1 -0
  80. package/lib/rules/duplicateArguments.test.js +1 -0
  81. package/lib/rules/elseIfDuplicates.d.ts +2 -1
  82. package/lib/rules/elseIfDuplicates.js +6 -5
  83. package/lib/rules/elseIfDuplicates.test.d.ts +1 -0
  84. package/lib/rules/elseIfDuplicates.test.js +1 -0
  85. package/lib/rules/emptyBlocks.d.ts +2 -1
  86. package/lib/rules/emptyBlocks.js +12 -10
  87. package/lib/rules/emptyBlocks.test.d.ts +1 -0
  88. package/lib/rules/emptyBlocks.test.js +1 -0
  89. package/lib/rules/emptyDestructures.d.ts +3 -1
  90. package/lib/rules/emptyDestructures.js +3 -2
  91. package/lib/rules/emptyDestructures.test.d.ts +1 -0
  92. package/lib/rules/emptyDestructures.test.js +1 -0
  93. package/lib/rules/emptyStaticBlocks.d.ts +2 -1
  94. package/lib/rules/emptyStaticBlocks.js +5 -4
  95. package/lib/rules/emptyStaticBlocks.test.d.ts +1 -0
  96. package/lib/rules/emptyStaticBlocks.test.js +1 -0
  97. package/lib/rules/exceptionAssignments.d.ts +2 -1
  98. package/lib/rules/exceptionAssignments.js +4 -3
  99. package/lib/rules/exceptionAssignments.test.d.ts +1 -0
  100. package/lib/rules/exceptionAssignments.test.js +1 -0
  101. package/lib/rules/finallyStatementSafety.d.ts +7 -0
  102. package/lib/rules/finallyStatementSafety.js +71 -0
  103. package/lib/rules/finallyStatementSafety.test.d.ts +2 -0
  104. package/lib/rules/finallyStatementSafety.test.js +307 -0
  105. package/lib/rules/forDirections.d.ts +2 -1
  106. package/lib/rules/forDirections.js +18 -10
  107. package/lib/rules/forDirections.test.d.ts +1 -0
  108. package/lib/rules/forDirections.test.js +26 -0
  109. package/lib/rules/forInArrays.d.ts +2 -1
  110. package/lib/rules/forInArrays.js +8 -7
  111. package/lib/rules/forInArrays.test.d.ts +1 -0
  112. package/lib/rules/forInArrays.test.js +1 -0
  113. package/lib/rules/functionAssignments.d.ts +2 -1
  114. package/lib/rules/functionAssignments.js +4 -3
  115. package/lib/rules/functionAssignments.test.d.ts +1 -0
  116. package/lib/rules/functionAssignments.test.js +1 -0
  117. package/lib/rules/functionCurryingRedundancy.d.ts +7 -0
  118. package/lib/rules/functionCurryingRedundancy.js +77 -0
  119. package/lib/rules/functionCurryingRedundancy.test.d.ts +2 -0
  120. package/lib/rules/functionCurryingRedundancy.test.js +172 -0
  121. package/lib/rules/functionNewCalls.d.ts +3 -1
  122. package/lib/rules/functionNewCalls.js +7 -6
  123. package/lib/rules/functionNewCalls.test.d.ts +1 -0
  124. package/lib/rules/functionNewCalls.test.js +1 -0
  125. package/lib/rules/generatorFunctionYields.d.ts +3 -1
  126. package/lib/rules/generatorFunctionYields.js +3 -2
  127. package/lib/rules/generatorFunctionYields.test.d.ts +1 -0
  128. package/lib/rules/generatorFunctionYields.test.js +1 -0
  129. package/lib/rules/globalAssignments.d.ts +2 -1
  130. package/lib/rules/globalAssignments.js +10 -9
  131. package/lib/rules/globalAssignments.test.d.ts +1 -0
  132. package/lib/rules/globalAssignments.test.js +1 -0
  133. package/lib/rules/globalObjectCalls.d.ts +3 -1
  134. package/lib/rules/globalObjectCalls.js +5 -4
  135. package/lib/rules/globalObjectCalls.test.d.ts +1 -0
  136. package/lib/rules/globalObjectCalls.test.js +1 -0
  137. package/lib/rules/namespaceDeclarations.d.ts +2 -1
  138. package/lib/rules/namespaceDeclarations.js +7 -6
  139. package/lib/rules/namespaceDeclarations.test.d.ts +1 -0
  140. package/lib/rules/namespaceDeclarations.test.js +1 -0
  141. package/lib/rules/negativeZeroComparisons.d.ts +2 -1
  142. package/lib/rules/negativeZeroComparisons.js +8 -7
  143. package/lib/rules/negativeZeroComparisons.test.d.ts +1 -0
  144. package/lib/rules/negativeZeroComparisons.test.js +1 -0
  145. package/lib/rules/newExpressions.d.ts +2 -1
  146. package/lib/rules/newExpressions.js +3 -2
  147. package/lib/rules/newExpressions.test.d.ts +1 -0
  148. package/lib/rules/newExpressions.test.js +1 -0
  149. package/lib/rules/newNativeNonConstructors.d.ts +2 -1
  150. package/lib/rules/newNativeNonConstructors.js +6 -5
  151. package/lib/rules/newNativeNonConstructors.test.d.ts +1 -0
  152. package/lib/rules/newNativeNonConstructors.test.js +1 -0
  153. package/lib/rules/nonOctalDecimalEscapes.d.ts +3 -1
  154. package/lib/rules/nonOctalDecimalEscapes.js +4 -3
  155. package/lib/rules/nonOctalDecimalEscapes.test.d.ts +1 -0
  156. package/lib/rules/nonOctalDecimalEscapes.test.js +1 -0
  157. package/lib/rules/numericLiteralParsing.d.ts +2 -1
  158. package/lib/rules/numericLiteralParsing.js +8 -7
  159. package/lib/rules/numericLiteralParsing.test.d.ts +1 -0
  160. package/lib/rules/numericLiteralParsing.test.js +1 -0
  161. package/lib/rules/objectCalls.d.ts +7 -0
  162. package/lib/rules/objectCalls.js +47 -0
  163. package/lib/rules/objectCalls.test.d.ts +2 -0
  164. package/lib/rules/objectCalls.test.js +172 -0
  165. package/lib/rules/objectHasOwns.d.ts +7 -0
  166. package/lib/rules/objectHasOwns.js +74 -0
  167. package/lib/rules/objectHasOwns.test.d.ts +2 -0
  168. package/lib/rules/objectHasOwns.test.js +112 -0
  169. package/lib/rules/objectKeyDuplicates.d.ts +7 -0
  170. package/lib/rules/objectKeyDuplicates.js +91 -0
  171. package/lib/rules/objectKeyDuplicates.test.d.ts +2 -0
  172. package/lib/rules/objectKeyDuplicates.test.js +180 -0
  173. package/lib/rules/objectProto.d.ts +2 -1
  174. package/lib/rules/objectProto.js +5 -4
  175. package/lib/rules/objectProto.test.d.ts +1 -0
  176. package/lib/rules/objectProto.test.js +1 -0
  177. package/lib/rules/objectPrototypeBuiltIns.d.ts +7 -0
  178. package/lib/rules/objectPrototypeBuiltIns.js +65 -0
  179. package/lib/rules/objectPrototypeBuiltIns.test.d.ts +2 -0
  180. package/lib/rules/objectPrototypeBuiltIns.test.js +146 -0
  181. package/lib/rules/octalEscapes.d.ts +2 -1
  182. package/lib/rules/octalEscapes.js +13 -8
  183. package/lib/rules/octalEscapes.test.d.ts +1 -0
  184. package/lib/rules/octalEscapes.test.js +1 -0
  185. package/lib/rules/octalNumbers.d.ts +2 -1
  186. package/lib/rules/octalNumbers.js +4 -3
  187. package/lib/rules/octalNumbers.test.d.ts +1 -0
  188. package/lib/rules/octalNumbers.test.js +1 -0
  189. package/lib/rules/returnAssignments.d.ts +2 -1
  190. package/lib/rules/returnAssignments.js +7 -6
  191. package/lib/rules/returnAssignments.test.d.ts +1 -0
  192. package/lib/rules/returnAssignments.test.js +1 -0
  193. package/lib/rules/ruleTester.d.ts +1 -0
  194. package/lib/rules/ruleTester.js +6 -1
  195. package/lib/rules/selfAssignments.d.ts +2 -1
  196. package/lib/rules/selfAssignments.js +4 -3
  197. package/lib/rules/selfAssignments.test.d.ts +1 -0
  198. package/lib/rules/selfAssignments.test.js +1 -0
  199. package/lib/rules/selfComparisons.d.ts +2 -1
  200. package/lib/rules/selfComparisons.js +4 -3
  201. package/lib/rules/selfComparisons.test.d.ts +1 -0
  202. package/lib/rules/selfComparisons.test.js +1 -0
  203. package/lib/rules/sequences.d.ts +2 -1
  204. package/lib/rules/sequences.js +3 -2
  205. package/lib/rules/sequences.test.d.ts +1 -0
  206. package/lib/rules/sequences.test.js +1 -0
  207. package/lib/rules/shadowedRestrictedNames.d.ts +2 -1
  208. package/lib/rules/shadowedRestrictedNames.js +24 -23
  209. package/lib/rules/shadowedRestrictedNames.test.d.ts +1 -0
  210. package/lib/rules/shadowedRestrictedNames.test.js +1 -0
  211. package/lib/rules/sparseArrays.d.ts +2 -1
  212. package/lib/rules/sparseArrays.js +5 -4
  213. package/lib/rules/sparseArrays.test.d.ts +1 -0
  214. package/lib/rules/sparseArrays.test.js +1 -0
  215. package/lib/rules/symbolDescriptions.d.ts +2 -1
  216. package/lib/rules/symbolDescriptions.js +3 -2
  217. package/lib/rules/symbolDescriptions.test.d.ts +1 -0
  218. package/lib/rules/symbolDescriptions.test.js +1 -0
  219. package/lib/rules/typeofComparisons.d.ts +2 -1
  220. package/lib/rules/typeofComparisons.js +5 -4
  221. package/lib/rules/typeofComparisons.test.d.ts +1 -0
  222. package/lib/rules/typeofComparisons.test.js +1 -0
  223. package/lib/rules/unassignedVariables.d.ts +2 -1
  224. package/lib/rules/unassignedVariables.js +4 -3
  225. package/lib/rules/unassignedVariables.test.d.ts +1 -0
  226. package/lib/rules/unassignedVariables.test.js +1 -0
  227. package/lib/rules/undefinedVariables.d.ts +2 -1
  228. package/lib/rules/undefinedVariables.js +5 -4
  229. package/lib/rules/undefinedVariables.test.d.ts +1 -0
  230. package/lib/rules/undefinedVariables.test.js +1 -0
  231. package/lib/rules/unicodeBOMs.d.ts +2 -1
  232. package/lib/rules/unicodeBOMs.js +27 -20
  233. package/lib/rules/unicodeBOMs.test.d.ts +1 -0
  234. package/lib/rules/unicodeBOMs.test.js +1 -0
  235. package/lib/rules/unnecessaryBlocks.d.ts +2 -1
  236. package/lib/rules/unnecessaryBlocks.js +4 -3
  237. package/lib/rules/unnecessaryBlocks.test.d.ts +1 -0
  238. package/lib/rules/unnecessaryBlocks.test.js +1 -0
  239. package/lib/rules/unnecessaryCatches.d.ts +2 -1
  240. package/lib/rules/unnecessaryCatches.js +4 -3
  241. package/lib/rules/unnecessaryCatches.test.d.ts +1 -0
  242. package/lib/rules/unnecessaryCatches.test.js +1 -0
  243. package/lib/rules/unnecessaryConcatenation.d.ts +2 -1
  244. package/lib/rules/unnecessaryConcatenation.js +3 -2
  245. package/lib/rules/unnecessaryConcatenation.test.d.ts +1 -0
  246. package/lib/rules/unnecessaryConcatenation.test.js +1 -0
  247. package/lib/rules/unsafeNegations.d.ts +2 -1
  248. package/lib/rules/unsafeNegations.js +3 -2
  249. package/lib/rules/unsafeNegations.test.d.ts +1 -0
  250. package/lib/rules/unsafeNegations.test.js +1 -0
  251. package/lib/rules/utils/discriminateAnyType.d.ts +1 -0
  252. package/lib/rules/utils/discriminateAnyType.js +1 -0
  253. package/lib/rules/utils/getConstrainedType.d.ts +1 -0
  254. package/lib/rules/utils/getConstrainedType.js +1 -0
  255. package/lib/rules/utils/getThisExpression.d.ts +1 -0
  256. package/lib/rules/utils/getThisExpression.js +1 -0
  257. package/lib/rules/utils/isTypeRecursive.d.ts +1 -0
  258. package/lib/rules/utils/isTypeRecursive.js +1 -0
  259. package/lib/rules/utils/isUnsafeAssignment.d.ts +1 -0
  260. package/lib/rules/utils/isUnsafeAssignment.js +1 -0
  261. package/lib/rules/utils/operators.d.ts +1 -0
  262. package/lib/rules/utils/operators.js +1 -0
  263. package/lib/rules/variableDeletions.d.ts +2 -1
  264. package/lib/rules/variableDeletions.js +3 -2
  265. package/lib/rules/variableDeletions.test.d.ts +1 -0
  266. package/lib/rules/variableDeletions.test.js +1 -0
  267. package/lib/rules/voidOperator.d.ts +2 -1
  268. package/lib/rules/voidOperator.js +3 -2
  269. package/lib/rules/voidOperator.test.d.ts +1 -0
  270. package/lib/rules/voidOperator.test.js +1 -0
  271. package/lib/rules/withStatements.d.ts +7 -0
  272. package/lib/rules/withStatements.js +37 -0
  273. package/lib/rules/withStatements.test.d.ts +2 -0
  274. package/lib/rules/withStatements.test.js +27 -0
  275. package/lib/utils/declarationIncludesGlobal.d.ts +1 -0
  276. package/lib/utils/declarationIncludesGlobal.js +1 -0
  277. package/lib/utils/declarationsIncludeGlobal.d.ts +1 -0
  278. package/lib/utils/declarationsIncludeGlobal.js +1 -0
  279. package/lib/utils/getDeclarationsIfGlobal.d.ts +1 -0
  280. package/lib/utils/getDeclarationsIfGlobal.js +1 -0
  281. package/lib/utils/getModifyingReferences.d.ts +1 -0
  282. package/lib/utils/getModifyingReferences.js +1 -0
  283. package/lib/utils/hasSameTokens.d.ts +1 -0
  284. package/lib/utils/hasSameTokens.js +1 -0
  285. package/lib/utils/isFunction.d.ts +3 -0
  286. package/lib/utils/isFunction.js +6 -0
  287. package/lib/utils/isGlobalDeclaration.d.ts +1 -0
  288. package/lib/utils/isGlobalDeclaration.js +1 -0
  289. package/lib/utils/isGlobalDeclarationOfName.d.ts +1 -0
  290. package/lib/utils/isGlobalDeclarationOfName.js +1 -0
  291. package/lib/utils/isGlobalVariable.d.ts +1 -0
  292. package/lib/utils/isGlobalVariable.js +1 -0
  293. package/lib/utils/unwrapParentParenthesizedExpressions.d.ts +1 -0
  294. package/lib/utils/unwrapParentParenthesizedExpressions.js +1 -0
  295. package/lib/utils/unwrapParenthesizedExpression.d.ts +1 -0
  296. package/lib/utils/unwrapParenthesizedExpression.js +1 -0
  297. package/package.json +17 -7
  298. package/CHANGELOG.md +0 -82
  299. package/lib/formatDiagnostic.d.ts +0 -10
  300. package/src/collectReferencedFilePaths.ts +0 -37
  301. package/src/createTypeScriptFileFromProgram.ts +0 -86
  302. package/src/createTypeScriptFileFromProjectService.ts +0 -31
  303. package/src/directives/parseDirectivesFromTypeScriptFile.test.ts +0 -108
  304. package/src/directives/parseDirectivesFromTypeScriptFile.ts +0 -31
  305. package/src/formatDiagnostic.ts +0 -166
  306. package/src/getFirstEnumValues.test.ts +0 -51
  307. package/src/getFirstEnumValues.ts +0 -59
  308. package/src/getTSNodeRange.ts +0 -13
  309. package/src/index.ts +0 -7
  310. package/src/language.ts +0 -122
  311. package/src/nodes.ts +0 -146
  312. package/src/normalizeRange.ts +0 -30
  313. package/src/plugin.ts +0 -111
  314. package/src/prepareTypeScriptFile.ts +0 -14
  315. package/src/rules/anyReturns.test.ts +0 -649
  316. package/src/rules/anyReturns.ts +0 -263
  317. package/src/rules/asyncPromiseExecutors.test.ts +0 -72
  318. package/src/rules/asyncPromiseExecutors.ts +0 -61
  319. package/src/rules/caseDeclarations.test.ts +0 -228
  320. package/src/rules/caseDeclarations.ts +0 -70
  321. package/src/rules/caseDuplicates.test.ts +0 -308
  322. package/src/rules/caseDuplicates.ts +0 -57
  323. package/src/rules/chainedAssignments.test.ts +0 -263
  324. package/src/rules/chainedAssignments.ts +0 -58
  325. package/src/rules/classAssignments.test.ts +0 -157
  326. package/src/rules/classAssignments.ts +0 -50
  327. package/src/rules/consecutiveNonNullAssertions.test.ts +0 -33
  328. package/src/rules/consecutiveNonNullAssertions.ts +0 -46
  329. package/src/rules/constantAssignments.test.ts +0 -222
  330. package/src/rules/constantAssignments.ts +0 -78
  331. package/src/rules/constructorReturns.test.ts +0 -97
  332. package/src/rules/constructorReturns.ts +0 -59
  333. package/src/rules/debuggerStatements.test.ts +0 -81
  334. package/src/rules/debuggerStatements.ts +0 -45
  335. package/src/rules/defaultCaseLast.test.ts +0 -196
  336. package/src/rules/defaultCaseLast.ts +0 -54
  337. package/src/rules/duplicateArguments.test.ts +0 -140
  338. package/src/rules/duplicateArguments.ts +0 -58
  339. package/src/rules/elseIfDuplicates.test.ts +0 -177
  340. package/src/rules/elseIfDuplicates.ts +0 -69
  341. package/src/rules/emptyBlocks.test.ts +0 -136
  342. package/src/rules/emptyBlocks.ts +0 -73
  343. package/src/rules/emptyDestructures.test.ts +0 -187
  344. package/src/rules/emptyDestructures.ts +0 -48
  345. package/src/rules/emptyStaticBlocks.test.ts +0 -168
  346. package/src/rules/emptyStaticBlocks.ts +0 -60
  347. package/src/rules/exceptionAssignments.test.ts +0 -265
  348. package/src/rules/exceptionAssignments.ts +0 -77
  349. package/src/rules/forDirections.test.ts +0 -100
  350. package/src/rules/forDirections.ts +0 -163
  351. package/src/rules/forInArrays.test.ts +0 -25
  352. package/src/rules/forInArrays.ts +0 -70
  353. package/src/rules/functionAssignments.test.ts +0 -210
  354. package/src/rules/functionAssignments.ts +0 -51
  355. package/src/rules/functionNewCalls.test.ts +0 -116
  356. package/src/rules/functionNewCalls.ts +0 -75
  357. package/src/rules/generatorFunctionYields.test.ts +0 -152
  358. package/src/rules/generatorFunctionYields.ts +0 -71
  359. package/src/rules/globalAssignments.test.ts +0 -216
  360. package/src/rules/globalAssignments.ts +0 -67
  361. package/src/rules/globalObjectCalls.test.ts +0 -94
  362. package/src/rules/globalObjectCalls.ts +0 -52
  363. package/src/rules/namespaceDeclarations.test.ts +0 -41
  364. package/src/rules/namespaceDeclarations.ts +0 -74
  365. package/src/rules/negativeZeroComparisons.test.ts +0 -210
  366. package/src/rules/negativeZeroComparisons.ts +0 -87
  367. package/src/rules/newExpressions.test.ts +0 -80
  368. package/src/rules/newExpressions.ts +0 -67
  369. package/src/rules/newNativeNonConstructors.test.ts +0 -95
  370. package/src/rules/newNativeNonConstructors.ts +0 -59
  371. package/src/rules/nonOctalDecimalEscapes.test.ts +0 -70
  372. package/src/rules/nonOctalDecimalEscapes.ts +0 -70
  373. package/src/rules/numericLiteralParsing.test.ts +0 -100
  374. package/src/rules/numericLiteralParsing.ts +0 -116
  375. package/src/rules/objectProto.test.ts +0 -97
  376. package/src/rules/objectProto.ts +0 -62
  377. package/src/rules/octalEscapes.test.ts +0 -214
  378. package/src/rules/octalEscapes.ts +0 -85
  379. package/src/rules/octalNumbers.test.ts +0 -246
  380. package/src/rules/octalNumbers.ts +0 -75
  381. package/src/rules/returnAssignments.test.ts +0 -186
  382. package/src/rules/returnAssignments.ts +0 -57
  383. package/src/rules/ruleTester.ts +0 -4
  384. package/src/rules/selfAssignments.test.ts +0 -67
  385. package/src/rules/selfAssignments.ts +0 -50
  386. package/src/rules/selfComparisons.test.ts +0 -298
  387. package/src/rules/selfComparisons.ts +0 -45
  388. package/src/rules/sequences.test.ts +0 -49
  389. package/src/rules/sequences.ts +0 -37
  390. package/src/rules/shadowedRestrictedNames.test.ts +0 -148
  391. package/src/rules/shadowedRestrictedNames.ts +0 -105
  392. package/src/rules/sparseArrays.test.ts +0 -111
  393. package/src/rules/sparseArrays.ts +0 -61
  394. package/src/rules/symbolDescriptions.test.ts +0 -90
  395. package/src/rules/symbolDescriptions.ts +0 -47
  396. package/src/rules/typeofComparisons.test.ts +0 -86
  397. package/src/rules/typeofComparisons.ts +0 -88
  398. package/src/rules/unassignedVariables.test.ts +0 -73
  399. package/src/rules/unassignedVariables.ts +0 -69
  400. package/src/rules/undefinedVariables.test.ts +0 -81
  401. package/src/rules/undefinedVariables.ts +0 -97
  402. package/src/rules/unicodeBOMs.test.ts +0 -67
  403. package/src/rules/unicodeBOMs.ts +0 -44
  404. package/src/rules/unnecessaryBlocks.test.ts +0 -148
  405. package/src/rules/unnecessaryBlocks.ts +0 -89
  406. package/src/rules/unnecessaryCatches.test.ts +0 -211
  407. package/src/rules/unnecessaryCatches.ts +0 -84
  408. package/src/rules/unnecessaryConcatenation.test.ts +0 -88
  409. package/src/rules/unnecessaryConcatenation.ts +0 -44
  410. package/src/rules/unsafeNegations.test.ts +0 -64
  411. package/src/rules/unsafeNegations.ts +0 -59
  412. package/src/rules/utils/discriminateAnyType.ts +0 -66
  413. package/src/rules/utils/getConstrainedType.ts +0 -9
  414. package/src/rules/utils/getThisExpression.ts +0 -24
  415. package/src/rules/utils/isTypeRecursive.ts +0 -10
  416. package/src/rules/utils/isUnsafeAssignment.ts +0 -113
  417. package/src/rules/utils/operators.ts +0 -39
  418. package/src/rules/variableDeletions.test.ts +0 -76
  419. package/src/rules/variableDeletions.ts +0 -43
  420. package/src/rules/voidOperator.test.ts +0 -99
  421. package/src/rules/voidOperator.ts +0 -38
  422. package/src/utils/declarationIncludesGlobal.ts +0 -9
  423. package/src/utils/declarationsIncludeGlobal.ts +0 -7
  424. package/src/utils/getDeclarationsIfGlobal.ts +0 -14
  425. package/src/utils/getModifyingReferences.ts +0 -58
  426. package/src/utils/hasSameTokens.ts +0 -45
  427. package/src/utils/isGlobalDeclaration.ts +0 -10
  428. package/src/utils/isGlobalDeclarationOfName.ts +0 -56
  429. package/src/utils/isGlobalVariable.ts +0 -30
  430. package/src/utils/unwrapParentParenthesizedExpressions.ts +0 -7
  431. package/src/utils/unwrapParenthesizedExpression.ts +0 -9
  432. package/tsconfig.json +0 -9
  433. package/tsconfig.tsbuildinfo +0 -1
package/lib/plugin.d.ts CHANGED
@@ -2,203 +2,232 @@ export declare const ts: import("@flint.fyi/core").Plugin<import("@flint.fyi/cor
2
2
  readonly description: "Reports returning a value with type `any` from a function.";
3
3
  readonly id: "anyReturns";
4
4
  readonly preset: "logical";
5
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>, import("@flint.fyi/core").Rule<{
5
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>, import("@flint.fyi/core").Rule<{
6
6
  readonly description: "Reports using async functions as Promise executor functions.";
7
7
  readonly id: "asyncPromiseExecutors";
8
8
  readonly preset: "logical";
9
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "asyncPromiseExecutor", undefined>, import("@flint.fyi/core").Rule<{
9
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "asyncPromiseExecutor", undefined>, import("@flint.fyi/core").Rule<{
10
10
  readonly description: "Reports lexical declarations in case clauses without wrapping them in blocks.";
11
11
  readonly id: "caseDeclarations";
12
12
  readonly preset: "untyped";
13
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unexpectedLexicalDeclaration", undefined>, import("@flint.fyi/core").Rule<{
13
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedLexicalDeclaration", undefined>, import("@flint.fyi/core").Rule<{
14
14
  readonly description: "Reports switch statements with duplicate case clause test expressions.";
15
15
  readonly id: "caseDuplicates";
16
16
  readonly preset: "logical";
17
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "duplicateCase", undefined>, import("@flint.fyi/core").Rule<{
17
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateCase", undefined>, import("@flint.fyi/core").Rule<{
18
18
  readonly description: "Reports using chained assignment expressions (e.g., a = b = c).";
19
19
  readonly id: "chainedAssignments";
20
20
  readonly preset: "stylistic";
21
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noChainedAssignment", undefined>, import("@flint.fyi/core").Rule<{
21
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noChainedAssignment", undefined>, import("@flint.fyi/core").Rule<{
22
22
  readonly description: "Reports reassigning class declarations.";
23
23
  readonly id: "classAssignments";
24
24
  readonly preset: "untyped";
25
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noClassAssign", undefined>, import("@flint.fyi/core").Rule<{
25
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noClassAssign", undefined>, import("@flint.fyi/core").Rule<{
26
26
  readonly description: "Reports unnecessary extra non-null assertions.";
27
27
  readonly id: "consecutiveNonNullAssertions";
28
28
  readonly preset: "logical";
29
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "consecutiveNonNullAssertion", undefined>, import("@flint.fyi/core").Rule<{
29
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "consecutiveNonNullAssertion", undefined>, import("@flint.fyi/core").Rule<{
30
30
  readonly description: "Reports attempting to reassign variables declared with const.";
31
31
  readonly id: "constantAssignments";
32
32
  readonly preset: "untyped";
33
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noConstAssign", undefined>, import("@flint.fyi/core").Rule<{
33
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noConstAssign", undefined>, import("@flint.fyi/core").Rule<{
34
34
  readonly description: "Reports returning values from constructor functions.";
35
35
  readonly id: "constructorReturns";
36
36
  readonly preset: "untyped";
37
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noConstructorReturn", undefined>, import("@flint.fyi/core").Rule<{
37
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noConstructorReturn", undefined>, import("@flint.fyi/core").Rule<{
38
38
  readonly description: "Reports using debugger statements.";
39
39
  readonly id: "debuggerStatements";
40
40
  readonly preset: "logical";
41
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noDebugger", undefined>, import("@flint.fyi/core").Rule<{
41
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noDebugger", undefined>, import("@flint.fyi/core").Rule<{
42
42
  readonly description: "Reports switch statements where the default clause is not last.";
43
43
  readonly id: "defaultCaseLast";
44
44
  readonly preset: "logical";
45
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "defaultCaseShouldBeLast", undefined>, import("@flint.fyi/core").Rule<{
45
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "defaultCaseShouldBeLast", undefined>, import("@flint.fyi/core").Rule<{
46
46
  readonly description: "Reports functions with duplicate parameter names in their signatures.";
47
47
  readonly id: "duplicateArguments";
48
48
  readonly preset: "untyped";
49
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "duplicateParam", undefined>, import("@flint.fyi/core").Rule<{
49
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateParam", undefined>, import("@flint.fyi/core").Rule<{
50
50
  readonly description: "Reports duplicate conditions in if-else-if chains that make code unreachable.";
51
51
  readonly id: "elseIfDuplicates";
52
52
  readonly preset: "logical";
53
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "duplicateCondition", undefined>, import("@flint.fyi/core").Rule<{
53
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateCondition", undefined>, import("@flint.fyi/core").Rule<{
54
54
  readonly description: "Reports empty block statements that should contain code.";
55
55
  readonly id: "emptyBlocks";
56
56
  readonly preset: "stylistic";
57
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "emptyBlock", undefined>, import("@flint.fyi/core").Rule<{
57
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyBlock", undefined>, import("@flint.fyi/core").Rule<{
58
58
  readonly description: "Reports using empty destructuring patterns that destructure no values.";
59
59
  readonly id: "emptyDestructures";
60
60
  readonly preset: "logical";
61
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "emptyPattern", undefined>, import("@flint.fyi/core").Rule<{
61
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyPattern", undefined>, import("@flint.fyi/core").Rule<{
62
62
  readonly description: "Reports empty static initialization blocks within class declarations.";
63
63
  readonly id: "emptyStaticBlocks";
64
64
  readonly preset: "stylistic";
65
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "emptyStaticBlock", undefined>, import("@flint.fyi/core").Rule<{
65
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "emptyStaticBlock", undefined>, import("@flint.fyi/core").Rule<{
66
66
  readonly description: "Reports reassigning exception parameters in catch clauses.";
67
67
  readonly id: "exceptionAssignments";
68
68
  readonly preset: "logical";
69
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noExAssign", undefined>, import("@flint.fyi/core").Rule<{
69
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noExAssign", undefined>, import("@flint.fyi/core").Rule<{
70
+ readonly description: "Reports control flow statements in `finally` blocks that can override control flow in `try`/`catch` blocks.";
71
+ readonly id: "finallyStatementSafety";
72
+ readonly preset: "logical";
73
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unsafeFinally", undefined>, import("@flint.fyi/core").Rule<{
70
74
  readonly description: "Reports for loops with counter variables that move in the wrong direction.";
71
75
  readonly id: "forDirections";
72
76
  readonly preset: "stylistic";
73
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "wrongDirection", undefined>, import("@flint.fyi/core").Rule<{
77
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "wrongDirection", undefined>, import("@flint.fyi/core").Rule<{
74
78
  readonly description: "Reports iterating over an array with a for-in loop.";
75
79
  readonly id: "forInArrays";
76
80
  readonly preset: "logical";
77
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "forIn", undefined>, import("@flint.fyi/core").Rule<{
81
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "forIn", undefined>, import("@flint.fyi/core").Rule<{
78
82
  readonly description: "Reports reassigning variables declared with function declarations.";
79
83
  readonly id: "functionAssignments";
80
84
  readonly preset: "untyped";
81
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noFunctionAssignment", undefined>, import("@flint.fyi/core").Rule<{
85
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noFunctionAssignment", undefined>, import("@flint.fyi/core").Rule<{
86
+ readonly description: "Reports using `.apply()` or `.call()` or when the context (`this` value) provides no benefit.";
87
+ readonly id: "functionCurryingRedundancy";
88
+ readonly preset: "logical";
89
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryCall", undefined>, import("@flint.fyi/core").Rule<{
82
90
  readonly description: "Reports using the Function constructor to create functions from strings.";
83
91
  readonly id: "functionNewCalls";
84
92
  readonly preset: "logical";
85
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noFunctionConstructor", undefined>, import("@flint.fyi/core").Rule<{
93
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noFunctionConstructor", undefined>, import("@flint.fyi/core").Rule<{
86
94
  readonly description: "Reports generator functions that do not yield values.";
87
95
  readonly id: "generatorFunctionYields";
88
96
  readonly preset: "logical";
89
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "missingYield", undefined>, import("@flint.fyi/core").Rule<{
97
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "missingYield", undefined>, import("@flint.fyi/core").Rule<{
90
98
  readonly description: "Reports attempting to assign to read-only global variables such as undefined, NaN, Infinity, Object, etc.";
91
99
  readonly id: "globalAssignments";
92
100
  readonly preset: "untyped";
93
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noGlobalAssign", undefined>, import("@flint.fyi/core").Rule<{
101
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noGlobalAssign", undefined>, import("@flint.fyi/core").Rule<{
94
102
  readonly description: "Reports calling global objects like Math, JSON, or Reflect as functions.";
95
103
  readonly id: "globalObjectCalls";
96
104
  readonly preset: "untyped";
97
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noGlobalObjectCall", undefined>, import("@flint.fyi/core").Rule<{
105
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noGlobalObjectCall", undefined>, import("@flint.fyi/core").Rule<{
98
106
  readonly description: "Reports using legacy `namespace` declarations.";
99
107
  readonly id: "namespaceDeclarations";
100
108
  readonly preset: "logical";
101
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "preferModules", {
109
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferModules", {
102
110
  readonly allowDeclarations: import("zod").ZodDefault<import("zod").ZodBoolean>;
103
111
  readonly allowDefinitionFiles: import("zod").ZodDefault<import("zod").ZodBoolean>;
104
112
  }>, import("@flint.fyi/core").Rule<{
105
113
  readonly description: "Reports comparisons with -0 that may not behave as expected.";
106
114
  readonly id: "negativeZeroComparisons";
107
115
  readonly preset: "logical";
108
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unexpectedNegativeZeroComparison", undefined>, import("@flint.fyi/core").Rule<{
116
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedNegativeZeroComparison", undefined>, import("@flint.fyi/core").Rule<{
109
117
  readonly description: "Reports standalone new expressions that don't use the constructed object.";
110
118
  readonly id: "newExpressions";
111
119
  readonly preset: "logical";
112
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noStandaloneNew", undefined>, import("@flint.fyi/core").Rule<{
120
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noStandaloneNew", undefined>, import("@flint.fyi/core").Rule<{
113
121
  readonly description: "Disallows using `new` with global non-constructor functions like Symbol and BigInt.";
114
122
  readonly id: "newNativeNonConstructors";
115
123
  readonly preset: "untyped";
116
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noNewNonConstructor", undefined>, import("@flint.fyi/core").Rule<{
124
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noNewNonConstructor", undefined>, import("@flint.fyi/core").Rule<{
117
125
  readonly description: "Reports non-octal decimal escape sequences (\\8 and \\9) in string literals.";
118
126
  readonly id: "nonOctalDecimalEscapes";
119
127
  readonly preset: "logical";
120
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unexpectedEscape", undefined>, import("@flint.fyi/core").Rule<{
128
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unexpectedEscape", undefined>, import("@flint.fyi/core").Rule<{
121
129
  readonly description: "Reports parseInt calls with binary, hexadecimal, or octal strings that can be replaced with numeric literals.";
122
130
  readonly id: "numericLiteralParsing";
123
131
  readonly preset: "stylistic";
124
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "preferLiteral", undefined>, import("@flint.fyi/core").Rule<{
132
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferLiteral", undefined>, import("@flint.fyi/core").Rule<{
133
+ readonly description: "Prefer `{}` object literal notation or `Object.create` instead of calling or constructing `Object`.";
134
+ readonly id: "objectCalls";
135
+ readonly preset: "stylistic";
136
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferObjectLiteral", undefined>, import("@flint.fyi/core").Rule<{
137
+ readonly description: "Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call() for checking own properties.";
138
+ readonly id: "objectHasOwns";
139
+ readonly preset: "stylistic";
140
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferHasOwn", undefined>, import("@flint.fyi/core").Rule<{
141
+ readonly description: "Reports unnecessary duplicate keys that override previous values.";
142
+ readonly id: "objectKeyDuplicates";
143
+ readonly preset: "untyped";
144
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "duplicateKey", undefined>, import("@flint.fyi/core").Rule<{
125
145
  readonly description: "Reports using the deprecated __proto__ property to access or modify an object's prototype.";
126
146
  readonly id: "objectProto";
127
147
  readonly preset: "untyped";
128
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noProto", undefined>, import("@flint.fyi/core").Rule<{
148
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noProto", undefined>, import("@flint.fyi/core").Rule<{
149
+ readonly description: "Reports direct calls to Object.prototype methods on object instances.";
150
+ readonly id: "objectPrototypeBuiltIns";
151
+ readonly preset: "logical";
152
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "prototypeBuiltIn", undefined>, import("@flint.fyi/core").Rule<{
129
153
  readonly description: "Reports using octal escape sequences in string literals.";
130
154
  readonly id: "octalEscapes";
131
155
  readonly preset: "logical";
132
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noOctalEscape", undefined>, import("@flint.fyi/core").Rule<{
156
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noOctalEscape", undefined>, import("@flint.fyi/core").Rule<{
133
157
  readonly description: "Reports using legacy octal numeric literals.";
134
158
  readonly id: "octalNumbers";
135
159
  readonly preset: "untyped";
136
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noOctalNumber", undefined>, import("@flint.fyi/core").Rule<{
160
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noOctalNumber", undefined>, import("@flint.fyi/core").Rule<{
137
161
  readonly description: "Reports using assignment expressions in return statements.";
138
162
  readonly id: "returnAssignments";
139
163
  readonly preset: "stylistic";
140
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noReturnAssign", undefined>, import("@flint.fyi/core").Rule<{
164
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noReturnAssign", undefined>, import("@flint.fyi/core").Rule<{
141
165
  readonly description: "Reports self-assignments which have no effect and are likely errors.";
142
166
  readonly id: "selfAssignments";
143
167
  readonly preset: "logical";
144
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "selfAssignment", undefined>, import("@flint.fyi/core").Rule<{
168
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "selfAssignment", undefined>, import("@flint.fyi/core").Rule<{
145
169
  readonly description: "Reports comparing a value to itself.";
146
170
  readonly id: "selfComparisons";
147
171
  readonly preset: "logical";
148
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noSelfComparison", undefined>, import("@flint.fyi/core").Rule<{
172
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSelfComparison", undefined>, import("@flint.fyi/core").Rule<{
149
173
  readonly description: "Reports using the comma operator in expressions.";
150
174
  readonly id: "sequences";
151
175
  readonly preset: "untyped";
152
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noSequences", undefined>, import("@flint.fyi/core").Rule<{
176
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSequences", undefined>, import("@flint.fyi/core").Rule<{
153
177
  readonly description: "Reports variable declarations that shadow JavaScript's restricted names.";
154
178
  readonly id: "shadowedRestrictedNames";
155
179
  readonly preset: "untyped";
156
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "shadowedRestrictedName", undefined>, import("@flint.fyi/core").Rule<{
180
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "shadowedRestrictedName", undefined>, import("@flint.fyi/core").Rule<{
157
181
  readonly description: "Reports array literals with holes (sparse arrays).";
158
182
  readonly id: "sparseArrays";
159
183
  readonly preset: "logical";
160
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noSparseArray", undefined>, import("@flint.fyi/core").Rule<{
184
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noSparseArray", undefined>, import("@flint.fyi/core").Rule<{
161
185
  readonly description: "Reports Symbol() calls without description arguments.";
162
186
  readonly id: "symbolDescriptions";
163
187
  readonly preset: "stylistic";
164
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "missingDescription", undefined>, import("@flint.fyi/core").Rule<{
188
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "missingDescription", undefined>, import("@flint.fyi/core").Rule<{
165
189
  readonly description: "Reports typeof expressions that compare impossible string literals.";
166
190
  readonly id: "typeofComparisons";
167
191
  readonly preset: "untyped";
168
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "invalidValue", undefined>, import("@flint.fyi/core").Rule<{
192
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "invalidValue", undefined>, import("@flint.fyi/core").Rule<{
169
193
  readonly description: "Reports variables that are declared but never assigned a value.";
170
194
  readonly id: "unassignedVariables";
171
195
  readonly preset: "untyped";
172
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noUnassigned", undefined>, import("@flint.fyi/core").Rule<{
196
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noUnassigned", undefined>, import("@flint.fyi/core").Rule<{
173
197
  readonly description: "Reports using variables that are not defined.";
174
198
  readonly id: "undefinedVariables";
175
199
  readonly preset: "untyped";
176
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "undefinedVariable", undefined>, import("@flint.fyi/core").Rule<{
200
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "undefinedVariable", undefined>, import("@flint.fyi/core").Rule<{
177
201
  readonly description: "Reports files with Unicode Byte Order Marks (BOMs).";
178
202
  readonly id: "unicodeBOMs";
179
203
  readonly preset: "stylistic";
180
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noBOM", undefined>, import("@flint.fyi/core").Rule<{
204
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noBOM", undefined>, import("@flint.fyi/core").Rule<{
181
205
  readonly description: "Reports standalone block statements that don't create a meaningful scope.";
182
206
  readonly id: "unnecessaryBlocks";
183
207
  readonly preset: "stylistic";
184
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unnecessaryBlock", undefined>, import("@flint.fyi/core").Rule<{
208
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryBlock", undefined>, import("@flint.fyi/core").Rule<{
185
209
  readonly description: "Reports catch clauses that only rethrow the caught error without modification.";
186
210
  readonly id: "unnecessaryCatches";
187
211
  readonly preset: "logical";
188
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unnecessaryCatch", undefined>, import("@flint.fyi/core").Rule<{
212
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryCatch", undefined>, import("@flint.fyi/core").Rule<{
189
213
  readonly description: "Reports string concatenation using the + operator when both operands are string literals.";
190
214
  readonly id: "unnecessaryConcatenation";
191
215
  readonly preset: "stylistic";
192
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "unnecessaryConcatenation", undefined>, import("@flint.fyi/core").Rule<{
216
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "unnecessaryConcatenation", undefined>, import("@flint.fyi/core").Rule<{
193
217
  readonly description: "Reports negating the left operand of `in` or `instanceof` relations.";
194
218
  readonly id: "unsafeNegations";
195
219
  readonly preset: "untyped";
196
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "preferNegatingRelation", undefined>, import("@flint.fyi/core").Rule<{
220
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "preferNegatingRelation", undefined>, import("@flint.fyi/core").Rule<{
197
221
  readonly description: "Reports attempting to delete variables with the delete operator.";
198
222
  readonly id: "variableDeletions";
199
223
  readonly preset: "untyped";
200
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noDeleteVar", undefined>, import("@flint.fyi/core").Rule<{
224
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noDeleteVar", undefined>, import("@flint.fyi/core").Rule<{
201
225
  readonly description: "Reports using the void operator.";
202
226
  readonly id: "voidOperator";
203
227
  readonly preset: "stylistic";
204
- }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptServices, "noVoid", undefined>]>;
228
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "noVoid", undefined>, import("@flint.fyi/core").Rule<{
229
+ readonly description: "Reports using with statements";
230
+ readonly id: "withStatements";
231
+ readonly preset: "untyped";
232
+ }, import("./nodes.js").TSNodesByName, import("./language.js").TypeScriptFileServices, "withStatement", undefined>]>;
233
+ //# sourceMappingURL=plugin.d.ts.map
package/lib/plugin.js CHANGED
@@ -16,9 +16,11 @@ import emptyBlocks from "./rules/emptyBlocks.js";
16
16
  import emptyDestructures from "./rules/emptyDestructures.js";
17
17
  import emptyStaticBlocks from "./rules/emptyStaticBlocks.js";
18
18
  import exceptionAssignments from "./rules/exceptionAssignments.js";
19
+ import finallyStatementSafety from "./rules/finallyStatementSafety.js";
19
20
  import forDirections from "./rules/forDirections.js";
20
21
  import forInArrays from "./rules/forInArrays.js";
21
22
  import functionAssignments from "./rules/functionAssignments.js";
23
+ import functionCurryingRedundancy from "./rules/functionCurryingRedundancy.js";
22
24
  import functionNewCalls from "./rules/functionNewCalls.js";
23
25
  import generatorFunctionYields from "./rules/generatorFunctionYields.js";
24
26
  import globalAssignments from "./rules/globalAssignments.js";
@@ -29,7 +31,11 @@ import newExpressions from "./rules/newExpressions.js";
29
31
  import newNativeNonConstructors from "./rules/newNativeNonConstructors.js";
30
32
  import nonOctalDecimalEscapes from "./rules/nonOctalDecimalEscapes.js";
31
33
  import numericLiteralParsing from "./rules/numericLiteralParsing.js";
34
+ import objectCalls from "./rules/objectCalls.js";
35
+ import objectHasOwns from "./rules/objectHasOwns.js";
36
+ import objectKeyDuplicates from "./rules/objectKeyDuplicates.js";
32
37
  import objectProto from "./rules/objectProto.js";
38
+ import objectPrototypeBuiltIns from "./rules/objectPrototypeBuiltIns.js";
33
39
  import octalEscapes from "./rules/octalEscapes.js";
34
40
  import octalNumbers from "./rules/octalNumbers.js";
35
41
  import returnAssignments from "./rules/returnAssignments.js";
@@ -49,11 +55,12 @@ import unnecessaryConcatenation from "./rules/unnecessaryConcatenation.js";
49
55
  import unsafeNegations from "./rules/unsafeNegations.js";
50
56
  import variableDeletions from "./rules/variableDeletions.js";
51
57
  import voidOperator from "./rules/voidOperator.js";
58
+ import withStatements from "./rules/withStatements.js";
52
59
  export const ts = createPlugin({
53
60
  files: {
54
61
  all: ["**/*.{cjs,js,jsx,mjs,ts,tsx}"],
55
62
  },
56
- name: "ts",
63
+ name: "TypeScript",
57
64
  rules: [
58
65
  anyReturns,
59
66
  asyncPromiseExecutors,
@@ -72,9 +79,11 @@ export const ts = createPlugin({
72
79
  emptyDestructures,
73
80
  emptyStaticBlocks,
74
81
  exceptionAssignments,
82
+ finallyStatementSafety,
75
83
  forDirections,
76
84
  forInArrays,
77
85
  functionAssignments,
86
+ functionCurryingRedundancy,
78
87
  functionNewCalls,
79
88
  generatorFunctionYields,
80
89
  globalAssignments,
@@ -85,7 +94,11 @@ export const ts = createPlugin({
85
94
  newNativeNonConstructors,
86
95
  nonOctalDecimalEscapes,
87
96
  numericLiteralParsing,
97
+ objectCalls,
98
+ objectHasOwns,
99
+ objectKeyDuplicates,
88
100
  objectProto,
101
+ objectPrototypeBuiltIns,
89
102
  octalEscapes,
90
103
  octalNumbers,
91
104
  returnAssignments,
@@ -105,5 +118,7 @@ export const ts = createPlugin({
105
118
  unsafeNegations,
106
119
  variableDeletions,
107
120
  voidOperator,
121
+ withStatements,
108
122
  ],
109
123
  });
124
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1,11 @@
1
+ import * as ts from "typescript";
2
+ export interface TypeScriptBasedLanguageFile extends Partial<Disposable> {
3
+ program: ts.Program;
4
+ sourceFile: ts.SourceFile;
5
+ }
6
+ export interface TypeScriptBasedLanguageFileFactoryDefinition {
7
+ createFromDisk(filePathAbsolute: string): TypeScriptBasedLanguageFile;
8
+ createFromVirtual(filePathAbsolute: string, sourceText: string): TypeScriptBasedLanguageFile;
9
+ }
10
+ export declare function prepareTypeScriptBasedLanguage(): TypeScriptBasedLanguageFileFactoryDefinition;
11
+ //# sourceMappingURL=prepareTypeScriptBasedLanguage.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { createProjectService } from "@typescript-eslint/project-service";
2
+ import { createFSBackedSystem, createVirtualTypeScriptEnvironment, } from "@typescript/vfs";
3
+ import { CachedFactory } from "cached-factory";
4
+ import { debugForFile } from "debug-for-file";
5
+ import path from "node:path";
6
+ import * as ts from "typescript";
7
+ import { createTypeScriptFileFromProjectService } from "./createTypeScriptFileFromProjectService.js";
8
+ const projectRoot = path.join(import.meta.dirname, "../..");
9
+ const log = debugForFile(import.meta.filename);
10
+ export function prepareTypeScriptBasedLanguage() {
11
+ const { service } = createProjectService();
12
+ const seenPrograms = new Set();
13
+ const environments = new CachedFactory((filePathAbsolute) => {
14
+ const system = createFSBackedSystem(new Map([[filePathAbsolute, "// ..."]]), projectRoot, ts);
15
+ return createVirtualTypeScriptEnvironment(system, [filePathAbsolute], ts, {
16
+ skipLibCheck: true,
17
+ target: ts.ScriptTarget.ESNext,
18
+ });
19
+ });
20
+ const servicePrograms = new CachedFactory((filePathAbsolute) => {
21
+ log("Opening client file:", filePathAbsolute);
22
+ service.openClientFile(filePathAbsolute);
23
+ log("Retrieving client services:", filePathAbsolute);
24
+ const scriptInfo = service.getScriptInfo(filePathAbsolute);
25
+ if (!scriptInfo) {
26
+ throw new Error(`Could not find script info for file: ${filePathAbsolute}`);
27
+ }
28
+ const defaultProject = service.getDefaultProjectForFile(scriptInfo.fileName, true);
29
+ if (!defaultProject) {
30
+ throw new Error(`Could not find default project for file: ${filePathAbsolute}`);
31
+ }
32
+ const program = defaultProject.getLanguageService(true).getProgram();
33
+ if (!program) {
34
+ throw new Error(`Could not retrieve program for file: ${filePathAbsolute}`);
35
+ }
36
+ return program;
37
+ });
38
+ return {
39
+ createFromDisk: (filePathAbsolute) => {
40
+ const program = servicePrograms.get(filePathAbsolute);
41
+ seenPrograms.add(program);
42
+ return createTypeScriptFileFromProjectService(filePathAbsolute, program, service);
43
+ },
44
+ createFromVirtual: (filePathAbsolute, sourceText) => {
45
+ const environment = environments.get(filePathAbsolute);
46
+ environment.updateFile(filePathAbsolute, sourceText);
47
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
48
+ const sourceFile = environment.getSourceFile(filePathAbsolute);
49
+ const program = environment.languageService.getProgram();
50
+ /* eslint-enable @typescript-eslint/no-non-null-assertion */
51
+ seenPrograms.add(program);
52
+ return {
53
+ program,
54
+ sourceFile,
55
+ };
56
+ },
57
+ };
58
+ }
59
+ //# sourceMappingURL=prepareTypeScriptBasedLanguage.js.map
@@ -1,7 +1,12 @@
1
- import { LanguageFileDefinition } from "@flint.fyi/core";
2
- import ts from "typescript";
3
- export declare function prepareTypeScriptFile(languageFile: LanguageFileDefinition, sourceFile: ts.SourceFile): {
4
- file: LanguageFileDefinition;
1
+ import { TypeScriptBasedLanguageFile } from "./prepareTypeScriptBasedLanguage.js";
2
+ export declare function prepareTypeScriptFile(file: TypeScriptBasedLanguageFile): {
3
+ file: {
4
+ cache?: import("@flint.fyi/core").LanguageFileCacheImpacts;
5
+ getDiagnostics?(): import("@flint.fyi/core").LanguageDiagnostics;
6
+ runRule<OptionsSchema extends import("@flint.fyi/core").AnyOptionalSchema | undefined = import("@flint.fyi/core").AnyOptionalSchema | undefined>(rule: import("@flint.fyi/core").AnyRuleDefinition<OptionsSchema>, options: import("@flint.fyi/core").InferredObject<OptionsSchema>): import("@flint.fyi/utils").PromiseOrSync<import("@flint.fyi/core").NormalizedReport[]>;
7
+ [Symbol.dispose]?: (() => void) | undefined;
8
+ };
5
9
  directives: import("@flint.fyi/core").CommentDirective[];
6
10
  reports: import("@flint.fyi/core").FileReport[];
7
11
  };
12
+ //# sourceMappingURL=prepareTypeScriptFile.d.ts.map
@@ -1,7 +1,13 @@
1
+ import { createTypeScriptFileFromProgram } from "./createTypeScriptFileFromProgram.js";
1
2
  import { parseDirectivesFromTypeScriptFile } from "./directives/parseDirectivesFromTypeScriptFile.js";
2
- export function prepareTypeScriptFile(languageFile, sourceFile) {
3
+ export function prepareTypeScriptFile(file) {
4
+ const { program, sourceFile, [Symbol.dispose]: onDispose } = file;
3
5
  return {
4
6
  ...parseDirectivesFromTypeScriptFile(sourceFile),
5
- file: languageFile,
7
+ file: {
8
+ ...(onDispose != null && { [Symbol.dispose]: onDispose }),
9
+ ...createTypeScriptFileFromProgram(program, sourceFile),
10
+ },
6
11
  };
7
12
  }
13
+ //# sourceMappingURL=prepareTypeScriptFile.js.map
@@ -2,5 +2,6 @@ declare const _default: import("@flint.fyi/core").Rule<{
2
2
  readonly description: "Reports returning a value with type `any` from a function.";
3
3
  readonly id: "anyReturns";
4
4
  readonly preset: "logical";
5
- }, import("../nodes.js").TSNodesByName, import("../language.js").TypeScriptServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>;
5
+ }, import("../nodes.js").TSNodesByName, import("../language.js").TypeScriptFileServices, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>;
6
6
  export default _default;
7
+ //# sourceMappingURL=anyReturns.d.ts.map
@@ -46,10 +46,9 @@ export default typescriptLanguage.createRule({
46
46
  },
47
47
  },
48
48
  setup(context) {
49
- const isNoImplicitThis = tsutils.isStrictCompilerOptionEnabled(context.program.getCompilerOptions(), "noImplicitThis");
50
- function checkReturn(returnNode, reportingNode) {
51
- const type = context.typeChecker.getTypeAtLocation(returnNode);
52
- const anyType = discriminateAnyType(type, context.typeChecker, context.program, returnNode);
49
+ function checkReturn(returnNode, reportingNode, program, typeChecker) {
50
+ const type = typeChecker.getTypeAtLocation(returnNode);
51
+ const anyType = discriminateAnyType(type, typeChecker, program, returnNode);
53
52
  const functionNode = ts.findAncestor(returnNode,
54
53
  // TODO: I believe isFunctionLikeDeclaration was incorrectly marked
55
54
  // as deprecated in https://github.com/JoshuaKGoldberg/ts-api-utils/pull/124
@@ -62,16 +61,16 @@ export default typescriptLanguage.createRule({
62
61
  return;
63
62
  }
64
63
  // function has an explicit return type, so ensure it's a safe return
65
- const returnNodeType = getConstrainedTypeAtLocation(returnNode, context.typeChecker);
64
+ const returnNodeType = getConstrainedTypeAtLocation(returnNode, typeChecker);
66
65
  // function expressions will not have their return type modified based on receiver typing
67
66
  // so we have to use the contextual typing in these cases, i.e.
68
67
  // const foo1: () => Set<string> = () => new Set<any>();
69
68
  // the return type of the arrow function is Set<any> even though the variable is typed as Set<string>
70
69
  let functionType = ts.isFunctionExpression(functionNode) ||
71
70
  ts.isArrowFunction(functionNode)
72
- ? context.typeChecker.getContextualType(functionNode)
73
- : context.typeChecker.getTypeAtLocation(functionNode);
74
- functionType ??= context.typeChecker.getTypeAtLocation(functionNode);
71
+ ? typeChecker.getContextualType(functionNode)
72
+ : typeChecker.getTypeAtLocation(functionNode);
73
+ functionType ??= typeChecker.getTypeAtLocation(functionNode);
75
74
  const callSignatures = tsutils.getCallSignaturesOfType(functionType);
76
75
  // If there is an explicit type annotation *and* that type matches the actual
77
76
  // function return type, we shouldn't complain (it's intentional, even if unsafe)
@@ -83,8 +82,8 @@ export default typescriptLanguage.createRule({
83
82
  return;
84
83
  }
85
84
  if (tsutils.includesModifier(functionNode.modifiers, ts.SyntaxKind.AsyncKeyword)) {
86
- const awaitedSignatureReturnType = context.typeChecker.getAwaitedType(signatureReturnType);
87
- const awaitedReturnNodeType = context.typeChecker.getAwaitedType(returnNodeType);
85
+ const awaitedSignatureReturnType = typeChecker.getAwaitedType(signatureReturnType);
86
+ const awaitedReturnNodeType = typeChecker.getAwaitedType(returnNodeType);
88
87
  if (awaitedReturnNodeType === awaitedSignatureReturnType ||
89
88
  (awaitedSignatureReturnType &&
90
89
  tsutils.isTypeFlagSet(awaitedSignatureReturnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown))) {
@@ -103,11 +102,11 @@ export default typescriptLanguage.createRule({
103
102
  return;
104
103
  }
105
104
  if (anyType === AnyType.AnyArray &&
106
- context.typeChecker.isArrayType(functionReturnType) &&
107
- tsutils.isTypeFlagSet(context.typeChecker.getTypeArguments(functionReturnType)[0], ts.TypeFlags.Unknown)) {
105
+ typeChecker.isArrayType(functionReturnType) &&
106
+ tsutils.isTypeFlagSet(typeChecker.getTypeArguments(functionReturnType)[0], ts.TypeFlags.Unknown)) {
108
107
  return;
109
108
  }
110
- const awaitedType = context.typeChecker.getAwaitedType(functionReturnType);
109
+ const awaitedType = typeChecker.getAwaitedType(functionReturnType);
111
110
  if (awaitedType &&
112
111
  anyType === AnyType.PromiseAny &&
113
112
  tsutils.isTypeFlagSet(awaitedType, ts.TypeFlags.Unknown)) {
@@ -120,11 +119,11 @@ export default typescriptLanguage.createRule({
120
119
  }
121
120
  let message = "unsafeReturn";
122
121
  const isErrorType = tsutils.isIntrinsicErrorType(returnNodeType);
123
- if (!isNoImplicitThis) {
122
+ if (!tsutils.isStrictCompilerOptionEnabled(program.getCompilerOptions(), "noImplicitThis")) {
124
123
  // `return this`
125
124
  const thisExpression = getThisExpression(returnNode);
126
125
  if (thisExpression &&
127
- tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(thisExpression, context.typeChecker), ts.TypeFlags.Any)) {
126
+ tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(thisExpression, typeChecker), ts.TypeFlags.Any)) {
128
127
  message = "unsafeReturnThis";
129
128
  }
130
129
  }
@@ -150,15 +149,15 @@ export default typescriptLanguage.createRule({
150
149
  const signature = functionType.getCallSignatures().at(0);
151
150
  if (signature) {
152
151
  const functionReturnType = signature.getReturnType();
153
- const result = isUnsafeAssignment(returnNodeType, functionReturnType, context.typeChecker, returnNode);
152
+ const result = isUnsafeAssignment(returnNodeType, functionReturnType, typeChecker, returnNode);
154
153
  if (!result) {
155
154
  return;
156
155
  }
157
156
  const { receiver, sender } = result;
158
157
  context.report({
159
158
  data: {
160
- receiver: context.typeChecker.typeToString(receiver),
161
- sender: context.typeChecker.typeToString(sender),
159
+ receiver: typeChecker.typeToString(receiver),
160
+ sender: typeChecker.typeToString(sender),
162
161
  },
163
162
  message: "unsafeReturnAssignment",
164
163
  range: {
@@ -171,17 +170,18 @@ export default typescriptLanguage.createRule({
171
170
  }
172
171
  return {
173
172
  visitors: {
174
- ArrowFunction: (node) => {
173
+ ArrowFunction: (node, { program, typeChecker }) => {
175
174
  if (!ts.isBlock(node.body)) {
176
- checkReturn(node.body, node.body);
175
+ checkReturn(node.body, node.body, program, typeChecker);
177
176
  }
178
177
  },
179
- ReturnStatement: (node) => {
178
+ ReturnStatement: (node, { program, typeChecker }) => {
180
179
  if (node.expression != null) {
181
- checkReturn(node.expression, node);
180
+ checkReturn(node.expression, node, program, typeChecker);
182
181
  }
183
182
  },
184
183
  },
185
184
  };
186
185
  },
187
186
  });
187
+ //# sourceMappingURL=anyReturns.js.map
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=anyReturns.test.d.ts.map
@@ -645,3 +645,4 @@ function foo(): Set<number> {
645
645
  `,
646
646
  ],
647
647
  });
648
+ //# sourceMappingURL=anyReturns.test.js.map