@flint.fyi/ts 0.15.0 → 0.18.1

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 (813) hide show
  1. package/lib/index.d.ts +2 -13
  2. package/lib/index.js +2 -12
  3. package/lib/plugin.d.ts +2159 -232
  4. package/lib/plugin.js +609 -121
  5. package/lib/rules/accessorPairGroups.d.ts +10 -0
  6. package/lib/rules/accessorPairGroups.js +48 -0
  7. package/lib/rules/accessorPairTypes.d.ts +10 -0
  8. package/lib/rules/accessorPairTypes.js +72 -0
  9. package/lib/rules/accessorThisRecursion.d.ts +10 -0
  10. package/lib/rules/accessorThisRecursion.js +65 -0
  11. package/lib/rules/anyArguments.d.ts +10 -0
  12. package/lib/rules/anyArguments.js +234 -0
  13. package/lib/rules/anyAssignments.d.ts +10 -0
  14. package/lib/rules/anyAssignments.js +265 -0
  15. package/lib/rules/anyCalls.d.ts +10 -0
  16. package/lib/rules/anyCalls.js +68 -0
  17. package/lib/rules/anyMemberAccess.d.ts +10 -0
  18. package/lib/rules/anyMemberAccess.js +85 -0
  19. package/lib/rules/anyReturns.d.ts +5 -2
  20. package/lib/rules/anyReturns.js +97 -182
  21. package/lib/rules/arguments.d.ts +10 -0
  22. package/lib/rules/arguments.js +38 -0
  23. package/lib/rules/arrayCallbackReturns.d.ts +10 -0
  24. package/lib/rules/arrayCallbackReturns.js +73 -0
  25. package/lib/rules/arrayConstructors.d.ts +10 -0
  26. package/lib/rules/arrayConstructors.js +47 -0
  27. package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +10 -0
  28. package/lib/rules/arrayDeleteUnnecessaryCounts.js +54 -0
  29. package/lib/rules/arrayElementDeletions.d.ts +10 -0
  30. package/lib/rules/arrayElementDeletions.js +43 -0
  31. package/lib/rules/arrayEmptyCallbackSlots.d.ts +10 -0
  32. package/lib/rules/arrayEmptyCallbackSlots.js +45 -0
  33. package/lib/rules/arrayExistenceChecksConsistency.d.ts +10 -0
  34. package/lib/rules/arrayExistenceChecksConsistency.js +86 -0
  35. package/lib/rules/arrayFilteredFinds.d.ts +10 -0
  36. package/lib/rules/arrayFilteredFinds.js +80 -0
  37. package/lib/rules/arrayFinds.d.ts +10 -0
  38. package/lib/rules/arrayFinds.js +41 -0
  39. package/lib/rules/arrayFlatMapMethods.d.ts +10 -0
  40. package/lib/rules/arrayFlatMapMethods.js +47 -0
  41. package/lib/rules/arrayFlatMethods.d.ts +10 -0
  42. package/lib/rules/arrayFlatMethods.js +83 -0
  43. package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +10 -0
  44. package/lib/rules/arrayFlatUnnecessaryDepths.js +33 -0
  45. package/lib/rules/arrayIncludes.d.ts +10 -0
  46. package/lib/rules/arrayIncludes.js +59 -0
  47. package/lib/rules/arrayIncludesMethods.d.ts +10 -0
  48. package/lib/rules/arrayIncludesMethods.js +37 -0
  49. package/lib/rules/arrayIndexOfMethods.d.ts +10 -0
  50. package/lib/rules/arrayIndexOfMethods.js +51 -0
  51. package/lib/rules/arrayLoops.d.ts +10 -0
  52. package/lib/rules/arrayLoops.js +36 -0
  53. package/lib/rules/arrayMapIdentities.d.ts +10 -0
  54. package/lib/rules/arrayMapIdentities.js +74 -0
  55. package/lib/rules/arrayMutableReverses.d.ts +10 -0
  56. package/lib/rules/arrayMutableReverses.js +39 -0
  57. package/lib/rules/arrayMutableSorts.d.ts +10 -0
  58. package/lib/rules/arrayMutableSorts.js +72 -0
  59. package/lib/rules/arrayReduceTypeArguments.d.ts +10 -0
  60. package/lib/rules/arrayReduceTypeArguments.js +64 -0
  61. package/lib/rules/arraySliceUnnecessaryEnd.d.ts +10 -0
  62. package/lib/rules/arraySliceUnnecessaryEnd.js +51 -0
  63. package/lib/rules/arraySomeMethods.d.ts +10 -0
  64. package/lib/rules/arraySomeMethods.js +77 -0
  65. package/lib/rules/arrayTernarySpreadingConsistency.d.ts +10 -0
  66. package/lib/rules/arrayTernarySpreadingConsistency.js +74 -0
  67. package/lib/rules/arrayTypes.d.ts +17 -0
  68. package/lib/rules/arrayTypes.js +111 -0
  69. package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +10 -0
  70. package/lib/rules/arrayUnnecessaryLengthChecks.js +97 -0
  71. package/lib/rules/asConstAssertions.d.ts +10 -0
  72. package/lib/rules/asConstAssertions.js +57 -0
  73. package/lib/rules/assignmentOperatorShorthands.d.ts +10 -0
  74. package/lib/rules/assignmentOperatorShorthands.js +47 -0
  75. package/lib/rules/asyncPromiseExecutors.d.ts +5 -2
  76. package/lib/rules/asyncPromiseExecutors.js +39 -50
  77. package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +10 -0
  78. package/lib/rules/asyncUnnecessaryPromiseWrappers.js +52 -0
  79. package/lib/rules/atAccesses.d.ts +10 -0
  80. package/lib/rules/atAccesses.js +52 -0
  81. package/lib/rules/builtinCoercions.d.ts +10 -0
  82. package/lib/rules/builtinCoercions.js +117 -0
  83. package/lib/rules/builtinConstructorNews.d.ts +10 -0
  84. package/lib/rules/builtinConstructorNews.js +89 -0
  85. package/lib/rules/caseDeclarations.d.ts +5 -3
  86. package/lib/rules/caseDeclarations.js +37 -51
  87. package/lib/rules/caseDuplicates.d.ts +5 -2
  88. package/lib/rules/caseDuplicates.js +34 -48
  89. package/lib/rules/caseFallthroughs.d.ts +10 -0
  90. package/lib/rules/caseFallthroughs.js +76 -0
  91. package/lib/rules/catchCallbackTypes.d.ts +10 -0
  92. package/lib/rules/catchCallbackTypes.js +67 -0
  93. package/lib/rules/caughtVariableNames.d.ts +10 -0
  94. package/lib/rules/caughtVariableNames.js +40 -0
  95. package/lib/rules/chainedAssignments.d.ts +5 -2
  96. package/lib/rules/chainedAssignments.js +30 -47
  97. package/lib/rules/charAtComparisons.d.ts +10 -0
  98. package/lib/rules/charAtComparisons.js +58 -0
  99. package/lib/rules/classAssignments.d.ts +5 -2
  100. package/lib/rules/classAssignments.js +30 -41
  101. package/lib/rules/classFieldDeclarations.d.ts +10 -0
  102. package/lib/rules/classFieldDeclarations.js +40 -0
  103. package/lib/rules/classLiteralProperties.d.ts +10 -0
  104. package/lib/rules/classLiteralProperties.js +45 -0
  105. package/lib/rules/classMemberDuplicates.d.ts +10 -0
  106. package/lib/rules/classMemberDuplicates.js +71 -0
  107. package/lib/rules/classMethodsThis.d.ts +14 -0
  108. package/lib/rules/classMethodsThis.js +124 -0
  109. package/lib/rules/combinedPushes.d.ts +10 -0
  110. package/lib/rules/combinedPushes.js +56 -0
  111. package/lib/rules/consecutiveNonNullAssertions.d.ts +5 -2
  112. package/lib/rules/consecutiveNonNullAssertions.js +37 -41
  113. package/lib/rules/consoleCalls.d.ts +9 -0
  114. package/lib/rules/consoleCalls.js +28 -0
  115. package/lib/rules/constantAssignments.d.ts +5 -2
  116. package/lib/rules/constantAssignments.js +42 -60
  117. package/lib/rules/constructorGenericCalls.d.ts +16 -0
  118. package/lib/rules/constructorGenericCalls.js +138 -0
  119. package/lib/rules/constructorReturns.d.ts +5 -2
  120. package/lib/rules/constructorReturns.js +38 -50
  121. package/lib/rules/constructorSupers.d.ts +10 -0
  122. package/lib/rules/constructorSupers.js +77 -0
  123. package/lib/rules/dateConstructorClones.d.ts +10 -0
  124. package/lib/rules/dateConstructorClones.js +37 -0
  125. package/lib/rules/dateNowTimestamps.d.ts +10 -0
  126. package/lib/rules/dateNowTimestamps.js +57 -0
  127. package/lib/rules/debuggerStatements.d.ts +5 -2
  128. package/lib/rules/debuggerStatements.js +31 -42
  129. package/lib/rules/defaultCaseLast.d.ts +5 -2
  130. package/lib/rules/defaultCaseLast.js +34 -42
  131. package/lib/rules/defaultParameterLast.d.ts +10 -0
  132. package/lib/rules/defaultParameterLast.js +42 -0
  133. package/lib/rules/deprecated.d.ts +10 -0
  134. package/lib/rules/deprecated.js +243 -0
  135. package/lib/rules/destructuringConsistency.d.ts +10 -0
  136. package/lib/rules/destructuringConsistency.js +112 -0
  137. package/lib/rules/duplicateArguments.d.ts +5 -3
  138. package/lib/rules/duplicateArguments.js +43 -50
  139. package/lib/rules/dynamicDeletes.d.ts +10 -0
  140. package/lib/rules/dynamicDeletes.js +37 -0
  141. package/lib/rules/elseIfDuplicates.d.ts +5 -2
  142. package/lib/rules/elseIfDuplicates.js +36 -52
  143. package/lib/rules/elseReturns.d.ts +10 -0
  144. package/lib/rules/elseReturns.js +67 -0
  145. package/lib/rules/emptyBlocks.d.ts +5 -2
  146. package/lib/rules/emptyBlocks.js +52 -64
  147. package/lib/rules/emptyDestructures.d.ts +5 -3
  148. package/lib/rules/emptyDestructures.js +32 -39
  149. package/lib/rules/emptyEnums.d.ts +10 -0
  150. package/lib/rules/emptyEnums.js +30 -0
  151. package/lib/rules/emptyExports.d.ts +10 -0
  152. package/lib/rules/emptyExports.js +60 -0
  153. package/lib/rules/emptyFiles.d.ts +10 -0
  154. package/lib/rules/emptyFiles.js +44 -0
  155. package/lib/rules/emptyFunctions.d.ts +10 -0
  156. package/lib/rules/emptyFunctions.js +61 -0
  157. package/lib/rules/emptyModuleAttributes.d.ts +10 -0
  158. package/lib/rules/emptyModuleAttributes.js +35 -0
  159. package/lib/rules/emptyObjectTypes.d.ts +10 -0
  160. package/lib/rules/emptyObjectTypes.js +47 -0
  161. package/lib/rules/emptyStaticBlocks.d.ts +5 -2
  162. package/lib/rules/emptyStaticBlocks.js +40 -53
  163. package/lib/rules/emptyTypeParameterLists.d.ts +10 -0
  164. package/lib/rules/emptyTypeParameterLists.js +31 -0
  165. package/lib/rules/enumInitializers.d.ts +10 -0
  166. package/lib/rules/enumInitializers.js +54 -0
  167. package/lib/rules/enumMemberLiterals.d.ts +10 -0
  168. package/lib/rules/enumMemberLiterals.js +39 -0
  169. package/lib/rules/enumValueConsistency.d.ts +10 -0
  170. package/lib/rules/enumValueConsistency.js +56 -0
  171. package/lib/rules/enumValueDuplicates.d.ts +10 -0
  172. package/lib/rules/enumValueDuplicates.js +60 -0
  173. package/lib/rules/equalityOperatorNegations.d.ts +9 -0
  174. package/lib/rules/equalityOperatorNegations.js +60 -0
  175. package/lib/rules/equalityOperators.d.ts +10 -0
  176. package/lib/rules/equalityOperators.js +44 -0
  177. package/lib/rules/errorMessages.d.ts +10 -0
  178. package/lib/rules/errorMessages.js +60 -0
  179. package/lib/rules/errorSubclassProperties.d.ts +10 -0
  180. package/lib/rules/errorSubclassProperties.js +144 -0
  181. package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +10 -0
  182. package/lib/rules/errorUnnecessaryCaptureStackTraces.js +55 -0
  183. package/lib/rules/escapeSequenceCasing.d.ts +10 -0
  184. package/lib/rules/escapeSequenceCasing.js +75 -0
  185. package/lib/rules/evals.d.ts +10 -0
  186. package/lib/rules/evals.js +31 -0
  187. package/lib/rules/evolvingVariableTypes.d.ts +10 -0
  188. package/lib/rules/evolvingVariableTypes.js +33 -0
  189. package/lib/rules/exceptionAssignments.d.ts +5 -2
  190. package/lib/rules/exceptionAssignments.js +40 -60
  191. package/lib/rules/explicitAnys.d.ts +10 -0
  192. package/lib/rules/explicitAnys.js +55 -0
  193. package/lib/rules/exponentiationOperators.d.ts +10 -0
  194. package/lib/rules/exponentiationOperators.js +34 -0
  195. package/lib/rules/exportFromImports.d.ts +10 -0
  196. package/lib/rules/exportFromImports.js +119 -0
  197. package/lib/rules/exportMutables.d.ts +10 -0
  198. package/lib/rules/exportMutables.js +33 -0
  199. package/lib/rules/exportUniqueNames.d.ts +10 -0
  200. package/lib/rules/exportUniqueNames.js +65 -0
  201. package/lib/rules/extraneousClasses.d.ts +16 -0
  202. package/lib/rules/extraneousClasses.js +111 -0
  203. package/lib/rules/fetchMethodBodies.d.ts +10 -0
  204. package/lib/rules/fetchMethodBodies.js +72 -0
  205. package/lib/rules/finallyStatementSafety.d.ts +5 -2
  206. package/lib/rules/finallyStatementSafety.js +45 -69
  207. package/lib/rules/forDirections.d.ts +5 -2
  208. package/lib/rules/forDirections.js +67 -124
  209. package/lib/rules/forInArrays.d.ts +5 -2
  210. package/lib/rules/forInArrays.js +42 -50
  211. package/lib/rules/forInGuards.d.ts +9 -0
  212. package/lib/rules/forInGuards.js +44 -0
  213. package/lib/rules/functionApplySpreads.d.ts +10 -0
  214. package/lib/rules/functionApplySpreads.js +63 -0
  215. package/lib/rules/functionAssignments.d.ts +5 -2
  216. package/lib/rules/functionAssignments.js +30 -41
  217. package/lib/rules/functionCurryingRedundancy.d.ts +5 -2
  218. package/lib/rules/functionCurryingRedundancy.js +47 -71
  219. package/lib/rules/functionDeclarationStyles.d.ts +16 -0
  220. package/lib/rules/functionDeclarationStyles.js +67 -0
  221. package/lib/rules/functionNameMatches.d.ts +10 -0
  222. package/lib/rules/functionNameMatches.js +74 -0
  223. package/lib/rules/functionNewCalls.d.ts +5 -3
  224. package/lib/rules/functionNewCalls.js +40 -59
  225. package/lib/rules/generatorFunctionYields.d.ts +5 -3
  226. package/lib/rules/generatorFunctionYields.js +45 -53
  227. package/lib/rules/getterReturns.d.ts +10 -0
  228. package/lib/rules/getterReturns.js +65 -0
  229. package/lib/rules/globalAssignments.d.ts +5 -2
  230. package/lib/rules/globalAssignments.js +44 -57
  231. package/lib/rules/globalObjectCalls.d.ts +5 -3
  232. package/lib/rules/globalObjectCalls.js +40 -42
  233. package/lib/rules/globalThisAliases.d.ts +10 -0
  234. package/lib/rules/globalThisAliases.js +47 -0
  235. package/lib/rules/impliedEvals.d.ts +10 -0
  236. package/lib/rules/impliedEvals.js +130 -0
  237. package/lib/rules/importEmptyBlocks.d.ts +10 -0
  238. package/lib/rules/importEmptyBlocks.js +53 -0
  239. package/lib/rules/importTypeSideEffects.d.ts +10 -0
  240. package/lib/rules/importTypeSideEffects.js +31 -0
  241. package/lib/rules/indexedObjectTypes.d.ts +16 -0
  242. package/lib/rules/indexedObjectTypes.js +83 -0
  243. package/lib/rules/instanceOfArrays.d.ts +10 -0
  244. package/lib/rules/instanceOfArrays.js +31 -0
  245. package/lib/rules/irregularWhitespaces.d.ts +16 -0
  246. package/lib/rules/irregularWhitespaces.js +97 -0
  247. package/lib/rules/isNaNComparisons.d.ts +10 -0
  248. package/lib/rules/isNaNComparisons.js +43 -0
  249. package/lib/rules/literalConstructorWrappers.d.ts +10 -0
  250. package/lib/rules/literalConstructorWrappers.js +64 -0
  251. package/lib/rules/mathMethods.d.ts +10 -0
  252. package/lib/rules/mathMethods.js +128 -0
  253. package/lib/rules/meaninglessVoidOperators.d.ts +10 -0
  254. package/lib/rules/meaninglessVoidOperators.js +39 -0
  255. package/lib/rules/misleadingVoidExpressions.d.ts +10 -0
  256. package/lib/rules/misleadingVoidExpressions.js +128 -0
  257. package/lib/rules/moduleSpecifierLists.d.ts +10 -0
  258. package/lib/rules/moduleSpecifierLists.js +92 -0
  259. package/lib/rules/multilineAmbiguities.d.ts +10 -0
  260. package/lib/rules/multilineAmbiguities.js +64 -0
  261. package/lib/rules/namedDefaultExports.d.ts +10 -0
  262. package/lib/rules/namedDefaultExports.js +60 -0
  263. package/lib/rules/namespaceDeclarations.d.ts +6 -3
  264. package/lib/rules/namespaceDeclarations.js +34 -55
  265. package/lib/rules/namespaceImplicitAmbientImports.d.ts +10 -0
  266. package/lib/rules/namespaceImplicitAmbientImports.js +40 -0
  267. package/lib/rules/namespaceKeywords.d.ts +10 -0
  268. package/lib/rules/namespaceKeywords.js +40 -0
  269. package/lib/rules/nativeObjectExtensions.d.ts +10 -0
  270. package/lib/rules/nativeObjectExtensions.js +114 -0
  271. package/lib/rules/negativeIndexLengthMethods.d.ts +10 -0
  272. package/lib/rules/negativeIndexLengthMethods.js +180 -0
  273. package/lib/rules/negativeZeroComparisons.d.ts +5 -2
  274. package/lib/rules/negativeZeroComparisons.js +44 -62
  275. package/lib/rules/nestedStandaloneIfs.d.ts +10 -0
  276. package/lib/rules/nestedStandaloneIfs.js +105 -0
  277. package/lib/rules/newDefinitions.d.ts +10 -0
  278. package/lib/rules/newDefinitions.js +84 -0
  279. package/lib/rules/newExpressions.d.ts +5 -2
  280. package/lib/rules/newExpressions.js +36 -53
  281. package/lib/rules/newNativeNonConstructors.d.ts +5 -2
  282. package/lib/rules/newNativeNonConstructors.js +37 -48
  283. package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +10 -0
  284. package/lib/rules/nonNullAssertedNullishCoalesces.js +63 -0
  285. package/lib/rules/nonNullAssertedOptionalChains.d.ts +10 -0
  286. package/lib/rules/nonNullAssertedOptionalChains.js +69 -0
  287. package/lib/rules/nonNullAssertionPlacement.d.ts +10 -0
  288. package/lib/rules/nonNullAssertionPlacement.js +94 -0
  289. package/lib/rules/nonNullableTypeAssertions.d.ts +10 -0
  290. package/lib/rules/nonNullableTypeAssertions.js +78 -0
  291. package/lib/rules/nonOctalDecimalEscapes.d.ts +5 -3
  292. package/lib/rules/nonOctalDecimalEscapes.js +45 -55
  293. package/lib/rules/nullishCheckStyle.d.ts +21 -0
  294. package/lib/rules/nullishCheckStyle.js +144 -0
  295. package/lib/rules/nullishCoalescingOperators.d.ts +22 -0
  296. package/lib/rules/nullishCoalescingOperators.js +311 -0
  297. package/lib/rules/numberMethodRanges.d.ts +10 -0
  298. package/lib/rules/numberMethodRanges.js +74 -0
  299. package/lib/rules/numberStaticMethods.d.ts +10 -0
  300. package/lib/rules/numberStaticMethods.js +53 -0
  301. package/lib/rules/numericErasingOperations.d.ts +10 -0
  302. package/lib/rules/numericErasingOperations.js +46 -0
  303. package/lib/rules/numericLiteralParsing.d.ts +5 -2
  304. package/lib/rules/numericLiteralParsing.js +58 -90
  305. package/lib/rules/numericPrecision.d.ts +10 -0
  306. package/lib/rules/numericPrecision.js +102 -0
  307. package/lib/rules/numericSeparatorGroups.d.ts +10 -0
  308. package/lib/rules/numericSeparatorGroups.js +101 -0
  309. package/lib/rules/objectAssignSpreads.d.ts +10 -0
  310. package/lib/rules/objectAssignSpreads.js +53 -0
  311. package/lib/rules/objectCalls.d.ts +5 -2
  312. package/lib/rules/objectCalls.js +36 -45
  313. package/lib/rules/objectEntriesMethods.d.ts +10 -0
  314. package/lib/rules/objectEntriesMethods.js +82 -0
  315. package/lib/rules/objectHasOwns.d.ts +5 -2
  316. package/lib/rules/objectHasOwns.js +48 -72
  317. package/lib/rules/objectKeyDuplicates.d.ts +5 -2
  318. package/lib/rules/objectKeyDuplicates.js +57 -85
  319. package/lib/rules/objectProto.d.ts +5 -2
  320. package/lib/rules/objectProto.js +48 -53
  321. package/lib/rules/objectPrototypeBuiltIns.d.ts +5 -2
  322. package/lib/rules/objectPrototypeBuiltIns.js +48 -59
  323. package/lib/rules/objectShorthand.d.ts +10 -0
  324. package/lib/rules/objectShorthand.js +84 -0
  325. package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +10 -0
  326. package/lib/rules/objectSpreadUnnecessaryFallbacks.js +43 -0
  327. package/lib/rules/objectTypeDefinitions.d.ts +10 -0
  328. package/lib/rules/objectTypeDefinitions.js +34 -0
  329. package/lib/rules/octalEscapes.d.ts +5 -2
  330. package/lib/rules/octalEscapes.js +53 -71
  331. package/lib/rules/octalNumbers.d.ts +5 -2
  332. package/lib/rules/octalNumbers.js +53 -67
  333. package/lib/rules/operatorAssignmentShorthand.d.ts +10 -0
  334. package/lib/rules/operatorAssignmentShorthand.js +77 -0
  335. package/lib/rules/overloadSignaturesAdjacent.d.ts +10 -0
  336. package/lib/rules/overloadSignaturesAdjacent.js +140 -0
  337. package/lib/rules/parameterReassignments.d.ts +10 -0
  338. package/lib/rules/parameterReassignments.js +76 -0
  339. package/lib/rules/parseIntRadixes.d.ts +10 -0
  340. package/lib/rules/parseIntRadixes.js +62 -0
  341. package/lib/rules/propertyAccessNotation.d.ts +13 -0
  342. package/lib/rules/propertyAccessNotation.js +119 -0
  343. package/lib/rules/recursionOnlyArguments.d.ts +10 -0
  344. package/lib/rules/recursionOnlyArguments.js +71 -0
  345. package/lib/rules/redundantTypeConstituents.d.ts +10 -0
  346. package/lib/rules/redundantTypeConstituents.js +277 -0
  347. package/lib/rules/regexAllGlobalFlags.d.ts +10 -0
  348. package/lib/rules/regexAllGlobalFlags.js +56 -0
  349. package/lib/rules/regexAmbiguousInvalidity.d.ts +10 -0
  350. package/lib/rules/regexAmbiguousInvalidity.js +297 -0
  351. package/lib/rules/regexCharacterClassRanges.d.ts +10 -0
  352. package/lib/rules/regexCharacterClassRanges.js +137 -0
  353. package/lib/rules/regexCharacterClassSetOperations.d.ts +10 -0
  354. package/lib/rules/regexCharacterClassSetOperations.js +81 -0
  355. package/lib/rules/regexCharacterClasses.d.ts +10 -0
  356. package/lib/rules/regexCharacterClasses.js +234 -0
  357. package/lib/rules/regexConciseCharacterClassNegations.d.ts +10 -0
  358. package/lib/rules/regexConciseCharacterClassNegations.js +52 -0
  359. package/lib/rules/regexContradictoryAssertions.d.ts +10 -0
  360. package/lib/rules/regexContradictoryAssertions.js +210 -0
  361. package/lib/rules/regexControlCharacterEscapes.d.ts +10 -0
  362. package/lib/rules/regexControlCharacterEscapes.js +130 -0
  363. package/lib/rules/regexControlCharacters.d.ts +10 -0
  364. package/lib/rules/regexControlCharacters.js +95 -0
  365. package/lib/rules/regexDigitMatchers.d.ts +10 -0
  366. package/lib/rules/regexDigitMatchers.js +180 -0
  367. package/lib/rules/regexDollarEscapes.d.ts +10 -0
  368. package/lib/rules/regexDollarEscapes.js +91 -0
  369. package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +10 -0
  370. package/lib/rules/regexDuplicateCharacterClassCharacters.js +128 -0
  371. package/lib/rules/regexEmptyAlternatives.d.ts +10 -0
  372. package/lib/rules/regexEmptyAlternatives.js +140 -0
  373. package/lib/rules/regexEmptyCapturingGroups.d.ts +10 -0
  374. package/lib/rules/regexEmptyCapturingGroups.js +67 -0
  375. package/lib/rules/regexEmptyCharacterClasses.d.ts +10 -0
  376. package/lib/rules/regexEmptyCharacterClasses.js +68 -0
  377. package/lib/rules/regexEmptyGroups.d.ts +10 -0
  378. package/lib/rules/regexEmptyGroups.js +66 -0
  379. package/lib/rules/regexEmptyLazyQuantifiers.d.ts +10 -0
  380. package/lib/rules/regexEmptyLazyQuantifiers.js +92 -0
  381. package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +10 -0
  382. package/lib/rules/regexEmptyLookaroundsAssertions.js +68 -0
  383. package/lib/rules/regexEmptyStringLiterals.d.ts +10 -0
  384. package/lib/rules/regexEmptyStringLiterals.js +66 -0
  385. package/lib/rules/regexEscapeBackspaces.d.ts +10 -0
  386. package/lib/rules/regexEscapeBackspaces.js +69 -0
  387. package/lib/rules/regexExecutors.d.ts +10 -0
  388. package/lib/rules/regexExecutors.js +58 -0
  389. package/lib/rules/regexGraphemeStringLiterals.d.ts +10 -0
  390. package/lib/rules/regexGraphemeStringLiterals.js +51 -0
  391. package/lib/rules/regexHexadecimalEscapes.d.ts +10 -0
  392. package/lib/rules/regexHexadecimalEscapes.js +71 -0
  393. package/lib/rules/regexIgnoreCaseFlags.d.ts +10 -0
  394. package/lib/rules/regexIgnoreCaseFlags.js +145 -0
  395. package/lib/rules/regexInvisibleCharacters.d.ts +10 -0
  396. package/lib/rules/regexInvisibleCharacters.js +90 -0
  397. package/lib/rules/regexLetterCasing.d.ts +10 -0
  398. package/lib/rules/regexLetterCasing.js +186 -0
  399. package/lib/rules/regexLiterals.d.ts +10 -0
  400. package/lib/rules/regexLiterals.js +92 -0
  401. package/lib/rules/regexLookaroundAssertions.d.ts +10 -0
  402. package/lib/rules/regexLookaroundAssertions.js +163 -0
  403. package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +10 -0
  404. package/lib/rules/regexLookaroundQuantifierOptimizations.js +94 -0
  405. package/lib/rules/regexMatchNotation.d.ts +10 -0
  406. package/lib/rules/regexMatchNotation.js +139 -0
  407. package/lib/rules/regexMisleadingCapturingGroups.d.ts +10 -0
  408. package/lib/rules/regexMisleadingCapturingGroups.js +229 -0
  409. package/lib/rules/regexMisleadingQuantifiers.d.ts +10 -0
  410. package/lib/rules/regexMisleadingQuantifiers.js +78 -0
  411. package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +10 -0
  412. package/lib/rules/regexMisleadingUnicodeCharacters.js +203 -0
  413. package/lib/rules/regexNamedBackreferences.d.ts +10 -0
  414. package/lib/rules/regexNamedBackreferences.js +48 -0
  415. package/lib/rules/regexNamedCaptureGroups.d.ts +9 -0
  416. package/lib/rules/regexNamedCaptureGroups.js +67 -0
  417. package/lib/rules/regexNamedReplacements.d.ts +10 -0
  418. package/lib/rules/regexNamedReplacements.js +93 -0
  419. package/lib/rules/regexNonStandardFlags.d.ts +10 -0
  420. package/lib/rules/regexNonStandardFlags.js +66 -0
  421. package/lib/rules/regexObscureRanges.d.ts +10 -0
  422. package/lib/rules/regexObscureRanges.js +93 -0
  423. package/lib/rules/regexOctalEscapes.d.ts +10 -0
  424. package/lib/rules/regexOctalEscapes.js +70 -0
  425. package/lib/rules/regexPlusQuantifiers.d.ts +10 -0
  426. package/lib/rules/regexPlusQuantifiers.js +68 -0
  427. package/lib/rules/regexPredefinedAssertions.d.ts +10 -0
  428. package/lib/rules/regexPredefinedAssertions.js +127 -0
  429. package/lib/rules/regexQuestionQuantifiers.d.ts +10 -0
  430. package/lib/rules/regexQuestionQuantifiers.js +104 -0
  431. package/lib/rules/regexRepeatQuantifiers.d.ts +10 -0
  432. package/lib/rules/regexRepeatQuantifiers.js +96 -0
  433. package/lib/rules/regexResultArrayGroups.d.ts +10 -0
  434. package/lib/rules/regexResultArrayGroups.js +187 -0
  435. package/lib/rules/regexSetOperationOptimizations.d.ts +10 -0
  436. package/lib/rules/regexSetOperationOptimizations.js +177 -0
  437. package/lib/rules/regexStandaloneBackslashes.d.ts +10 -0
  438. package/lib/rules/regexStandaloneBackslashes.js +59 -0
  439. package/lib/rules/regexStarQuantifiers.d.ts +10 -0
  440. package/lib/rules/regexStarQuantifiers.js +68 -0
  441. package/lib/rules/regexSuperLinearBacktracking.d.ts +10 -0
  442. package/lib/rules/regexSuperLinearBacktracking.js +98 -0
  443. package/lib/rules/regexSuperLinearMoves.d.ts +10 -0
  444. package/lib/rules/regexSuperLinearMoves.js +142 -0
  445. package/lib/rules/regexTestMethods.d.ts +10 -0
  446. package/lib/rules/regexTestMethods.js +83 -0
  447. package/lib/rules/regexUnicodeCodepointEscapes.d.ts +10 -0
  448. package/lib/rules/regexUnicodeCodepointEscapes.js +107 -0
  449. package/lib/rules/regexUnicodeEscapes.d.ts +9 -0
  450. package/lib/rules/regexUnicodeEscapes.js +97 -0
  451. package/lib/rules/regexUnicodeFlag.d.ts +9 -0
  452. package/lib/rules/regexUnicodeFlag.js +97 -0
  453. package/lib/rules/regexUnicodeProperties.d.ts +10 -0
  454. package/lib/rules/regexUnicodeProperties.js +133 -0
  455. package/lib/rules/regexUnnecessaryAssertions.d.ts +10 -0
  456. package/lib/rules/regexUnnecessaryAssertions.js +223 -0
  457. package/lib/rules/regexUnnecessaryBackreferences.d.ts +10 -0
  458. package/lib/rules/regexUnnecessaryBackreferences.js +125 -0
  459. package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +10 -0
  460. package/lib/rules/regexUnnecessaryCharacterClasses.js +74 -0
  461. package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +10 -0
  462. package/lib/rules/regexUnnecessaryCharacterRanges.js +108 -0
  463. package/lib/rules/regexUnnecessaryDisjunctions.d.ts +10 -0
  464. package/lib/rules/regexUnnecessaryDisjunctions.js +118 -0
  465. package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +10 -0
  466. package/lib/rules/regexUnnecessaryDollarReplacements.js +144 -0
  467. package/lib/rules/regexUnnecessaryEscapes.d.ts +10 -0
  468. package/lib/rules/regexUnnecessaryEscapes.js +136 -0
  469. package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +10 -0
  470. package/lib/rules/regexUnnecessaryLookaroundAssertions.js +80 -0
  471. package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +10 -0
  472. package/lib/rules/regexUnnecessaryNestedAssertions.js +198 -0
  473. package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +10 -0
  474. package/lib/rules/regexUnnecessaryNestedQuantifiers.js +93 -0
  475. package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +10 -0
  476. package/lib/rules/regexUnnecessaryNonCapturingGroups.js +104 -0
  477. package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +10 -0
  478. package/lib/rules/regexUnnecessaryNumericQuantifiers.js +69 -0
  479. package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +10 -0
  480. package/lib/rules/regexUnnecessaryOptionalAssertions.js +137 -0
  481. package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +10 -0
  482. package/lib/rules/regexUnnecessaryReferentialBackreferences.js +123 -0
  483. package/lib/rules/regexUnnecessarySetOperands.d.ts +10 -0
  484. package/lib/rules/regexUnnecessarySetOperands.js +136 -0
  485. package/lib/rules/regexUnusedCapturingGroups.d.ts +10 -0
  486. package/lib/rules/regexUnusedCapturingGroups.js +69 -0
  487. package/lib/rules/regexUnusedFlags.d.ts +10 -0
  488. package/lib/rules/regexUnusedFlags.js +116 -0
  489. package/lib/rules/regexUnusedLazyQuantifiers.d.ts +10 -0
  490. package/lib/rules/regexUnusedLazyQuantifiers.js +63 -0
  491. package/lib/rules/regexUnusedQuantifiers.d.ts +10 -0
  492. package/lib/rules/regexUnusedQuantifiers.js +63 -0
  493. package/lib/rules/regexValidity.d.ts +10 -0
  494. package/lib/rules/regexValidity.js +146 -0
  495. package/lib/rules/regexWordMatchers.d.ts +10 -0
  496. package/lib/rules/regexWordMatchers.js +146 -0
  497. package/lib/rules/regexZeroQuantifiers.d.ts +10 -0
  498. package/lib/rules/regexZeroQuantifiers.js +60 -0
  499. package/lib/rules/responseJsonMethods.d.ts +10 -0
  500. package/lib/rules/responseJsonMethods.js +51 -0
  501. package/lib/rules/restrictedIdentifiers.d.ts +13 -0
  502. package/lib/rules/restrictedIdentifiers.js +41 -0
  503. package/lib/rules/returnAssignments.d.ts +5 -2
  504. package/lib/rules/returnAssignments.js +35 -48
  505. package/lib/rules/returnThisTypes.d.ts +10 -0
  506. package/lib/rules/returnThisTypes.js +94 -0
  507. package/lib/rules/ruleCreator.d.ts +3 -0
  508. package/lib/rules/ruleCreator.js +17 -0
  509. package/lib/rules/selfAssignments.d.ts +5 -2
  510. package/lib/rules/selfAssignments.js +27 -43
  511. package/lib/rules/sequences.d.ts +5 -2
  512. package/lib/rules/sequences.js +26 -33
  513. package/lib/rules/setSizeLengthChecks.d.ts +10 -0
  514. package/lib/rules/setSizeLengthChecks.js +48 -0
  515. package/lib/rules/setterReturns.d.ts +10 -0
  516. package/lib/rules/setterReturns.js +41 -0
  517. package/lib/rules/shadowedRestrictedNames.d.ts +5 -2
  518. package/lib/rules/shadowedRestrictedNames.js +64 -92
  519. package/lib/rules/singleVariableDeclarations.d.ts +10 -0
  520. package/lib/rules/singleVariableDeclarations.js +36 -0
  521. package/lib/rules/sizeComparisonOperators.d.ts +16 -0
  522. package/lib/rules/sizeComparisonOperators.js +148 -0
  523. package/lib/rules/sparseArrays.d.ts +5 -2
  524. package/lib/rules/sparseArrays.js +41 -53
  525. package/lib/rules/staticMemberOnlyClasses.d.ts +10 -0
  526. package/lib/rules/staticMemberOnlyClasses.js +77 -0
  527. package/lib/rules/stringCaseMismatches.d.ts +10 -0
  528. package/lib/rules/stringCaseMismatches.js +58 -0
  529. package/lib/rules/stringCodePoints.d.ts +10 -0
  530. package/lib/rules/stringCodePoints.js +50 -0
  531. package/lib/rules/stringSliceMethods.d.ts +10 -0
  532. package/lib/rules/stringSliceMethods.js +47 -0
  533. package/lib/rules/stringStartsEndsWith.d.ts +10 -0
  534. package/lib/rules/stringStartsEndsWith.js +79 -0
  535. package/lib/rules/structuredCloneMethods.d.ts +10 -0
  536. package/lib/rules/structuredCloneMethods.js +39 -0
  537. package/lib/rules/symbolDescriptions.d.ts +5 -2
  538. package/lib/rules/symbolDescriptions.js +30 -40
  539. package/lib/rules/thisAliases.d.ts +10 -0
  540. package/lib/rules/thisAliases.js +44 -0
  541. package/lib/rules/thisBeforeSuper.d.ts +10 -0
  542. package/lib/rules/thisBeforeSuper.js +86 -0
  543. package/lib/rules/throwErrors.d.ts +10 -0
  544. package/lib/rules/throwErrors.js +61 -0
  545. package/lib/rules/topLevelAwaits.d.ts +10 -0
  546. package/lib/rules/topLevelAwaits.js +49 -0
  547. package/lib/rules/tripleSlashReferenceValidity.d.ts +10 -0
  548. package/lib/rules/tripleSlashReferenceValidity.js +54 -0
  549. package/lib/rules/tripleSlashReferences.d.ts +10 -0
  550. package/lib/rules/tripleSlashReferences.js +34 -0
  551. package/lib/rules/tsComments.d.ts +22 -0
  552. package/lib/rules/tsComments.js +130 -0
  553. package/lib/rules/tslintComments.d.ts +10 -0
  554. package/lib/rules/tslintComments.js +36 -0
  555. package/lib/rules/typeAssertionStyles.d.ts +10 -0
  556. package/lib/rules/typeAssertionStyles.js +32 -0
  557. package/lib/rules/typeofComparisons.d.ts +5 -2
  558. package/lib/rules/typeofComparisons.js +50 -71
  559. package/lib/rules/unassignedVariables.d.ts +5 -2
  560. package/lib/rules/unassignedVariables.js +35 -54
  561. package/lib/rules/undefinedTypeofChecks.d.ts +10 -0
  562. package/lib/rules/undefinedTypeofChecks.js +41 -0
  563. package/lib/rules/undefinedVariables.d.ts +5 -2
  564. package/lib/rules/undefinedVariables.js +37 -75
  565. package/lib/rules/unicodeBOMs.d.ts +5 -2
  566. package/lib/rules/unicodeBOMs.js +37 -46
  567. package/lib/rules/unnecessaryBinds.d.ts +10 -0
  568. package/lib/rules/unnecessaryBinds.js +78 -0
  569. package/lib/rules/unnecessaryBlocks.d.ts +5 -2
  570. package/lib/rules/unnecessaryBlocks.js +58 -74
  571. package/lib/rules/unnecessaryBooleanCasts.d.ts +10 -0
  572. package/lib/rules/unnecessaryBooleanCasts.js +58 -0
  573. package/lib/rules/unnecessaryCatches.d.ts +5 -2
  574. package/lib/rules/unnecessaryCatches.js +46 -67
  575. package/lib/rules/unnecessaryComparisons.d.ts +10 -0
  576. package/lib/rules/unnecessaryComparisons.js +300 -0
  577. package/lib/rules/unnecessaryConcatenation.d.ts +5 -2
  578. package/lib/rules/unnecessaryConcatenation.js +26 -37
  579. package/lib/rules/unnecessaryEscapes.d.ts +10 -0
  580. package/lib/rules/unnecessaryEscapes.js +134 -0
  581. package/lib/rules/unnecessaryMathClamps.d.ts +10 -0
  582. package/lib/rules/unnecessaryMathClamps.js +114 -0
  583. package/lib/rules/unnecessaryNumericFractions.d.ts +10 -0
  584. package/lib/rules/unnecessaryNumericFractions.js +50 -0
  585. package/lib/rules/unnecessaryRenames.d.ts +10 -0
  586. package/lib/rules/unnecessaryRenames.js +92 -0
  587. package/lib/rules/unnecessaryTernaries.d.ts +10 -0
  588. package/lib/rules/unnecessaryTernaries.js +88 -0
  589. package/lib/rules/unnecessaryUseStricts.d.ts +10 -0
  590. package/lib/rules/unnecessaryUseStricts.js +40 -0
  591. package/lib/rules/unsafeNegations.d.ts +5 -2
  592. package/lib/rules/unsafeNegations.js +36 -49
  593. package/lib/rules/utils/collectAccessorPairs.d.ts +12 -0
  594. package/lib/rules/utils/collectAccessorPairs.js +29 -0
  595. package/lib/rules/utils/countCommentsInRange.d.ts +3 -0
  596. package/lib/rules/utils/countCommentsInRange.js +12 -0
  597. package/lib/rules/utils/discriminateAnyType.d.ts +12 -9
  598. package/lib/rules/utils/discriminateAnyType.js +33 -37
  599. package/lib/rules/utils/equalityOperators.d.ts +9 -0
  600. package/lib/rules/utils/equalityOperators.js +36 -0
  601. package/lib/rules/utils/forEachReturnStatement.d.ts +3 -0
  602. package/lib/rules/utils/forEachReturnStatement.js +29 -0
  603. package/lib/rules/utils/formatReportedType.d.ts +4 -0
  604. package/lib/rules/utils/formatReportedType.js +9 -0
  605. package/lib/rules/utils/getConstrainedType.d.ts +2 -2
  606. package/lib/rules/utils/getConstrainedType.js +7 -3
  607. package/lib/rules/utils/getFunctionName.d.ts +3 -0
  608. package/lib/rules/utils/getFunctionName.js +16 -0
  609. package/lib/rules/utils/getRegExpConstruction.d.ts +10 -0
  610. package/lib/rules/utils/getRegExpConstruction.js +26 -0
  611. package/lib/rules/utils/getRegExpLiteralDetails.d.ts +7 -0
  612. package/lib/rules/utils/getRegExpLiteralDetails.js +13 -0
  613. package/lib/rules/utils/getThisExpression.d.ts +2 -2
  614. package/lib/rules/utils/getThisExpression.js +14 -22
  615. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +3 -0
  616. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +13 -0
  617. package/lib/rules/utils/isBuiltinSymbolLike.d.ts +3 -0
  618. package/lib/rules/utils/isBuiltinSymbolLike.js +33 -0
  619. package/lib/rules/utils/isDirectEqualityCheck.d.ts +4 -0
  620. package/lib/rules/utils/isDirectEqualityCheck.js +29 -0
  621. package/lib/rules/utils/isErrorSubclass.d.ts +3 -0
  622. package/lib/rules/utils/isErrorSubclass.js +27 -0
  623. package/lib/rules/utils/isInBooleanContext.d.ts +3 -0
  624. package/lib/rules/utils/isInBooleanContext.js +22 -0
  625. package/lib/rules/utils/isTypeRecursive.d.ts +1 -1
  626. package/lib/rules/utils/isTypeRecursive.js +6 -4
  627. package/lib/rules/utils/isUnsafeAssignment.d.ts +3 -2
  628. package/lib/rules/utils/isUnsafeAssignment.js +40 -72
  629. package/lib/rules/utils/operators.d.ts +4 -4
  630. package/lib/rules/utils/operators.js +31 -33
  631. package/lib/rules/utils/parseRegexpAst.d.ts +2 -0
  632. package/lib/rules/utils/parseRegexpAst.js +17 -0
  633. package/lib/rules/utils/parseRegexpAstFull.d.ts +3 -0
  634. package/lib/rules/utils/parseRegexpAstFull.js +18 -0
  635. package/lib/rules/utils/skipParentheses.d.ts +3 -0
  636. package/lib/rules/utils/skipParentheses.js +10 -0
  637. package/lib/rules/variableDeletions.d.ts +5 -2
  638. package/lib/rules/variableDeletions.js +33 -38
  639. package/lib/rules/voidOperator.d.ts +5 -2
  640. package/lib/rules/voidOperator.js +32 -35
  641. package/lib/rules/withStatements.d.ts +5 -2
  642. package/lib/rules/withStatements.js +28 -35
  643. package/lib/rules/wrapperObjects.d.ts +10 -0
  644. package/lib/rules/wrapperObjects.js +36 -0
  645. package/package.json +17 -11
  646. package/lib/collectReferencedFilePaths.d.ts +0 -3
  647. package/lib/collectReferencedFilePaths.js +0 -22
  648. package/lib/convertTypeScriptDiagnosticToLanguageFileDiagnostic.d.ts +0 -14
  649. package/lib/convertTypeScriptDiagnosticToLanguageFileDiagnostic.js +0 -129
  650. package/lib/createTypeScriptFileFromProgram.d.ts +0 -6
  651. package/lib/createTypeScriptFileFromProgram.js +0 -58
  652. package/lib/createTypeScriptFileFromProjectService.d.ts +0 -7
  653. package/lib/createTypeScriptFileFromProjectService.js +0 -14
  654. package/lib/directives/parseDirectivesFromTypeScriptFile.d.ts +0 -13
  655. package/lib/directives/parseDirectivesFromTypeScriptFile.js +0 -29
  656. package/lib/directives/parseDirectivesFromTypeScriptFile.test.d.ts +0 -2
  657. package/lib/directives/parseDirectivesFromTypeScriptFile.test.js +0 -92
  658. package/lib/getFirstEnumValues.d.ts +0 -36
  659. package/lib/getFirstEnumValues.js +0 -52
  660. package/lib/getFirstEnumValues.test.d.ts +0 -2
  661. package/lib/getFirstEnumValues.test.js +0 -46
  662. package/lib/getTSNodeRange.d.ts +0 -4
  663. package/lib/getTSNodeRange.js +0 -7
  664. package/lib/language.d.ts +0 -9
  665. package/lib/language.js +0 -20
  666. package/lib/nodes.d.ts +0 -143
  667. package/lib/nodes.js +0 -2
  668. package/lib/normalizeRange.d.ts +0 -4
  669. package/lib/normalizeRange.js +0 -14
  670. package/lib/prepareTypeScriptBasedLanguage.d.ts +0 -11
  671. package/lib/prepareTypeScriptBasedLanguage.js +0 -59
  672. package/lib/prepareTypeScriptFile.d.ts +0 -12
  673. package/lib/prepareTypeScriptFile.js +0 -13
  674. package/lib/rules/anyReturns.test.d.ts +0 -2
  675. package/lib/rules/anyReturns.test.js +0 -648
  676. package/lib/rules/asyncPromiseExecutors.test.d.ts +0 -2
  677. package/lib/rules/asyncPromiseExecutors.test.js +0 -72
  678. package/lib/rules/caseDeclarations.test.d.ts +0 -2
  679. package/lib/rules/caseDeclarations.test.js +0 -228
  680. package/lib/rules/caseDuplicates.test.d.ts +0 -2
  681. package/lib/rules/caseDuplicates.test.js +0 -308
  682. package/lib/rules/chainedAssignments.test.d.ts +0 -2
  683. package/lib/rules/chainedAssignments.test.js +0 -263
  684. package/lib/rules/classAssignments.test.d.ts +0 -2
  685. package/lib/rules/classAssignments.test.js +0 -157
  686. package/lib/rules/consecutiveNonNullAssertions.test.d.ts +0 -2
  687. package/lib/rules/consecutiveNonNullAssertions.test.js +0 -33
  688. package/lib/rules/constantAssignments.test.d.ts +0 -2
  689. package/lib/rules/constantAssignments.test.js +0 -222
  690. package/lib/rules/constructorReturns.test.d.ts +0 -2
  691. package/lib/rules/constructorReturns.test.js +0 -97
  692. package/lib/rules/debuggerStatements.test.d.ts +0 -2
  693. package/lib/rules/debuggerStatements.test.js +0 -81
  694. package/lib/rules/defaultCaseLast.test.d.ts +0 -2
  695. package/lib/rules/defaultCaseLast.test.js +0 -196
  696. package/lib/rules/duplicateArguments.test.d.ts +0 -2
  697. package/lib/rules/duplicateArguments.test.js +0 -140
  698. package/lib/rules/elseIfDuplicates.test.d.ts +0 -2
  699. package/lib/rules/elseIfDuplicates.test.js +0 -177
  700. package/lib/rules/emptyBlocks.test.d.ts +0 -2
  701. package/lib/rules/emptyBlocks.test.js +0 -136
  702. package/lib/rules/emptyDestructures.test.d.ts +0 -2
  703. package/lib/rules/emptyDestructures.test.js +0 -187
  704. package/lib/rules/emptyStaticBlocks.test.d.ts +0 -2
  705. package/lib/rules/emptyStaticBlocks.test.js +0 -168
  706. package/lib/rules/exceptionAssignments.test.d.ts +0 -2
  707. package/lib/rules/exceptionAssignments.test.js +0 -265
  708. package/lib/rules/finallyStatementSafety.test.d.ts +0 -2
  709. package/lib/rules/finallyStatementSafety.test.js +0 -307
  710. package/lib/rules/forDirections.test.d.ts +0 -2
  711. package/lib/rules/forDirections.test.js +0 -125
  712. package/lib/rules/forInArrays.test.d.ts +0 -2
  713. package/lib/rules/forInArrays.test.js +0 -25
  714. package/lib/rules/functionAssignments.test.d.ts +0 -2
  715. package/lib/rules/functionAssignments.test.js +0 -210
  716. package/lib/rules/functionCurryingRedundancy.test.d.ts +0 -2
  717. package/lib/rules/functionCurryingRedundancy.test.js +0 -172
  718. package/lib/rules/functionNewCalls.test.d.ts +0 -2
  719. package/lib/rules/functionNewCalls.test.js +0 -116
  720. package/lib/rules/generatorFunctionYields.test.d.ts +0 -2
  721. package/lib/rules/generatorFunctionYields.test.js +0 -152
  722. package/lib/rules/globalAssignments.test.d.ts +0 -2
  723. package/lib/rules/globalAssignments.test.js +0 -216
  724. package/lib/rules/globalObjectCalls.test.d.ts +0 -2
  725. package/lib/rules/globalObjectCalls.test.js +0 -94
  726. package/lib/rules/namespaceDeclarations.test.d.ts +0 -2
  727. package/lib/rules/namespaceDeclarations.test.js +0 -41
  728. package/lib/rules/negativeZeroComparisons.test.d.ts +0 -2
  729. package/lib/rules/negativeZeroComparisons.test.js +0 -210
  730. package/lib/rules/newExpressions.test.d.ts +0 -2
  731. package/lib/rules/newExpressions.test.js +0 -80
  732. package/lib/rules/newNativeNonConstructors.test.d.ts +0 -2
  733. package/lib/rules/newNativeNonConstructors.test.js +0 -95
  734. package/lib/rules/nonOctalDecimalEscapes.test.d.ts +0 -2
  735. package/lib/rules/nonOctalDecimalEscapes.test.js +0 -70
  736. package/lib/rules/numericLiteralParsing.test.d.ts +0 -2
  737. package/lib/rules/numericLiteralParsing.test.js +0 -100
  738. package/lib/rules/objectCalls.test.d.ts +0 -2
  739. package/lib/rules/objectCalls.test.js +0 -172
  740. package/lib/rules/objectHasOwns.test.d.ts +0 -2
  741. package/lib/rules/objectHasOwns.test.js +0 -112
  742. package/lib/rules/objectKeyDuplicates.test.d.ts +0 -2
  743. package/lib/rules/objectKeyDuplicates.test.js +0 -180
  744. package/lib/rules/objectProto.test.d.ts +0 -2
  745. package/lib/rules/objectProto.test.js +0 -97
  746. package/lib/rules/objectPrototypeBuiltIns.test.d.ts +0 -2
  747. package/lib/rules/objectPrototypeBuiltIns.test.js +0 -146
  748. package/lib/rules/octalEscapes.test.d.ts +0 -2
  749. package/lib/rules/octalEscapes.test.js +0 -214
  750. package/lib/rules/octalNumbers.test.d.ts +0 -2
  751. package/lib/rules/octalNumbers.test.js +0 -246
  752. package/lib/rules/returnAssignments.test.d.ts +0 -2
  753. package/lib/rules/returnAssignments.test.js +0 -186
  754. package/lib/rules/ruleTester.d.ts +0 -3
  755. package/lib/rules/ruleTester.js +0 -8
  756. package/lib/rules/selfAssignments.test.d.ts +0 -2
  757. package/lib/rules/selfAssignments.test.js +0 -67
  758. package/lib/rules/selfComparisons.d.ts +0 -7
  759. package/lib/rules/selfComparisons.js +0 -42
  760. package/lib/rules/selfComparisons.test.d.ts +0 -2
  761. package/lib/rules/selfComparisons.test.js +0 -298
  762. package/lib/rules/sequences.test.d.ts +0 -2
  763. package/lib/rules/sequences.test.js +0 -49
  764. package/lib/rules/shadowedRestrictedNames.test.d.ts +0 -2
  765. package/lib/rules/shadowedRestrictedNames.test.js +0 -148
  766. package/lib/rules/sparseArrays.test.d.ts +0 -2
  767. package/lib/rules/sparseArrays.test.js +0 -111
  768. package/lib/rules/symbolDescriptions.test.d.ts +0 -2
  769. package/lib/rules/symbolDescriptions.test.js +0 -90
  770. package/lib/rules/typeofComparisons.test.d.ts +0 -2
  771. package/lib/rules/typeofComparisons.test.js +0 -86
  772. package/lib/rules/unassignedVariables.test.d.ts +0 -2
  773. package/lib/rules/unassignedVariables.test.js +0 -73
  774. package/lib/rules/undefinedVariables.test.d.ts +0 -2
  775. package/lib/rules/undefinedVariables.test.js +0 -81
  776. package/lib/rules/unicodeBOMs.test.d.ts +0 -2
  777. package/lib/rules/unicodeBOMs.test.js +0 -67
  778. package/lib/rules/unnecessaryBlocks.test.d.ts +0 -2
  779. package/lib/rules/unnecessaryBlocks.test.js +0 -148
  780. package/lib/rules/unnecessaryCatches.test.d.ts +0 -2
  781. package/lib/rules/unnecessaryCatches.test.js +0 -211
  782. package/lib/rules/unnecessaryConcatenation.test.d.ts +0 -2
  783. package/lib/rules/unnecessaryConcatenation.test.js +0 -88
  784. package/lib/rules/unsafeNegations.test.d.ts +0 -2
  785. package/lib/rules/unsafeNegations.test.js +0 -64
  786. package/lib/rules/variableDeletions.test.d.ts +0 -2
  787. package/lib/rules/variableDeletions.test.js +0 -76
  788. package/lib/rules/voidOperator.test.d.ts +0 -2
  789. package/lib/rules/voidOperator.test.js +0 -99
  790. package/lib/rules/withStatements.test.d.ts +0 -2
  791. package/lib/rules/withStatements.test.js +0 -27
  792. package/lib/utils/declarationIncludesGlobal.d.ts +0 -3
  793. package/lib/utils/declarationIncludesGlobal.js +0 -6
  794. package/lib/utils/declarationsIncludeGlobal.d.ts +0 -3
  795. package/lib/utils/declarationsIncludeGlobal.js +0 -5
  796. package/lib/utils/getDeclarationsIfGlobal.d.ts +0 -3
  797. package/lib/utils/getDeclarationsIfGlobal.js +0 -8
  798. package/lib/utils/getModifyingReferences.d.ts +0 -9
  799. package/lib/utils/getModifyingReferences.js +0 -43
  800. package/lib/utils/hasSameTokens.d.ts +0 -3
  801. package/lib/utils/hasSameTokens.js +0 -31
  802. package/lib/utils/isFunction.d.ts +0 -3
  803. package/lib/utils/isFunction.js +0 -6
  804. package/lib/utils/isGlobalDeclaration.d.ts +0 -3
  805. package/lib/utils/isGlobalDeclaration.js +0 -5
  806. package/lib/utils/isGlobalDeclarationOfName.d.ts +0 -6
  807. package/lib/utils/isGlobalDeclarationOfName.js +0 -36
  808. package/lib/utils/isGlobalVariable.d.ts +0 -9
  809. package/lib/utils/isGlobalVariable.js +0 -22
  810. package/lib/utils/unwrapParentParenthesizedExpressions.d.ts +0 -3
  811. package/lib/utils/unwrapParentParenthesizedExpressions.js +0 -7
  812. package/lib/utils/unwrapParenthesizedExpression.d.ts +0 -3
  813. package/lib/utils/unwrapParenthesizedExpression.js +0 -7
