@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
@@ -19,3 +19,4 @@ export function isGlobalVariable(node, typeChecker) {
19
19
  }
20
20
  return declarationsIncludeGlobal(declarations);
21
21
  }
22
+ //# sourceMappingURL=isGlobalVariable.js.map
@@ -1,2 +1,3 @@
1
1
  import * as ts from "typescript";
2
2
  export declare function unwrapParenthesizedExpressionsParent(node: ts.Node): ts.Node;
3
+ //# sourceMappingURL=unwrapParentParenthesizedExpressions.d.ts.map
@@ -4,3 +4,4 @@ export function unwrapParenthesizedExpressionsParent(node) {
4
4
  ? unwrapParenthesizedExpressionsParent(node.parent)
5
5
  : node.parent;
6
6
  }
7
+ //# sourceMappingURL=unwrapParentParenthesizedExpressions.js.map
@@ -1,2 +1,3 @@
1
1
  import * as ts from "typescript";
2
2
  export declare function unwrapParenthesizedExpression(expression: ts.Expression): ts.Expression;
3
+ //# sourceMappingURL=unwrapParenthesizedExpression.d.ts.map
@@ -4,3 +4,4 @@ export function unwrapParenthesizedExpression(expression) {
4
4
  ? unwrapParenthesizedExpression(expression.expression)
5
5
  : expression;
6
6
  }
7
+ //# sourceMappingURL=unwrapParenthesizedExpression.js.map
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@flint.fyi/ts",
3
- "version": "0.14.5",
3
+ "version": "0.15.0",
4
4
  "description": "[Experimental] TypeScript language plugin for Flint.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/JoshuaKGoldberg/flint",
7
+ "url": "git+https://github.com/flint-fyi/flint.git",
8
8
  "directory": "packages/ts"
9
9
  },
10
10
  "license": "MIT",
@@ -12,23 +12,33 @@
12
12
  "name": "JoshuaKGoldberg",
13
13
  "email": "npm@joshuakgoldberg.com"
14
14
  },
15
+ "sideEffects": false,
15
16
  "type": "module",
16
- "main": "./lib/index.js",
17
+ "exports": {
18
+ ".": "./lib/index.js"
19
+ },
20
+ "files": [
21
+ "lib/",
22
+ "!lib/**/*.map"
23
+ ],
17
24
  "dependencies": {
18
25
  "@flint.fyi/core": "",
19
- "@flint.fyi/rule-tester": "",
20
26
  "@typescript-eslint/project-service": "^8.46.2",
21
27
  "@typescript/vfs": "^1.6.1",
22
28
  "cached-factory": "^0.1.0",
23
29
  "debug-for-file": "^0.2.0",
24
30
  "ts-api-utils": "^2.1.0",
25
- "typescript": ">=5.9.3"
31
+ "typescript": "^5.9.0 || ^6.0.0",
32
+ "zod": "^4.2.1"
33
+ },
34
+ "devDependencies": {
35
+ "@flint.fyi/rule-tester": "",
36
+ "vitest": "4.0.15"
26
37
  },
27
38
  "engines": {
28
39
  "node": ">=24.0.0"
29
40
  },
30
41
  "publishConfig": {
31
- "access": "public",
32
- "provenance": true
42
+ "access": "public"
33
43
  }
34
44
  }
