@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,198 +0,0 @@
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
- //#region src/rules/regexUnnecessaryNestedAssertions.ts
6
- const lookaheadOpeners = ["(?=", "(?!"];
7
- const lookbehindOpeners = ["(?<=", "(?<!"];
8
- const allLookaroundOpeners = [...lookaheadOpeners, ...lookbehindOpeners];
9
- function findCharacterClassEnd(pattern, startIndex) {
10
- let index = startIndex + 1;
11
- while (index < pattern.length) {
12
- if (pattern[index] === "\\") {
13
- index += 2;
14
- continue;
15
- }
16
- if (pattern[index] === "]") return index;
17
- index++;
18
- }
19
- return -1;
20
- }
21
- function findMatchingParen(pattern, startIndex) {
22
- let depth = 1;
23
- let index = startIndex;
24
- while (index < pattern.length && depth > 0) {
25
- if (pattern[index] === "\\") {
26
- index += 2;
27
- continue;
28
- }
29
- if (pattern[index] === "[") {
30
- const closeIndex = findCharacterClassEnd(pattern, index);
31
- if (closeIndex === -1) return -1;
32
- index = closeIndex + 1;
33
- continue;
34
- }
35
- if (pattern[index] === "(") depth++;
36
- else if (pattern[index] === ")") depth--;
37
- if (depth > 0) index++;
38
- }
39
- return depth === 0 ? index : -1;
40
- }
41
- function findTriviallyNestedAssertions(pattern, doubleEscaped) {
42
- const findings = [];
43
- const anchorPattern = doubleEscaped ? /^(?:\^|\$|\\\\b)$/i : /^(?:\^|\$|\\b)$/i;
44
- let index = 0;
45
- while (index < pattern.length) {
46
- if (pattern[index] === "[") {
47
- const closeIndex = findCharacterClassEnd(pattern, index);
48
- if (closeIndex === -1) break;
49
- index = closeIndex + 1;
50
- continue;
51
- }
52
- if (pattern[index] === "\\" || doubleEscaped && pattern.slice(index, index + 2) === "\\\\") {
53
- index += doubleEscaped && pattern.slice(index, index + 2) === "\\\\" ? 2 : 2;
54
- continue;
55
- }
56
- const opener = allLookaroundOpeners.find((lookaround) => pattern.slice(index, index + lookaround.length) === lookaround);
57
- if (!opener) {
58
- index++;
59
- continue;
60
- }
61
- const outerStart = index;
62
- const contentStart = index + opener.length;
63
- const closeIndex = findMatchingParen(pattern, contentStart);
64
- if (closeIndex === -1) {
65
- index++;
66
- continue;
67
- }
68
- const outerEnd = closeIndex + 1;
69
- if (hasQuantifierAfter(pattern, outerEnd)) {
70
- index++;
71
- continue;
72
- }
73
- const content = pattern.slice(contentStart, closeIndex);
74
- if (hasTopLevelAlternation(content, doubleEscaped)) {
75
- index++;
76
- continue;
77
- }
78
- if (anchorPattern.test(content)) {
79
- findings.push({
80
- end: outerEnd,
81
- innerRaw: content,
82
- outerRaw: pattern.slice(outerStart, outerEnd),
83
- start: outerStart
84
- });
85
- index = outerEnd;
86
- continue;
87
- }
88
- const innerOpener = allLookaroundOpeners.find((lookaround) => content.startsWith(lookaround));
89
- if (innerOpener) {
90
- if (lookaheadOpeners.includes(opener) === lookaheadOpeners.includes(innerOpener)) {
91
- const innerContentStart = innerOpener.length;
92
- const innerCloseIndex = findMatchingParen(content, innerContentStart);
93
- if (innerCloseIndex !== -1 && innerCloseIndex === content.length - 1 && !hasQuantifierAfter(content, innerCloseIndex + 1)) findings.push({
94
- end: outerEnd,
95
- innerRaw: content,
96
- outerRaw: pattern.slice(outerStart, outerEnd),
97
- start: outerStart
98
- });
99
- }
100
- }
101
- index = outerEnd;
102
- }
103
- return findings;
104
- }
105
- function hasQuantifierAfter(pattern, index) {
106
- const nextChar = pattern[index];
107
- return nextChar === "*" || nextChar === "+" || nextChar === "?" || nextChar === "{";
108
- }
109
- function hasTopLevelAlternation(content, doubleEscaped) {
110
- let depth = 0;
111
- let index = 0;
112
- while (index < content.length) {
113
- const char = content[index];
114
- if (char === "\\") {
115
- index += doubleEscaped && content[index + 1] === "\\" ? 3 : 2;
116
- continue;
117
- }
118
- if (char === "[") {
119
- const closeIndex = findCharacterClassEnd(content, index);
120
- if (closeIndex === -1) return false;
121
- index = closeIndex + 1;
122
- continue;
123
- }
124
- if (char === "(") depth++;
125
- else if (char === ")") depth--;
126
- else if (char === "|" && depth === 0) return true;
127
- index++;
128
- }
129
- return false;
130
- }
131
- var regexUnnecessaryNestedAssertions_default = ruleCreator.createRule(typescriptLanguage, {
132
- about: {
133
- description: "Reports trivially nested assertions in regular expressions that can be simplified.",
134
- id: "regexUnnecessaryNestedAssertions",
135
- presets: ["logical"]
136
- },
137
- messages: { unnecessaryNesting: {
138
- primary: "The lookaround '{{ outer }}' trivially wraps the assertion '{{ inner }}' and can be simplified.",
139
- secondary: ["Use the inner assertion directly instead of wrapping it in a lookaround."],
140
- suggestions: ["Replace the lookaround with the inner assertion."]
141
- } },
142
- setup(context) {
143
- function checkRegexLiteral(node, services) {
144
- const { pattern, start } = getRegExpLiteralDetails(node, services);
145
- const findings = findTriviallyNestedAssertions(pattern, false);
146
- for (const finding of findings) context.report({
147
- data: {
148
- inner: finding.innerRaw,
149
- outer: finding.outerRaw
150
- },
151
- fix: {
152
- range: {
153
- begin: start + finding.start,
154
- end: start + finding.end
155
- },
156
- text: finding.innerRaw
157
- },
158
- message: "unnecessaryNesting",
159
- range: {
160
- begin: start + finding.start,
161
- end: start + finding.end
162
- }
163
- });
164
- }
165
- function checkRegExpConstructor(node, services) {
166
- const construction = getRegExpConstruction(node, services);
167
- if (!construction) return;
168
- const findings = findTriviallyNestedAssertions(construction.pattern, true);
169
- for (const finding of findings) context.report({
170
- data: {
171
- inner: finding.innerRaw,
172
- outer: finding.outerRaw
173
- },
174
- fix: {
175
- range: {
176
- begin: construction.start + 1 + finding.start,
177
- end: construction.start + 1 + finding.end
178
- },
179
- text: finding.innerRaw
180
- },
181
- message: "unnecessaryNesting",
182
- range: {
183
- begin: construction.start + 1 + finding.start,
184
- end: construction.start + 1 + finding.end
185
- }
186
- });
187
- }
188
- return { visitors: {
189
- CallExpression: checkRegExpConstructor,
190
- NewExpression: checkRegExpConstructor,
191
- RegularExpressionLiteral: checkRegexLiteral
192
- } };
193
- }
194
- });
195
- //#endregion
196
- export { regexUnnecessaryNestedAssertions_default as default };
197
-
198
- //# sourceMappingURL=regexUnnecessaryNestedAssertions.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports trivially nested quantifiers in regular expressions that can be simplified.";
3
- readonly id: "regexUnnecessaryNestedQuantifiers";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unnecessaryNestedQuantifiers", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexUnnecessaryNestedQuantifiers.d.ts.map
@@ -1,93 +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/regexUnnecessaryNestedQuantifiers.ts
8
- function combineQuantifiers(inner, outer) {
9
- if (inner === "+" && outer === "+") return "+";
10
- if (inner === "+" && outer === "*") return "*";
11
- if (inner === "?" && outer === "+") return "*";
12
- if (inner === "?" && outer === "*") return "*";
13
- if (inner === "*" && outer === "+") return "*";
14
- if (inner === "*" && outer === "*") return "*";
15
- }
16
- function formatQuantifier(quantifier, greedy) {
17
- return greedy ? quantifier : `${quantifier}?`;
18
- }
19
- function getSimpleQuantifier(min, max) {
20
- if (min === 0 && max === 1) return "?";
21
- if (min === 0 && max === Infinity) return "*";
22
- if (min === 1 && max === Infinity) return "+";
23
- }
24
- var regexUnnecessaryNestedQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
25
- about: {
26
- description: "Reports trivially nested quantifiers in regular expressions that can be simplified.",
27
- id: "regexUnnecessaryNestedQuantifiers",
28
- presets: ["logical"]
29
- },
30
- messages: { unnecessaryNestedQuantifiers: {
31
- primary: "The nested quantifiers `{{ original }}` can be simplified to `{{ replacement }}`.",
32
- secondary: ["A quantifier wrapping a non-capturing group with a single quantified element can be simplified to a single quantifier."],
33
- suggestions: ["Replace with `{{ replacement }}`."]
34
- } },
35
- setup(context) {
36
- function checkPattern(pattern, patternStart, flags) {
37
- const regexpAst = parseRegexpAst(pattern, flags);
38
- if (!regexpAst) return;
39
- visitRegExpAST(regexpAst, { onQuantifierEnter(outerQuantifier) {
40
- const outerSimple = getSimpleQuantifier(outerQuantifier.min, outerQuantifier.max);
41
- if (!outerSimple) return;
42
- const group = outerQuantifier.element;
43
- if (group.type !== "Group" || group.alternatives.length !== 1) return;
44
- const alternative = group.alternatives[0];
45
- if (alternative.elements.length !== 1) return;
46
- const innerElement = alternative.elements[0];
47
- if (innerElement.type !== "Quantifier") return;
48
- const innerSimple = getSimpleQuantifier(innerElement.min, innerElement.max);
49
- if (!innerSimple || innerElement.greedy !== outerQuantifier.greedy) return;
50
- const combined = combineQuantifiers(innerSimple, outerSimple);
51
- if (!combined) return;
52
- const atom = innerElement.element;
53
- const replacement = `${pattern.slice(atom.start, atom.end)}${formatQuantifier(combined, outerQuantifier.greedy)}`;
54
- context.report({
55
- data: {
56
- original: outerQuantifier.raw,
57
- replacement
58
- },
59
- fix: {
60
- range: {
61
- begin: patternStart + outerQuantifier.start,
62
- end: patternStart + outerQuantifier.end
63
- },
64
- text: replacement
65
- },
66
- message: "unnecessaryNestedQuantifiers",
67
- range: {
68
- begin: patternStart + outerQuantifier.start,
69
- end: patternStart + outerQuantifier.end
70
- }
71
- });
72
- } });
73
- }
74
- function checkRegexLiteral(node, { sourceFile }) {
75
- const details = getRegExpLiteralDetails(node, { sourceFile });
76
- checkPattern(details.pattern, details.start, details.flags);
77
- }
78
- function checkRegExpConstructor(node, services) {
79
- const construction = getRegExpConstruction(node, services);
80
- if (!construction) return;
81
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
82
- }
83
- return { visitors: {
84
- CallExpression: checkRegExpConstructor,
85
- NewExpression: checkRegExpConstructor,
86
- RegularExpressionLiteral: checkRegexLiteral
87
- } };
88
- }
89
- });
90
- //#endregion
91
- export { regexUnnecessaryNestedQuantifiers_default as default };
92
-
93
- //# sourceMappingURL=regexUnnecessaryNestedQuantifiers.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports non-capturing groups that can be removed without changing the meaning of the regex.";
3
- readonly id: "regexUnnecessaryNonCapturingGroups";
4
- readonly presets: readonly ["stylistic"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unnecessaryGroup", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexUnnecessaryNonCapturingGroups.d.ts.map
@@ -1,104 +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/regexUnnecessaryNonCapturingGroups.ts
8
- function canUnwrap(group, pattern) {
9
- const alternative = group.alternatives[0];
10
- const groupContent = alternative.raw;
11
- if (!alternative.elements.length) return true;
12
- const parent = group.parent;
13
- let textBefore;
14
- let textAfter;
15
- if (parent.type === "Alternative") {
16
- textBefore = pattern.slice(parent.start, group.start);
17
- textAfter = pattern.slice(group.end, parent.end);
18
- } else {
19
- const alt = parent.parent;
20
- textBefore = pattern.slice(alt.start, group.start);
21
- textAfter = pattern.slice(group.end, alt.end);
22
- }
23
- return !mightCreateNewElement(textBefore, groupContent) && !mightCreateNewElement(groupContent, textAfter);
24
- }
25
- function isUnnecessaryGroup(group, pattern) {
26
- const firstAlternative = group.alternatives[0];
27
- if (group.alternatives.length === 1) {
28
- if (!firstAlternative.elements.length) return false;
29
- if (group.parent.type === "Quantifier") {
30
- if (firstAlternative.elements.length !== 1) return false;
31
- const singleElement = firstAlternative.elements[0];
32
- if (singleElement.type === "Quantifier" || singleElement.type === "Assertion") return false;
33
- return canUnwrap(group, pattern);
34
- }
35
- return canUnwrap(group, pattern);
36
- }
37
- if (group.parent.type === "Quantifier" || group.parent.elements.length !== 1) return false;
38
- return canUnwrap(group, pattern);
39
- }
40
- function mightCreateNewElement(before, after) {
41
- if (before.endsWith("\\c") && /^[a-z]/i.test(after)) return true;
42
- if (/(?:^|[^\\])(?:\\{2})*\\(?:x[\dA-Fa-f]?|u[\dA-Fa-f]{0,3})$/.test(before) && /^[\da-f]/i.test(after)) return true;
43
- if (/(?:^|[^\\])(?:\\{2})*\\u$/.test(before) && /^\{[\da-f]*(?:\}[\s\S]*)?$/i.test(after) || /(?:^|[^\\])(?:\\{2})*\\u\{[\da-f]*$/.test(before) && /^(?:[\da-f]+\}?|\})/i.test(after)) return true;
44
- if (/(?:^|[^\\])(?:\\{2})*\\0[0-7]?$/.test(before) && /^[0-7]/.test(after) || /(?:^|[^\\])(?:\\{2})*\\[1-7]$/.test(before) && /^[0-7]/.test(after)) return true;
45
- if (/(?:^|[^\\])(?:\\{2})*\\[1-9]\d*$/.test(before) && /^\d/.test(after) || /(?:^|[^\\])(?:\\{2})*\\k$/.test(before) && after.startsWith("<") || /(?:^|[^\\])(?:\\{2})*\\k<[^<>]*$/.test(before)) return true;
46
- if (/(?:^|[^\\])(?:\\{2})*\\p$/i.test(before) && /^\{[\w=]*(?:\}[\s\S]*)?$/.test(after) || /(?:^|[^\\])(?:\\{2})*\\p\{[\w=]*$/i.test(before) && /^[\w=]+(?:\}[\s\S]*)?$|^\}/.test(after)) return true;
47
- if (/(?:^|[^\\])(?:\\{2})*\{\d*$/.test(before) && /^[\d,}]/.test(after) || /(?:^|[^\\])(?:\\{2})*\{\d+,$/.test(before) && /^(?:\d+(?:\}|$)|\})/.test(after) || /(?:^|[^\\])(?:\\{2})*\{\d+,\d*$/.test(before) && after.startsWith("}")) return true;
48
- return false;
49
- }
50
- var regexUnnecessaryNonCapturingGroups_default = ruleCreator.createRule(typescriptLanguage, {
51
- about: {
52
- description: "Reports non-capturing groups that can be removed without changing the meaning of the regex.",
53
- id: "regexUnnecessaryNonCapturingGroups",
54
- presets: ["stylistic"]
55
- },
56
- messages: { unnecessaryGroup: {
57
- primary: "This non-capturing group can be removed without changing the regular expression's behavior.",
58
- secondary: ["Non-capturing groups are generally only necessary when changing search behavior based on the full group.", "This non-capturing group has no such logic, and so can be removed without changing the regex behavior."],
59
- suggestions: ["Remove the group delimiters to inline the group."]
60
- } },
61
- setup(context) {
62
- function checkPattern(pattern, patternStart, flags) {
63
- const regexpAst = parseRegexpAst(pattern, flags);
64
- if (!regexpAst) return;
65
- visitRegExpAST(regexpAst, { onGroupEnter(group) {
66
- if (isUnnecessaryGroup(group, pattern)) {
67
- const groupContent = group.raw.slice(3, -1);
68
- context.report({
69
- fix: {
70
- range: {
71
- begin: patternStart + group.start,
72
- end: patternStart + group.end
73
- },
74
- text: groupContent
75
- },
76
- message: "unnecessaryGroup",
77
- range: {
78
- begin: patternStart + group.start,
79
- end: patternStart + group.end
80
- }
81
- });
82
- }
83
- } });
84
- }
85
- function checkRegexLiteral(node, services) {
86
- const details = getRegExpLiteralDetails(node, services);
87
- checkPattern(details.pattern, details.start, details.flags);
88
- }
89
- function checkRegExpConstructor(node, services) {
90
- const construction = getRegExpConstruction(node, services);
91
- if (!construction) return;
92
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
93
- }
94
- return { visitors: {
95
- CallExpression: checkRegExpConstructor,
96
- NewExpression: checkRegExpConstructor,
97
- RegularExpressionLiteral: checkRegexLiteral
98
- } };
99
- }
100
- });
101
- //#endregion
102
- export { regexUnnecessaryNonCapturingGroups_default as default };
103
-
104
- //# sourceMappingURL=regexUnnecessaryNonCapturingGroups.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports numeric quantifiers like '{n,n}' that can be simplified to '{n}'.";
3
- readonly id: "regexUnnecessaryNumericQuantifiers";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unnecessaryNumericQuantifier", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexUnnecessaryNumericQuantifiers.d.ts.map
@@ -1,69 +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/regexUnnecessaryNumericQuantifiers.ts
8
- function getQuantifierSuffix(quantifier) {
9
- const startOffset = quantifier.element.end - quantifier.start;
10
- return quantifier.raw.slice(startOffset);
11
- }
12
- function isUnnecessaryNumericRangeQuantifier(quantifierSuffix) {
13
- const base = quantifierSuffix.endsWith("?") ? quantifierSuffix.slice(0, -1) : quantifierSuffix;
14
- return /^\{\d+,\d+\}$/.test(base);
15
- }
16
- var regexUnnecessaryNumericQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
17
- about: {
18
- description: "Reports numeric quantifiers like '{n,n}' that can be simplified to '{n}'.",
19
- id: "regexUnnecessaryNumericQuantifiers",
20
- presets: ["logical"]
21
- },
22
- messages: { unnecessaryNumericQuantifier: {
23
- primary: "This numeric quantifier `{{ raw }}` can be simplified to `{{ simplified }}`.",
24
- secondary: ["Numeric quantifiers with the same minimum and maximum can be written more concisely.", "Using the simpler form results in an easier-to-read regular expression."],
25
- suggestions: ["Replace `{{ raw }}` with `{{ simplified }}`."]
26
- } },
27
- setup(context) {
28
- function checkPattern(pattern, patternStart, flags) {
29
- const regexpAst = parseRegexpAst(pattern, flags);
30
- if (!regexpAst) return;
31
- visitRegExpAST(regexpAst, { onQuantifierEnter(quantifier) {
32
- if (quantifier.min !== quantifier.max) return;
33
- const quantifierSuffix = getQuantifierSuffix(quantifier);
34
- if (!isUnnecessaryNumericRangeQuantifier(quantifierSuffix)) return;
35
- const simplified = `{${quantifier.min}}${quantifier.greedy ? "" : "?"}`;
36
- const quantifierStart = patternStart + quantifier.element.end;
37
- context.report({
38
- data: {
39
- raw: quantifierSuffix,
40
- simplified
41
- },
42
- message: "unnecessaryNumericQuantifier",
43
- range: {
44
- begin: quantifierStart,
45
- end: patternStart + quantifier.end
46
- }
47
- });
48
- } });
49
- }
50
- function checkRegexLiteral(node, services) {
51
- const details = getRegExpLiteralDetails(node, services);
52
- checkPattern(details.pattern, details.start, details.flags);
53
- }
54
- function checkRegExpConstructor(node, services) {
55
- const construction = getRegExpConstruction(node, services);
56
- if (!construction) return;
57
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
58
- }
59
- return { visitors: {
60
- CallExpression: checkRegExpConstructor,
61
- NewExpression: checkRegExpConstructor,
62
- RegularExpressionLiteral: checkRegexLiteral
63
- } };
64
- }
65
- });
66
- //#endregion
67
- export { regexUnnecessaryNumericQuantifiers_default as default };
68
-
69
- //# sourceMappingURL=regexUnnecessaryNumericQuantifiers.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports assertions inside optional quantifiers that have no effect.";
3
- readonly id: "regexUnnecessaryOptionalAssertions";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unnecessaryOptionalAssertion", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexUnnecessaryOptionalAssertions.d.ts.map
@@ -1,137 +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/regexUnnecessaryOptionalAssertions.ts
8
- function canConsumeCharacters(element) {
9
- switch (element.type) {
10
- case "Assertion": return false;
11
- case "CapturingGroup":
12
- case "Group": return element.alternatives.some((alternative) => alternative.elements.some(canConsumeCharacters));
13
- case "Quantifier": return element.max !== 0 && canConsumeCharacters(element.element);
14
- default: return true;
15
- }
16
- }
17
- function getUnnecessaryAssertions(quantifierElement, assertions) {
18
- return assertions.filter((assertion) => isOptionalAssertion(quantifierElement, assertion));
19
- }
20
- function isOptionalAssertion(quantifierElement, assertion) {
21
- let current = assertion;
22
- while (current !== quantifierElement) {
23
- const parent = current.parent;
24
- if (!parent) return false;
25
- switch (parent.type) {
26
- case "Alternative":
27
- for (const sibling of parent.elements) {
28
- if (sibling === current) continue;
29
- if (canConsumeCharacters(sibling)) return false;
30
- }
31
- break;
32
- case "CapturingGroup":
33
- case "Group":
34
- if (parent !== quantifierElement) {
35
- const containingAlternative = parent.alternatives.find((alternative) => alternative === current || alternative.elements.some(function containsNode(element) {
36
- if (element === current) return true;
37
- if (element.type === "Group" || element.type === "CapturingGroup") return element.alternatives.some((a) => a.elements.some(containsNode));
38
- if (element.type === "Quantifier") return containsNode(element.element);
39
- return false;
40
- }));
41
- if (containingAlternative) {
42
- for (const element of containingAlternative.elements) if (element !== current && canConsumeCharacters(element)) return false;
43
- }
44
- }
45
- break;
46
- case "Quantifier":
47
- if (parent !== quantifierElement && parent.max > 1 && canConsumeCharacters(parent.element)) return false;
48
- break;
49
- }
50
- current = parent;
51
- }
52
- return true;
53
- }
54
- var regexUnnecessaryOptionalAssertions_default = ruleCreator.createRule(typescriptLanguage, {
55
- about: {
56
- description: "Reports assertions inside optional quantifiers that have no effect.",
57
- id: "regexUnnecessaryOptionalAssertions",
58
- presets: ["logical"]
59
- },
60
- messages: { unnecessaryOptionalAssertion: {
61
- primary: "The assertion `{{ raw }}` inside optional quantifier `{{ quantifier }}` is unnecessary.",
62
- secondary: ["This assertion is inside a quantifier with minimum 0, and all paths to the assertion consume no characters.", "The regex engine can skip the entire quantified element, making this assertion useless."],
63
- suggestions: ["Add character-consuming elements in the same path as the assertion.", "Remove the assertion if it's not needed."]
64
- } },
65
- setup(context) {
66
- function checkPattern(pattern, patternStart, flags) {
67
- const regexpAst = parseRegexpAst(pattern, flags);
68
- if (!regexpAst) return;
69
- const zeroMinQuantifierStack = [];
70
- const collectedAssertions = [];
71
- visitRegExpAST(regexpAst, {
72
- onAssertionEnter(assertion) {
73
- if (zeroMinQuantifierStack.length) collectedAssertions.push(assertion);
74
- },
75
- onQuantifierEnter(quantifier) {
76
- if (quantifier.min === 0) zeroMinQuantifierStack.push(quantifier);
77
- },
78
- onQuantifierLeave(quantifier) {
79
- if (quantifier.min === 0) {
80
- if (zeroMinQuantifierStack.pop() === quantifier && collectedAssertions.length) {
81
- const assertionsInThisQuantifier = collectedAssertions.filter((assertion) => isDescendantOf(assertion, quantifier));
82
- const unnecessary = getUnnecessaryAssertions(quantifier.element, assertionsInThisQuantifier);
83
- for (const assertion of unnecessary) context.report({
84
- data: {
85
- quantifier: quantifier.raw,
86
- raw: assertion.raw
87
- },
88
- fix: {
89
- range: {
90
- begin: patternStart + assertion.start,
91
- end: patternStart + assertion.end
92
- },
93
- text: ""
94
- },
95
- message: "unnecessaryOptionalAssertion",
96
- range: {
97
- begin: patternStart + assertion.start,
98
- end: patternStart + assertion.end
99
- }
100
- });
101
- for (const assertion of assertionsInThisQuantifier) {
102
- const index = collectedAssertions.indexOf(assertion);
103
- if (index !== -1) collectedAssertions.splice(index, 1);
104
- }
105
- }
106
- }
107
- }
108
- });
109
- }
110
- function isDescendantOf(node, ancestor) {
111
- let current = node;
112
- while (current) {
113
- if (current === ancestor) return true;
114
- current = current.parent;
115
- }
116
- return false;
117
- }
118
- function checkRegexLiteral(node, services) {
119
- const details = getRegExpLiteralDetails(node, services);
120
- checkPattern(details.pattern, details.start, details.flags);
121
- }
122
- function checkRegExpConstructor(node, services) {
123
- const construction = getRegExpConstruction(node, services);
124
- if (!construction) return;
125
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
126
- }
127
- return { visitors: {
128
- CallExpression: checkRegExpConstructor,
129
- NewExpression: checkRegExpConstructor,
130
- RegularExpressionLiteral: checkRegexLiteral
131
- } };
132
- }
133
- });
134
- //#endregion
135
- export { regexUnnecessaryOptionalAssertions_default as default };
136
-
137
- //# sourceMappingURL=regexUnnecessaryOptionalAssertions.js.map
@@ -1,10 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports backreferences that may reference a capturing group that was not matched.";
3
- readonly id: "regexUnnecessaryReferentialBackreferences";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "potentiallyUselessBackref", undefined>;
9
- export default _default;
10
- //# sourceMappingURL=regexUnnecessaryReferentialBackreferences.d.ts.map