@@ -0,0 +1,78 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
3
+ import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
4
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
5
+ import { typescriptLanguage } from "@flint.fyi/typescript-language";
6
+ import { visitRegExpAST } from "@eslint-community/regexpp";
7
+ //#region src/rules/regexMisleadingQuantifiers.ts
8
+ function formatQuantifier(min, max, greedy) {
9
+ let result;
10
+ if (min === 0 && max === 1) result = "?";
11
+ else if (min === 0 && max === Infinity) result = "*";
12
+ else if (min === 1 && max === Infinity) result = "+";
13
+ else if (min === max) result = `{${min}}`;
14
+ else if (max === Infinity) result = `{${min},}`;
15
+ else result = `{${min},${max}}`;
16
+ return greedy ? result : `${result}?`;
17
+ }
18
+ function isPotentiallyEmpty(element) {
19
+ switch (element.type) {
20
+ case "Assertion":
21
+ case "Backreference": return true;
22
+ case "CapturingGroup":
23
+ case "Group": return element.alternatives.some((alt) => alt.elements.every((el) => isPotentiallyEmpty(el)));
24
+ case "Quantifier": return element.min === 0 || isPotentiallyEmpty(element.element);
25
+ default: return false;
26
+ }
27
+ }
28
+ var regexMisleadingQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
29
+ about: {
30
+ description: "Reports quantifiers whose minimum implies they must match but whose element can match empty.",
31
+ id: "regexMisleadingQuantifiers",
32
+ presets: ["logical"]
33
+ },
34
+ messages: { confusing: {
35
+ primary: "Quantifier minimum is {{ min }} but the element can match empty. Consider using '{{ proposal }}' instead.",
36
+ secondary: ["This quantifier suggests it must match at least {{ min }} time(s), but the quantified element can match the empty string, so the effective minimum is 0."],
37
+ suggestions: ["Replace the quantifier with one that reflects the actual minimum."]
38
+ } },
39
+ setup(context) {
40
+ function checkPattern(pattern, patternStart, flags) {
41
+ const regexpAst = parseRegexpAst(pattern, flags);
42
+ if (!regexpAst) return;
43
+ visitRegExpAST(regexpAst, { onQuantifierEnter(qNode) {
44
+ if (qNode.min <= 0 || !isPotentiallyEmpty(qNode.element)) return;
45
+ const proposal = formatQuantifier(0, qNode.max, qNode.greedy);
46
+ context.report({
47
+ data: {
48
+ min: qNode.min,
49
+ proposal
50
+ },
51
+ message: "confusing",
52
+ range: {
53
+ begin: patternStart + qNode.start,
54
+ end: patternStart + qNode.end
55
+ }
56
+ });
57
+ } });
58
+ }
59
+ function checkRegexLiteral(node, { sourceFile }) {
60
+ const details = getRegExpLiteralDetails(node, { sourceFile });
61
+ checkPattern(details.pattern, details.start, details.flags);
62
+ }
63
+ function checkRegExpConstructor(node, services) {
64
+ const construction = getRegExpConstruction(node, services);
65
+ if (!construction) return;
66
+ checkPattern(construction.pattern, construction.start + 1, construction.flags);
67
+ }
68
+ return { visitors: {
69
+ CallExpression: checkRegExpConstructor,
70
+ NewExpression: checkRegExpConstructor,
71
+ RegularExpressionLiteral: checkRegexLiteral
72
+ } };
73
+ }
74
+ });
75
+ //#endregion
76
+ export { regexMisleadingQuantifiers_default as default };
77
+
78
+ //# sourceMappingURL=regexMisleadingQuantifiers.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports characters in regex character classes that appear as single visual characters but are made of multiple code points.";
3
+ readonly id: "regexMisleadingUnicodeCharacters";
4
+ readonly presets: ["logical", "logicalStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "combiningClass" | "emojiModifier" | "regionalIndicatorSymbol" | "surrogatePair" | "surrogatePairWithoutUFlag" | "zwj", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexMisleadingUnicodeCharacters.d.ts.map
@@ -0,0 +1,203 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
3
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
4
+ import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
5
+ import { visitRegExpAST } from "@eslint-community/regexpp";
6
+ //#region src/rules/regexMisleadingUnicodeCharacters.ts
7
+ function findAllMatches(characters, hasUnicodeFlag) {
8
+ const matches = [];
9
+ if (hasUnicodeFlag) for (const nodes of findSurrogatePairs(characters)) matches.push({
10
+ kind: "surrogatePair",
11
+ nodes
12
+ });
13
+ else for (const nodes of findSurrogatePairsWithoutUFlag(characters)) matches.push({
14
+ kind: "surrogatePairWithoutUFlag",
15
+ nodes
16
+ });
17
+ for (const nodes of findCombiningClass(characters)) matches.push({
18
+ kind: "combiningClass",
19
+ nodes
20
+ });
21
+ for (const nodes of findEmojiModifiers(characters)) matches.push({
22
+ kind: "emojiModifier",
23
+ nodes
24
+ });
25
+ for (const nodes of findRegionalIndicatorSymbols(characters)) matches.push({
26
+ kind: "regionalIndicatorSymbol",
27
+ nodes
28
+ });
29
+ for (const nodes of findZeroWidthJoins(characters)) matches.push({
30
+ kind: "zwj",
31
+ nodes
32
+ });
33
+ return matches;
34
+ }
35
+ function* findCombiningClass(characters) {
36
+ for (const [index, char] of characters.entries()) {
37
+ const previous = characters[index - 1];
38
+ if (previous && isCombiningCharacter(char.value) && !isCombiningCharacter(previous.value)) yield [previous, char];
39
+ }
40
+ }
41
+ function* findEmojiModifiers(characters) {
42
+ for (const [index, char] of characters.entries()) {
43
+ const previous = characters[index - 1];
44
+ if (previous && isEmojiModifier(char.value) && !isEmojiModifier(previous.value)) yield [previous, char];
45
+ }
46
+ }
47
+ function* findRegionalIndicatorSymbols(characters) {
48
+ for (const [index, char] of characters.entries()) {
49
+ const previous = characters[index - 1];
50
+ if (previous && isRegionalIndicatorSymbol(char.value) && isRegionalIndicatorSymbol(previous.value)) yield [previous, char];
51
+ }
52
+ }
53
+ function* findSurrogatePairs(characters) {
54
+ for (const [index, char] of characters.entries()) {
55
+ const previous = characters[index - 1];
56
+ if (previous && isSurrogatePair(previous.value, char.value) && (isUnicodeCodePointEscape(previous) || isUnicodeCodePointEscape(char))) yield [previous, char];
57
+ }
58
+ }
59
+ function* findSurrogatePairsWithoutUFlag(characters) {
60
+ for (const [index, char] of characters.entries()) {
61
+ const previous = characters[index - 1];
62
+ if (previous && isSurrogatePair(previous.value, char.value) && !isUnicodeCodePointEscape(previous) && !isUnicodeCodePointEscape(char)) yield [previous, char];
63
+ }
64
+ }
65
+ function* findZeroWidthJoins(characters) {
66
+ let sequence;
67
+ for (const [index, char] of characters.entries()) {
68
+ const previous = characters[index - 1];
69
+ const next = characters[index + 1];
70
+ if (previous && next && char.value === 8205 && previous.value !== 8205 && next.value !== 8205) if (sequence) if (sequence.at(-1) === previous) sequence.push(char, next);
71
+ else {
72
+ yield sequence;
73
+ sequence = characters.slice(index - 1, index + 2);
74
+ }
75
+ else sequence = characters.slice(index - 1, index + 2);
76
+ }
77
+ if (sequence) yield sequence;
78
+ }
79
+ function getMessageId(kind) {
80
+ switch (kind) {
81
+ case "combiningClass": return "combiningClass";
82
+ case "emojiModifier": return "emojiModifier";
83
+ case "regionalIndicatorSymbol": return "regionalIndicatorSymbol";
84
+ case "surrogatePair": return "surrogatePair";
85
+ case "surrogatePairWithoutUFlag": return "surrogatePairWithoutUFlag";
86
+ case "zwj": return "zwj";
87
+ }
88
+ }
89
+ function isCombiningCharacter(codePoint) {
90
+ return /^[\p{Mc}\p{Me}\p{Mn}]$/u.test(String.fromCodePoint(codePoint));
91
+ }
92
+ function isEmojiModifier(code) {
93
+ return code >= 127995 && code <= 127999;
94
+ }
95
+ function isRegionalIndicatorSymbol(code) {
96
+ return code >= 127462 && code <= 127487;
97
+ }
98
+ function isSurrogatePair(lead, tail) {
99
+ return lead >= 55296 && lead < 56320 && tail >= 56320 && tail < 57344;
100
+ }
101
+ function isUnicodeCodePointEscape(char) {
102
+ return /^\\u\{[\da-f]+\}$/iu.test(char.raw);
103
+ }
104
+ function* iterateCharacterSequence(nodes) {
105
+ let sequence = [];
106
+ for (const node of nodes) switch (node.type) {
107
+ case "Character":
108
+ sequence.push(node);
109
+ break;
110
+ case "CharacterClass":
111
+ case "CharacterSet":
112
+ case "ClassStringDisjunction":
113
+ case "ExpressionCharacterClass":
114
+ if (sequence.length) {
115
+ yield sequence;
116
+ sequence = [];
117
+ }
118
+ break;
119
+ case "CharacterClassRange":
120
+ sequence.push(node.min);
121
+ yield sequence;
122
+ sequence = [node.max];
123
+ break;
124
+ }
125
+ if (sequence.length) yield sequence;
126
+ }
127
+ var regexMisleadingUnicodeCharacters_default = ruleCreator.createRule(typescriptLanguage, {
128
+ about: {
129
+ description: "Reports characters in regex character classes that appear as single visual characters but are made of multiple code points.",
130
+ id: "regexMisleadingUnicodeCharacters",
131
+ presets: ["logical", "logicalStrict"]
132
+ },
133
+ messages: {
134
+ combiningClass: {
135
+ primary: "Misleading combined character in character class.",
136
+ secondary: ["The base character and combining mark are matched separately, not as a single unit."],
137
+ suggestions: ["Match the composed character outside of a character class.", "Use Unicode normalization for the regular expression."]
138
+ },
139
+ emojiModifier: {
140
+ primary: "Misleading emoji with skin tone modifier in character class.",
141
+ secondary: ["The emoji and its modifier are matched separately, not as a single unit."],
142
+ suggestions: ["Match the emoji sequence outside of a character class."]
143
+ },
144
+ regionalIndicatorSymbol: {
145
+ primary: "Misleading regional indicator symbols (flag) in character class.",
146
+ secondary: ["The two regional indicator symbols are matched separately, not as a single flag."],
147
+ suggestions: ["Match the flag sequence outside of a character class."]
148
+ },
149
+ surrogatePair: {
150
+ primary: "Misleading surrogate pair in character class.",
151
+ secondary: ["The surrogate code points are represented with different escape types."],
152
+ suggestions: ["Use consistent escape sequences for both halves of the pair."]
153
+ },
154
+ surrogatePairWithoutUFlag: {
155
+ primary: "Misleading surrogate pair in character class without the `u` or `v` flag.",
156
+ secondary: ["Without the unicode flag, each half of the surrogate pair is matched separately."],
157
+ suggestions: ["Add the `u` flag to the regex."]
158
+ },
159
+ zwj: {
160
+ primary: "Misleading zero-width joiner sequence in character class.",
161
+ secondary: ["Characters joined with ZWJ are matched separately, not as a single unit.", "Consider matching the sequence outside of a character class."],
162
+ suggestions: ["Match the ZWJ sequence outside of a character class."]
163
+ }
164
+ },
165
+ setup(context) {
166
+ return { visitors: { RegularExpressionLiteral: (node, services) => {
167
+ const details = getRegExpLiteralDetails(node, services);
168
+ const regexpAst = parseRegexpAst(details.pattern, details.flags);
169
+ if (!regexpAst) return;
170
+ const hasUnicodeFlag = details.flags.includes("u") || details.flags.includes("v");
171
+ const range = getTSNodeRange(node, services.sourceFile);
172
+ visitRegExpAST(regexpAst, { onCharacterClassEnter(characterClassNode) {
173
+ for (const characters of iterateCharacterSequence(characterClassNode.elements)) {
174
+ const matches = findAllMatches(characters, hasUnicodeFlag);
175
+ for (const { kind, nodes: characters } of matches) {
176
+ const first = characters[0];
177
+ const last = characters.at(-1);
178
+ const messageId = getMessageId(kind);
179
+ context.report({
180
+ message: messageId,
181
+ range: {
182
+ begin: range.begin + 1 + first.start,
183
+ end: range.begin + 1 + last.end
184
+ },
185
+ ...kind === "surrogatePairWithoutUFlag" && { suggestions: [{
186
+ id: "addUnicodeFlag",
187
+ range: {
188
+ begin: range.end,
189
+ end: range.end
190
+ },
191
+ text: "u"
192
+ }] }
193
+ });
194
+ }
195
+ }
196
+ } });
197
+ } } };
198
+ }
199
+ });
200
+ //#endregion
201
+ export { regexMisleadingUnicodeCharacters_default as default };
202
+
203
+ //# sourceMappingURL=regexMisleadingUnicodeCharacters.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports backreferences that do not use the name of their referenced capturing group.";
3
+ readonly id: "regexNamedBackreferences";
4
+ readonly presets: ["stylisticStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "preferNamed", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexNamedBackreferences.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
3
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
4
+ import { typescriptLanguage } from "@flint.fyi/typescript-language";
5
+ import { visitRegExpAST } from "@eslint-community/regexpp";
6
+ //#region src/rules/regexNamedBackreferences.ts
7
+ var regexNamedBackreferences_default = ruleCreator.createRule(typescriptLanguage, {
8
+ about: {
9
+ description: "Reports backreferences that do not use the name of their referenced capturing group.",
10
+ id: "regexNamedBackreferences",
11
+ presets: ["stylisticStrict"]
12
+ },
13
+ messages: { preferNamed: {
14
+ primary: "Prefer named backreference `\\k<{{ name }}>` over numeric backreference `{{ found }}`.",
15
+ secondary: ["Named backreferences are more readable and maintainable than numeric ones.", "If the capturing group has a name, the backreference should use that name."],
16
+ suggestions: ["Replace `{{ found }}` with `\\k<{{ name }}>`"]
17
+ } },
18
+ setup(context) {
19
+ return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
20
+ const details = getRegExpLiteralDetails(node, { sourceFile });
21
+ const regexpAst = parseRegexpAst(details.pattern, details.flags);
22
+ if (!regexpAst) return;
23
+ visitRegExpAST(regexpAst, { onBackreferenceEnter(backNode) {
24
+ if (Array.isArray(backNode.resolved) || !backNode.resolved.name || backNode.raw.startsWith("\\k<")) return;
25
+ const range = {
26
+ begin: details.start + backNode.start,
27
+ end: details.start + backNode.end
28
+ };
29
+ context.report({
30
+ data: {
31
+ found: backNode.raw,
32
+ name: backNode.resolved.name
33
+ },
34
+ fix: {
35
+ range,
36
+ text: `\\k<${backNode.resolved.name}>`
37
+ },
38
+ message: "preferNamed",
39
+ range
40
+ });
41
+ } });
42
+ } } };
43
+ }
44
+ });
45
+ //#endregion
46
+ export { regexNamedBackreferences_default as default };
47
+
48
+ //# sourceMappingURL=regexNamedBackreferences.js.map
@@ -0,0 +1,9 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports capturing groups in regular expressions that do not have a name.";
3
+ readonly id: "regexNamedCaptureGroups";
4
+ } & {
5
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
6
+ url: string;
7
+ }, object, object, "preferNamed", import("@flint.fyi/core").AnyOptionalSchema>;
8
+ export default _default;
9
+ //# sourceMappingURL=regexNamedCaptureGroups.d.ts.map
@@ -0,0 +1,67 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
3
+ import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
4
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
5
+ import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
6
+ import { visitRegExpAST } from "@eslint-community/regexpp";
7
+ //#region src/rules/regexNamedCaptureGroups.ts
8
+ var regexNamedCaptureGroups_default = ruleCreator.createRule(typescriptLanguage, {
9
+ about: {
10
+ description: "Reports capturing groups in regular expressions that do not have a name.",
11
+ id: "regexNamedCaptureGroups"
12
+ },
13
+ messages: { preferNamed: {
14
+ primary: "Anonymous capture group `{{ group }}` should be converted to a named or non-capturing group for clarity.",
15
+ secondary: ["Named capture groups make regex patterns more readable and maintainable.", "If the capture is not needed, use a non-capturing group `(?:...)` instead."],
16
+ suggestions: ["Add a name to the capture group.", "Convert to a non-capturing group."]
17
+ } },
18
+ setup(context) {
19
+ function checkPattern(pattern, flags, start) {
20
+ const regexpAst = parseRegexpAst(pattern, flags);
21
+ if (!regexpAst) return;
22
+ visitRegExpAST(regexpAst, { onCapturingGroupEnter(groupNode) {
23
+ if (groupNode.name) return;
24
+ const suggestionRange = {
25
+ begin: start + 1 + groupNode.start + 1,
26
+ end: start + 1 + groupNode.start + 1
27
+ };
28
+ context.report({
29
+ data: { group: groupNode.raw },
30
+ message: "preferNamed",
31
+ range: {
32
+ begin: start + 1 + groupNode.start,
33
+ end: start + 1 + groupNode.end
34
+ },
35
+ suggestions: [{
36
+ id: "addGroupName",
37
+ range: suggestionRange,
38
+ text: "?<name>"
39
+ }, {
40
+ id: "convertToNonCapturing",
41
+ range: suggestionRange,
42
+ text: "?:"
43
+ }]
44
+ });
45
+ } });
46
+ }
47
+ function checkRegexLiteral(node, services) {
48
+ const details = getRegExpLiteralDetails(node, services);
49
+ const range = getTSNodeRange(node, services.sourceFile);
50
+ checkPattern(details.pattern, details.flags, range.begin);
51
+ }
52
+ function checkRegExpConstructor(node, services) {
53
+ const construction = getRegExpConstruction(node, services);
54
+ if (!construction) return;
55
+ checkPattern(construction.raw, construction.flags, construction.start);
56
+ }
57
+ return { visitors: {
58
+ CallExpression: checkRegExpConstructor,
59
+ NewExpression: checkRegExpConstructor,
60
+ RegularExpressionLiteral: checkRegexLiteral
61
+ } };
62
+ }
63
+ });
64
+ //#endregion
65
+ export { regexNamedCaptureGroups_default as default };
66
+
67
+ //# sourceMappingURL=regexNamedCaptureGroups.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports indexed references in replacement strings that should use named references.";
3
+ readonly id: "regexNamedReplacements";
4
+ readonly presets: ["stylisticStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "preferNamed", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexNamedReplacements.d.ts.map
@@ -0,0 +1,93 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
3
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
4
+ import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
5
+ import ts from "typescript";
6
+ import { visitRegExpAST } from "@eslint-community/regexpp";
7
+ //#region src/rules/regexNamedReplacements.ts
8
+ function getCapturingGroups(regexpAst) {
9
+ const groups = [];
10
+ visitRegExpAST(regexpAst, { onCapturingGroupEnter(groupNode) {
11
+ groups.push(groupNode);
12
+ } });
13
+ return groups;
14
+ }
15
+ function getRegexPatternAndFlags(node) {
16
+ if (node.kind !== ts.SyntaxKind.RegularExpressionLiteral) return;
17
+ const match = /^\/(.+)\/([dgimsuyv]*)$/.exec(node.text);
18
+ if (!match) return;
19
+ return {
20
+ flags: match[2],
21
+ pattern: match[1]
22
+ };
23
+ }
24
+ function parseReplacementReferences(replacementText) {
25
+ const references = [];
26
+ const pattern = /\$(\d+)/g;
27
+ let match;
28
+ while (match = pattern.exec(replacementText)) {
29
+ const index = parseInt(match[1], 10);
30
+ if (index > 0) references.push({
31
+ end: match.index + match[0].length,
32
+ index,
33
+ raw: match[0],
34
+ start: match.index
35
+ });
36
+ }
37
+ return references;
38
+ }
39
+ var regexNamedReplacements_default = ruleCreator.createRule(typescriptLanguage, {
40
+ about: {
41
+ description: "Reports indexed references in replacement strings that should use named references.",
42
+ id: "regexNamedReplacements",
43
+ presets: ["stylisticStrict"]
44
+ },
45
+ messages: { preferNamed: {
46
+ primary: "Prefer the explicit named replacement `$<{{ name }}>` over the position-specific indexed replacement `{{ found }}`.",
47
+ secondary: ["Named replacements are more readable and maintainable than indexed ones.", "If the capturing group has a name, the replacement should use that name."],
48
+ suggestions: ["Replace `{{ found }}` with `$<{{ name }}>`"]
49
+ } },
50
+ setup(context) {
51
+ return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
52
+ if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "replace" && node.expression.name.text !== "replaceAll" || node.arguments.length < 2 || !(getConstrainedTypeAtLocation(node.expression.expression, typeChecker).flags & ts.TypeFlags.StringLike)) return;
53
+ if (!(getConstrainedTypeAtLocation(node.expression.expression, typeChecker).flags & ts.TypeFlags.StringLike)) return;
54
+ const regexArg = node.arguments[0];
55
+ const replacementArg = node.arguments[1];
56
+ if (!ts.isStringLiteral(replacementArg)) return;
57
+ const regexInfo = getRegexPatternAndFlags(regexArg);
58
+ if (!regexInfo) return;
59
+ const regexpAst = parseRegexpAst(regexInfo.pattern, regexInfo.flags);
60
+ if (!regexpAst) return;
61
+ const capturingGroups = getCapturingGroups(regexpAst);
62
+ if (!capturingGroups.length) return;
63
+ const references = parseReplacementReferences(replacementArg.text);
64
+ const replacementRange = getTSNodeRange(replacementArg, sourceFile);
65
+ for (const reference of references) {
66
+ const group = capturingGroups[reference.index - 1];
67
+ if (!group?.name) continue;
68
+ context.report({
69
+ data: {
70
+ found: reference.raw,
71
+ name: group.name
72
+ },
73
+ fix: {
74
+ range: {
75
+ begin: replacementRange.begin + 1 + reference.start,
76
+ end: replacementRange.begin + 1 + reference.end
77
+ },
78
+ text: `$<${group.name}>`
79
+ },
80
+ message: "preferNamed",
81
+ range: {
82
+ begin: replacementRange.begin + 1 + reference.start,
83
+ end: replacementRange.begin + 1 + reference.end
84
+ }
85
+ });
86
+ }
87
+ } } };
88
+ }
89
+ });
90
+ //#endregion
91
+ export { regexNamedReplacements_default as default };
92
+
93
+ //# sourceMappingURL=regexNamedReplacements.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports non-standard regular expression flags.";
3
+ readonly id: "regexNonStandardFlags";
4
+ readonly presets: ["logical", "logicalStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "unexpected", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexNonStandardFlags.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
3
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
4
+ import { typescriptLanguage } from "@flint.fyi/typescript-language";
5
+ import * as ts$1 from "typescript";
6
+ //#region src/rules/regexNonStandardFlags.ts
7
+ const standardFlags = new Set([
8
+ "d",
9
+ "g",
10
+ "i",
11
+ "m",
12
+ "s",
13
+ "u",
14
+ "v",
15
+ "y"
16
+ ]);
17
+ var regexNonStandardFlags_default = ruleCreator.createRule(typescriptLanguage, {
18
+ about: {
19
+ description: "Reports non-standard regular expression flags.",
20
+ id: "regexNonStandardFlags",
21
+ presets: ["logical", "logicalStrict"]
22
+ },
23
+ messages: { unexpected: {
24
+ primary: "Non-standard flag '{{ flag }}' is not part of the ECMAScript standard.",
25
+ secondary: ["Non-standard flags may not be supported in all JavaScript environments and should be avoided in production code."],
26
+ suggestions: ["Remove the non-standard flag."]
27
+ } },
28
+ setup(context) {
29
+ function checkFlags(flags, flagsStart) {
30
+ for (let i = 0; i < flags.length; i += 1) {
31
+ const flag = flags[i];
32
+ if (!standardFlags.has(flag)) context.report({
33
+ data: { flag },
34
+ message: "unexpected",
35
+ range: {
36
+ begin: flagsStart + i,
37
+ end: flagsStart + i + 1
38
+ }
39
+ });
40
+ }
41
+ }
42
+ function checkRegexLiteral(node, services) {
43
+ const details = getRegExpLiteralDetails(node, services);
44
+ checkFlags(details.flags, details.start + node.text.length - details.flags.length - 1);
45
+ }
46
+ function checkRegExpConstructor(node, services) {
47
+ const construction = getRegExpConstruction(node, services);
48
+ if (!construction) return;
49
+ const args = construction.args;
50
+ if (args.length < 2) return;
51
+ const secondArgument = args[1];
52
+ if (secondArgument.kind !== ts$1.SyntaxKind.StringLiteral) return;
53
+ const flagsStart = secondArgument.getStart(services.sourceFile) + 1;
54
+ checkFlags(construction.flags, flagsStart);
55
+ }
56
+ return { visitors: {
57
+ CallExpression: checkRegExpConstructor,
58
+ NewExpression: checkRegExpConstructor,
59
+ RegularExpressionLiteral: checkRegexLiteral
60
+ } };
61
+ }
62
+ });
63
+ //#endregion
64
+ export { regexNonStandardFlags_default as default };
65
+
66
+ //# sourceMappingURL=regexNonStandardFlags.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports obscure character ranges in regular expressions.";
3
+ readonly id: "regexObscureRanges";
4
+ readonly presets: ["logical", "logicalStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "obscure", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexObscureRanges.d.ts.map