@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
@@ -1,59 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- import { typescriptLanguage } from "../language.js";
4
- import { unwrapParenthesizedExpression } from "../utils/unwrapParenthesizedExpression.js";
5
-
6
- const operatorStrings = new Map([
7
- [ts.SyntaxKind.InKeyword, "in"],
8
- [ts.SyntaxKind.InstanceOfKeyword, "instanceof"],
9
- ]);
10
-
11
- export default typescriptLanguage.createRule({
12
- about: {
13
- description:
14
- "Reports negating the left operand of `in` or `instanceof` relations.",
15
- id: "unsafeNegations",
16
- preset: "untyped",
17
- },
18
- messages: {
19
- preferNegatingRelation: {
20
- primary: "This negation applies before the `{{ operator }}` operator.",
21
- secondary: [
22
- "The logical not operator (!) has higher precedence than `in` and `instanceof`.",
23
- "Write `!(left in right)` or `!(left instanceof Right)` to negate the relation as intended.",
24
- ],
25
- suggestions: ["Wrap the relation in parentheses and negate it."],
26
- },
27
- },
28
- setup(context) {
29
- return {
30
- visitors: {
31
- BinaryExpression: (node) => {
32
- const operator = operatorStrings.get(node.operatorToken.kind);
33
- if (!operator) {
34
- return;
35
- }
36
-
37
- const left = unwrapParenthesizedExpression(node.left);
38
- if (
39
- !ts.isPrefixUnaryExpression(left) ||
40
- left.operator !== ts.SyntaxKind.ExclamationToken
41
- ) {
42
- return;
43
- }
44
-
45
- const begin = left.getStart(context.sourceFile);
46
-
47
- context.report({
48
- data: { operator },
49
- message: "preferNegatingRelation",
50
- range: {
51
- begin,
52
- end: begin + 1,
53
- },
54
- });
55
- },
56
- },
57
- };
58
- },
59
- });
@@ -1,66 +0,0 @@
1
- import * as tsutils from "ts-api-utils";
2
- import * as ts from "typescript";
3
-
4
- export enum AnyType {
5
- Any,
6
- PromiseAny,
7
- AnyArray,
8
- Safe,
9
- }
10
-
11
- /**
12
- * @returns `AnyType.Any` if the type is `any`, `AnyType.AnyArray` if the type is `any[]` or `readonly any[]`, `AnyType.PromiseAny` if the type is `Promise<any>`,
13
- * otherwise it returns `AnyType.Safe`.
14
- */
15
- export function discriminateAnyType(
16
- type: ts.Type,
17
- checker: ts.TypeChecker,
18
- program: ts.Program,
19
- tsNode: ts.Node,
20
- ): AnyType {
21
- return discriminateAnyTypeWorker(type, checker, program, tsNode, new Set());
22
- }
23
-
24
- function discriminateAnyTypeWorker(
25
- type: ts.Type,
26
- checker: ts.TypeChecker,
27
- program: ts.Program,
28
- tsNode: ts.Node,
29
- visited: Set<ts.Type>,
30
- ) {
31
- if (visited.has(type)) {
32
- return AnyType.Safe;
33
- }
34
- visited.add(type);
35
- if (tsutils.isTypeFlagSet(type, ts.TypeFlags.Any)) {
36
- return AnyType.Any;
37
- }
38
- if (
39
- checker.isArrayType(type) &&
40
- tsutils.isTypeFlagSet(
41
- checker.getTypeArguments(type as ts.TypeReference)[0],
42
- ts.TypeFlags.Any,
43
- )
44
- ) {
45
- return AnyType.AnyArray;
46
- }
47
- for (const part of tsutils.typeConstituents(type)) {
48
- if (tsutils.isThenableType(checker, tsNode, part)) {
49
- const awaitedType = checker.getAwaitedType(part);
50
- if (awaitedType) {
51
- const awaitedAnyType = discriminateAnyTypeWorker(
52
- awaitedType,
53
- checker,
54
- program,
55
- tsNode,
56
- visited,
57
- );
58
- if (awaitedAnyType === AnyType.Any) {
59
- return AnyType.PromiseAny;
60
- }
61
- }
62
- }
63
- }
64
-
65
- return AnyType.Safe;
66
- }
@@ -1,9 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- export function getConstrainedTypeAtLocation(
4
- node: ts.Node,
5
- typeChecker: ts.TypeChecker,
6
- ) {
7
- const type = typeChecker.getTypeAtLocation(node);
8
- return typeChecker.getBaseConstraintOfType(type) ?? type;
9
- }
@@ -1,24 +0,0 @@
1
- import * as tsutils from "ts-api-utils";
2
- import * as ts from "typescript";
3
-
4
- export function getThisExpression(node: ts.Node): null | ts.ThisExpression {
5
- while (true) {
6
- node = skipParentheses(node);
7
- if (ts.isCallExpression(node) || tsutils.isAccessExpression(node)) {
8
- node = node.expression;
9
- } else if (tsutils.isThisExpression(node)) {
10
- return node;
11
- } else {
12
- break;
13
- }
14
- }
15
-
16
- return null;
17
- }
18
-
19
- function skipParentheses(node: ts.Node): ts.Node {
20
- while (ts.isParenthesizedExpression(node)) {
21
- node = node.expression;
22
- }
23
- return node;
24
- }
@@ -1,10 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- export function isTypeRecursive(
4
- type: ts.Type,
5
- predicate: (t: ts.Type) => boolean,
6
- ): boolean {
7
- return type.isUnionOrIntersection()
8
- ? type.types.some((subType) => isTypeRecursive(subType, predicate))
9
- : predicate(type);
10
- }
@@ -1,113 +0,0 @@
1
- import * as tsutils from "ts-api-utils";
2
- import * as ts from "typescript";
3
-
4
- /**
5
- * Does a simple check to see if there is an any being assigned to a non-any type.
6
- *
7
- * This also checks generic positions to ensure there's no unsafe sub-assignments.
8
- * Note: in the case of generic positions, it makes the assumption that the two types are the same.
9
- * @example See tests for examples
10
- * @returns false if it's safe, or an object with the two types if it's unsafe
11
- */
12
- export function isUnsafeAssignment(
13
- type: ts.Type,
14
- receiver: ts.Type,
15
- checker: ts.TypeChecker,
16
- senderNode: null | ts.Node,
17
- ): false | { receiver: ts.Type; sender: ts.Type } {
18
- return isUnsafeAssignmentWorker(
19
- type,
20
- receiver,
21
- checker,
22
- senderNode,
23
- new Map(),
24
- );
25
- }
26
-
27
- function isUnsafeAssignmentWorker(
28
- type: ts.Type,
29
- receiver: ts.Type,
30
- checker: ts.TypeChecker,
31
- senderNode: null | ts.Node,
32
- visited: Map<ts.Type, Set<ts.Type>>,
33
- ): false | { receiver: ts.Type; sender: ts.Type } {
34
- if (tsutils.isTypeFlagSet(type, ts.TypeFlags.Any)) {
35
- // Allow assignment of any ==> unknown.
36
- if (tsutils.isTypeFlagSet(receiver, ts.TypeFlags.Unknown)) {
37
- return false;
38
- }
39
-
40
- if (!tsutils.isTypeFlagSet(receiver, ts.TypeFlags.Any)) {
41
- return { receiver, sender: type };
42
- }
43
- }
44
-
45
- const typeAlreadyVisited = visited.get(type);
46
-
47
- if (typeAlreadyVisited) {
48
- if (typeAlreadyVisited.has(receiver)) {
49
- return false;
50
- }
51
- typeAlreadyVisited.add(receiver);
52
- } else {
53
- visited.set(type, new Set([receiver]));
54
- }
55
-
56
- if (tsutils.isTypeReference(type) && tsutils.isTypeReference(receiver)) {
57
- // TODO - figure out how to handle cases like this,
58
- // where the types are assignable, but not the same type
59
- /*
60
- function foo(): ReadonlySet<number> { return new Set<any>(); }
61
-
62
- // and
63
-
64
- type Test<T> = { prop: T }
65
- type Test2 = { prop: string }
66
- declare const a: Test<any>;
67
- const b: Test2 = a;
68
- */
69
-
70
- if (type.target !== receiver.target) {
71
- // if the type references are different, assume safe, as we won't know how to compare the two types
72
- // the generic positions might not be equivalent for both types
73
- return false;
74
- }
75
-
76
- if (
77
- senderNode != null &&
78
- ts.isNewExpression(senderNode) &&
79
- ts.isIdentifier(senderNode.expression) &&
80
- senderNode.expression.text === "Map" &&
81
- (senderNode.arguments == null || senderNode.arguments.length === 0) &&
82
- senderNode.typeArguments == null
83
- ) {
84
- // special case to handle `new Map()`
85
- // unfortunately Map's default empty constructor is typed to return `Map<any, any>` :(
86
- // https://github.com/typescript-eslint/typescript-eslint/issues/2109#issuecomment-634144396
87
- return false;
88
- }
89
-
90
- const typeArguments = type.typeArguments ?? [];
91
- const receiverTypeArguments = receiver.typeArguments ?? [];
92
-
93
- for (let i = 0; i < typeArguments.length; i += 1) {
94
- const arg = typeArguments[i];
95
- const receiverArg = receiverTypeArguments[i];
96
-
97
- const unsafe = isUnsafeAssignmentWorker(
98
- arg,
99
- receiverArg,
100
- checker,
101
- senderNode,
102
- visited,
103
- );
104
- if (unsafe) {
105
- return { receiver, sender: type };
106
- }
107
- }
108
-
109
- return false;
110
- }
111
-
112
- return false;
113
- }
@@ -1,39 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- export function isComparisonOperator(token: ts.BinaryOperatorToken) {
4
- switch (token.kind) {
5
- case ts.SyntaxKind.EqualsEqualsEqualsToken:
6
- case ts.SyntaxKind.EqualsEqualsToken:
7
- case ts.SyntaxKind.ExclamationEqualsEqualsToken:
8
- case ts.SyntaxKind.ExclamationEqualsToken:
9
- case ts.SyntaxKind.GreaterThanEqualsToken:
10
- case ts.SyntaxKind.GreaterThanToken:
11
- case ts.SyntaxKind.LessThanEqualsToken:
12
- case ts.SyntaxKind.LessThanToken:
13
- return true;
14
- default:
15
- return false;
16
- }
17
- }
18
-
19
- export function isEqualityOperator(token: ts.BinaryOperatorToken) {
20
- switch (token.kind) {
21
- case ts.SyntaxKind.EqualsEqualsEqualsToken:
22
- case ts.SyntaxKind.EqualsEqualsToken:
23
- case ts.SyntaxKind.ExclamationEqualsEqualsToken:
24
- case ts.SyntaxKind.ExclamationEqualsToken:
25
- return true;
26
- default:
27
- return false;
28
- }
29
- }
30
-
31
- export function isNegatedEqualityOperator(token: ts.BinaryOperatorToken) {
32
- switch (token.kind) {
33
- case ts.SyntaxKind.ExclamationEqualsEqualsToken:
34
- case ts.SyntaxKind.ExclamationEqualsToken:
35
- return true;
36
- default:
37
- return false;
38
- }
39
- }
@@ -1,76 +0,0 @@
1
- import { ruleTester } from "./ruleTester.js";
2
- import rule from "./variableDeletions.js";
3
-
4
- ruleTester.describe(rule, {
5
- invalid: [
6
- {
7
- code: `
8
- delete value;
9
- `,
10
- snapshot: `
11
- delete value;
12
- ~~~~~~~~~~~~
13
- Deleting a variable with the delete operator outside of strict mode will silently fail and return false.
14
- `,
15
- },
16
- {
17
- code: `
18
- let x = 5;
19
- delete x;
20
- `,
21
- snapshot: `
22
- let x = 5;
23
- delete x;
24
- ~~~~~~~~
25
- Deleting a variable with the delete operator outside of strict mode will silently fail and return false.
26
- `,
27
- },
28
- {
29
- code: `
30
- const variable = 10;
31
- delete variable;
32
- `,
33
- snapshot: `
34
- const variable = 10;
35
- delete variable;
36
- ~~~~~~~~~~~~~~~
37
- Deleting a variable with the delete operator outside of strict mode will silently fail and return false.
38
- `,
39
- },
40
- {
41
- code: `
42
- function test(parameter: number) {
43
- delete parameter;
44
- }
45
- `,
46
- snapshot: `
47
- function test(parameter: number) {
48
- delete parameter;
49
- ~~~~~~~~~~~~~~~~
50
- Deleting a variable with the delete operator outside of strict mode will silently fail and return false.
51
- }
52
- `,
53
- },
54
- {
55
- code: `
56
- for (let index = 0; index < 10; index++) {
57
- delete index;
58
- }
59
- `,
60
- snapshot: `
61
- for (let index = 0; index < 10; index++) {
62
- delete index;
63
- ~~~~~~~~~~~~
64
- Deleting a variable with the delete operator outside of strict mode will silently fail and return false.
65
- }
66
- `,
67
- },
68
- ],
69
- valid: [
70
- `const obj = { prop: 1 }; delete obj.prop;`,
71
- `delete obj.property;`,
72
- `delete obj["property"];`,
73
- `const obj = { nested: { prop: 1 } }; delete obj.nested.prop;`,
74
- `const array = [1, 2, 3]; delete array[0];`,
75
- ],
76
- });
@@ -1,43 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- import { typescriptLanguage } from "../language.js";
4
-
5
- export default typescriptLanguage.createRule({
6
- about: {
7
- description:
8
- "Reports attempting to delete variables with the delete operator.",
9
- id: "variableDeletions",
10
- preset: "untyped",
11
- },
12
- messages: {
13
- noDeleteVar: {
14
- primary:
15
- "Deleting a variable with the delete operator outside of strict mode will silently fail and return false.",
16
- secondary: [
17
- "The delete operator is only meant to remove properties from objects, not variables.",
18
- "Attempting to delete a variable in strict mode will cause a syntax error.",
19
- "In non-strict mode, it will silently fail and return false without actually deleting the variable.",
20
- ],
21
- suggestions: [
22
- "Remove the delete statement, or if you need to unset the value, assign undefined instead.",
23
- ],
24
- },
25
- },
26
- setup(context) {
27
- return {
28
- visitors: {
29
- DeleteExpression: (node) => {
30
- if (node.expression.kind === ts.SyntaxKind.Identifier) {
31
- context.report({
32
- message: "noDeleteVar",
33
- range: {
34
- begin: node.getStart(context.sourceFile),
35
- end: node.getEnd(),
36
- },
37
- });
38
- }
39
- },
40
- },
41
- };
42
- },
43
- });
@@ -1,99 +0,0 @@
1
- import { ruleTester } from "./ruleTester.js";
2
- import rule from "./voidOperator.js";
3
-
4
- ruleTester.describe(rule, {
5
- invalid: [
6
- {
7
- code: `
8
- void 0;
9
- `,
10
- snapshot: `
11
- void 0;
12
- ~~~~~~
13
- Prefer an explicit value over using the void operator to produce undefined.
14
- `,
15
- },
16
- {
17
- code: `
18
- const value = void 0;
19
- `,
20
- snapshot: `
21
- const value = void 0;
22
- ~~~~~~
23
- Prefer an explicit value over using the void operator to produce undefined.
24
- `,
25
- },
26
- {
27
- code: `
28
- void someFunction();
29
- `,
30
- snapshot: `
31
- void someFunction();
32
- ~~~~~~~~~~~~~~~~~~~
33
- Prefer an explicit value over using the void operator to produce undefined.
34
- `,
35
- },
36
- {
37
- code: `
38
- return void calculate();
39
- `,
40
- snapshot: `
41
- return void calculate();
42
- ~~~~~~~~~~~~~~~~
43
- Prefer an explicit value over using the void operator to produce undefined.
44
- `,
45
- },
46
- {
47
- code: `
48
- const result = void (a + b);
49
- `,
50
- snapshot: `
51
- const result = void (a + b);
52
- ~~~~~~~~~~~~
53
- Prefer an explicit value over using the void operator to produce undefined.
54
- `,
55
- },
56
- {
57
- code: `
58
- void expression, anotherExpression;
59
- `,
60
- snapshot: `
61
- void expression, anotherExpression;
62
- ~~~~~~~~~~~~~~~
63
- Prefer an explicit value over using the void operator to produce undefined.
64
- `,
65
- },
66
- {
67
- code: `
68
- function process() {
69
- void doSomething();
70
- }
71
- `,
72
- snapshot: `
73
- function process() {
74
- void doSomething();
75
- ~~~~~~~~~~~~~~~~~~
76
- Prefer an explicit value over using the void operator to produce undefined.
77
- }
78
- `,
79
- },
80
- {
81
- code: `
82
- const callback = () => void action();
83
- `,
84
- snapshot: `
85
- const callback = () => void action();
86
- ~~~~~~~~~~~~~
87
- Prefer an explicit value over using the void operator to produce undefined.
88
- `,
89
- },
90
- ],
91
- valid: [
92
- `const value = undefined;`,
93
- `return undefined;`,
94
- `someFunction();`,
95
- `const result = doSomething();`,
96
- `if (value === undefined) {}`,
97
- `function returns() { return; }`,
98
- ],
99
- });
@@ -1,38 +0,0 @@
1
- import { typescriptLanguage } from "../language.js";
2
-
3
- export default typescriptLanguage.createRule({
4
- about: {
5
- description: "Reports using the void operator.",
6
- id: "voidOperator",
7
- preset: "stylistic",
8
- },
9
- messages: {
10
- noVoid: {
11
- primary:
12
- "Prefer an explicit value over using the void operator to produce undefined.",
13
- secondary: [
14
- "The void operator evaluates an expression and returns undefined, regardless of the expression's value.",
15
- "This is often confusing and can be replaced with more explicit code.",
16
- "Instead of using void, return or assign undefined directly.",
17
- ],
18
- suggestions: [
19
- "Replace void expressions with undefined or restructure the code to be more explicit.",
20
- ],
21
- },
22
- },
23
- setup(context) {
24
- return {
25
- visitors: {
26
- VoidExpression: (node) => {
27
- context.report({
28
- message: "noVoid",
29
- range: {
30
- begin: node.getStart(context.sourceFile),
31
- end: node.getEnd(),
32
- },
33
- });
34
- },
35
- },
36
- };
37
- },
38
- });
@@ -1,9 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- export function declarationIncludesGlobal(declaration: ts.Declaration) {
4
- const sourceFile = declaration.getSourceFile();
5
- return (
6
- sourceFile.hasNoDefaultLib ||
7
- /\/lib\.[^/]*\.d\.ts$/.test(sourceFile.fileName)
8
- );
9
- }
@@ -1,7 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- import { declarationIncludesGlobal } from "./declarationIncludesGlobal.js";
4
-
5
- export function declarationsIncludeGlobal(declarations: ts.Declaration[]) {
6
- return declarations.some(declarationIncludesGlobal);
7
- }
@@ -1,14 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- import { declarationsIncludeGlobal } from "./declarationsIncludeGlobal.js";
4
-
5
- export function getDeclarationsIfGlobal(
6
- node: ts.Expression,
7
- typeChecker: ts.TypeChecker,
8
- ) {
9
- const declarations = typeChecker.getSymbolAtLocation(node)?.getDeclarations();
10
-
11
- return !!declarations && declarationsIncludeGlobal(declarations)
12
- ? declarations
13
- : undefined;
14
- }
@@ -1,58 +0,0 @@
1
- import * as tsutils from "ts-api-utils";
2
- import * as ts from "typescript";
3
-
4
- /**
5
- * Gets all references to a variable that modify it (assignments, increments, decrements).
6
- *
7
- * TODO: Replace with a proper scope manager when available (see #400).
8
- * @returns An array of identifier nodes that modify the variable.
9
- */
10
- export function getModifyingReferences(
11
- identifier: ts.Identifier,
12
- sourceFile: ts.SourceFile,
13
- typeChecker: ts.TypeChecker,
14
- ): ts.Identifier[] {
15
- const symbol = typeChecker.getSymbolAtLocation(identifier);
16
- if (!symbol?.valueDeclaration) {
17
- return [];
18
- }
19
-
20
- const valueDeclaration = symbol.valueDeclaration;
21
- const modifyingReferences: ts.Identifier[] = [];
22
-
23
- function visit(node: ts.Node): void {
24
- // Check if this is an identifier that refers to the same symbol
25
- if (ts.isIdentifier(node)) {
26
- const nodeSymbol = typeChecker.getSymbolAtLocation(node);
27
- if (
28
- nodeSymbol?.valueDeclaration &&
29
- nodeSymbol.valueDeclaration === valueDeclaration
30
- ) {
31
- // Check if this identifier is being modified
32
- const parent = node.parent;
33
-
34
- // Assignment expressions (=, +=, -=, etc.)
35
- if (
36
- ts.isBinaryExpression(parent) &&
37
- tsutils.isAssignmentKind(parent.operatorToken.kind) &&
38
- parent.left === node
39
- ) {
40
- modifyingReferences.push(node);
41
- }
42
- // Unary expressions (++, --)
43
- else if (
44
- (ts.isPostfixUnaryExpression(parent) ||
45
- ts.isPrefixUnaryExpression(parent)) &&
46
- parent.operand === node
47
- ) {
48
- modifyingReferences.push(node);
49
- }
50
- }
51
- }
52
-
53
- ts.forEachChild(node, visit);
54
- }
55
-
56
- visit(sourceFile);
57
- return modifyingReferences;
58
- }