@flint.fyi/ts 0.20.0 → 0.22.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 (666) hide show
  1. package/{lib/plugin.d.ts → dist/index.d.mts} +360 -365
  2. package/dist/index.mjs +22467 -0
  3. package/package.json +10 -10
  4. package/lib/index.d.ts +0 -2
  5. package/lib/index.js +0 -2
  6. package/lib/plugin.js +0 -621
  7. package/lib/rules/accessorPairGroups.d.ts +0 -10
  8. package/lib/rules/accessorPairGroups.js +0 -48
  9. package/lib/rules/accessorPairTypes.d.ts +0 -10
  10. package/lib/rules/accessorPairTypes.js +0 -72
  11. package/lib/rules/accessorThisRecursion.d.ts +0 -10
  12. package/lib/rules/accessorThisRecursion.js +0 -65
  13. package/lib/rules/anyArguments.d.ts +0 -10
  14. package/lib/rules/anyArguments.js +0 -234
  15. package/lib/rules/anyAssignments.d.ts +0 -10
  16. package/lib/rules/anyAssignments.js +0 -265
  17. package/lib/rules/anyCalls.d.ts +0 -10
  18. package/lib/rules/anyCalls.js +0 -68
  19. package/lib/rules/anyMemberAccess.d.ts +0 -10
  20. package/lib/rules/anyMemberAccess.js +0 -85
  21. package/lib/rules/anyReturns.d.ts +0 -10
  22. package/lib/rules/anyReturns.js +0 -102
  23. package/lib/rules/arguments.d.ts +0 -10
  24. package/lib/rules/arguments.js +0 -38
  25. package/lib/rules/arrayCallbackReturns.d.ts +0 -10
  26. package/lib/rules/arrayCallbackReturns.js +0 -73
  27. package/lib/rules/arrayConstructors.d.ts +0 -10
  28. package/lib/rules/arrayConstructors.js +0 -47
  29. package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -10
  30. package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -54
  31. package/lib/rules/arrayElementDeletions.d.ts +0 -10
  32. package/lib/rules/arrayElementDeletions.js +0 -43
  33. package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -10
  34. package/lib/rules/arrayEmptyCallbackSlots.js +0 -45
  35. package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -10
  36. package/lib/rules/arrayExistenceChecksConsistency.js +0 -86
  37. package/lib/rules/arrayFilteredFinds.d.ts +0 -10
  38. package/lib/rules/arrayFilteredFinds.js +0 -80
  39. package/lib/rules/arrayFinds.d.ts +0 -10
  40. package/lib/rules/arrayFinds.js +0 -41
  41. package/lib/rules/arrayFlatMapMethods.d.ts +0 -10
  42. package/lib/rules/arrayFlatMapMethods.js +0 -47
  43. package/lib/rules/arrayFlatMethods.d.ts +0 -10
  44. package/lib/rules/arrayFlatMethods.js +0 -83
  45. package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -10
  46. package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -33
  47. package/lib/rules/arrayIncludes.d.ts +0 -10
  48. package/lib/rules/arrayIncludes.js +0 -59
  49. package/lib/rules/arrayIncludesMethods.d.ts +0 -10
  50. package/lib/rules/arrayIncludesMethods.js +0 -37
  51. package/lib/rules/arrayIndexOfMethods.d.ts +0 -10
  52. package/lib/rules/arrayIndexOfMethods.js +0 -51
  53. package/lib/rules/arrayLoops.d.ts +0 -10
  54. package/lib/rules/arrayLoops.js +0 -36
  55. package/lib/rules/arrayMapIdentities.d.ts +0 -10
  56. package/lib/rules/arrayMapIdentities.js +0 -74
  57. package/lib/rules/arrayMutableReverses.d.ts +0 -10
  58. package/lib/rules/arrayMutableReverses.js +0 -39
  59. package/lib/rules/arrayMutableSorts.d.ts +0 -10
  60. package/lib/rules/arrayMutableSorts.js +0 -72
  61. package/lib/rules/arrayReduceTypeArguments.d.ts +0 -10
  62. package/lib/rules/arrayReduceTypeArguments.js +0 -64
  63. package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -10
  64. package/lib/rules/arraySliceUnnecessaryEnd.js +0 -51
  65. package/lib/rules/arraySomeMethods.d.ts +0 -10
  66. package/lib/rules/arraySomeMethods.js +0 -77
  67. package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -10
  68. package/lib/rules/arrayTernarySpreadingConsistency.js +0 -74
  69. package/lib/rules/arrayTypes.d.ts +0 -17
  70. package/lib/rules/arrayTypes.js +0 -111
  71. package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -10
  72. package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -97
  73. package/lib/rules/asConstAssertions.d.ts +0 -10
  74. package/lib/rules/asConstAssertions.js +0 -57
  75. package/lib/rules/assignmentOperatorShorthands.d.ts +0 -10
  76. package/lib/rules/assignmentOperatorShorthands.js +0 -47
  77. package/lib/rules/asyncFunctionAwaits.d.ts +0 -10
  78. package/lib/rules/asyncFunctionAwaits.js +0 -55
  79. package/lib/rules/asyncPromiseExecutors.d.ts +0 -10
  80. package/lib/rules/asyncPromiseExecutors.js +0 -41
  81. package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -10
  82. package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -52
  83. package/lib/rules/atAccesses.d.ts +0 -10
  84. package/lib/rules/atAccesses.js +0 -52
  85. package/lib/rules/builtinCoercions.d.ts +0 -10
  86. package/lib/rules/builtinCoercions.js +0 -117
  87. package/lib/rules/builtinConstructorNews.d.ts +0 -10
  88. package/lib/rules/builtinConstructorNews.js +0 -89
  89. package/lib/rules/caseDeclarations.d.ts +0 -10
  90. package/lib/rules/caseDeclarations.js +0 -40
  91. package/lib/rules/caseDuplicates.d.ts +0 -10
  92. package/lib/rules/caseDuplicates.js +0 -36
  93. package/lib/rules/caseFallthroughs.d.ts +0 -10
  94. package/lib/rules/caseFallthroughs.js +0 -76
  95. package/lib/rules/catchCallbackTypes.d.ts +0 -10
  96. package/lib/rules/catchCallbackTypes.js +0 -67
  97. package/lib/rules/caughtVariableNames.d.ts +0 -10
  98. package/lib/rules/caughtVariableNames.js +0 -40
  99. package/lib/rules/chainedAssignments.d.ts +0 -10
  100. package/lib/rules/chainedAssignments.js +0 -33
  101. package/lib/rules/charAtComparisons.d.ts +0 -10
  102. package/lib/rules/charAtComparisons.js +0 -58
  103. package/lib/rules/classAssignments.d.ts +0 -10
  104. package/lib/rules/classAssignments.js +0 -29
  105. package/lib/rules/classFieldDeclarations.d.ts +0 -10
  106. package/lib/rules/classFieldDeclarations.js +0 -40
  107. package/lib/rules/classLiteralProperties.d.ts +0 -10
  108. package/lib/rules/classLiteralProperties.js +0 -45
  109. package/lib/rules/classMemberDuplicates.d.ts +0 -10
  110. package/lib/rules/classMemberDuplicates.js +0 -71
  111. package/lib/rules/classMethodsThis.d.ts +0 -14
  112. package/lib/rules/classMethodsThis.js +0 -124
  113. package/lib/rules/combinedPushes.d.ts +0 -10
  114. package/lib/rules/combinedPushes.js +0 -56
  115. package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -10
  116. package/lib/rules/consecutiveNonNullAssertions.js +0 -39
  117. package/lib/rules/consoleCalls.d.ts +0 -9
  118. package/lib/rules/consoleCalls.js +0 -28
  119. package/lib/rules/constantAssignments.d.ts +0 -10
  120. package/lib/rules/constantAssignments.js +0 -41
  121. package/lib/rules/constructorGenericCalls.d.ts +0 -16
  122. package/lib/rules/constructorGenericCalls.js +0 -138
  123. package/lib/rules/constructorReturns.d.ts +0 -10
  124. package/lib/rules/constructorReturns.js +0 -41
  125. package/lib/rules/constructorSupers.d.ts +0 -10
  126. package/lib/rules/constructorSupers.js +0 -77
  127. package/lib/rules/dateConstructorClones.d.ts +0 -10
  128. package/lib/rules/dateConstructorClones.js +0 -37
  129. package/lib/rules/dateNowTimestamps.d.ts +0 -10
  130. package/lib/rules/dateNowTimestamps.js +0 -57
  131. package/lib/rules/debuggerStatements.d.ts +0 -10
  132. package/lib/rules/debuggerStatements.js +0 -33
  133. package/lib/rules/defaultCaseLast.d.ts +0 -10
  134. package/lib/rules/defaultCaseLast.js +0 -36
  135. package/lib/rules/defaultParameterLast.d.ts +0 -10
  136. package/lib/rules/defaultParameterLast.js +0 -42
  137. package/lib/rules/deprecated.d.ts +0 -10
  138. package/lib/rules/deprecated.js +0 -243
  139. package/lib/rules/destructuringConsistency.d.ts +0 -10
  140. package/lib/rules/destructuringConsistency.js +0 -112
  141. package/lib/rules/duplicateArguments.d.ts +0 -10
  142. package/lib/rules/duplicateArguments.js +0 -45
  143. package/lib/rules/dynamicDeletes.d.ts +0 -10
  144. package/lib/rules/dynamicDeletes.js +0 -37
  145. package/lib/rules/elseIfDuplicates.d.ts +0 -10
  146. package/lib/rules/elseIfDuplicates.js +0 -38
  147. package/lib/rules/elseReturns.d.ts +0 -10
  148. package/lib/rules/elseReturns.js +0 -67
  149. package/lib/rules/emptyBlocks.d.ts +0 -10
  150. package/lib/rules/emptyBlocks.js +0 -56
  151. package/lib/rules/emptyDestructures.d.ts +0 -10
  152. package/lib/rules/emptyDestructures.js +0 -34
  153. package/lib/rules/emptyEnums.d.ts +0 -10
  154. package/lib/rules/emptyEnums.js +0 -30
  155. package/lib/rules/emptyExports.d.ts +0 -10
  156. package/lib/rules/emptyExports.js +0 -60
  157. package/lib/rules/emptyFiles.d.ts +0 -10
  158. package/lib/rules/emptyFiles.js +0 -44
  159. package/lib/rules/emptyFunctions.d.ts +0 -10
  160. package/lib/rules/emptyFunctions.js +0 -61
  161. package/lib/rules/emptyModuleAttributes.d.ts +0 -10
  162. package/lib/rules/emptyModuleAttributes.js +0 -35
  163. package/lib/rules/emptyObjectTypes.d.ts +0 -10
  164. package/lib/rules/emptyObjectTypes.js +0 -47
  165. package/lib/rules/emptyStaticBlocks.d.ts +0 -10
  166. package/lib/rules/emptyStaticBlocks.js +0 -42
  167. package/lib/rules/emptyTypeParameterLists.d.ts +0 -10
  168. package/lib/rules/emptyTypeParameterLists.js +0 -31
  169. package/lib/rules/enumInitializers.d.ts +0 -10
  170. package/lib/rules/enumInitializers.js +0 -54
  171. package/lib/rules/enumMemberLiterals.d.ts +0 -10
  172. package/lib/rules/enumMemberLiterals.js +0 -39
  173. package/lib/rules/enumValueConsistency.d.ts +0 -10
  174. package/lib/rules/enumValueConsistency.js +0 -56
  175. package/lib/rules/enumValueDuplicates.d.ts +0 -10
  176. package/lib/rules/enumValueDuplicates.js +0 -60
  177. package/lib/rules/equalityOperatorNegations.d.ts +0 -9
  178. package/lib/rules/equalityOperatorNegations.js +0 -60
  179. package/lib/rules/equalityOperators.d.ts +0 -10
  180. package/lib/rules/equalityOperators.js +0 -44
  181. package/lib/rules/errorMessages.d.ts +0 -10
  182. package/lib/rules/errorMessages.js +0 -60
  183. package/lib/rules/errorSubclassProperties.d.ts +0 -10
  184. package/lib/rules/errorSubclassProperties.js +0 -144
  185. package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -10
  186. package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -55
  187. package/lib/rules/escapeSequenceCasing.d.ts +0 -10
  188. package/lib/rules/escapeSequenceCasing.js +0 -75
  189. package/lib/rules/evals.d.ts +0 -10
  190. package/lib/rules/evals.js +0 -31
  191. package/lib/rules/evolvingVariableTypes.d.ts +0 -10
  192. package/lib/rules/evolvingVariableTypes.js +0 -33
  193. package/lib/rules/exceptionAssignments.d.ts +0 -10
  194. package/lib/rules/exceptionAssignments.js +0 -39
  195. package/lib/rules/explicitAnys.d.ts +0 -10
  196. package/lib/rules/explicitAnys.js +0 -55
  197. package/lib/rules/exponentiationOperators.d.ts +0 -10
  198. package/lib/rules/exponentiationOperators.js +0 -34
  199. package/lib/rules/exportFromImports.d.ts +0 -10
  200. package/lib/rules/exportFromImports.js +0 -119
  201. package/lib/rules/exportMutables.d.ts +0 -10
  202. package/lib/rules/exportMutables.js +0 -33
  203. package/lib/rules/exportUniqueNames.d.ts +0 -10
  204. package/lib/rules/exportUniqueNames.js +0 -65
  205. package/lib/rules/extraneousClasses.d.ts +0 -16
  206. package/lib/rules/extraneousClasses.js +0 -111
  207. package/lib/rules/fetchMethodBodies.d.ts +0 -10
  208. package/lib/rules/fetchMethodBodies.js +0 -72
  209. package/lib/rules/finallyStatementSafety.d.ts +0 -10
  210. package/lib/rules/finallyStatementSafety.js +0 -47
  211. package/lib/rules/forDirections.d.ts +0 -10
  212. package/lib/rules/forDirections.js +0 -75
  213. package/lib/rules/forInArrays.d.ts +0 -10
  214. package/lib/rules/forInArrays.js +0 -46
  215. package/lib/rules/forInGuards.d.ts +0 -9
  216. package/lib/rules/forInGuards.js +0 -44
  217. package/lib/rules/functionApplySpreads.d.ts +0 -10
  218. package/lib/rules/functionApplySpreads.js +0 -63
  219. package/lib/rules/functionAssignments.d.ts +0 -10
  220. package/lib/rules/functionAssignments.js +0 -29
  221. package/lib/rules/functionCurryingRedundancy.d.ts +0 -10
  222. package/lib/rules/functionCurryingRedundancy.js +0 -53
  223. package/lib/rules/functionDeclarationStyles.d.ts +0 -16
  224. package/lib/rules/functionDeclarationStyles.js +0 -67
  225. package/lib/rules/functionNameMatches.d.ts +0 -10
  226. package/lib/rules/functionNameMatches.js +0 -74
  227. package/lib/rules/functionNewCalls.d.ts +0 -10
  228. package/lib/rules/functionNewCalls.js +0 -42
  229. package/lib/rules/generatorFunctionYields.d.ts +0 -10
  230. package/lib/rules/generatorFunctionYields.js +0 -50
  231. package/lib/rules/getterReturns.d.ts +0 -10
  232. package/lib/rules/getterReturns.js +0 -65
  233. package/lib/rules/globalAssignments.d.ts +0 -10
  234. package/lib/rules/globalAssignments.js +0 -47
  235. package/lib/rules/globalObjectCalls.d.ts +0 -10
  236. package/lib/rules/globalObjectCalls.js +0 -42
  237. package/lib/rules/globalThisAliases.d.ts +0 -10
  238. package/lib/rules/globalThisAliases.js +0 -47
  239. package/lib/rules/impliedEvals.d.ts +0 -10
  240. package/lib/rules/impliedEvals.js +0 -130
  241. package/lib/rules/importEmptyBlocks.d.ts +0 -10
  242. package/lib/rules/importEmptyBlocks.js +0 -53
  243. package/lib/rules/importTypeSideEffects.d.ts +0 -10
  244. package/lib/rules/importTypeSideEffects.js +0 -31
  245. package/lib/rules/indexedObjectTypes.d.ts +0 -16
  246. package/lib/rules/indexedObjectTypes.js +0 -83
  247. package/lib/rules/instanceOfArrays.d.ts +0 -10
  248. package/lib/rules/instanceOfArrays.js +0 -31
  249. package/lib/rules/irregularWhitespaces.d.ts +0 -16
  250. package/lib/rules/irregularWhitespaces.js +0 -97
  251. package/lib/rules/isNaNComparisons.d.ts +0 -10
  252. package/lib/rules/isNaNComparisons.js +0 -43
  253. package/lib/rules/literalConstructorWrappers.d.ts +0 -10
  254. package/lib/rules/literalConstructorWrappers.js +0 -64
  255. package/lib/rules/mathMethods.d.ts +0 -10
  256. package/lib/rules/mathMethods.js +0 -128
  257. package/lib/rules/meaninglessVoidOperators.d.ts +0 -10
  258. package/lib/rules/meaninglessVoidOperators.js +0 -39
  259. package/lib/rules/misleadingVoidExpressions.d.ts +0 -10
  260. package/lib/rules/misleadingVoidExpressions.js +0 -128
  261. package/lib/rules/moduleSpecifierLists.d.ts +0 -10
  262. package/lib/rules/moduleSpecifierLists.js +0 -92
  263. package/lib/rules/multilineAmbiguities.d.ts +0 -10
  264. package/lib/rules/multilineAmbiguities.js +0 -64
  265. package/lib/rules/namedDefaultExports.d.ts +0 -10
  266. package/lib/rules/namedDefaultExports.js +0 -60
  267. package/lib/rules/namespaceDeclarations.d.ts +0 -14
  268. package/lib/rules/namespaceDeclarations.js +0 -37
  269. package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -10
  270. package/lib/rules/namespaceImplicitAmbientImports.js +0 -40
  271. package/lib/rules/namespaceKeywords.d.ts +0 -10
  272. package/lib/rules/namespaceKeywords.js +0 -40
  273. package/lib/rules/nativeObjectExtensions.d.ts +0 -10
  274. package/lib/rules/nativeObjectExtensions.js +0 -114
  275. package/lib/rules/negativeIndexLengthMethods.d.ts +0 -10
  276. package/lib/rules/negativeIndexLengthMethods.js +0 -180
  277. package/lib/rules/negativeZeroComparisons.d.ts +0 -10
  278. package/lib/rules/negativeZeroComparisons.js +0 -48
  279. package/lib/rules/nestedStandaloneIfs.d.ts +0 -10
  280. package/lib/rules/nestedStandaloneIfs.js +0 -105
  281. package/lib/rules/newDefinitions.d.ts +0 -10
  282. package/lib/rules/newDefinitions.js +0 -84
  283. package/lib/rules/newExpressions.d.ts +0 -10
  284. package/lib/rules/newExpressions.js +0 -38
  285. package/lib/rules/newNativeNonConstructors.d.ts +0 -10
  286. package/lib/rules/newNativeNonConstructors.js +0 -39
  287. package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -10
  288. package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -63
  289. package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -10
  290. package/lib/rules/nonNullAssertedOptionalChains.js +0 -69
  291. package/lib/rules/nonNullAssertionPlacement.d.ts +0 -10
  292. package/lib/rules/nonNullAssertionPlacement.js +0 -94
  293. package/lib/rules/nonNullableTypeAssertions.d.ts +0 -10
  294. package/lib/rules/nonNullableTypeAssertions.js +0 -78
  295. package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -10
  296. package/lib/rules/nonOctalDecimalEscapes.js +0 -48
  297. package/lib/rules/nullishCheckStyle.d.ts +0 -21
  298. package/lib/rules/nullishCheckStyle.js +0 -144
  299. package/lib/rules/nullishCoalescingOperators.d.ts +0 -22
  300. package/lib/rules/nullishCoalescingOperators.js +0 -323
  301. package/lib/rules/numberMethodRanges.d.ts +0 -10
  302. package/lib/rules/numberMethodRanges.js +0 -74
  303. package/lib/rules/numberStaticMethods.d.ts +0 -10
  304. package/lib/rules/numberStaticMethods.js +0 -53
  305. package/lib/rules/numericErasingOperations.d.ts +0 -10
  306. package/lib/rules/numericErasingOperations.js +0 -46
  307. package/lib/rules/numericLiteralParsing.d.ts +0 -10
  308. package/lib/rules/numericLiteralParsing.js +0 -66
  309. package/lib/rules/numericPrecision.d.ts +0 -10
  310. package/lib/rules/numericPrecision.js +0 -102
  311. package/lib/rules/numericSeparatorGroups.d.ts +0 -10
  312. package/lib/rules/numericSeparatorGroups.js +0 -101
  313. package/lib/rules/objectAssignSpreads.d.ts +0 -10
  314. package/lib/rules/objectAssignSpreads.js +0 -53
  315. package/lib/rules/objectCalls.d.ts +0 -10
  316. package/lib/rules/objectCalls.js +0 -38
  317. package/lib/rules/objectEntriesMethods.d.ts +0 -10
  318. package/lib/rules/objectEntriesMethods.js +0 -82
  319. package/lib/rules/objectHasOwns.d.ts +0 -10
  320. package/lib/rules/objectHasOwns.js +0 -50
  321. package/lib/rules/objectKeyDuplicates.d.ts +0 -10
  322. package/lib/rules/objectKeyDuplicates.js +0 -63
  323. package/lib/rules/objectProto.d.ts +0 -10
  324. package/lib/rules/objectProto.js +0 -50
  325. package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -10
  326. package/lib/rules/objectPrototypeBuiltIns.js +0 -54
  327. package/lib/rules/objectShorthand.d.ts +0 -10
  328. package/lib/rules/objectShorthand.js +0 -84
  329. package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -10
  330. package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -43
  331. package/lib/rules/objectTypeDefinitions.d.ts +0 -10
  332. package/lib/rules/objectTypeDefinitions.js +0 -34
  333. package/lib/rules/octalEscapes.d.ts +0 -10
  334. package/lib/rules/octalEscapes.js +0 -58
  335. package/lib/rules/octalNumbers.d.ts +0 -10
  336. package/lib/rules/octalNumbers.js +0 -55
  337. package/lib/rules/operatorAssignmentShorthand.d.ts +0 -10
  338. package/lib/rules/operatorAssignmentShorthand.js +0 -77
  339. package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -10
  340. package/lib/rules/overloadSignaturesAdjacent.js +0 -140
  341. package/lib/rules/parameterReassignments.d.ts +0 -10
  342. package/lib/rules/parameterReassignments.js +0 -45
  343. package/lib/rules/parseIntRadixes.d.ts +0 -10
  344. package/lib/rules/parseIntRadixes.js +0 -62
  345. package/lib/rules/propertyAccessNotation.d.ts +0 -13
  346. package/lib/rules/propertyAccessNotation.js +0 -119
  347. package/lib/rules/recursionOnlyArguments.d.ts +0 -10
  348. package/lib/rules/recursionOnlyArguments.js +0 -71
  349. package/lib/rules/redundantTypeConstituents.d.ts +0 -10
  350. package/lib/rules/redundantTypeConstituents.js +0 -277
  351. package/lib/rules/regexAllGlobalFlags.d.ts +0 -10
  352. package/lib/rules/regexAllGlobalFlags.js +0 -56
  353. package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -10
  354. package/lib/rules/regexAmbiguousInvalidity.js +0 -297
  355. package/lib/rules/regexCharacterClassRanges.d.ts +0 -10
  356. package/lib/rules/regexCharacterClassRanges.js +0 -137
  357. package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -10
  358. package/lib/rules/regexCharacterClassSetOperations.js +0 -81
  359. package/lib/rules/regexCharacterClasses.d.ts +0 -10
  360. package/lib/rules/regexCharacterClasses.js +0 -234
  361. package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -10
  362. package/lib/rules/regexConciseCharacterClassNegations.js +0 -52
  363. package/lib/rules/regexContradictoryAssertions.d.ts +0 -10
  364. package/lib/rules/regexContradictoryAssertions.js +0 -210
  365. package/lib/rules/regexControlCharacterEscapes.d.ts +0 -10
  366. package/lib/rules/regexControlCharacterEscapes.js +0 -130
  367. package/lib/rules/regexControlCharacters.d.ts +0 -10
  368. package/lib/rules/regexControlCharacters.js +0 -95
  369. package/lib/rules/regexDigitMatchers.d.ts +0 -10
  370. package/lib/rules/regexDigitMatchers.js +0 -180
  371. package/lib/rules/regexDollarEscapes.d.ts +0 -10
  372. package/lib/rules/regexDollarEscapes.js +0 -91
  373. package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -10
  374. package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -128
  375. package/lib/rules/regexEmptyAlternatives.d.ts +0 -10
  376. package/lib/rules/regexEmptyAlternatives.js +0 -140
  377. package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -10
  378. package/lib/rules/regexEmptyCapturingGroups.js +0 -67
  379. package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -10
  380. package/lib/rules/regexEmptyCharacterClasses.js +0 -68
  381. package/lib/rules/regexEmptyGroups.d.ts +0 -10
  382. package/lib/rules/regexEmptyGroups.js +0 -66
  383. package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -10
  384. package/lib/rules/regexEmptyLazyQuantifiers.js +0 -92
  385. package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -10
  386. package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -68
  387. package/lib/rules/regexEmptyStringLiterals.d.ts +0 -10
  388. package/lib/rules/regexEmptyStringLiterals.js +0 -66
  389. package/lib/rules/regexEscapeBackspaces.d.ts +0 -10
  390. package/lib/rules/regexEscapeBackspaces.js +0 -69
  391. package/lib/rules/regexExecutors.d.ts +0 -10
  392. package/lib/rules/regexExecutors.js +0 -58
  393. package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -10
  394. package/lib/rules/regexGraphemeStringLiterals.js +0 -51
  395. package/lib/rules/regexHexadecimalEscapes.d.ts +0 -10
  396. package/lib/rules/regexHexadecimalEscapes.js +0 -71
  397. package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -10
  398. package/lib/rules/regexIgnoreCaseFlags.js +0 -145
  399. package/lib/rules/regexInvisibleCharacters.d.ts +0 -10
  400. package/lib/rules/regexInvisibleCharacters.js +0 -90
  401. package/lib/rules/regexLetterCasing.d.ts +0 -10
  402. package/lib/rules/regexLetterCasing.js +0 -186
  403. package/lib/rules/regexLiterals.d.ts +0 -10
  404. package/lib/rules/regexLiterals.js +0 -92
  405. package/lib/rules/regexLookaroundAssertions.d.ts +0 -10
  406. package/lib/rules/regexLookaroundAssertions.js +0 -163
  407. package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -10
  408. package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -94
  409. package/lib/rules/regexMatchNotation.d.ts +0 -10
  410. package/lib/rules/regexMatchNotation.js +0 -139
  411. package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -10
  412. package/lib/rules/regexMisleadingCapturingGroups.js +0 -229
  413. package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -10
  414. package/lib/rules/regexMisleadingQuantifiers.js +0 -78
  415. package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -10
  416. package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -203
  417. package/lib/rules/regexNamedBackreferences.d.ts +0 -10
  418. package/lib/rules/regexNamedBackreferences.js +0 -48
  419. package/lib/rules/regexNamedCaptureGroups.d.ts +0 -9
  420. package/lib/rules/regexNamedCaptureGroups.js +0 -67
  421. package/lib/rules/regexNamedReplacements.d.ts +0 -10
  422. package/lib/rules/regexNamedReplacements.js +0 -93
  423. package/lib/rules/regexNonStandardFlags.d.ts +0 -10
  424. package/lib/rules/regexNonStandardFlags.js +0 -66
  425. package/lib/rules/regexObscureRanges.d.ts +0 -10
  426. package/lib/rules/regexObscureRanges.js +0 -93
  427. package/lib/rules/regexOctalEscapes.d.ts +0 -10
  428. package/lib/rules/regexOctalEscapes.js +0 -70
  429. package/lib/rules/regexPlusQuantifiers.d.ts +0 -10
  430. package/lib/rules/regexPlusQuantifiers.js +0 -68
  431. package/lib/rules/regexPredefinedAssertions.d.ts +0 -10
  432. package/lib/rules/regexPredefinedAssertions.js +0 -127
  433. package/lib/rules/regexQuestionQuantifiers.d.ts +0 -10
  434. package/lib/rules/regexQuestionQuantifiers.js +0 -104
  435. package/lib/rules/regexRepeatQuantifiers.d.ts +0 -10
  436. package/lib/rules/regexRepeatQuantifiers.js +0 -96
  437. package/lib/rules/regexResultArrayGroups.d.ts +0 -10
  438. package/lib/rules/regexResultArrayGroups.js +0 -187
  439. package/lib/rules/regexSetOperationOptimizations.d.ts +0 -10
  440. package/lib/rules/regexSetOperationOptimizations.js +0 -177
  441. package/lib/rules/regexStandaloneBackslashes.d.ts +0 -10
  442. package/lib/rules/regexStandaloneBackslashes.js +0 -59
  443. package/lib/rules/regexStarQuantifiers.d.ts +0 -10
  444. package/lib/rules/regexStarQuantifiers.js +0 -68
  445. package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -10
  446. package/lib/rules/regexSuperLinearBacktracking.js +0 -98
  447. package/lib/rules/regexSuperLinearMoves.d.ts +0 -10
  448. package/lib/rules/regexSuperLinearMoves.js +0 -142
  449. package/lib/rules/regexTestMethods.d.ts +0 -10
  450. package/lib/rules/regexTestMethods.js +0 -83
  451. package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -10
  452. package/lib/rules/regexUnicodeCodepointEscapes.js +0 -107
  453. package/lib/rules/regexUnicodeEscapes.d.ts +0 -9
  454. package/lib/rules/regexUnicodeEscapes.js +0 -97
  455. package/lib/rules/regexUnicodeFlag.d.ts +0 -9
  456. package/lib/rules/regexUnicodeFlag.js +0 -97
  457. package/lib/rules/regexUnicodeProperties.d.ts +0 -10
  458. package/lib/rules/regexUnicodeProperties.js +0 -133
  459. package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -10
  460. package/lib/rules/regexUnnecessaryAssertions.js +0 -223
  461. package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -10
  462. package/lib/rules/regexUnnecessaryBackreferences.js +0 -125
  463. package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -10
  464. package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -74
  465. package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -10
  466. package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -108
  467. package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -10
  468. package/lib/rules/regexUnnecessaryDisjunctions.js +0 -118
  469. package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -10
  470. package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -144
  471. package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -10
  472. package/lib/rules/regexUnnecessaryEscapes.js +0 -136
  473. package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -10
  474. package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -80
  475. package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -10
  476. package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -198
  477. package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -10
  478. package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -93
  479. package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -10
  480. package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -104
  481. package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -10
  482. package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -69
  483. package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -10
  484. package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -137
  485. package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -10
  486. package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -123
  487. package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -10
  488. package/lib/rules/regexUnnecessarySetOperands.js +0 -136
  489. package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -10
  490. package/lib/rules/regexUnusedCapturingGroups.js +0 -69
  491. package/lib/rules/regexUnusedFlags.d.ts +0 -10
  492. package/lib/rules/regexUnusedFlags.js +0 -116
  493. package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -10
  494. package/lib/rules/regexUnusedLazyQuantifiers.js +0 -63
  495. package/lib/rules/regexUnusedQuantifiers.d.ts +0 -10
  496. package/lib/rules/regexUnusedQuantifiers.js +0 -63
  497. package/lib/rules/regexValidity.d.ts +0 -10
  498. package/lib/rules/regexValidity.js +0 -146
  499. package/lib/rules/regexWordMatchers.d.ts +0 -10
  500. package/lib/rules/regexWordMatchers.js +0 -146
  501. package/lib/rules/regexZeroQuantifiers.d.ts +0 -10
  502. package/lib/rules/regexZeroQuantifiers.js +0 -60
  503. package/lib/rules/requireImports.d.ts +0 -10
  504. package/lib/rules/requireImports.js +0 -48
  505. package/lib/rules/responseJsonMethods.d.ts +0 -10
  506. package/lib/rules/responseJsonMethods.js +0 -51
  507. package/lib/rules/restrictedIdentifiers.d.ts +0 -13
  508. package/lib/rules/restrictedIdentifiers.js +0 -41
  509. package/lib/rules/restrictedImports.d.ts +0 -27
  510. package/lib/rules/restrictedImports.js +0 -166
  511. package/lib/rules/returnAssignments.d.ts +0 -10
  512. package/lib/rules/returnAssignments.js +0 -38
  513. package/lib/rules/returnThisTypes.d.ts +0 -10
  514. package/lib/rules/returnThisTypes.js +0 -94
  515. package/lib/rules/ruleCreator.d.ts +0 -3
  516. package/lib/rules/ruleCreator.js +0 -17
  517. package/lib/rules/selfAssignments.d.ts +0 -10
  518. package/lib/rules/selfAssignments.js +0 -29
  519. package/lib/rules/sequences.d.ts +0 -10
  520. package/lib/rules/sequences.js +0 -28
  521. package/lib/rules/setSizeLengthChecks.d.ts +0 -10
  522. package/lib/rules/setSizeLengthChecks.js +0 -48
  523. package/lib/rules/setterReturns.d.ts +0 -10
  524. package/lib/rules/setterReturns.js +0 -41
  525. package/lib/rules/shadowedRestrictedNames.d.ts +0 -10
  526. package/lib/rules/shadowedRestrictedNames.js +0 -68
  527. package/lib/rules/singleVariableDeclarations.d.ts +0 -10
  528. package/lib/rules/singleVariableDeclarations.js +0 -36
  529. package/lib/rules/sizeComparisonOperators.d.ts +0 -16
  530. package/lib/rules/sizeComparisonOperators.js +0 -148
  531. package/lib/rules/sparseArrays.d.ts +0 -10
  532. package/lib/rules/sparseArrays.js +0 -43
  533. package/lib/rules/staticMemberOnlyClasses.d.ts +0 -10
  534. package/lib/rules/staticMemberOnlyClasses.js +0 -77
  535. package/lib/rules/stringCaseMismatches.d.ts +0 -10
  536. package/lib/rules/stringCaseMismatches.js +0 -58
  537. package/lib/rules/stringCodePoints.d.ts +0 -10
  538. package/lib/rules/stringCodePoints.js +0 -50
  539. package/lib/rules/stringSliceMethods.d.ts +0 -10
  540. package/lib/rules/stringSliceMethods.js +0 -47
  541. package/lib/rules/stringStartsEndsWith.d.ts +0 -10
  542. package/lib/rules/stringStartsEndsWith.js +0 -79
  543. package/lib/rules/structuredCloneMethods.d.ts +0 -10
  544. package/lib/rules/structuredCloneMethods.js +0 -39
  545. package/lib/rules/symbolDescriptions.d.ts +0 -10
  546. package/lib/rules/symbolDescriptions.js +0 -32
  547. package/lib/rules/thisAliases.d.ts +0 -10
  548. package/lib/rules/thisAliases.js +0 -44
  549. package/lib/rules/thisBeforeSuper.d.ts +0 -10
  550. package/lib/rules/thisBeforeSuper.js +0 -86
  551. package/lib/rules/throwErrors.d.ts +0 -10
  552. package/lib/rules/throwErrors.js +0 -61
  553. package/lib/rules/topLevelAwaits.d.ts +0 -10
  554. package/lib/rules/topLevelAwaits.js +0 -49
  555. package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -10
  556. package/lib/rules/tripleSlashReferenceValidity.js +0 -54
  557. package/lib/rules/tripleSlashReferences.d.ts +0 -10
  558. package/lib/rules/tripleSlashReferences.js +0 -34
  559. package/lib/rules/tsComments.d.ts +0 -22
  560. package/lib/rules/tsComments.js +0 -130
  561. package/lib/rules/tslintComments.d.ts +0 -10
  562. package/lib/rules/tslintComments.js +0 -36
  563. package/lib/rules/typeAssertionStyles.d.ts +0 -10
  564. package/lib/rules/typeAssertionStyles.js +0 -32
  565. package/lib/rules/typeImports.d.ts +0 -20
  566. package/lib/rules/typeImports.js +0 -283
  567. package/lib/rules/typeofComparisons.d.ts +0 -10
  568. package/lib/rules/typeofComparisons.js +0 -58
  569. package/lib/rules/unassignedVariables.d.ts +0 -10
  570. package/lib/rules/unassignedVariables.js +0 -34
  571. package/lib/rules/undefinedTypeofChecks.d.ts +0 -10
  572. package/lib/rules/undefinedTypeofChecks.js +0 -41
  573. package/lib/rules/undefinedVariables.d.ts +0 -10
  574. package/lib/rules/undefinedVariables.js +0 -39
  575. package/lib/rules/unicodeBOMs.d.ts +0 -10
  576. package/lib/rules/unicodeBOMs.js +0 -39
  577. package/lib/rules/unnecessaryBinds.d.ts +0 -10
  578. package/lib/rules/unnecessaryBinds.js +0 -78
  579. package/lib/rules/unnecessaryBlocks.d.ts +0 -10
  580. package/lib/rules/unnecessaryBlocks.js +0 -60
  581. package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -10
  582. package/lib/rules/unnecessaryBooleanCasts.js +0 -58
  583. package/lib/rules/unnecessaryCatches.d.ts +0 -10
  584. package/lib/rules/unnecessaryCatches.js +0 -48
  585. package/lib/rules/unnecessaryComparisons.d.ts +0 -10
  586. package/lib/rules/unnecessaryComparisons.js +0 -300
  587. package/lib/rules/unnecessaryConcatenation.d.ts +0 -10
  588. package/lib/rules/unnecessaryConcatenation.js +0 -28
  589. package/lib/rules/unnecessaryEscapes.d.ts +0 -10
  590. package/lib/rules/unnecessaryEscapes.js +0 -134
  591. package/lib/rules/unnecessaryMathClamps.d.ts +0 -10
  592. package/lib/rules/unnecessaryMathClamps.js +0 -114
  593. package/lib/rules/unnecessaryNumericFractions.d.ts +0 -10
  594. package/lib/rules/unnecessaryNumericFractions.js +0 -50
  595. package/lib/rules/unnecessaryRenames.d.ts +0 -10
  596. package/lib/rules/unnecessaryRenames.js +0 -92
  597. package/lib/rules/unnecessaryTernaries.d.ts +0 -10
  598. package/lib/rules/unnecessaryTernaries.js +0 -88
  599. package/lib/rules/unnecessaryUseStricts.d.ts +0 -10
  600. package/lib/rules/unnecessaryUseStricts.js +0 -40
  601. package/lib/rules/unsafeNegations.d.ts +0 -10
  602. package/lib/rules/unsafeNegations.js +0 -38
  603. package/lib/rules/utils/collectAccessorPairs.d.ts +0 -12
  604. package/lib/rules/utils/collectAccessorPairs.js +0 -29
  605. package/lib/rules/utils/countCommentsInRange.d.ts +0 -3
  606. package/lib/rules/utils/countCommentsInRange.js +0 -12
  607. package/lib/rules/utils/discriminateAnyType.d.ts +0 -16
  608. package/lib/rules/utils/discriminateAnyType.js +0 -38
  609. package/lib/rules/utils/equalityOperators.d.ts +0 -9
  610. package/lib/rules/utils/equalityOperators.js +0 -36
  611. package/lib/rules/utils/forEachReturnStatement.d.ts +0 -3
  612. package/lib/rules/utils/forEachReturnStatement.js +0 -29
  613. package/lib/rules/utils/formatReportedType.d.ts +0 -4
  614. package/lib/rules/utils/formatReportedType.js +0 -9
  615. package/lib/rules/utils/getConstrainedType.d.ts +0 -3
  616. package/lib/rules/utils/getConstrainedType.js +0 -9
  617. package/lib/rules/utils/getFunctionName.d.ts +0 -3
  618. package/lib/rules/utils/getFunctionName.js +0 -16
  619. package/lib/rules/utils/getRegExpConstruction.d.ts +0 -10
  620. package/lib/rules/utils/getRegExpConstruction.js +0 -26
  621. package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -7
  622. package/lib/rules/utils/getRegExpLiteralDetails.js +0 -13
  623. package/lib/rules/utils/getThisExpression.d.ts +0 -3
  624. package/lib/rules/utils/getThisExpression.js +0 -16
  625. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -3
  626. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -13
  627. package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -3
  628. package/lib/rules/utils/isBuiltinSymbolLike.js +0 -33
  629. package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -4
  630. package/lib/rules/utils/isDirectEqualityCheck.js +0 -29
  631. package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
  632. package/lib/rules/utils/isErrorSubclass.js +0 -27
  633. package/lib/rules/utils/isInBooleanContext.d.ts +0 -3
  634. package/lib/rules/utils/isInBooleanContext.js +0 -22
  635. package/lib/rules/utils/isTypeRecursive.d.ts +0 -3
  636. package/lib/rules/utils/isTypeRecursive.js +0 -8
  637. package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -15
  638. package/lib/rules/utils/isUnsafeAssignment.js +0 -45
  639. package/lib/rules/utils/operators.d.ts +0 -5
  640. package/lib/rules/utils/operators.js +0 -35
  641. package/lib/rules/utils/parseRegexpAst.d.ts +0 -2
  642. package/lib/rules/utils/parseRegexpAst.js +0 -17
  643. package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -3
  644. package/lib/rules/utils/parseRegexpAstFull.js +0 -18
  645. package/lib/rules/utils/skipParentheses.d.ts +0 -3
  646. package/lib/rules/utils/skipParentheses.js +0 -10
  647. package/lib/rules/variableDeletions.d.ts +0 -10
  648. package/lib/rules/variableDeletions.js +0 -35
  649. package/lib/rules/voidOperator.d.ts +0 -10
  650. package/lib/rules/voidOperator.js +0 -34
  651. package/lib/rules/withStatements.d.ts +0 -10
  652. package/lib/rules/withStatements.js +0 -30
  653. package/lib/rules/wrapperObjects.d.ts +0 -10
  654. package/lib/rules/wrapperObjects.js +0 -36
  655. package/lib/type-utils/getSpecifierNames.d.ts +0 -3
  656. package/lib/type-utils/getSpecifierNames.js +0 -9
  657. package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -3
  658. package/lib/type-utils/isDeclaredInModuleBlock.js +0 -14
  659. package/lib/type-utils/isFromFile.d.ts +0 -3
  660. package/lib/type-utils/isFromFile.js +0 -13
  661. package/lib/type-utils/isFromPackage.d.ts +0 -3
  662. package/lib/type-utils/isFromPackage.js +0 -16
  663. package/lib/type-utils/matchesSpecifier.d.ts +0 -4
  664. package/lib/type-utils/matchesSpecifier.js +0 -20
  665. package/lib/type-utils/schemas.d.ts +0 -15
  666. package/lib/type-utils/schemas.js +0 -25
