@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,186 +0,0 @@
1
- import rule from "./returnAssignments.js";
2
- import { ruleTester } from "./ruleTester.js";
3
-
4
- ruleTester.describe(rule, {
5
- invalid: [
6
- {
7
- code: `
8
- function getValue() {
9
- let value;
10
- return value = 1;
11
- }
12
- `,
13
- snapshot: `
14
- function getValue() {
15
- let value;
16
- return value = 1;
17
- ~
18
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
19
- }
20
- `,
21
- },
22
- {
23
- code: `
24
- function process() {
25
- let result;
26
- return result = calculate();
27
- }
28
- `,
29
- snapshot: `
30
- function process() {
31
- let result;
32
- return result = calculate();
33
- ~
34
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
35
- }
36
- `,
37
- },
38
- {
39
- code: `
40
- function update() {
41
- let status;
42
- return (status = "updated");
43
- }
44
- `,
45
- snapshot: `
46
- function update() {
47
- let status;
48
- return (status = "updated");
49
- ~
50
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
51
- }
52
- `,
53
- },
54
- {
55
- code: `
56
- const arrow = () => {
57
- let value;
58
- return value = 42;
59
- };
60
- `,
61
- snapshot: `
62
- const arrow = () => {
63
- let value;
64
- return value = 42;
65
- ~
66
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
67
- };
68
- `,
69
- },
70
- {
71
- code: `
72
- const arrowImplicit = () => (value = 100);
73
- `,
74
- snapshot: `
75
- const arrowImplicit = () => (value = 100);
76
- ~
77
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
78
- `,
79
- },
80
- {
81
- code: `
82
- function multiply(factor: number) {
83
- let result;
84
- return result = factor * 2;
85
- }
86
- `,
87
- snapshot: `
88
- function multiply(factor: number) {
89
- let result;
90
- return result = factor * 2;
91
- ~
92
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
93
- }
94
- `,
95
- },
96
- {
97
- code: `
98
- function compound() {
99
- let count;
100
- return count += 5;
101
- }
102
- `,
103
- snapshot: `
104
- function compound() {
105
- let count;
106
- return count += 5;
107
- ~~
108
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
109
- }
110
- `,
111
- },
112
- {
113
- code: `
114
- function bitwise() {
115
- let flags;
116
- return flags |= 0x01;
117
- }
118
- `,
119
- snapshot: `
120
- function bitwise() {
121
- let flags;
122
- return flags |= 0x01;
123
- ~~
124
- Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.
125
- }
126
- `,
127
- },
128
- ],
129
- valid: [
130
- `function getValue() { return 1; }`,
131
- `function getValue() { let value = 1; return value; }`,
132
- `function process() { const result = calculate(); return result; }`,
133
- `const arrow = () => { let value = 42; return value; };`,
134
- `const arrowImplicit = () => getValue();`,
135
- `
136
- function update() {
137
- let status = "updated";
138
- return status;
139
- }
140
- `,
141
- `
142
- function multiply(factor: number) {
143
- let result = factor * 2;
144
- return result;
145
- }
146
- `,
147
- `
148
- function compound() {
149
- let count = 0;
150
- count += 5;
151
- return count;
152
- }
153
- `,
154
- `
155
- function calculate() {
156
- const value = 10;
157
- return value;
158
- }
159
- `,
160
- `
161
- const process = (input: number) => {
162
- const result = input * 2;
163
- return result;
164
- };
165
- `,
166
- `
167
- class MyClass {
168
- method() {
169
- const value = 42;
170
- return value;
171
- }
172
- }
173
- `,
174
- `
175
- function compare(a: number, b: number) {
176
- return a === b;
177
- }
178
- `,
179
- `
180
- function arrowReturn() {
181
- const fn = () => 42;
182
- return fn;
183
- }
184
- `,
185
- ],
186
- });
@@ -1,57 +0,0 @@
1
- import * as tsutils from "ts-api-utils";
2
- import * as ts from "typescript";
3
-
4
- import { getTSNodeRange } from "../getTSNodeRange.js";
5
- import { typescriptLanguage } from "../language.js";
6
- import { unwrapParenthesizedExpression } from "../utils/unwrapParenthesizedExpression.js";
7
-
8
- export default typescriptLanguage.createRule({
9
- about: {
10
- description: "Reports using assignment expressions in return statements.",
11
- id: "returnAssignments",
12
- preset: "stylistic",
13
- },
14
- messages: {
15
- noReturnAssign: {
16
- primary:
17
- "Placing an assignment inside a return statement can be misleading and is often a sign of a logical mistake.",
18
- secondary: [
19
- "Using assignments in return statements can make code harder to read and can lead to confusion about whether the assignment or the returned value is the primary intent.",
20
- "Assignment expressions return the assigned value, but mixing assignment with return makes the control flow less clear.",
21
- ],
22
- suggestions: [
23
- "Perform the assignment on a separate line before the return statement.",
24
- ],
25
- },
26
- },
27
- setup(context) {
28
- function checkForAssignment(node: ts.Expression): void {
29
- const unwrapped = unwrapParenthesizedExpression(node);
30
-
31
- if (
32
- ts.isBinaryExpression(unwrapped) &&
33
- tsutils.isAssignmentKind(unwrapped.operatorToken.kind)
34
- ) {
35
- context.report({
36
- message: "noReturnAssign",
37
- range: getTSNodeRange(unwrapped.operatorToken, context.sourceFile),
38
- });
39
- }
40
- }
41
-
42
- return {
43
- visitors: {
44
- ArrowFunction: (node) => {
45
- if (!ts.isBlock(node.body)) {
46
- checkForAssignment(node.body);
47
- }
48
- },
49
- ReturnStatement: (node) => {
50
- if (node.expression) {
51
- checkForAssignment(node.expression);
52
- }
53
- },
54
- },
55
- };
56
- },
57
- });
@@ -1,4 +0,0 @@
1
- import { RuleTester } from "@flint.fyi/rule-tester";
2
- import { describe, it } from "vitest";
3
-
4
- export const ruleTester = new RuleTester({ describe, it });
@@ -1,67 +0,0 @@
1
- import { ruleTester } from "./ruleTester.js";
2
- import rule from "./selfAssignments.js";
3
-
4
- ruleTester.describe(rule, {
5
- invalid: [
6
- {
7
- code: `
8
- value = value;
9
- `,
10
- snapshot: `
11
- value = value;
12
- ~~~~~~~~~~~~~
13
- This value is being assigned to itself, which does nothing.
14
- `,
15
- },
16
- {
17
- code: `
18
- count &&= count;
19
- `,
20
- snapshot: `
21
- count &&= count;
22
- ~~~~~~~~~~~~~~~
23
- This value is being assigned to itself, which does nothing.
24
- `,
25
- },
26
- {
27
- code: `
28
- flag ||= flag;
29
- `,
30
- snapshot: `
31
- flag ||= flag;
32
- ~~~~~~~~~~~~~
33
- This value is being assigned to itself, which does nothing.
34
- `,
35
- },
36
- {
37
- code: `
38
- data ??= data;
39
- `,
40
- snapshot: `
41
- data ??= data;
42
- ~~~~~~~~~~~~~
43
- This value is being assigned to itself, which does nothing.
44
- `,
45
- },
46
- {
47
- code: `
48
- a.b ??= a.b;
49
- `,
50
- snapshot: `
51
- a.b ??= a.b;
52
- ~~~~~~~~~~~
53
- This value is being assigned to itself, which does nothing.
54
- `,
55
- },
56
- ],
57
- valid: [
58
- `value = other;`,
59
- `first = second;`,
60
- `let value = value;`,
61
- `const data = data;`,
62
- `value += value;`,
63
- `count -= count;`,
64
- `a ||= b;`,
65
- `a.b ||= a.c;`,
66
- ],
67
- });
@@ -1,50 +0,0 @@
1
- import * as ts from "typescript";
2
-
3
- import { getTSNodeRange } from "../getTSNodeRange.js";
4
- import { typescriptLanguage } from "../language.js";
5
- import { hasSameTokens } from "../utils/hasSameTokens.js";
6
-
7
- export default typescriptLanguage.createRule({
8
- about: {
9
- description:
10
- "Reports self-assignments which have no effect and are likely errors.",
11
- id: "selfAssignments",
12
- preset: "logical",
13
- },
14
- messages: {
15
- selfAssignment: {
16
- primary: "This value is being assigned to itself, which does nothing.",
17
- secondary: [
18
- "Self-assignments have no effect and typically indicate an incomplete refactoring or copy-paste error.",
19
- ],
20
- suggestions: [
21
- "Review the assignment and ensure you're assigning the correct value.",
22
- ],
23
- },
24
- },
25
- setup(context) {
26
- return {
27
- visitors: {
28
- BinaryExpression: (node) => {
29
- if (
30
- node.operatorToken.kind !== ts.SyntaxKind.EqualsToken &&
31
- node.operatorToken.kind !==
32
- ts.SyntaxKind.AmpersandAmpersandEqualsToken &&
33
- node.operatorToken.kind !== ts.SyntaxKind.BarBarEqualsToken &&
34
- node.operatorToken.kind !==
35
- ts.SyntaxKind.QuestionQuestionEqualsToken
36
- ) {
37
- return;
38
- }
39
-
40
- if (hasSameTokens(node.left, node.right, context.sourceFile)) {
41
- context.report({
42
- message: "selfAssignment",
43
- range: getTSNodeRange(node, context.sourceFile),
44
- });
45
- }
46
- },
47
- },
48
- };
49
- },
50
- });
@@ -1,298 +0,0 @@
1
- import { ruleTester } from "./ruleTester.js";
2
- import rule from "./selfComparisons.js";
3
-
4
- ruleTester.describe(rule, {
5
- invalid: [
6
- {
7
- code: `
8
- if (value === value) {
9
- console.log("always true");
10
- }
11
- `,
12
- snapshot: `
13
- if (value === value) {
14
- ~~~~~~~~~~~~~~~
15
- Comparing a value to itself is unnecessary and likely indicates a logic error.
16
- console.log("always true");
17
- }
18
- `,
19
- },
20
- {
21
- code: `
22
- if (value == value) {
23
- console.log("always true");
24
- }
25
- `,
26
- snapshot: `
27
- if (value == value) {
28
- ~~~~~~~~~~~~~~
29
- Comparing a value to itself is unnecessary and likely indicates a logic error.
30
- console.log("always true");
31
- }
32
- `,
33
- },
34
- {
35
- code: `
36
- if (value !== value) {
37
- console.log("always false");
38
- }
39
- `,
40
- snapshot: `
41
- if (value !== value) {
42
- ~~~~~~~~~~~~~~~
43
- Comparing a value to itself is unnecessary and likely indicates a logic error.
44
- console.log("always false");
45
- }
46
- `,
47
- },
48
- {
49
- code: `
50
- if (value != value) {
51
- console.log("always false");
52
- }
53
- `,
54
- snapshot: `
55
- if (value != value) {
56
- ~~~~~~~~~~~~~~
57
- Comparing a value to itself is unnecessary and likely indicates a logic error.
58
- console.log("always false");
59
- }
60
- `,
61
- },
62
- {
63
- code: `
64
- if (value < value) {
65
- console.log("always false");
66
- }
67
- `,
68
- snapshot: `
69
- if (value < value) {
70
- ~~~~~~~~~~~~~
71
- Comparing a value to itself is unnecessary and likely indicates a logic error.
72
- console.log("always false");
73
- }
74
- `,
75
- },
76
- {
77
- code: `
78
- if (value <= value) {
79
- console.log("always true");
80
- }
81
- `,
82
- snapshot: `
83
- if (value <= value) {
84
- ~~~~~~~~~~~~~~
85
- Comparing a value to itself is unnecessary and likely indicates a logic error.
86
- console.log("always true");
87
- }
88
- `,
89
- },
90
- {
91
- code: `
92
- if (value > value) {
93
- console.log("always false");
94
- }
95
- `,
96
- snapshot: `
97
- if (value > value) {
98
- ~~~~~~~~~~~~~
99
- Comparing a value to itself is unnecessary and likely indicates a logic error.
100
- console.log("always false");
101
- }
102
- `,
103
- },
104
- {
105
- code: `
106
- if (value >= value) {
107
- console.log("always true");
108
- }
109
- `,
110
- snapshot: `
111
- if (value >= value) {
112
- ~~~~~~~~~~~~~~
113
- Comparing a value to itself is unnecessary and likely indicates a logic error.
114
- console.log("always true");
115
- }
116
- `,
117
- },
118
- {
119
- code: `
120
- const result = object.property === object.property;
121
- `,
122
- snapshot: `
123
- const result = object.property === object.property;
124
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125
- Comparing a value to itself is unnecessary and likely indicates a logic error.
126
- `,
127
- },
128
- {
129
- code: `
130
- const result = array[0] === array[0];
131
- `,
132
- snapshot: `
133
- const result = array[0] === array[0];
134
- ~~~~~~~~~~~~~~~~~~~~~
135
- Comparing a value to itself is unnecessary and likely indicates a logic error.
136
- `,
137
- },
138
- {
139
- code: `
140
- if (calculate() === calculate()) {
141
- console.log("functions");
142
- }
143
- `,
144
- snapshot: `
145
- if (calculate() === calculate()) {
146
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
147
- Comparing a value to itself is unnecessary and likely indicates a logic error.
148
- console.log("functions");
149
- }
150
- `,
151
- },
152
- {
153
- code: `
154
- if (value /* comment */ === value) {
155
- console.log("with comment");
156
- }
157
- `,
158
- snapshot: `
159
- if (value /* comment */ === value) {
160
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
161
- Comparing a value to itself is unnecessary and likely indicates a logic error.
162
- console.log("with comment");
163
- }
164
- `,
165
- },
166
- {
167
- code: `
168
- if (object.property /* comment */ === object.property) {
169
- console.log("with comment in property access");
170
- }
171
- `,
172
- snapshot: `
173
- if (object.property /* comment */ === object.property) {
174
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
175
- Comparing a value to itself is unnecessary and likely indicates a logic error.
176
- console.log("with comment in property access");
177
- }
178
- `,
179
- },
180
- {
181
- code: `
182
- if (array /* comment */ [0] === array[0]) {
183
- console.log("with comment in array access");
184
- }
185
- `,
186
- snapshot: `
187
- if (array /* comment */ [0] === array[0]) {
188
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189
- Comparing a value to itself is unnecessary and likely indicates a logic error.
190
- console.log("with comment in array access");
191
- }
192
- `,
193
- },
194
- {
195
- code: `
196
- if (value === value /* comment */) {
197
- console.log("comment on right side");
198
- }
199
- `,
200
- snapshot: `
201
- if (value === value /* comment */) {
202
- ~~~~~~~~~~~~~~~
203
- Comparing a value to itself is unnecessary and likely indicates a logic error.
204
- console.log("comment on right side");
205
- }
206
- `,
207
- },
208
- {
209
- code: `
210
- if (value /* left */ === value /* right */) {
211
- console.log("comments on both sides");
212
- }
213
- `,
214
- snapshot: `
215
- if (value /* left */ === value /* right */) {
216
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
217
- Comparing a value to itself is unnecessary and likely indicates a logic error.
218
- console.log("comments on both sides");
219
- }
220
- `,
221
- },
222
- {
223
- code: `
224
- if (object.property === object /* comment */ .property) {
225
- console.log("comment on right property access");
226
- }
227
- `,
228
- snapshot: `
229
- if (object.property === object /* comment */ .property) {
230
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
231
- Comparing a value to itself is unnecessary and likely indicates a logic error.
232
- console.log("comment on right property access");
233
- }
234
- `,
235
- },
236
- {
237
- code: `
238
- if (array[0] === array /* comment */ [0]) {
239
- console.log("comment on right array access");
240
- }
241
- `,
242
- snapshot: `
243
- if (array[0] === array /* comment */ [0]) {
244
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
245
- Comparing a value to itself is unnecessary and likely indicates a logic error.
246
- console.log("comment on right array access");
247
- }
248
- `,
249
- },
250
- {
251
- code: `
252
- if (/* before */ value === value /* after */) {
253
- console.log("comments before and after");
254
- }
255
- `,
256
- snapshot: `
257
- if (/* before */ value === value /* after */) {
258
- ~~~~~~~~~~~~~~~
259
- Comparing a value to itself is unnecessary and likely indicates a logic error.
260
- console.log("comments before and after");
261
- }
262
- `,
263
- },
264
- {
265
- code: `
266
- const result = value /* a */ /* b */ === value /* c */ /* d */;
267
- `,
268
- snapshot: `
269
- const result = value /* a */ /* b */ === value /* c */ /* d */;
270
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271
- Comparing a value to itself is unnecessary and likely indicates a logic error.
272
- `,
273
- },
274
- ],
275
- valid: [
276
- `if (value1 === value2) { console.log("different values"); }`,
277
- `if (value === other) { console.log("different values"); }`,
278
- `if (object.property === object.otherProperty) { console.log("different properties"); }`,
279
- `if (array[0] === array[1]) { console.log("different elements"); }`,
280
- `const result = value1 == value2;`,
281
- `const result = value1 != value2;`,
282
- `const result = value1 !== value2;`,
283
- `const result = value1 < value2;`,
284
- `const result = value1 <= value2;`,
285
- `const result = value1 > value2;`,
286
- `const result = value1 >= value2;`,
287
- `if (Number.isNaN(value)) { console.log("checking for NaN correctly"); }`,
288
- `if (value1 /* comment */ === value2) { console.log("different with comment on left"); }`,
289
- `if (value1 === value2 /* comment */) { console.log("different with comment on right"); }`,
290
- `if (value1 /* left */ === value2 /* right */) { console.log("different with comments on both"); }`,
291
- `if (object /* comment */ .property === object.otherProperty) { console.log("different properties with comment"); }`,
292
- `if (object.property === object /* comment */ .otherProperty) { console.log("different properties with comment on right"); }`,
293
- `if (array /* comment */ [0] === array[1]) { console.log("different elements with comment on left"); }`,
294
- `if (array[0] === array /* comment */ [1]) { console.log("different elements with comment on right"); }`,
295
- `if (/* before */ value1 === value2 /* after */) { console.log("different with surrounding comments"); }`,
296
- `const result = value1 /* a */ /* b */ === value2 /* c */ /* d */;`,
297
- ],
298
- });
@@ -1,45 +0,0 @@
1
- import { typescriptLanguage } from "../language.js";
2
- import { hasSameTokens } from "../utils/hasSameTokens.js";
3
- import { isComparisonOperator } from "./utils/operators.js";
4
-
5
- export default typescriptLanguage.createRule({
6
- about: {
7
- description: "Reports comparing a value to itself.",
8
- id: "selfComparisons",
9
- preset: "logical",
10
- },
11
- messages: {
12
- noSelfComparison: {
13
- primary:
14
- "Comparing a value to itself is unnecessary and likely indicates a logic error.",
15
- secondary: [
16
- "Self-comparisons always evaluate to the same result for a given operator.",
17
- "This pattern often indicates a copy-paste error or typo where different variables were intended.",
18
- ],
19
- suggestions: [
20
- "Verify that you intended to compare two different values.",
21
- "If checking for NaN, use `Number.isNaN()` or `isNaN()` instead.",
22
- ],
23
- },
24
- },
25
- setup(context) {
26
- return {
27
- visitors: {
28
- BinaryExpression: (node) => {
29
- if (
30
- isComparisonOperator(node.operatorToken) &&
31
- hasSameTokens(node.left, node.right, context.sourceFile)
32
- ) {
33
- context.report({
34
- message: "noSelfComparison",
35
- range: {
36
- begin: node.getStart(context.sourceFile),
37
- end: node.getEnd(),
38
- },
39
- });
40
- }
41
- },
42
- },
43
- };
44
- },
45
- });