package/CHANGELOG.md DELETED
@@ -1,82 +0,0 @@
1
- # @flint/ts
2
-
3
- ## 0.14.5
4
-
5
- ### Patch Changes
6
-
7
- - 7e21021: fix(ts): [chainedAssignments] allow non-assignment right-side operators
8
-
9
- ## 0.14.4
10
-
11
- ### Patch Changes
12
-
13
- - 158b542: expose \`program\` in TS rules context
14
- - Updated dependencies [3d19082]
15
- - Updated dependencies [a3f9043]
16
- - @flint.fyi/core@0.15.1
17
- - @flint.fyi/rule-tester@0.14.2
18
-
19
- ## 0.14.3
20
-
21
- ### Patch Changes
22
-
23
- - 9b6b884: added browser plugin with alerts rule
24
- - c8bad31: feat: add JSX plugin with accessKeys rule
25
-
26
- ## 0.14.2
27
-
28
- ### Patch Changes
29
-
30
- - 6415134: feat: implement debuggerStatements rule for TypeScript plugin
31
- - Updated dependencies [b58d145]
32
- - @flint.fyi/rule-tester@0.14.1
33
-
34
- ## 0.14.1
35
-
36
- ### Patch Changes
37
-
38
- - 27280d3: use first names for ts.SyntaxKind visitors, not aliases
39
-
40
- ## 0.14.0
41
-
42
- ### Minor Changes
43
-
44
- - 7d0d873: add // flint-\* comment directives
45
-
46
- ### Patch Changes
47
-
48
- - Updated dependencies [b48f4a9]
49
- - Updated dependencies [7d0d873]
50
- - Updated dependencies [79f15da]
51
- - @flint.fyi/core@0.15.0
52
- - @flint.fyi/rule-tester@0.14.0
53
-
54
- ## 0.13.2
55
-
56
- ### Patch Changes
57
-
58
- - 0b80834: allow rules to indicate dependencies
59
- - Updated dependencies [0b80834]
60
- - Updated dependencies [63b61e5]
61
- - @flint.fyi/core@0.13.5
62
-
63
- ## 0.13.1
64
-
65
- ### Patch Changes
66
-
67
- - 9909b48: add README.md
68
- - Updated dependencies [9909b48]
69
- - @flint.fyi/core@0.13.1
70
- - @flint.fyi/rule-tester@0.13.1
71
-
72
- ## 0.13.0
73
-
74
- ### Minor Changes
75
-
76
- - 72ed00b: feat: split into a monorepo
77
-
78
- ### Patch Changes
79
-
80
- - Updated dependencies [72ed00b]
81
- - @flint/rule-tester@0.13.0
82
- - @flint/core@0.13.0
@@ -1,10 +0,0 @@
1
- import ts from "typescript";
2
- export interface RawDiagnostic {
3
- file?: ts.SourceFile;
4
- length: number;
5
- message: string;
6
- name: string;
7
- relatedInformation?: ts.DiagnosticRelatedInformation[];
8
- start: number;
9
- }
10
- export declare function formatDiagnostic(diagnostic: RawDiagnostic): string;
@@ -1,37 +0,0 @@
1
- import * as path from "node:path";
2
- import * as ts from "typescript";
3
-
4
- export function collectReferencedFilePaths(
5
- program: ts.Program,
6
- sourceFile: ts.SourceFile,
7
- ) {
8
- // TODO: Also handle inline import()s
9
- // https://github.com/JoshuaKGoldberg/flint/issues/115
10
- return sourceFile.statements
11
- .filter(isImportDeclarationWithStringLiteral)
12
- .map((statement) => {
13
- const resolved = ts.resolveModuleName(
14
- statement.moduleSpecifier.text,
15
- sourceFile.fileName,
16
- program.getCompilerOptions(),
17
- // TODO: Eventually, the file system should be abstracted
18
- // https://github.com/JoshuaKGoldberg/flint/issues/73
19
- ts.sys,
20
- );
21
-
22
- return (
23
- resolved.resolvedModule?.isExternalLibraryImport === false &&
24
- path.relative(process.cwd(), resolved.resolvedModule.resolvedFileName)
25
- );
26
- })
27
- .filter((resolvedFileName) => resolvedFileName !== false);
28
- }
29
-
30
- function isImportDeclarationWithStringLiteral(
31
- statement: ts.Statement,
32
- ): statement is ts.ImportDeclaration & { moduleSpecifier: ts.StringLiteral } {
33
- return (
34
- ts.isImportDeclaration(statement) &&
35
- ts.isStringLiteral(statement.moduleSpecifier)
36
- );
37
- }
@@ -1,86 +0,0 @@
1
- import {
2
- LanguageFileDefinition,
3
- NormalizedReport,
4
- RuleReport,
5
- } from "@flint.fyi/core";
6
- import * as ts from "typescript";
7
-
8
- import { collectReferencedFilePaths } from "./collectReferencedFilePaths.js";
9
- import { formatDiagnostic } from "./formatDiagnostic.js";
10
- import { getFirstEnumValues } from "./getFirstEnumValues.js";
11
- import { normalizeRange } from "./normalizeRange.js";
12
-
13
- const NodeSyntaxKinds = getFirstEnumValues(ts.SyntaxKind);
14
-
15
- export function createTypeScriptFileFromProgram(
16
- program: ts.Program,
17
- sourceFile: ts.SourceFile,
18
- ): LanguageFileDefinition {
19
- return {
20
- cache: {
21
- dependencies: [
22
- // TODO: Add support for multi-TSConfig workspaces.
23
- // https://github.com/JoshuaKGoldberg/flint/issues/64 & more.
24
- "tsconfig.json",
25
-
26
- ...collectReferencedFilePaths(program, sourceFile),
27
- ],
28
- },
29
- getDiagnostics() {
30
- return ts
31
- .getPreEmitDiagnostics(program, sourceFile)
32
- .map((diagnostic) => ({
33
- code: `TS${diagnostic.code}`,
34
- text: formatDiagnostic({
35
- ...diagnostic,
36
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
37
- length: diagnostic.length!,
38
- message: ts.flattenDiagnosticMessageText(
39
- diagnostic.messageText,
40
- "\n",
41
- ),
42
- name: `TS${diagnostic.code}`,
43
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
44
- start: diagnostic.start!,
45
- }),
46
- }));
47
- },
48
- async runRule(rule, options) {
49
- const reports: NormalizedReport[] = [];
50
-
51
- const context = {
52
- program,
53
- report: (report: RuleReport) => {
54
- reports.push({
55
- ...report,
56
- fix:
57
- report.fix && !Array.isArray(report.fix)
58
- ? [report.fix]
59
- : report.fix,
60
- message: rule.messages[report.message],
61
- range: normalizeRange(report.range, sourceFile),
62
- });
63
- },
64
- sourceFile,
65
- typeChecker: program.getTypeChecker(),
66
- };
67
-
68
- const runtime = await rule.setup(context, options);
69
-
70
- if (!runtime?.visitors) {
71
- return reports;
72
- }
73
-
74
- const { visitors } = runtime;
75
- const visit = (node: ts.Node) => {
76
- visitors[NodeSyntaxKinds[node.kind]]?.(node);
77
-
78
- node.forEachChild(visit);
79
- };
80
-
81
- visit(sourceFile);
82
-
83
- return reports;
84
- },
85
- };
86
- }
@@ -1,31 +0,0 @@
1
- import { debugForFile } from "debug-for-file";
2
- import * as ts from "typescript";
3
-
4
- import { createTypeScriptFileFromProgram } from "./createTypeScriptFileFromProgram.js";
5
-
6
- const log = debugForFile(import.meta.filename);
7
-
8
- export function createTypeScriptFileFromProjectService(
9
- filePathAbsolute: string,
10
- program: ts.Program,
11
- service: ts.server.ProjectService,
12
- ) {
13
- const sourceFile = program.getSourceFile(filePathAbsolute);
14
- if (!sourceFile) {
15
- throw new Error(`Could not retrieve source file for: ${filePathAbsolute}`);
16
- }
17
-
18
- log("Retrieved source file and type checker for file %s:", filePathAbsolute);
19
-
20
- const file = createTypeScriptFileFromProgram(program, sourceFile);
21
-
22
- return {
23
- languageFile: {
24
- ...file,
25
- [Symbol.dispose]() {
26
- service.closeClientFile(filePathAbsolute);
27
- },
28
- },
29
- sourceFile,
30
- };
31
- }
@@ -1,108 +0,0 @@
1
- import ts from "typescript";
2
- import { describe, expect, it } from "vitest";
3
-
4
- import { parseDirectivesFromTypeScriptFile } from "./parseDirectivesFromTypeScriptFile.js";
5
-
6
- describe(parseDirectivesFromTypeScriptFile, () => {
7
- it("returns empty arrays when there are no directives", () => {
8
- const sourceFile = ts.createSourceFile(
9
- "test.ts",
10
- "// unrelated",
11
- ts.ScriptTarget.ESNext,
12
- true,
13
- );
14
-
15
- const actual = parseDirectivesFromTypeScriptFile(sourceFile);
16
-
17
- expect(actual).toEqual({
18
- directives: [],
19
- reports: [],
20
- });
21
- });
22
-
23
- it("returns parsed directives when there are comment directives", () => {
24
- const sourceFile = ts.createSourceFile(
25
- "test.ts",
26
- `
27
- // flint-disable-file a
28
- // flint-disable-next-line b
29
- // flint-invalid
30
- `,
31
- ts.ScriptTarget.ESNext,
32
- true,
33
- );
34
-
35
- const actual = parseDirectivesFromTypeScriptFile(sourceFile);
36
-
37
- expect(actual).toMatchInlineSnapshot(`
38
- {
39
- "directives": [
40
- {
41
- "range": {
42
- "begin": {
43
- "column": 16,
44
- "line": 1,
45
- "raw": 17,
46
- },
47
- "end": {
48
- "column": 39,
49
- "line": 1,
50
- "raw": 40,
51
- },
52
- },
53
- "selections": [
54
- "a",
55
- ],
56
- "type": "disable-file",
57
- },
58
- {
59
- "range": {
60
- "begin": {
61
- "column": 16,
62
- "line": 2,
63
- "raw": 57,
64
- },
65
- "end": {
66
- "column": 44,
67
- "line": 2,
68
- "raw": 85,
69
- },
70
- },
71
- "selections": [
72
- "b",
73
- ],
74
- "type": "disable-next-line",
75
- },
76
- ],
77
- "reports": [
78
- {
79
- "about": {
80
- "id": "commentDirectiveUnknown",
81
- },
82
- "message": {
83
- "primary": "Unknown comment directive type: "invalid".",
84
- "secondary": [
85
- "TODO",
86
- ],
87
- "suggestions": [
88
- "TODO",
89
- ],
90
- },
91
- "range": {
92
- "begin": {
93
- "column": 16,
94
- "line": 3,
95
- "raw": 102,
96
- },
97
- "end": {
98
- "column": 32,
99
- "line": 3,
100
- "raw": 118,
101
- },
102
- },
103
- },
104
- ],
105
- }
106
- `);
107
- });
108
- });
@@ -1,31 +0,0 @@
1
- import { DirectivesCollector } from "@flint.fyi/core";
2
- import * as tsutils from "ts-api-utils";
3
- import ts from "typescript";
4
-
5
- import { normalizeRange } from "../normalizeRange.js";
6
-
7
- export function parseDirectivesFromTypeScriptFile(sourceFile: ts.SourceFile) {
8
- const collector = new DirectivesCollector(
9
- sourceFile.statements.at(0)?.getStart(sourceFile) ?? sourceFile.text.length,
10
- );
11
-
12
- tsutils.forEachComment(sourceFile, (fullText, sourceRange) => {
13
- const commentText = fullText.slice(sourceRange.pos, sourceRange.end);
14
- const match = /^\/\/\s*flint-(\S+)(?:\s+(.+))?/.exec(commentText);
15
- if (!match) {
16
- return;
17
- }
18
-
19
- const commentRange = {
20
- begin: sourceRange.pos,
21
- end: sourceRange.end,
22
- };
23
-
24
- const range = normalizeRange(commentRange, sourceFile);
25
- const [type, selection] = match.slice(1);
26
-
27
- collector.add(range, selection, type);
28
- });
29
-
30
- return collector.collect();
31
- }
@@ -1,166 +0,0 @@
1
- // Adapted from: https://github.com/ArnaudBarre/tsl/blob/742a6f1a956705239f2149f856b1f572ade79919/src/formatDiagnostic.ts
2
- // ...which notes:
3
- // Adapted from: https://github.com/microsoft/TypeScript/blob/78c16795cdee70b9d9f0f248b6dbb6ba50994a59/src/compiler/program.ts#L680-L811
4
-
5
- // eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
6
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
7
-
8
- import ts, {
9
- flattenDiagnosticMessageText,
10
- getLineAndCharacterOfPosition,
11
- getPositionOfLineAndCharacter,
12
- type SourceFile,
13
- } from "typescript";
14
-
15
- export interface RawDiagnostic {
16
- file?: ts.SourceFile;
17
- length: number;
18
- message: string;
19
- name: string;
20
- relatedInformation?: ts.DiagnosticRelatedInformation[];
21
- start: number;
22
- }
23
-
24
- export function formatDiagnostic(diagnostic: RawDiagnostic) {
25
- let output = "";
26
-
27
- if (diagnostic.file !== undefined) {
28
- output += formatLocation(diagnostic.file, diagnostic.start);
29
- output += " - ";
30
- }
31
- output += color(diagnostic.name, COLOR.Grey);
32
- output += ": ";
33
- output += diagnostic.message;
34
- if (diagnostic.file !== undefined) {
35
- output += "\n";
36
- output += formatCodeSpan(
37
- diagnostic.file,
38
- diagnostic.start,
39
- diagnostic.length,
40
- "",
41
- COLOR.Red,
42
- );
43
- }
44
- if (diagnostic.relatedInformation) {
45
- output += "\n";
46
- for (const {
47
- file,
48
- length,
49
- messageText,
50
- start,
51
- } of diagnostic.relatedInformation) {
52
- const indent = " ";
53
- if (file) {
54
- output += "\n";
55
- output += " " + formatLocation(file, start!);
56
- output += formatCodeSpan(file, start!, length!, indent, COLOR.Cyan);
57
- }
58
- output += "\n";
59
- output += indent + flattenDiagnosticMessageText(messageText, "\n");
60
- }
61
- }
62
-
63
- return output;
64
- }
65
-
66
- function color(text: string, formatStyle: string) {
67
- return formatStyle + text + resetEscapeSequence;
68
- }
69
-
70
- const gutterStyleSequence = "\u001b[7m";
71
- const ellipsis = "...";
72
- const gutterSeparator = " ";
73
- const resetEscapeSequence = "\u001b[0m";
74
- const COLOR = {
75
- Blue: "\u001b[94m",
76
- Cyan: "\u001b[96m",
77
- Grey: "\u001b[90m",
78
- Red: "\u001b[91m",
79
- Yellow: "\u001b[93m",
80
- };
81
-
82
- function displayFilename(name: string) {
83
- if (name.startsWith("./")) {
84
- return name.slice(2);
85
- }
86
- return name.slice(process.cwd().length + 1);
87
- }
88
-
89
- function formatCodeSpan(
90
- file: SourceFile,
91
- start: number,
92
- length: number,
93
- indent: string,
94
- squiggleColor: string,
95
- ) {
96
- const { character: firstLineChar, line: firstLine } =
97
- getLineAndCharacterOfPosition(file, start);
98
- const { character: lastLineChar, line: lastLine } =
99
- getLineAndCharacterOfPosition(file, start + length);
100
- const lastLineInFile = getLineAndCharacterOfPosition(
101
- file,
102
- file.text.length,
103
- ).line;
104
- const hasMoreThanFiveLines = lastLine - firstLine >= 4;
105
- // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
106
- let gutterWidth = (lastLine + 1 + "").length;
107
- if (hasMoreThanFiveLines) {
108
- gutterWidth = Math.max(ellipsis.length, gutterWidth);
109
- }
110
- let context = "";
111
- for (let i = firstLine; i <= lastLine; i++) {
112
- context += "\n";
113
- if (hasMoreThanFiveLines && firstLine + 1 < i && i < lastLine - 1) {
114
- context +=
115
- indent +
116
- color(ellipsis.padStart(gutterWidth), gutterStyleSequence) +
117
- gutterSeparator +
118
- "\n";
119
- i = lastLine - 1;
120
- }
121
- const lineStart = getPositionOfLineAndCharacter(file, i, 0);
122
- const lineEnd =
123
- i < lastLineInFile
124
- ? getPositionOfLineAndCharacter(file, i + 1, 0)
125
- : file.text.length;
126
- let lineContent = file.text.slice(lineStart, lineEnd);
127
- lineContent = lineContent.trimEnd();
128
- lineContent = lineContent.replace(/\t/g, " ");
129
- context +=
130
- indent +
131
- // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
132
- color((i + 1 + "").padStart(gutterWidth), gutterStyleSequence) +
133
- gutterSeparator;
134
- context += lineContent + "\n";
135
- context +=
136
- indent +
137
- color("".padStart(gutterWidth), gutterStyleSequence) +
138
- gutterSeparator;
139
- context += squiggleColor;
140
- if (i === firstLine) {
141
- const lastCharForLine = i === lastLine ? lastLineChar : void 0;
142
- context += lineContent.slice(0, firstLineChar).replace(/\S/g, " ");
143
- context += lineContent
144
- .slice(firstLineChar, lastCharForLine)
145
- .replace(/./g, "~");
146
- } else if (i === lastLine) {
147
- context += lineContent.slice(0, lastLineChar).replace(/./g, "~");
148
- } else {
149
- context += lineContent.replace(/./g, "~");
150
- }
151
- context += resetEscapeSequence;
152
- }
153
- return context;
154
- }
155
-
156
- function formatLocation(file: SourceFile, start: number): string {
157
- const { character, line } = getLineAndCharacterOfPosition(file, start);
158
- const relativeFileName = displayFilename(file.fileName);
159
- let output = "";
160
- output += color(relativeFileName, COLOR.Cyan);
161
- output += ":";
162
- output += color(`${line + 1}`, COLOR.Yellow);
163
- output += ":";
164
- output += color(`${character + 1}`, COLOR.Yellow);
165
- return output;
166
- }
@@ -1,51 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import { getFirstEnumValues } from "./getFirstEnumValues.js";
4
-
5
- describe("getFirstEnumValues", () => {
6
- it("returns an empty object when given an empty enum", () => {
7
- enum Empty {}
8
-
9
- const result = getFirstEnumValues(Empty);
10
-
11
- expect(result).toEqual({});
12
- });
13
-
14
- it("returns all original pairs when when given a non-repeating enum", () => {
15
- enum NonRepeating {
16
- A = 1,
17
- B = 2,
18
- C = 3,
19
- }
20
-
21
- const result = getFirstEnumValues(NonRepeating);
22
-
23
- expect(result).toEqual({
24
- 1: "A",
25
- 2: "B",
26
- 3: "C",
27
- A: 1,
28
- B: 2,
29
- C: 3,
30
- });
31
- });
32
-
33
- it("returns the first key when when given a repeating-value enum", () => {
34
- enum Repeating {
35
- A = 1,
36
- B = 2,
37
- // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member
38
- C = A,
39
- }
40
-
41
- const result = getFirstEnumValues(Repeating);
42
-
43
- expect(result).toEqual({
44
- 1: "A",
45
- 2: "B",
46
- A: 1,
47
- B: 2,
48
- C: 1,
49
- });
50
- });
51
- });