@@ -1,187 +0,0 @@
1
- import { ruleCreator } from "./ruleCreator.js";
2
- import { skipParentheses } from "./utils/skipParentheses.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 ts from "typescript";
7
- import { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
8
- //#region src/rules/regexResultArrayGroups.ts
9
- function extractCallExpression(expression) {
10
- const unwrapped = skipParentheses(expression);
11
- if (ts.isCallExpression(unwrapped)) return unwrapped;
12
- if (ts.isNonNullExpression(unwrapped) || ts.isAsExpression(unwrapped) || ts.isTypeAssertionExpression(unwrapped)) return extractCallExpression(unwrapped.expression);
13
- }
14
- function findAssignmentsToSymbol(symbol, sourceFile, typeChecker) {
15
- const assignments = [];
16
- function visit(node) {
17
- if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken && ts.isIdentifier(node.left)) {
18
- if (typeChecker.getSymbolAtLocation(node.left) === symbol) assignments.push(node);
19
- }
20
- ts.forEachChild(node, visit);
21
- }
22
- visit(sourceFile);
23
- return assignments;
24
- }
25
- function getNamedCapturingGroups(pattern, flags) {
26
- const groups = [];
27
- let ast;
28
- try {
29
- ast = parseRegExpLiteral(new RegExp(pattern, flags));
30
- } catch {
31
- return groups;
32
- }
33
- let index = 0;
34
- visitRegExpAST(ast, { onCapturingGroupEnter(node) {
35
- index++;
36
- if (node.name) groups.push({
37
- index,
38
- name: node.name
39
- });
40
- } });
41
- return groups;
42
- }
43
- function getNamedGroupsFromExpression(node, typeChecker, sourceFile) {
44
- const unwrapped = skipParentheses(node);
45
- if (ts.isIdentifier(unwrapped)) {
46
- const symbol = typeChecker.getSymbolAtLocation(unwrapped);
47
- if (symbol) return getRegexInfoFromSymbol(symbol.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(symbol) : symbol, typeChecker, sourceFile);
48
- }
49
- if (ts.isCallExpression(unwrapped)) {
50
- const regexInfo = getRegexFromCall(unwrapped, typeChecker, sourceFile);
51
- if (regexInfo) {
52
- const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
53
- if (namedGroups.length) return namedGroups;
54
- }
55
- }
56
- if (ts.isNonNullExpression(unwrapped) || ts.isAsExpression(unwrapped) || ts.isTypeAssertionExpression(unwrapped)) return getNamedGroupsFromExpression(unwrapped.expression, typeChecker, sourceFile);
57
- }
58
- function getRegexFromCall(node, typeChecker, sourceFile) {
59
- return getRegexFromExecCall(node, typeChecker, sourceFile) ?? getRegexFromMatchCall(node, typeChecker, sourceFile) ?? getRegexFromMatchAllCall(node, typeChecker, sourceFile);
60
- }
61
- function getRegexFromExecCall(node, typeChecker, sourceFile) {
62
- if (!ts.isPropertyAccessExpression(node.expression)) return;
63
- if (node.expression.name.text !== "exec" || node.arguments.length !== 1) return;
64
- const regexObject = node.expression.expression;
65
- return getRegexInfoFromExpression(regexObject, typeChecker, sourceFile);
66
- }
67
- function getRegexFromMatchAllCall(node, typeChecker, sourceFile) {
68
- if (!ts.isPropertyAccessExpression(node.expression)) return;
69
- if (node.expression.name.text !== "matchAll" || node.arguments.length !== 1) return;
70
- if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
71
- const regexArg = node.arguments[0];
72
- return getRegexInfoFromExpression(regexArg, typeChecker, sourceFile);
73
- }
74
- function getRegexFromMatchCall(node, typeChecker, sourceFile) {
75
- if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "match" || node.arguments.length !== 1) return;
76
- if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
77
- const regexArg = node.arguments[0];
78
- const info = getRegexInfoFromExpression(regexArg, typeChecker, sourceFile);
79
- if (info?.flags.includes("g")) return;
80
- return info;
81
- }
82
- function getRegexInfoFromExpression(node, typeChecker, sourceFile) {
83
- const unwrapped = skipParentheses(node);
84
- if (ts.isRegularExpressionLiteral(unwrapped)) return getRegExpLiteralDetails(unwrapped, { sourceFile });
85
- if (ts.isCallExpression(unwrapped) || ts.isNewExpression(unwrapped)) {
86
- const construction = getRegExpConstruction(unwrapped, {
87
- sourceFile,
88
- typeChecker
89
- });
90
- if (construction) return {
91
- flags: construction.flags,
92
- pattern: construction.pattern.replace(/\\\\/g, "\\")
93
- };
94
- }
95
- if (ts.isIdentifier(unwrapped)) {
96
- const symbol = typeChecker.getSymbolAtLocation(unwrapped);
97
- if (symbol) {
98
- const declarations = symbol.getDeclarations();
99
- if (declarations) {
100
- for (const declaration of declarations) if (ts.isVariableDeclaration(declaration) && declaration.initializer) return getRegexInfoFromExpression(declaration.initializer, typeChecker, sourceFile);
101
- }
102
- }
103
- }
104
- }
105
- function getRegexInfoFromSymbol(symbol, typeChecker, sourceFile) {
106
- const declarations = symbol.getDeclarations();
107
- if (declarations) for (const declaration of declarations) {
108
- if (ts.isVariableDeclaration(declaration) && declaration.initializer) {
109
- const callExpression = extractCallExpression(declaration.initializer);
110
- if (callExpression) {
111
- const regexInfo = getRegexFromCall(callExpression, typeChecker, sourceFile);
112
- if (regexInfo) {
113
- const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
114
- if (namedGroups.length) return namedGroups;
115
- }
116
- }
117
- }
118
- if (ts.isParameter(declaration)) continue;
119
- }
120
- const assignments = findAssignmentsToSymbol(symbol, sourceFile, typeChecker);
121
- for (const assignment of assignments) {
122
- const callExpression = extractCallExpression(assignment.right);
123
- if (callExpression) {
124
- const regexInfo = getRegexFromCall(callExpression, typeChecker, sourceFile);
125
- if (regexInfo) {
126
- const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
127
- if (namedGroups.length) return namedGroups;
128
- }
129
- }
130
- }
131
- }
132
- function isAnyType(type) {
133
- return (type.flags & ts.TypeFlags.Any) !== 0;
134
- }
135
- function isRegExpExecArrayOrRegExpMatchArray(type, typeChecker) {
136
- const symbol = type.getSymbol();
137
- if (symbol) {
138
- const name = symbol.getName();
139
- if (name === "RegExpExecArray" || name === "RegExpMatchArray") return true;
140
- }
141
- if (type.isUnionOrIntersection()) return type.types.every((constituent) => isRegExpExecArrayOrRegExpMatchArray(constituent, typeChecker) || (constituent.flags & ts.TypeFlags.Null) !== 0 || (constituent.flags & ts.TypeFlags.Undefined) !== 0);
142
- return false;
143
- }
144
- var regexResultArrayGroups_default = ruleCreator.createRule(typescriptLanguage, {
145
- about: {
146
- description: "Reports indexed access on regex result arrays when named capturing groups should be used.",
147
- id: "regexResultArrayGroups",
148
- presets: ["stylisticStrict"]
149
- },
150
- messages: { preferGroups: {
151
- primary: "Use `.groups.{{ name }}` instead of numeric index for the named capturing group '{{ name }}'.",
152
- secondary: ["When a regex has named capturing groups, accessing them by name is more readable and maintainable.", "Numeric indices are fragile and can break if the regex pattern is modified."],
153
- suggestions: ["Replace the indexed access with `.groups.{{ name }}`.", "Use the named capturing group syntax for better code clarity."]
154
- } },
155
- setup(context) {
156
- return { visitors: { ElementAccessExpression: (node, { sourceFile, typeChecker }) => {
157
- const argument = skipParentheses(node.argumentExpression);
158
- if (!ts.isNumericLiteral(argument)) return;
159
- const index = Number(argument.text);
160
- if (index <= 0 || !Number.isInteger(index)) return;
161
- const object = skipParentheses(node.expression);
162
- const objectType = typeChecker.getTypeAtLocation(object);
163
- if (isAnyType(objectType)) return;
164
- if (!isRegExpExecArrayOrRegExpMatchArray(objectType, typeChecker)) return;
165
- const namedGroups = getNamedGroupsFromExpression(object, typeChecker, sourceFile);
166
- if (!namedGroups) return;
167
- const namedGroup = namedGroups.find((group) => group.index === index);
168
- if (!namedGroup) return;
169
- context.report({
170
- data: { name: namedGroup.name },
171
- fix: {
172
- range: getTSNodeRange(node, sourceFile),
173
- text: `${object.getText(sourceFile)}${node.questionDotToken ? "?" : ""}.groups.${namedGroup.name}`
174
- },
175
- message: "preferGroups",
176
- range: {
177
- begin: node.argumentExpression.getStart(sourceFile),
178
- end: node.getEnd()
179
- }
180
- });
181
- } } };
182
- }
183
- });
184
- //#endregion
185
- export { regexResultArrayGroups_default as default };
186
-
187
- //# sourceMappingURL=regexResultArrayGroups.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports set operations in regular expressions that can be simplified.";
3
- readonly id: "regexSetOperationOptimizations";
4
- readonly presets: readonly ["logical", "logicalStrict"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "toIntersection" | "toNegationOfConjunction" | "toNegationOfDisjunction" | "toSubtraction", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexSetOperationOptimizations.d.ts.map
@@ -1,177 +0,0 @@
1
- import { ruleCreator } from "./ruleCreator.js";
2
- import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
3
- import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
4
- import { RegExpParser, visitRegExpAST } from "@eslint-community/regexpp";
5
- import { toUnicodeSet } from "regexp-ast-analysis";
6
- //#region src/rules/regexSetOperationOptimizations.ts
7
- function collectIntersectionOperands(expression) {
8
- const operands = [];
9
- let operand = expression;
10
- while (operand.type === "ClassIntersection") {
11
- operands.push(operand.right);
12
- operand = operand.left;
13
- }
14
- return [operand, ...operands.toReversed()];
15
- }
16
- function getParsedElement(pattern, unicodeSets) {
17
- try {
18
- const ast = new RegExpParser().parsePattern(pattern, void 0, void 0, {
19
- unicode: false,
20
- unicodeSets
21
- });
22
- if (ast.alternatives.length !== 1) return;
23
- const alt = ast.alternatives[0];
24
- if (alt.elements.length !== 1) return;
25
- const element = alt.elements[0];
26
- if (element.type === "Assertion" || element.type === "Quantifier" || element.type === "CapturingGroup" || element.type === "Group" || element.type === "Backreference") return;
27
- return element;
28
- } catch {
29
- return;
30
- }
31
- }
32
- function getRawTextToNot(negatedNode) {
33
- if (negatedNode.type === "CharacterClass" || negatedNode.type === "ExpressionCharacterClass") return `${negatedNode.raw[0]}${negatedNode.raw.slice(2)}`;
34
- const escapeChar = negatedNode.raw[1]?.toLowerCase();
35
- if (!escapeChar) return negatedNode.raw;
36
- return `${negatedNode.raw[0]}${escapeChar}${negatedNode.raw.slice(2)}`;
37
- }
38
- function hasNegate(node) {
39
- return node.type === "CharacterClass" || node.type === "ExpressionCharacterClass" || node.type === "CharacterSet" && (node.kind !== "property" || !node.strings);
40
- }
41
- function isFixedPatternEquivalent(targetNode, fixedText, unicodeSets) {
42
- const flags = {
43
- unicode: false,
44
- unicodeSets
45
- };
46
- const originalUs = toUnicodeSet(targetNode, flags);
47
- const convertedElement = getParsedElement(fixedText, unicodeSets);
48
- if (!convertedElement) return false;
49
- const convertedUs = toUnicodeSet(convertedElement, flags);
50
- return originalUs.equals(convertedUs);
51
- }
52
- function isNegated(node) {
53
- return hasNegate(node) && node.negate;
54
- }
55
- var regexSetOperationOptimizations_default = ruleCreator.createRule(typescriptLanguage, {
56
- about: {
57
- description: "Reports set operations in regular expressions that can be simplified.",
58
- id: "regexSetOperationOptimizations",
59
- presets: ["logical", "logicalStrict"]
60
- },
61
- messages: {
62
- toIntersection: {
63
- primary: "This subtraction can be simplified to an intersection.",
64
- secondary: ["Subtracting a negated set is equivalent to intersecting with the positive set.", "This simplification allows for a more clear and readable regular expression."],
65
- suggestions: ["Convert the subtraction to an intersection."]
66
- },
67
- toNegationOfConjunction: {
68
- primary: "This character class can be simplified to a negated conjunction.",
69
- secondary: ["A union of negated sets is equivalent to the negation of their intersection.", "This simplification allows for a more clear and readable regular expression."],
70
- suggestions: ["Convert to a negated conjunction."]
71
- },
72
- toNegationOfDisjunction: {
73
- primary: "This {{ target }} can be simplified to a negated disjunction.",
74
- secondary: ["An intersection of negated sets is equivalent to the negation of their union.", "This simplification allows for a more clear and readable regular expression."],
75
- suggestions: ["Convert to a negated disjunction."]
76
- },
77
- toSubtraction: {
78
- primary: "This intersection can be simplified to a subtraction.",
79
- secondary: ["Intersecting with a negated set is equivalent to subtracting the positive set.", "This simplification allows for a more clear and readable regular expression."],
80
- suggestions: ["Convert the intersection to a subtraction."]
81
- }
82
- },
83
- setup(context) {
84
- return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
85
- const details = getRegExpLiteralDetails(node, { sourceFile });
86
- if (!details.flags.includes("v")) return;
87
- let regexpAst;
88
- try {
89
- regexpAst = new RegExpParser().parsePattern(details.pattern, void 0, void 0, {
90
- unicode: false,
91
- unicodeSets: true
92
- });
93
- } catch {
94
- return;
95
- }
96
- const nodeRange = getTSNodeRange(node, sourceFile);
97
- function reportWithFix(targetNode, messageId, fixedText, data) {
98
- if (!details.pattern) return false;
99
- if (!isFixedPatternEquivalent(targetNode, fixedText, true)) return false;
100
- const newPattern = details.pattern.slice(0, targetNode.start) + fixedText + details.pattern.slice(targetNode.end);
101
- context.report({
102
- data,
103
- fix: {
104
- range: nodeRange,
105
- text: `/${newPattern}/${details.flags}`
106
- },
107
- message: messageId,
108
- range: nodeRange
109
- });
110
- return true;
111
- }
112
- function toNegationOfDisjunction(classNode) {
113
- if (classNode.expression.type !== "ClassIntersection") return false;
114
- const operands = collectIntersectionOperands(classNode.expression);
115
- const negatedOperands = [];
116
- const others = [];
117
- for (const operand of operands) if (isNegated(operand)) negatedOperands.push(operand);
118
- else others.push(operand);
119
- if (negatedOperands.length < 2) return false;
120
- const fixedOperands = negatedOperands.map((negatedOperand) => getRawTextToNot(negatedOperand)).join("");
121
- if (negatedOperands.length === operands.length) return reportWithFix(classNode, "toNegationOfDisjunction", `[${classNode.negate ? "" : "^"}${fixedOperands}]`, { target: "character class" });
122
- const operandTextList = [`[^${fixedOperands}]`, ...others.map((operand) => operand.raw)];
123
- return reportWithFix(classNode, "toNegationOfDisjunction", `[${classNode.negate ? "^" : ""}${operandTextList.join("&&")}]`, { target: "expression" });
124
- }
125
- function toNegationOfConjunction(ccNode) {
126
- if (ccNode.elements.length <= 1) return false;
127
- const elements = ccNode.elements;
128
- const negatedElements = elements.filter(isNegated);
129
- if (negatedElements.length !== elements.length) return false;
130
- const fixedElements = negatedElements.map((negatedElement) => getRawTextToNot(negatedElement));
131
- return reportWithFix(ccNode, "toNegationOfConjunction", `[${ccNode.negate ? "" : "^"}${fixedElements.join("&&")}]`);
132
- }
133
- function toSubtraction(classNode) {
134
- const expression = classNode.expression;
135
- if (expression.type !== "ClassIntersection") return false;
136
- const operands = collectIntersectionOperands(expression);
137
- const negatedOperand = operands.find(isNegated);
138
- if (!negatedOperand) return false;
139
- const others = operands.filter((operand) => operand !== negatedOperand);
140
- let fixedLeftText = others.map((operand) => operand.raw).join("&&");
141
- if (others.length >= 2) fixedLeftText = `[${fixedLeftText}]`;
142
- const fixedRightText = getRawTextToNot(negatedOperand);
143
- return reportWithFix(classNode, "toSubtraction", `[${classNode.negate ? "^" : ""}${fixedLeftText}--${fixedRightText}]`);
144
- }
145
- function toIntersection(expression, expressionRight, eccNode) {
146
- if (expression.type !== "ClassSubtraction") return false;
147
- const { left, right } = expression;
148
- if (!isNegated(right)) return false;
149
- let fixedText = `${left.type === "ClassSubtraction" ? `[${left.raw}]` : left.raw}&&${getRawTextToNot(right)}`;
150
- if (expressionRight) fixedText = `[${fixedText}]`;
151
- const targetRaw = eccNode.raw;
152
- return reportWithFix(eccNode, "toIntersection", targetRaw.slice(0, expression.start - eccNode.start) + fixedText + targetRaw.slice(expression.end - eccNode.start));
153
- }
154
- function verifyExpressions(eccNode) {
155
- let operand = eccNode.expression;
156
- let right = null;
157
- while (operand.type === "ClassIntersection" || operand.type === "ClassSubtraction") {
158
- toIntersection(operand, right, eccNode);
159
- right = operand.right;
160
- operand = operand.left;
161
- }
162
- }
163
- visitRegExpAST(regexpAst, {
164
- onCharacterClassEnter(ccNode) {
165
- toNegationOfConjunction(ccNode);
166
- },
167
- onExpressionCharacterClassEnter(eccNode) {
168
- if (!toNegationOfDisjunction(eccNode) && !toSubtraction(eccNode)) verifyExpressions(eccNode);
169
- }
170
- });
171
- } } };
172
- }
173
- });
174
- //#endregion
175
- export { regexSetOperationOptimizations_default as default };
176
-
177
- //# sourceMappingURL=regexSetOperationOptimizations.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports standalone backslashes in regex patterns that look like incomplete escape sequences.";
3
- readonly id: "regexStandaloneBackslashes";
4
- readonly presets: readonly ["logical", "logicalStrict"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "standaloneBackslash", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexStandaloneBackslashes.d.ts.map
@@ -1,59 +0,0 @@
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/regexStandaloneBackslashes.ts
8
- const codepointBackslash = 92;
9
- var regexStandaloneBackslashes_default = ruleCreator.createRule(typescriptLanguage, {
10
- about: {
11
- description: "Reports standalone backslashes in regex patterns that look like incomplete escape sequences.",
12
- id: "regexStandaloneBackslashes",
13
- presets: ["logical", "logicalStrict"]
14
- },
15
- messages: { standaloneBackslash: {
16
- primary: "This standalone backslash (`\\`) looks like an incomplete escape sequence.",
17
- secondary: ["This backslash is interpreted as a literal `\\` character because the following character doesn't form a valid escape sequence.", "This commonly happens with incomplete control escapes like `\\c` or `\\c1`."],
18
- suggestions: ["Use a valid escape sequence or escape the backslash with `\\\\`."]
19
- } },
20
- setup(context) {
21
- function findStandaloneBackslashes(pattern, flags) {
22
- const results = [];
23
- const regexpAst = parseRegexpAst(pattern, flags);
24
- if (!regexpAst) return results;
25
- visitRegExpAST(regexpAst, { onCharacterEnter(charNode) {
26
- if (charNode.value === codepointBackslash && charNode.raw === "\\") results.push(charNode);
27
- } });
28
- return results;
29
- }
30
- function checkPattern(pattern, patternStart, flags) {
31
- const backslashes = findStandaloneBackslashes(pattern, flags);
32
- for (const backslash of backslashes) context.report({
33
- message: "standaloneBackslash",
34
- range: {
35
- begin: patternStart + backslash.start,
36
- end: patternStart + backslash.end
37
- }
38
- });
39
- }
40
- function checkRegexLiteral(node, services) {
41
- const details = getRegExpLiteralDetails(node, services);
42
- checkPattern(details.pattern, details.start, details.flags);
43
- }
44
- function checkRegExpConstructor(node, services) {
45
- const construction = getRegExpConstruction(node, services);
46
- if (!construction) return;
47
- checkPattern(construction.pattern.replace(/\\\\/g, "\\"), construction.start + 1, construction.flags);
48
- }
49
- return { visitors: {
50
- CallExpression: checkRegExpConstructor,
51
- NewExpression: checkRegExpConstructor,
52
- RegularExpressionLiteral: checkRegexLiteral
53
- } };
54
- }
55
- });
56
- //#endregion
57
- export { regexStandaloneBackslashes_default as default };
58
-
59
- //# sourceMappingURL=regexStandaloneBackslashes.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports quantifiers `{0,}` in regular expressions that should use `*` instead.";
3
- readonly id: "regexStarQuantifiers";
4
- readonly presets: readonly ["stylisticStrict"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "preferStar", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexStarQuantifiers.d.ts.map
@@ -1,68 +0,0 @@
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/regexStarQuantifiers.ts
8
- function getQuantifierOffsets(quantifier) {
9
- return [quantifier.element.end - quantifier.start, quantifier.greedy ? quantifier.end - quantifier.start : quantifier.end - quantifier.start - 1];
10
- }
11
- var regexStarQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
12
- about: {
13
- description: "Reports quantifiers `{0,}` in regular expressions that should use `*` instead.",
14
- id: "regexStarQuantifiers",
15
- presets: ["stylisticStrict"]
16
- },
17
- messages: { preferStar: {
18
- primary: "Prefer the more succinct '*' quantifier instead of '{{ quantifier }}'.",
19
- secondary: ["The `*` quantifier is a more concise way to express matching zero or more of the preceding element."],
20
- suggestions: ["Replace '{{ quantifier }}' with '*'."]
21
- } },
22
- setup(context) {
23
- function checkPattern(pattern, patternStart, flags, isStringPattern) {
24
- const regexpAst = parseRegexpAst(pattern, flags);
25
- if (!regexpAst) return;
26
- visitRegExpAST(regexpAst, { onQuantifierEnter(quantifier) {
27
- if (quantifier.min !== 0 || quantifier.max !== Infinity) return;
28
- const [startOffset, endOffset] = getQuantifierOffsets(quantifier);
29
- const quantifierText = quantifier.raw.slice(startOffset, endOffset);
30
- if (quantifierText === "*") return;
31
- const replacement = quantifier.greedy ? "*" : "*?";
32
- context.report({
33
- data: { quantifier: quantifierText },
34
- fix: {
35
- range: {
36
- begin: patternStart + quantifier.start + startOffset,
37
- end: patternStart + quantifier.start + (isStringPattern ? endOffset : quantifier.raw.length)
38
- },
39
- text: replacement
40
- },
41
- message: "preferStar",
42
- range: {
43
- begin: patternStart + quantifier.start + startOffset,
44
- end: patternStart + quantifier.start + endOffset
45
- }
46
- });
47
- } });
48
- }
49
- function checkRegexLiteral(node, services) {
50
- const details = getRegExpLiteralDetails(node, services);
51
- checkPattern(details.pattern, details.start, details.flags, false);
52
- }
53
- function checkRegExpConstructor(node, services) {
54
- const construction = getRegExpConstruction(node, services);
55
- if (!construction) return;
56
- checkPattern(construction.raw, construction.start + 1, construction.flags, true);
57
- }
58
- return { visitors: {
59
- CallExpression: checkRegExpConstructor,
60
- NewExpression: checkRegExpConstructor,
61
- RegularExpressionLiteral: checkRegexLiteral
62
- } };
63
- }
64
- });
65
- //#endregion
66
- export { regexStarQuantifiers_default as default };
67
-
68
- //# sourceMappingURL=regexStarQuantifiers.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports regular expressions with exponential or polynomial backtracking.";
3
- readonly id: "regexSuperLinearBacktracking";
4
- readonly presets: readonly ["logical", "logicalStrict"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "self" | "trade", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexSuperLinearBacktracking.d.ts.map
@@ -1,98 +0,0 @@
1
- import { ruleCreator } from "./ruleCreator.js";
2
- import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
3
- import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
4
- import { parseRegexpAstFull } from "./utils/parseRegexpAstFull.js";
5
- import { typescriptLanguage } from "@flint.fyi/typescript-language";
6
- import { analyse } from "scslre";
7
- //#region src/rules/regexSuperLinearBacktracking.ts
8
- function mentionQuantifier(quantifier) {
9
- return `'${quantifier.raw}'`;
10
- }
11
- var regexSuperLinearBacktracking_default = ruleCreator.createRule(typescriptLanguage, {
12
- about: {
13
- description: "Reports regular expressions with exponential or polynomial backtracking.",
14
- id: "regexSuperLinearBacktracking",
15
- presets: ["logical", "logicalStrict"]
16
- },
17
- messages: {
18
- self: {
19
- primary: "Quantifier {{ quant }} can reach itself via {{ parentQuant }}, causing {{ complexity }} backtracking.",
20
- secondary: ["This pattern can be exploited to cause denial of service (ReDoS) attacks.", "Using any string accepted by {{ attack }}, the regex can be forced to backtrack excessively."],
21
- suggestions: ["Make the inner quantifier possessive or use atomic groups.", "Rewrite the pattern to remove the self-referential quantifier."]
22
- },
23
- trade: {
24
- primary: "Quantifiers {{ startQuant }} and {{ endQuant }} can exchange characters, causing {{ complexity }} backtracking.",
25
- secondary: ["This pattern can be exploited to cause denial of service (ReDoS) attacks.", "Using any string accepted by {{ attack }}, the regex can be forced to backtrack excessively."],
26
- suggestions: ["Make one of the quantifiers possessive or use atomic groups.", "Rewrite the pattern to remove the ambiguity between quantifiers."]
27
- }
28
- },
29
- setup(context) {
30
- function analyseAndReport(parsed, patternStart, flags) {
31
- let result;
32
- try {
33
- result = analyse(parsed, { reportTypes: { Move: false } });
34
- } catch {
35
- return;
36
- }
37
- for (const report of result.reports) {
38
- const complexity = report.exponential ? "exponential" : "polynomial";
39
- const attack = `/${report.character.literal.source}+/${flags.includes("i") ? "i" : ""}`;
40
- if (report.type === "Self") {
41
- const quantStart = patternStart + report.quant.start;
42
- const quantEnd = patternStart + report.quant.end;
43
- context.report({
44
- data: {
45
- attack,
46
- complexity,
47
- parentQuant: mentionQuantifier(report.parentQuant),
48
- quant: mentionQuantifier(report.quant)
49
- },
50
- message: "self",
51
- range: {
52
- begin: quantStart,
53
- end: quantEnd
54
- }
55
- });
56
- } else if (report.type === "Trade") {
57
- const startQuantStart = patternStart + report.startQuant.start;
58
- const endQuantEnd = patternStart + report.endQuant.end;
59
- context.report({
60
- data: {
61
- attack,
62
- complexity,
63
- endQuant: mentionQuantifier(report.endQuant),
64
- startQuant: mentionQuantifier(report.startQuant)
65
- },
66
- message: "trade",
67
- range: {
68
- begin: startQuantStart,
69
- end: endQuantEnd
70
- }
71
- });
72
- }
73
- }
74
- }
75
- function checkRegexLiteral(node, services) {
76
- const details = getRegExpLiteralDetails(node, services);
77
- const parsed = parseRegexpAstFull(details.pattern, details.flags);
78
- if (!parsed) return;
79
- analyseAndReport(parsed, details.start, details.flags);
80
- }
81
- function checkRegExpConstructor(node, services) {
82
- const construction = getRegExpConstruction(node, services);
83
- if (!construction) return;
84
- const parsed = parseRegexpAstFull(construction.pattern, construction.flags);
85
- if (!parsed) return;
86
- analyseAndReport(parsed, construction.start + 1, construction.flags);
87
- }
88
- return { visitors: {
89
- CallExpression: checkRegExpConstructor,
90
- NewExpression: checkRegExpConstructor,
91
- RegularExpressionLiteral: checkRegexLiteral
92
- } };
93
- }
94
- });
95
- //#endregion
96
- export { regexSuperLinearBacktracking_default as default };
97
-
98
- //# sourceMappingURL=regexSuperLinearBacktracking.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports quantifiers that can cause quadratic regex matching time.";
3
- readonly id: "regexSuperLinearMoves";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "superLinear", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexSuperLinearMoves.d.ts.map