@flint.fyi/ts 0.21.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} +1 -1
  2. package/dist/index.mjs +22467 -0
  3. package/package.json +8 -7
  4. package/lib/index.d.ts +0 -2
  5. package/lib/index.js +0 -2
  6. package/lib/plugin.js +0 -619
  7. package/lib/rules/accessorPairGroups.d.ts +0 -9
  8. package/lib/rules/accessorPairGroups.js +0 -46
  9. package/lib/rules/accessorPairTypes.d.ts +0 -9
  10. package/lib/rules/accessorPairTypes.js +0 -70
  11. package/lib/rules/accessorThisRecursion.d.ts +0 -9
  12. package/lib/rules/accessorThisRecursion.js +0 -63
  13. package/lib/rules/anyArguments.d.ts +0 -9
  14. package/lib/rules/anyArguments.js +0 -232
  15. package/lib/rules/anyAssignments.d.ts +0 -9
  16. package/lib/rules/anyAssignments.js +0 -263
  17. package/lib/rules/anyCalls.d.ts +0 -9
  18. package/lib/rules/anyCalls.js +0 -66
  19. package/lib/rules/anyMemberAccess.d.ts +0 -9
  20. package/lib/rules/anyMemberAccess.js +0 -83
  21. package/lib/rules/anyReturns.d.ts +0 -9
  22. package/lib/rules/anyReturns.js +0 -100
  23. package/lib/rules/arguments.d.ts +0 -9
  24. package/lib/rules/arguments.js +0 -36
  25. package/lib/rules/arrayCallbackReturns.d.ts +0 -9
  26. package/lib/rules/arrayCallbackReturns.js +0 -71
  27. package/lib/rules/arrayConstructors.d.ts +0 -9
  28. package/lib/rules/arrayConstructors.js +0 -45
  29. package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
  30. package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
  31. package/lib/rules/arrayElementDeletions.d.ts +0 -9
  32. package/lib/rules/arrayElementDeletions.js +0 -41
  33. package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
  34. package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
  35. package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
  36. package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
  37. package/lib/rules/arrayFilteredFinds.d.ts +0 -9
  38. package/lib/rules/arrayFilteredFinds.js +0 -72
  39. package/lib/rules/arrayFinds.d.ts +0 -9
  40. package/lib/rules/arrayFinds.js +0 -39
  41. package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
  42. package/lib/rules/arrayFlatMapMethods.js +0 -45
  43. package/lib/rules/arrayFlatMethods.d.ts +0 -9
  44. package/lib/rules/arrayFlatMethods.js +0 -81
  45. package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
  46. package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
  47. package/lib/rules/arrayIncludes.d.ts +0 -9
  48. package/lib/rules/arrayIncludes.js +0 -51
  49. package/lib/rules/arrayIncludesMethods.d.ts +0 -9
  50. package/lib/rules/arrayIncludesMethods.js +0 -35
  51. package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
  52. package/lib/rules/arrayIndexOfMethods.js +0 -49
  53. package/lib/rules/arrayLoops.d.ts +0 -9
  54. package/lib/rules/arrayLoops.js +0 -34
  55. package/lib/rules/arrayMapIdentities.d.ts +0 -9
  56. package/lib/rules/arrayMapIdentities.js +0 -72
  57. package/lib/rules/arrayMutableReverses.d.ts +0 -9
  58. package/lib/rules/arrayMutableReverses.js +0 -37
  59. package/lib/rules/arrayMutableSorts.d.ts +0 -9
  60. package/lib/rules/arrayMutableSorts.js +0 -70
  61. package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
  62. package/lib/rules/arrayReduceTypeArguments.js +0 -62
  63. package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
  64. package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
  65. package/lib/rules/arraySomeMethods.d.ts +0 -9
  66. package/lib/rules/arraySomeMethods.js +0 -75
  67. package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
  68. package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
  69. package/lib/rules/arrayTypes.d.ts +0 -16
  70. package/lib/rules/arrayTypes.js +0 -109
  71. package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
  72. package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
  73. package/lib/rules/asConstAssertions.d.ts +0 -9
  74. package/lib/rules/asConstAssertions.js +0 -55
  75. package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
  76. package/lib/rules/assignmentOperatorShorthands.js +0 -45
  77. package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
  78. package/lib/rules/asyncFunctionAwaits.js +0 -53
  79. package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
  80. package/lib/rules/asyncPromiseExecutors.js +0 -39
  81. package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
  82. package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
  83. package/lib/rules/atAccesses.d.ts +0 -9
  84. package/lib/rules/atAccesses.js +0 -50
  85. package/lib/rules/builtinCoercions.d.ts +0 -9
  86. package/lib/rules/builtinCoercions.js +0 -115
  87. package/lib/rules/builtinConstructorNews.d.ts +0 -9
  88. package/lib/rules/builtinConstructorNews.js +0 -87
  89. package/lib/rules/caseDeclarations.d.ts +0 -9
  90. package/lib/rules/caseDeclarations.js +0 -38
  91. package/lib/rules/caseDuplicates.d.ts +0 -9
  92. package/lib/rules/caseDuplicates.js +0 -34
  93. package/lib/rules/caseFallthroughs.d.ts +0 -9
  94. package/lib/rules/caseFallthroughs.js +0 -74
  95. package/lib/rules/catchCallbackTypes.d.ts +0 -9
  96. package/lib/rules/catchCallbackTypes.js +0 -65
  97. package/lib/rules/caughtVariableNames.d.ts +0 -9
  98. package/lib/rules/caughtVariableNames.js +0 -38
  99. package/lib/rules/chainedAssignments.d.ts +0 -9
  100. package/lib/rules/chainedAssignments.js +0 -31
  101. package/lib/rules/charAtComparisons.d.ts +0 -9
  102. package/lib/rules/charAtComparisons.js +0 -53
  103. package/lib/rules/classAssignments.d.ts +0 -9
  104. package/lib/rules/classAssignments.js +0 -27
  105. package/lib/rules/classFieldDeclarations.d.ts +0 -9
  106. package/lib/rules/classFieldDeclarations.js +0 -38
  107. package/lib/rules/classLiteralProperties.d.ts +0 -9
  108. package/lib/rules/classLiteralProperties.js +0 -43
  109. package/lib/rules/classMemberDuplicates.d.ts +0 -9
  110. package/lib/rules/classMemberDuplicates.js +0 -69
  111. package/lib/rules/classMethodsThis.d.ts +0 -13
  112. package/lib/rules/classMethodsThis.js +0 -122
  113. package/lib/rules/combinedPushes.d.ts +0 -9
  114. package/lib/rules/combinedPushes.js +0 -54
  115. package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
  116. package/lib/rules/consecutiveNonNullAssertions.js +0 -37
  117. package/lib/rules/consoleCalls.d.ts +0 -8
  118. package/lib/rules/consoleCalls.js +0 -26
  119. package/lib/rules/constantAssignments.d.ts +0 -9
  120. package/lib/rules/constantAssignments.js +0 -39
  121. package/lib/rules/constructorGenericCalls.d.ts +0 -15
  122. package/lib/rules/constructorGenericCalls.js +0 -136
  123. package/lib/rules/constructorReturns.d.ts +0 -9
  124. package/lib/rules/constructorReturns.js +0 -39
  125. package/lib/rules/constructorSupers.d.ts +0 -9
  126. package/lib/rules/constructorSupers.js +0 -75
  127. package/lib/rules/dateConstructorClones.d.ts +0 -9
  128. package/lib/rules/dateConstructorClones.js +0 -35
  129. package/lib/rules/dateNowTimestamps.d.ts +0 -9
  130. package/lib/rules/dateNowTimestamps.js +0 -55
  131. package/lib/rules/debuggerStatements.d.ts +0 -9
  132. package/lib/rules/debuggerStatements.js +0 -31
  133. package/lib/rules/defaultCaseLast.d.ts +0 -9
  134. package/lib/rules/defaultCaseLast.js +0 -34
  135. package/lib/rules/defaultParameterLast.d.ts +0 -9
  136. package/lib/rules/defaultParameterLast.js +0 -40
  137. package/lib/rules/deprecated.d.ts +0 -9
  138. package/lib/rules/deprecated.js +0 -241
  139. package/lib/rules/destructuringConsistency.d.ts +0 -9
  140. package/lib/rules/destructuringConsistency.js +0 -104
  141. package/lib/rules/duplicateArguments.d.ts +0 -9
  142. package/lib/rules/duplicateArguments.js +0 -43
  143. package/lib/rules/dynamicDeletes.d.ts +0 -9
  144. package/lib/rules/dynamicDeletes.js +0 -35
  145. package/lib/rules/elseIfDuplicates.d.ts +0 -9
  146. package/lib/rules/elseIfDuplicates.js +0 -36
  147. package/lib/rules/elseReturns.d.ts +0 -9
  148. package/lib/rules/elseReturns.js +0 -65
  149. package/lib/rules/emptyBlocks.d.ts +0 -9
  150. package/lib/rules/emptyBlocks.js +0 -54
  151. package/lib/rules/emptyDestructures.d.ts +0 -9
  152. package/lib/rules/emptyDestructures.js +0 -32
  153. package/lib/rules/emptyEnums.d.ts +0 -9
  154. package/lib/rules/emptyEnums.js +0 -28
  155. package/lib/rules/emptyExports.d.ts +0 -9
  156. package/lib/rules/emptyExports.js +0 -58
  157. package/lib/rules/emptyFiles.d.ts +0 -9
  158. package/lib/rules/emptyFiles.js +0 -42
  159. package/lib/rules/emptyFunctions.d.ts +0 -9
  160. package/lib/rules/emptyFunctions.js +0 -59
  161. package/lib/rules/emptyModuleAttributes.d.ts +0 -9
  162. package/lib/rules/emptyModuleAttributes.js +0 -33
  163. package/lib/rules/emptyObjectTypes.d.ts +0 -9
  164. package/lib/rules/emptyObjectTypes.js +0 -45
  165. package/lib/rules/emptyStaticBlocks.d.ts +0 -9
  166. package/lib/rules/emptyStaticBlocks.js +0 -40
  167. package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
  168. package/lib/rules/emptyTypeParameterLists.js +0 -29
  169. package/lib/rules/enumInitializers.d.ts +0 -9
  170. package/lib/rules/enumInitializers.js +0 -52
  171. package/lib/rules/enumMemberLiterals.d.ts +0 -9
  172. package/lib/rules/enumMemberLiterals.js +0 -37
  173. package/lib/rules/enumValueConsistency.d.ts +0 -9
  174. package/lib/rules/enumValueConsistency.js +0 -54
  175. package/lib/rules/enumValueDuplicates.d.ts +0 -9
  176. package/lib/rules/enumValueDuplicates.js +0 -43
  177. package/lib/rules/equalityOperatorNegations.d.ts +0 -8
  178. package/lib/rules/equalityOperatorNegations.js +0 -58
  179. package/lib/rules/equalityOperators.d.ts +0 -9
  180. package/lib/rules/equalityOperators.js +0 -42
  181. package/lib/rules/errorMessages.d.ts +0 -9
  182. package/lib/rules/errorMessages.js +0 -54
  183. package/lib/rules/errorSubclassProperties.d.ts +0 -9
  184. package/lib/rules/errorSubclassProperties.js +0 -142
  185. package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
  186. package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
  187. package/lib/rules/escapeSequenceCasing.d.ts +0 -9
  188. package/lib/rules/escapeSequenceCasing.js +0 -73
  189. package/lib/rules/evals.d.ts +0 -9
  190. package/lib/rules/evals.js +0 -29
  191. package/lib/rules/evolvingVariableTypes.d.ts +0 -9
  192. package/lib/rules/evolvingVariableTypes.js +0 -31
  193. package/lib/rules/exceptionAssignments.d.ts +0 -9
  194. package/lib/rules/exceptionAssignments.js +0 -37
  195. package/lib/rules/explicitAnys.d.ts +0 -9
  196. package/lib/rules/explicitAnys.js +0 -53
  197. package/lib/rules/exponentiationOperators.d.ts +0 -9
  198. package/lib/rules/exponentiationOperators.js +0 -32
  199. package/lib/rules/exportFromImports.d.ts +0 -9
  200. package/lib/rules/exportFromImports.js +0 -117
  201. package/lib/rules/exportMutables.d.ts +0 -9
  202. package/lib/rules/exportMutables.js +0 -31
  203. package/lib/rules/exportUniqueNames.d.ts +0 -9
  204. package/lib/rules/exportUniqueNames.js +0 -63
  205. package/lib/rules/extraneousClasses.d.ts +0 -15
  206. package/lib/rules/extraneousClasses.js +0 -109
  207. package/lib/rules/fetchMethodBodies.d.ts +0 -9
  208. package/lib/rules/fetchMethodBodies.js +0 -70
  209. package/lib/rules/finallyStatementSafety.d.ts +0 -9
  210. package/lib/rules/finallyStatementSafety.js +0 -45
  211. package/lib/rules/forDirections.d.ts +0 -9
  212. package/lib/rules/forDirections.js +0 -73
  213. package/lib/rules/forInArrays.d.ts +0 -9
  214. package/lib/rules/forInArrays.js +0 -44
  215. package/lib/rules/forInGuards.d.ts +0 -8
  216. package/lib/rules/forInGuards.js +0 -42
  217. package/lib/rules/functionApplySpreads.d.ts +0 -9
  218. package/lib/rules/functionApplySpreads.js +0 -61
  219. package/lib/rules/functionAssignments.d.ts +0 -9
  220. package/lib/rules/functionAssignments.js +0 -27
  221. package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
  222. package/lib/rules/functionCurryingRedundancy.js +0 -51
  223. package/lib/rules/functionDeclarationStyles.d.ts +0 -15
  224. package/lib/rules/functionDeclarationStyles.js +0 -65
  225. package/lib/rules/functionNameMatches.d.ts +0 -9
  226. package/lib/rules/functionNameMatches.js +0 -72
  227. package/lib/rules/functionNewCalls.d.ts +0 -9
  228. package/lib/rules/functionNewCalls.js +0 -40
  229. package/lib/rules/generatorFunctionYields.d.ts +0 -9
  230. package/lib/rules/generatorFunctionYields.js +0 -48
  231. package/lib/rules/getterReturns.d.ts +0 -9
  232. package/lib/rules/getterReturns.js +0 -63
  233. package/lib/rules/globalAssignments.d.ts +0 -9
  234. package/lib/rules/globalAssignments.js +0 -45
  235. package/lib/rules/globalObjectCalls.d.ts +0 -9
  236. package/lib/rules/globalObjectCalls.js +0 -40
  237. package/lib/rules/globalThisAliases.d.ts +0 -9
  238. package/lib/rules/globalThisAliases.js +0 -45
  239. package/lib/rules/impliedEvals.d.ts +0 -9
  240. package/lib/rules/impliedEvals.js +0 -128
  241. package/lib/rules/importEmptyBlocks.d.ts +0 -9
  242. package/lib/rules/importEmptyBlocks.js +0 -51
  243. package/lib/rules/importTypeSideEffects.d.ts +0 -9
  244. package/lib/rules/importTypeSideEffects.js +0 -29
  245. package/lib/rules/indexedObjectTypes.d.ts +0 -15
  246. package/lib/rules/indexedObjectTypes.js +0 -81
  247. package/lib/rules/instanceOfArrays.d.ts +0 -9
  248. package/lib/rules/instanceOfArrays.js +0 -29
  249. package/lib/rules/irregularWhitespaces.d.ts +0 -15
  250. package/lib/rules/irregularWhitespaces.js +0 -95
  251. package/lib/rules/isNaNComparisons.d.ts +0 -9
  252. package/lib/rules/isNaNComparisons.js +0 -41
  253. package/lib/rules/literalConstructorWrappers.d.ts +0 -9
  254. package/lib/rules/literalConstructorWrappers.js +0 -62
  255. package/lib/rules/mathMethods.d.ts +0 -9
  256. package/lib/rules/mathMethods.js +0 -126
  257. package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
  258. package/lib/rules/meaninglessVoidOperators.js +0 -37
  259. package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
  260. package/lib/rules/misleadingVoidExpressions.js +0 -126
  261. package/lib/rules/moduleSpecifierLists.d.ts +0 -9
  262. package/lib/rules/moduleSpecifierLists.js +0 -90
  263. package/lib/rules/multilineAmbiguities.d.ts +0 -9
  264. package/lib/rules/multilineAmbiguities.js +0 -62
  265. package/lib/rules/namedDefaultExports.d.ts +0 -9
  266. package/lib/rules/namedDefaultExports.js +0 -58
  267. package/lib/rules/namespaceDeclarations.d.ts +0 -13
  268. package/lib/rules/namespaceDeclarations.js +0 -35
  269. package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
  270. package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
  271. package/lib/rules/namespaceKeywords.d.ts +0 -9
  272. package/lib/rules/namespaceKeywords.js +0 -38
  273. package/lib/rules/nativeObjectExtensions.d.ts +0 -9
  274. package/lib/rules/nativeObjectExtensions.js +0 -112
  275. package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
  276. package/lib/rules/negativeIndexLengthMethods.js +0 -178
  277. package/lib/rules/negativeZeroComparisons.d.ts +0 -9
  278. package/lib/rules/negativeZeroComparisons.js +0 -46
  279. package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
  280. package/lib/rules/nestedStandaloneIfs.js +0 -103
  281. package/lib/rules/newDefinitions.d.ts +0 -9
  282. package/lib/rules/newDefinitions.js +0 -82
  283. package/lib/rules/newExpressions.d.ts +0 -9
  284. package/lib/rules/newExpressions.js +0 -36
  285. package/lib/rules/newNativeNonConstructors.d.ts +0 -9
  286. package/lib/rules/newNativeNonConstructors.js +0 -37
  287. package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
  288. package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
  289. package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
  290. package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
  291. package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
  292. package/lib/rules/nonNullAssertionPlacement.js +0 -92
  293. package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
  294. package/lib/rules/nonNullableTypeAssertions.js +0 -76
  295. package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
  296. package/lib/rules/nonOctalDecimalEscapes.js +0 -46
  297. package/lib/rules/nullishCheckStyle.d.ts +0 -20
  298. package/lib/rules/nullishCheckStyle.js +0 -142
  299. package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
  300. package/lib/rules/nullishCoalescingOperators.js +0 -321
  301. package/lib/rules/numberMethodRanges.d.ts +0 -9
  302. package/lib/rules/numberMethodRanges.js +0 -72
  303. package/lib/rules/numberStaticMethods.d.ts +0 -9
  304. package/lib/rules/numberStaticMethods.js +0 -51
  305. package/lib/rules/numericErasingOperations.d.ts +0 -9
  306. package/lib/rules/numericErasingOperations.js +0 -44
  307. package/lib/rules/numericLiteralParsing.d.ts +0 -9
  308. package/lib/rules/numericLiteralParsing.js +0 -55
  309. package/lib/rules/numericPrecision.d.ts +0 -9
  310. package/lib/rules/numericPrecision.js +0 -100
  311. package/lib/rules/numericSeparatorGroups.d.ts +0 -9
  312. package/lib/rules/numericSeparatorGroups.js +0 -99
  313. package/lib/rules/objectAssignSpreads.d.ts +0 -9
  314. package/lib/rules/objectAssignSpreads.js +0 -51
  315. package/lib/rules/objectCalls.d.ts +0 -9
  316. package/lib/rules/objectCalls.js +0 -36
  317. package/lib/rules/objectEntriesMethods.d.ts +0 -9
  318. package/lib/rules/objectEntriesMethods.js +0 -80
  319. package/lib/rules/objectHasOwns.d.ts +0 -9
  320. package/lib/rules/objectHasOwns.js +0 -48
  321. package/lib/rules/objectKeyDuplicates.d.ts +0 -9
  322. package/lib/rules/objectKeyDuplicates.js +0 -61
  323. package/lib/rules/objectProto.d.ts +0 -9
  324. package/lib/rules/objectProto.js +0 -48
  325. package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
  326. package/lib/rules/objectPrototypeBuiltIns.js +0 -52
  327. package/lib/rules/objectShorthand.d.ts +0 -9
  328. package/lib/rules/objectShorthand.js +0 -82
  329. package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
  330. package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
  331. package/lib/rules/objectTypeDefinitions.d.ts +0 -9
  332. package/lib/rules/objectTypeDefinitions.js +0 -32
  333. package/lib/rules/octalEscapes.d.ts +0 -9
  334. package/lib/rules/octalEscapes.js +0 -56
  335. package/lib/rules/octalNumbers.d.ts +0 -9
  336. package/lib/rules/octalNumbers.js +0 -53
  337. package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
  338. package/lib/rules/operatorAssignmentShorthand.js +0 -75
  339. package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
  340. package/lib/rules/overloadSignaturesAdjacent.js +0 -138
  341. package/lib/rules/parameterReassignments.d.ts +0 -9
  342. package/lib/rules/parameterReassignments.js +0 -43
  343. package/lib/rules/parseIntRadixes.d.ts +0 -9
  344. package/lib/rules/parseIntRadixes.js +0 -57
  345. package/lib/rules/propertyAccessNotation.d.ts +0 -12
  346. package/lib/rules/propertyAccessNotation.js +0 -117
  347. package/lib/rules/recursionOnlyArguments.d.ts +0 -9
  348. package/lib/rules/recursionOnlyArguments.js +0 -62
  349. package/lib/rules/redundantTypeConstituents.d.ts +0 -9
  350. package/lib/rules/redundantTypeConstituents.js +0 -275
  351. package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
  352. package/lib/rules/regexAllGlobalFlags.js +0 -54
  353. package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
  354. package/lib/rules/regexAmbiguousInvalidity.js +0 -295
  355. package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
  356. package/lib/rules/regexCharacterClassRanges.js +0 -135
  357. package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
  358. package/lib/rules/regexCharacterClassSetOperations.js +0 -79
  359. package/lib/rules/regexCharacterClasses.d.ts +0 -9
  360. package/lib/rules/regexCharacterClasses.js +0 -232
  361. package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
  362. package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
  363. package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
  364. package/lib/rules/regexContradictoryAssertions.js +0 -208
  365. package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
  366. package/lib/rules/regexControlCharacterEscapes.js +0 -128
  367. package/lib/rules/regexControlCharacters.d.ts +0 -9
  368. package/lib/rules/regexControlCharacters.js +0 -93
  369. package/lib/rules/regexDigitMatchers.d.ts +0 -9
  370. package/lib/rules/regexDigitMatchers.js +0 -178
  371. package/lib/rules/regexDollarEscapes.d.ts +0 -9
  372. package/lib/rules/regexDollarEscapes.js +0 -89
  373. package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
  374. package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
  375. package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
  376. package/lib/rules/regexEmptyAlternatives.js +0 -138
  377. package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
  378. package/lib/rules/regexEmptyCapturingGroups.js +0 -65
  379. package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
  380. package/lib/rules/regexEmptyCharacterClasses.js +0 -66
  381. package/lib/rules/regexEmptyGroups.d.ts +0 -9
  382. package/lib/rules/regexEmptyGroups.js +0 -64
  383. package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
  384. package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
  385. package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
  386. package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
  387. package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
  388. package/lib/rules/regexEmptyStringLiterals.js +0 -64
  389. package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
  390. package/lib/rules/regexEscapeBackspaces.js +0 -67
  391. package/lib/rules/regexExecutors.d.ts +0 -9
  392. package/lib/rules/regexExecutors.js +0 -56
  393. package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
  394. package/lib/rules/regexGraphemeStringLiterals.js +0 -49
  395. package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
  396. package/lib/rules/regexHexadecimalEscapes.js +0 -69
  397. package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
  398. package/lib/rules/regexIgnoreCaseFlags.js +0 -143
  399. package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
  400. package/lib/rules/regexInvisibleCharacters.js +0 -88
  401. package/lib/rules/regexLetterCasing.d.ts +0 -9
  402. package/lib/rules/regexLetterCasing.js +0 -184
  403. package/lib/rules/regexLiterals.d.ts +0 -9
  404. package/lib/rules/regexLiterals.js +0 -87
  405. package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
  406. package/lib/rules/regexLookaroundAssertions.js +0 -161
  407. package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
  408. package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
  409. package/lib/rules/regexMatchNotation.d.ts +0 -9
  410. package/lib/rules/regexMatchNotation.js +0 -137
  411. package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
  412. package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
  413. package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
  414. package/lib/rules/regexMisleadingQuantifiers.js +0 -76
  415. package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
  416. package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
  417. package/lib/rules/regexNamedBackreferences.d.ts +0 -9
  418. package/lib/rules/regexNamedBackreferences.js +0 -46
  419. package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
  420. package/lib/rules/regexNamedCaptureGroups.js +0 -65
  421. package/lib/rules/regexNamedReplacements.d.ts +0 -9
  422. package/lib/rules/regexNamedReplacements.js +0 -91
  423. package/lib/rules/regexNonStandardFlags.d.ts +0 -9
  424. package/lib/rules/regexNonStandardFlags.js +0 -64
  425. package/lib/rules/regexObscureRanges.d.ts +0 -9
  426. package/lib/rules/regexObscureRanges.js +0 -91
  427. package/lib/rules/regexOctalEscapes.d.ts +0 -9
  428. package/lib/rules/regexOctalEscapes.js +0 -68
  429. package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
  430. package/lib/rules/regexPlusQuantifiers.js +0 -66
  431. package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
  432. package/lib/rules/regexPredefinedAssertions.js +0 -125
  433. package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
  434. package/lib/rules/regexQuestionQuantifiers.js +0 -102
  435. package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
  436. package/lib/rules/regexRepeatQuantifiers.js +0 -94
  437. package/lib/rules/regexResultArrayGroups.d.ts +0 -9
  438. package/lib/rules/regexResultArrayGroups.js +0 -185
  439. package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
  440. package/lib/rules/regexSetOperationOptimizations.js +0 -175
  441. package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
  442. package/lib/rules/regexStandaloneBackslashes.js +0 -57
  443. package/lib/rules/regexStarQuantifiers.d.ts +0 -9
  444. package/lib/rules/regexStarQuantifiers.js +0 -66
  445. package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
  446. package/lib/rules/regexSuperLinearBacktracking.js +0 -96
  447. package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
  448. package/lib/rules/regexSuperLinearMoves.js +0 -140
  449. package/lib/rules/regexTestMethods.d.ts +0 -9
  450. package/lib/rules/regexTestMethods.js +0 -81
  451. package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
  452. package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
  453. package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
  454. package/lib/rules/regexUnicodeEscapes.js +0 -95
  455. package/lib/rules/regexUnicodeFlag.d.ts +0 -8
  456. package/lib/rules/regexUnicodeFlag.js +0 -95
  457. package/lib/rules/regexUnicodeProperties.d.ts +0 -9
  458. package/lib/rules/regexUnicodeProperties.js +0 -131
  459. package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
  460. package/lib/rules/regexUnnecessaryAssertions.js +0 -221
  461. package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
  462. package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
  463. package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
  464. package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
  465. package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
  466. package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
  467. package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
  468. package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
  469. package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
  470. package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
  471. package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
  472. package/lib/rules/regexUnnecessaryEscapes.js +0 -134
  473. package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
  474. package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
  475. package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
  476. package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
  477. package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
  478. package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
  479. package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
  480. package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
  481. package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
  482. package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
  483. package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
  484. package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
  485. package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
  486. package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
  487. package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
  488. package/lib/rules/regexUnnecessarySetOperands.js +0 -134
  489. package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
  490. package/lib/rules/regexUnusedCapturingGroups.js +0 -67
  491. package/lib/rules/regexUnusedFlags.d.ts +0 -9
  492. package/lib/rules/regexUnusedFlags.js +0 -114
  493. package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
  494. package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
  495. package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
  496. package/lib/rules/regexUnusedQuantifiers.js +0 -61
  497. package/lib/rules/regexValidity.d.ts +0 -9
  498. package/lib/rules/regexValidity.js +0 -144
  499. package/lib/rules/regexWordMatchers.d.ts +0 -9
  500. package/lib/rules/regexWordMatchers.js +0 -144
  501. package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
  502. package/lib/rules/regexZeroQuantifiers.js +0 -58
  503. package/lib/rules/requireImports.d.ts +0 -9
  504. package/lib/rules/requireImports.js +0 -46
  505. package/lib/rules/responseJsonMethods.d.ts +0 -9
  506. package/lib/rules/responseJsonMethods.js +0 -49
  507. package/lib/rules/restrictedIdentifiers.d.ts +0 -12
  508. package/lib/rules/restrictedIdentifiers.js +0 -39
  509. package/lib/rules/restrictedImports.d.ts +0 -26
  510. package/lib/rules/restrictedImports.js +0 -164
  511. package/lib/rules/returnAssignments.d.ts +0 -9
  512. package/lib/rules/returnAssignments.js +0 -36
  513. package/lib/rules/returnThisTypes.d.ts +0 -9
  514. package/lib/rules/returnThisTypes.js +0 -92
  515. package/lib/rules/ruleCreator.d.ts +0 -2
  516. package/lib/rules/ruleCreator.js +0 -15
  517. package/lib/rules/selfAssignments.d.ts +0 -9
  518. package/lib/rules/selfAssignments.js +0 -27
  519. package/lib/rules/sequences.d.ts +0 -9
  520. package/lib/rules/sequences.js +0 -26
  521. package/lib/rules/setSizeLengthChecks.d.ts +0 -9
  522. package/lib/rules/setSizeLengthChecks.js +0 -46
  523. package/lib/rules/setterReturns.d.ts +0 -9
  524. package/lib/rules/setterReturns.js +0 -39
  525. package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
  526. package/lib/rules/shadowedRestrictedNames.js +0 -66
  527. package/lib/rules/singleVariableDeclarations.d.ts +0 -9
  528. package/lib/rules/singleVariableDeclarations.js +0 -34
  529. package/lib/rules/sizeComparisonOperators.d.ts +0 -15
  530. package/lib/rules/sizeComparisonOperators.js +0 -146
  531. package/lib/rules/sparseArrays.d.ts +0 -9
  532. package/lib/rules/sparseArrays.js +0 -41
  533. package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
  534. package/lib/rules/staticMemberOnlyClasses.js +0 -75
  535. package/lib/rules/stringCaseMismatches.d.ts +0 -9
  536. package/lib/rules/stringCaseMismatches.js +0 -53
  537. package/lib/rules/stringCodePoints.d.ts +0 -9
  538. package/lib/rules/stringCodePoints.js +0 -48
  539. package/lib/rules/stringSliceMethods.d.ts +0 -9
  540. package/lib/rules/stringSliceMethods.js +0 -45
  541. package/lib/rules/stringStartsEndsWith.d.ts +0 -9
  542. package/lib/rules/stringStartsEndsWith.js +0 -77
  543. package/lib/rules/structuredCloneMethods.d.ts +0 -9
  544. package/lib/rules/structuredCloneMethods.js +0 -37
  545. package/lib/rules/symbolDescriptions.d.ts +0 -9
  546. package/lib/rules/symbolDescriptions.js +0 -30
  547. package/lib/rules/thisAliases.d.ts +0 -9
  548. package/lib/rules/thisAliases.js +0 -42
  549. package/lib/rules/thisBeforeSuper.d.ts +0 -9
  550. package/lib/rules/thisBeforeSuper.js +0 -84
  551. package/lib/rules/throwErrors.d.ts +0 -9
  552. package/lib/rules/throwErrors.js +0 -59
  553. package/lib/rules/topLevelAwaits.d.ts +0 -9
  554. package/lib/rules/topLevelAwaits.js +0 -47
  555. package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
  556. package/lib/rules/tripleSlashReferenceValidity.js +0 -52
  557. package/lib/rules/tripleSlashReferences.d.ts +0 -9
  558. package/lib/rules/tripleSlashReferences.js +0 -32
  559. package/lib/rules/tsComments.d.ts +0 -21
  560. package/lib/rules/tsComments.js +0 -128
  561. package/lib/rules/tslintComments.d.ts +0 -9
  562. package/lib/rules/tslintComments.js +0 -34
  563. package/lib/rules/typeAssertionStyles.d.ts +0 -9
  564. package/lib/rules/typeAssertionStyles.js +0 -30
  565. package/lib/rules/typeImports.d.ts +0 -19
  566. package/lib/rules/typeImports.js +0 -281
  567. package/lib/rules/typeofComparisons.d.ts +0 -9
  568. package/lib/rules/typeofComparisons.js +0 -53
  569. package/lib/rules/unassignedVariables.d.ts +0 -9
  570. package/lib/rules/unassignedVariables.js +0 -32
  571. package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
  572. package/lib/rules/undefinedTypeofChecks.js +0 -39
  573. package/lib/rules/undefinedVariables.d.ts +0 -9
  574. package/lib/rules/undefinedVariables.js +0 -37
  575. package/lib/rules/unicodeBOMs.d.ts +0 -9
  576. package/lib/rules/unicodeBOMs.js +0 -37
  577. package/lib/rules/unnecessaryBinds.d.ts +0 -9
  578. package/lib/rules/unnecessaryBinds.js +0 -76
  579. package/lib/rules/unnecessaryBlocks.d.ts +0 -9
  580. package/lib/rules/unnecessaryBlocks.js +0 -58
  581. package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
  582. package/lib/rules/unnecessaryBooleanCasts.js +0 -56
  583. package/lib/rules/unnecessaryCatches.d.ts +0 -9
  584. package/lib/rules/unnecessaryCatches.js +0 -46
  585. package/lib/rules/unnecessaryComparisons.d.ts +0 -9
  586. package/lib/rules/unnecessaryComparisons.js +0 -291
  587. package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
  588. package/lib/rules/unnecessaryConcatenation.js +0 -26
  589. package/lib/rules/unnecessaryEscapes.d.ts +0 -9
  590. package/lib/rules/unnecessaryEscapes.js +0 -132
  591. package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
  592. package/lib/rules/unnecessaryMathClamps.js +0 -106
  593. package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
  594. package/lib/rules/unnecessaryNumericFractions.js +0 -48
  595. package/lib/rules/unnecessaryRenames.d.ts +0 -9
  596. package/lib/rules/unnecessaryRenames.js +0 -90
  597. package/lib/rules/unnecessaryTernaries.d.ts +0 -9
  598. package/lib/rules/unnecessaryTernaries.js +0 -86
  599. package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
  600. package/lib/rules/unnecessaryUseStricts.js +0 -38
  601. package/lib/rules/unsafeNegations.d.ts +0 -9
  602. package/lib/rules/unsafeNegations.js +0 -36
  603. package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
  604. package/lib/rules/utils/collectAccessorPairs.js +0 -27
  605. package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
  606. package/lib/rules/utils/countCommentsInRange.js +0 -10
  607. package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
  608. package/lib/rules/utils/discriminateAnyType.js +0 -36
  609. package/lib/rules/utils/equalityOperators.d.ts +0 -8
  610. package/lib/rules/utils/equalityOperators.js +0 -34
  611. package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
  612. package/lib/rules/utils/forEachReturnStatement.js +0 -27
  613. package/lib/rules/utils/formatReportedType.d.ts +0 -3
  614. package/lib/rules/utils/formatReportedType.js +0 -7
  615. package/lib/rules/utils/getConstrainedType.d.ts +0 -2
  616. package/lib/rules/utils/getConstrainedType.js +0 -7
  617. package/lib/rules/utils/getFunctionName.d.ts +0 -2
  618. package/lib/rules/utils/getFunctionName.js +0 -14
  619. package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
  620. package/lib/rules/utils/getRegExpConstruction.js +0 -25
  621. package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
  622. package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
  623. package/lib/rules/utils/getThisExpression.d.ts +0 -2
  624. package/lib/rules/utils/getThisExpression.js +0 -14
  625. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
  626. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
  627. package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
  628. package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
  629. package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
  630. package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
  631. package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
  632. package/lib/rules/utils/isErrorSubclass.js +0 -25
  633. package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
  634. package/lib/rules/utils/isInBooleanContext.js +0 -20
  635. package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
  636. package/lib/rules/utils/isTypeRecursive.js +0 -6
  637. package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
  638. package/lib/rules/utils/isUnsafeAssignment.js +0 -43
  639. package/lib/rules/utils/operators.d.ts +0 -4
  640. package/lib/rules/utils/operators.js +0 -33
  641. package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
  642. package/lib/rules/utils/parseRegexpAst.js +0 -15
  643. package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
  644. package/lib/rules/utils/parseRegexpAstFull.js +0 -16
  645. package/lib/rules/utils/skipParentheses.d.ts +0 -2
  646. package/lib/rules/utils/skipParentheses.js +0 -8
  647. package/lib/rules/variableDeletions.d.ts +0 -9
  648. package/lib/rules/variableDeletions.js +0 -33
  649. package/lib/rules/voidOperator.d.ts +0 -9
  650. package/lib/rules/voidOperator.js +0 -32
  651. package/lib/rules/withStatements.d.ts +0 -9
  652. package/lib/rules/withStatements.js +0 -28
  653. package/lib/rules/wrapperObjects.d.ts +0 -9
  654. package/lib/rules/wrapperObjects.js +0 -34
  655. package/lib/type-utils/getSpecifierNames.d.ts +0 -2
  656. package/lib/type-utils/getSpecifierNames.js +0 -7
  657. package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
  658. package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
  659. package/lib/type-utils/isFromFile.d.ts +0 -2
  660. package/lib/type-utils/isFromFile.js +0 -11
  661. package/lib/type-utils/isFromPackage.d.ts +0 -2
  662. package/lib/type-utils/isFromPackage.js +0 -13
  663. package/lib/type-utils/matchesSpecifier.d.ts +0 -3
  664. package/lib/type-utils/matchesSpecifier.js +0 -18
  665. package/lib/type-utils/schemas.d.ts +0 -14
  666. package/lib/type-utils/schemas.js +0 -23
@@ -1,121 +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/regexUnnecessaryReferentialBackreferences.ts
8
- function containsNode(ancestor, target) {
9
- if (ancestor === target) return true;
10
- switch (ancestor.type) {
11
- case "Alternative": return ancestor.elements.some((element) => containsNode(element, target));
12
- case "Assertion":
13
- if (ancestor.kind === "lookahead" || ancestor.kind === "lookbehind") return ancestor.alternatives.some((alternative) => containsNode(alternative, target));
14
- return false;
15
- case "CapturingGroup":
16
- case "Group":
17
- case "Pattern": return ancestor.alternatives.some((alternative) => containsNode(alternative, target));
18
- case "Quantifier": return containsNode(ancestor.element, target);
19
- default: return false;
20
- }
21
- }
22
- function getAncestors(node) {
23
- const ancestors = [];
24
- let current = node.parent;
25
- while (current) {
26
- ancestors.push(current);
27
- current = current.parent;
28
- }
29
- return ancestors;
30
- }
31
- function groupCanOnlyMatchEmpty(group) {
32
- return group.alternatives.every((alternative) => alternative.elements.every((element) => {
33
- if (element.type === "Quantifier" && element.min === 0) return true;
34
- if (element.type === "Group" || element.type === "CapturingGroup") return groupCanOnlyMatchEmpty(element);
35
- if (element.type === "Assertion") return true;
36
- return false;
37
- }));
38
- }
39
- function isBackreferenceAfterGroup(group, backreference) {
40
- const groupAncestors = getAncestors(group);
41
- const backrefAncestors = getAncestors(backreference);
42
- const commonAncestor = groupAncestors.find((ancestor) => backrefAncestors.includes(ancestor));
43
- if (commonAncestor?.type !== "Alternative") return false;
44
- return commonAncestor.elements.findIndex((element) => containsNode(element, group) || element === group) < commonAncestor.elements.findIndex((element) => containsNode(element, backreference) || element === backreference);
45
- }
46
- function isInsideLookahead(group) {
47
- for (const ancestor of getAncestors(group)) if (ancestor.type === "Assertion" && ancestor.kind === "lookahead") return true;
48
- return false;
49
- }
50
- function mayBeUndefinedAtBackref(group) {
51
- const groupAncestors = getAncestors(group);
52
- for (const ancestor of groupAncestors) {
53
- if (ancestor.type === "Quantifier" && ancestor.min === 0) return true;
54
- if (ancestor.type === "Alternative") {
55
- const parent = ancestor.parent;
56
- if (parent.type === "Group" || parent.type === "CapturingGroup" || parent.type === "Pattern") {
57
- if (parent.alternatives.filter((alternative) => containsNode(alternative, group)).length < parent.alternatives.length) return true;
58
- }
59
- }
60
- if (ancestor.type === "Quantifier" && ancestor.max > 1) {
61
- const quantifiedElement = ancestor.element;
62
- if (quantifiedElement.type === "Group" || quantifiedElement.type === "CapturingGroup") {
63
- if (quantifiedElement === group) continue;
64
- if (quantifiedElement.alternatives.filter((alternative) => containsNode(alternative, group)).length < quantifiedElement.alternatives.length) return true;
65
- }
66
- }
67
- }
68
- return false;
69
- }
70
- var regexUnnecessaryReferentialBackreferences_default = ruleCreator.createRule(typescriptLanguage, {
71
- about: {
72
- description: "Reports backreferences that may reference a capturing group that was not matched.",
73
- id: "regexUnnecessaryReferentialBackreferences",
74
- presets: ["logical"]
75
- },
76
- messages: { potentiallyUselessBackref: {
77
- primary: "Ensure capturing group is always matched before backreference `{{ raw }}`.",
78
- secondary: ["This backreference may always be empty because the referenced capturing group might not participate in the match.", "The group may be in an optional quantifier, inside an alternation where some branches don't include it, or reset in a loop."],
79
- suggestions: ["Make sure the capturing group is always matched before the backreference.", "Consider restructuring the regex to ensure the group participates in the match."]
80
- } },
81
- setup(context) {
82
- function checkPattern(pattern, patternStart, flags) {
83
- const regexpAst = parseRegexpAst(pattern, flags);
84
- if (!regexpAst) return;
85
- visitRegExpAST(regexpAst, { onBackreferenceEnter(backreference) {
86
- const { resolved } = backreference;
87
- const groups = Array.isArray(resolved) ? resolved : [resolved];
88
- for (const group of groups) {
89
- if (groupCanOnlyMatchEmpty(group) || isInsideLookahead(group) || !isBackreferenceAfterGroup(group, backreference)) continue;
90
- if (mayBeUndefinedAtBackref(group)) {
91
- context.report({
92
- data: { raw: backreference.raw },
93
- message: "potentiallyUselessBackref",
94
- range: {
95
- begin: patternStart + backreference.start,
96
- end: patternStart + backreference.end
97
- }
98
- });
99
- return;
100
- }
101
- }
102
- } });
103
- }
104
- function checkRegexLiteral(node, services) {
105
- const details = getRegExpLiteralDetails(node, services);
106
- checkPattern(details.pattern, details.start, details.flags);
107
- }
108
- function checkRegExpConstructor(node, services) {
109
- const construction = getRegExpConstruction(node, services);
110
- if (!construction) return;
111
- checkPattern(construction.raw, construction.start + 1, construction.flags);
112
- }
113
- return { visitors: {
114
- CallExpression: checkRegExpConstructor,
115
- NewExpression: checkRegExpConstructor,
116
- RegularExpressionLiteral: checkRegexLiteral
117
- } };
118
- }
119
- });
120
- //#endregion
121
- export { regexUnnecessaryReferentialBackreferences_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports unnecessary operands in regular expression character class set operations.";
3
- readonly id: "regexUnnecessarySetOperands";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "intersectionDisjoint" | "intersectionSubset" | "subtractionDisjoint" | "subtractionSubset", undefined>;
9
- export default _default;
@@ -1,134 +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
- import { RegExpParser, visitRegExpAST } from "@eslint-community/regexpp";
6
- import { toUnicodeSet } from "regexp-ast-analysis";
7
- //#region src/rules/regexUnnecessarySetOperands.ts
8
- var regexUnnecessarySetOperands_default = ruleCreator.createRule(typescriptLanguage, {
9
- about: {
10
- description: "Reports unnecessary operands in regular expression character class set operations.",
11
- id: "regexUnnecessarySetOperands",
12
- presets: ["logical"]
13
- },
14
- messages: {
15
- intersectionDisjoint: {
16
- primary: "This operation can be simplified: '{{ left }}' and '{{ right }}' are disjoint, so the result is always empty.",
17
- secondary: ["When two sets have no common elements, their intersection is empty.", "This likely indicates a mistake in the regular expression."],
18
- suggestions: ["Review the operands to ensure they share common elements.", "Remove the expression if the empty result is intentional."]
19
- },
20
- intersectionSubset: {
21
- primary: "This operation can be simplified: '{{ subset }}' is a subset of '{{ superset }}', so the superset operand is redundant.",
22
- secondary: ["When one operand is a subset of another in an intersection, the superset is redundant.", "The result is equivalent to just the subset operand."],
23
- suggestions: ["Remove the redundant superset operand."]
24
- },
25
- subtractionDisjoint: {
26
- primary: "This operation can be simplified: '{{ left }}' and '{{ right }}' are disjoint, so the subtraction has no effect.",
27
- secondary: ["Subtracting a set that shares no elements with the left operand does nothing.", "The right operand can be safely removed."],
28
- suggestions: ["Remove the unnecessary right operand.", "Review the operands to ensure the subtraction is meaningful."]
29
- },
30
- subtractionSubset: {
31
- primary: "This operation can be simplified: '{{ left }}' is a subset of '{{ right }}', so the result is always empty.",
32
- secondary: ["When you subtract a set that contains all elements of the left operand, the result is empty.", "This likely indicates a mistake in the regular expression."],
33
- suggestions: ["Review the operands to ensure this is intentional.", "Consider using a different pattern if the empty result is unintended."]
34
- }
35
- },
36
- setup(context) {
37
- const unicodeSetsFlags = {
38
- unicode: false,
39
- unicodeSets: true
40
- };
41
- function unwrapBrackets(raw) {
42
- if (raw.startsWith("[") && raw.endsWith("]")) return raw.slice(1, -1);
43
- return raw;
44
- }
45
- function report(node, patternStart, canFix, message, data, fixText) {
46
- const range = {
47
- begin: patternStart + node.start,
48
- end: patternStart + node.end
49
- };
50
- context.report({
51
- data,
52
- fix: canFix && fixText ? {
53
- range,
54
- text: fixText
55
- } : void 0,
56
- message,
57
- range
58
- });
59
- }
60
- function checkIntersection(node, patternStart, canFix) {
61
- const leftSet = toUnicodeSet(node.left, unicodeSetsFlags);
62
- const rightSet = toUnicodeSet(node.right, unicodeSetsFlags);
63
- if (leftSet.isDisjointWith(rightSet)) {
64
- report(node, patternStart, canFix, "intersectionDisjoint", {
65
- left: node.left.raw,
66
- right: node.right.raw
67
- }, "^^");
68
- return;
69
- }
70
- if (leftSet.isSubsetOf(rightSet)) {
71
- report(node, patternStart, canFix, "intersectionSubset", {
72
- subset: node.left.raw,
73
- superset: node.right.raw
74
- }, unwrapBrackets(node.left.raw));
75
- return;
76
- }
77
- if (rightSet.isSubsetOf(leftSet)) report(node, patternStart, canFix, "intersectionSubset", {
78
- subset: node.right.raw,
79
- superset: node.left.raw
80
- }, unwrapBrackets(node.right.raw));
81
- }
82
- function checkSubtraction(node, patternStart, canFix) {
83
- const leftSet = toUnicodeSet(node.left, unicodeSetsFlags);
84
- const rightSet = toUnicodeSet(node.right, unicodeSetsFlags);
85
- if (leftSet.isDisjointWith(rightSet)) {
86
- report(node, patternStart, canFix, "subtractionDisjoint", {
87
- left: node.left.raw,
88
- right: node.right.raw
89
- }, unwrapBrackets(node.left.raw));
90
- return;
91
- }
92
- if (leftSet.isSubsetOf(rightSet)) report(node, patternStart, canFix, "subtractionSubset", {
93
- left: node.left.raw,
94
- right: node.right.raw
95
- }, "^^");
96
- }
97
- function checkPattern(pattern, patternStart, canFix) {
98
- let regexpAst;
99
- try {
100
- regexpAst = new RegExpParser().parsePattern(pattern, void 0, void 0, {
101
- unicode: false,
102
- unicodeSets: true
103
- });
104
- } catch {
105
- return;
106
- }
107
- visitRegExpAST(regexpAst, {
108
- onClassIntersectionEnter(node) {
109
- checkIntersection(node, patternStart, canFix);
110
- },
111
- onClassSubtractionEnter(node) {
112
- checkSubtraction(node, patternStart, canFix);
113
- }
114
- });
115
- }
116
- function checkRegexLiteral(node, services) {
117
- const details = getRegExpLiteralDetails(node, services);
118
- if (!details.flags.includes("v")) return;
119
- checkPattern(details.pattern, details.start, true);
120
- }
121
- function checkRegExpConstructor(node, services) {
122
- const construction = getRegExpConstruction(node, services);
123
- if (!construction?.flags.includes("v")) return;
124
- checkPattern(construction.raw, construction.start + 1, false);
125
- }
126
- return { visitors: {
127
- CallExpression: checkRegExpConstructor,
128
- NewExpression: checkRegExpConstructor,
129
- RegularExpressionLiteral: checkRegexLiteral
130
- } };
131
- }
132
- });
133
- //#endregion
134
- export { regexUnnecessarySetOperands_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports capturing groups in regular expressions that are never referenced.";
3
- readonly id: "regexUnusedCapturingGroups";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unusedCapture", undefined>;
9
- export default _default;
@@ -1,67 +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 { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
6
- import { visitRegExpAST } from "@eslint-community/regexpp";
7
- //#region src/rules/regexUnusedCapturingGroups.ts
8
- function findUnusedCapturingGroups(pattern, flags) {
9
- const results = [];
10
- const ast = parseRegexpAst(pattern, flags);
11
- if (!ast) return results;
12
- visitRegExpAST(ast, { onCapturingGroupEnter(node) {
13
- if (!node.references.length) results.push(node);
14
- } });
15
- return results;
16
- }
17
- var regexUnusedCapturingGroups_default = ruleCreator.createRule(typescriptLanguage, {
18
- about: {
19
- description: "Reports capturing groups in regular expressions that are never referenced.",
20
- id: "regexUnusedCapturingGroups",
21
- presets: ["logical"]
22
- },
23
- messages: { unusedCapture: {
24
- primary: "Capturing group `{{ raw }}` is never referenced.",
25
- secondary: ["Capturing groups that are never backreferenced can be misleading by unintentionally indicating that the group should be captured.", "Non-capturing groups are generally preferred for clarity when the group does not need to be captured."],
26
- suggestions: ["Convert to a non-capturing group if the capture is not needed.", "Add a backreference if the capture is needed."]
27
- } },
28
- setup(context) {
29
- function checkPattern(pattern, flags, start) {
30
- const unusedGroups = findUnusedCapturingGroups(pattern, flags);
31
- for (const group of unusedGroups) {
32
- const range = {
33
- begin: start + 1 + group.start,
34
- end: start + 1 + group.end
35
- };
36
- const nonCapturing = `(?:${group.alternatives.map((alt) => alt.raw).join("|")})`;
37
- context.report({
38
- data: { raw: group.raw },
39
- message: "unusedCapture",
40
- range,
41
- suggestions: [{
42
- id: "useNonCapturing",
43
- range,
44
- text: nonCapturing
45
- }]
46
- });
47
- }
48
- }
49
- function checkRegexLiteral(node, services) {
50
- const details = getRegExpLiteralDetails(node, services);
51
- const range = getTSNodeRange(node, services.sourceFile);
52
- checkPattern(details.pattern, details.flags, range.begin);
53
- }
54
- function checkRegExpConstructor(node, services) {
55
- const construction = getRegExpConstruction(node, services);
56
- if (!construction) return;
57
- checkPattern(construction.raw, construction.flags, construction.start);
58
- }
59
- return { visitors: {
60
- CallExpression: checkRegExpConstructor,
61
- NewExpression: checkRegExpConstructor,
62
- RegularExpressionLiteral: checkRegexLiteral
63
- } };
64
- }
65
- });
66
- //#endregion
67
- export { regexUnusedCapturingGroups_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports regular expression flags that have no effect on the pattern.";
3
- readonly id: "regexUnusedFlags";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "unusedDotAll" | "unusedIgnoreCase" | "unusedMultiline", undefined>;
9
- export default _default;
@@ -1,114 +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 * as ts$1 from "typescript";
7
- import { visitRegExpAST } from "@eslint-community/regexpp";
8
- //#region src/rules/regexUnusedFlags.ts
9
- function analyzePattern(pattern) {
10
- const usage = {
11
- hasAnchor: false,
12
- hasDot: false,
13
- hasLetter: false
14
- };
15
- visitRegExpAST(pattern, {
16
- onAssertionEnter(node) {
17
- if (node.kind === "start" || node.kind === "end") usage.hasAnchor = true;
18
- },
19
- onCharacterClassRangeEnter(node) {
20
- if (rangeContainsLetter(node.min.value, node.max.value)) usage.hasLetter = true;
21
- },
22
- onCharacterEnter(node) {
23
- if (isAsciiLetter(node.value)) usage.hasLetter = true;
24
- },
25
- onCharacterSetEnter(node) {
26
- if (node.kind === "any") usage.hasDot = true;
27
- }
28
- });
29
- return usage;
30
- }
31
- function findUnusedFlags(pattern, flags) {
32
- const regexpAst = parseRegexpAst(pattern, flags);
33
- if (!regexpAst) return [];
34
- const usage = analyzePattern(regexpAst);
35
- const unusedFlags = [];
36
- if (flags.includes("i") && !usage.hasLetter) unusedFlags.push("i");
37
- if (flags.includes("m") && !usage.hasAnchor) unusedFlags.push("m");
38
- if (flags.includes("s") && !usage.hasDot) unusedFlags.push("s");
39
- return unusedFlags;
40
- }
41
- function isAsciiLetter(codePoint) {
42
- return codePoint >= 65 && codePoint <= 90 || codePoint >= 97 && codePoint <= 122;
43
- }
44
- function rangeContainsLetter(min, max) {
45
- return min <= 90 && max >= 65 || min <= 122 && max >= 97;
46
- }
47
- var regexUnusedFlags_default = ruleCreator.createRule(typescriptLanguage, {
48
- about: {
49
- description: "Reports regular expression flags that have no effect on the pattern.",
50
- id: "regexUnusedFlags",
51
- presets: ["logical"]
52
- },
53
- messages: {
54
- unusedDotAll: {
55
- primary: "The `s` flag has no effect because the pattern contains no dots.",
56
- secondary: ["The dotAll flag only affects the . metacharacter."],
57
- suggestions: ["Remove the 's' flag."]
58
- },
59
- unusedIgnoreCase: {
60
- primary: "The `i` flag has no effect because the pattern contains no letters.",
61
- secondary: ["The ignoreCase flag only affects matching of ASCII letters (A-Za-z)."],
62
- suggestions: ["Remove the 'i' flag."]
63
- },
64
- unusedMultiline: {
65
- primary: "The `m` flag has no effect because the pattern contains no line anchors.",
66
- secondary: ["The multiline flag only affects the ^ and $ anchors."],
67
- suggestions: ["Remove the 'm' flag."]
68
- }
69
- },
70
- setup(context) {
71
- function reportUnusedFlags(unusedFlags, flags, flagsStart) {
72
- for (const flag of unusedFlags) {
73
- const flagIndex = flags.indexOf(flag);
74
- const message = flag === "i" ? "unusedIgnoreCase" : flag === "m" ? "unusedMultiline" : "unusedDotAll";
75
- const range = {
76
- begin: flagsStart + flagIndex,
77
- end: flagsStart + flagIndex + 1
78
- };
79
- context.report({
80
- fix: {
81
- range,
82
- text: ""
83
- },
84
- message,
85
- range
86
- });
87
- }
88
- }
89
- function checkRegexLiteral(node, services) {
90
- const details = getRegExpLiteralDetails(node, services);
91
- const unusedFlags = findUnusedFlags(details.pattern, details.flags);
92
- if (!unusedFlags.length) return;
93
- const flagsStart = details.start + node.text.length - details.flags.length - 1;
94
- reportUnusedFlags(unusedFlags, details.flags, flagsStart);
95
- }
96
- function checkRegExpConstructor(node, services) {
97
- const construction = getRegExpConstruction(node, services);
98
- if (!construction || construction.args.length < 2) return;
99
- const unusedFlags = findUnusedFlags(construction.raw, construction.flags);
100
- if (!unusedFlags.length) return;
101
- const secondArgument = construction.args[1];
102
- if (secondArgument.kind !== ts$1.SyntaxKind.StringLiteral) return;
103
- const flagsStart = secondArgument.getStart(services.sourceFile) + 1;
104
- reportUnusedFlags(unusedFlags, construction.flags, flagsStart);
105
- }
106
- return { visitors: {
107
- CallExpression: checkRegExpConstructor,
108
- NewExpression: checkRegExpConstructor,
109
- RegularExpressionLiteral: checkRegexLiteral
110
- } };
111
- }
112
- });
113
- //#endregion
114
- export { regexUnusedFlags_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports lazy quantifiers that have no effect because the quantifier is constant.";
3
- readonly id: "regexUnusedLazyQuantifiers";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "uselessLazy", undefined>;
9
- export default _default;
@@ -1,61 +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/regexUnusedLazyQuantifiers.ts
8
- var regexUnusedLazyQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
9
- about: {
10
- description: "Reports lazy quantifiers that have no effect because the quantifier is constant.",
11
- id: "regexUnusedLazyQuantifiers",
12
- presets: ["logical"]
13
- },
14
- messages: { uselessLazy: {
15
- primary: "Lazy quantifier `{{ raw }}` has no effect because the quantifier matches exactly {{ count }} time(s).",
16
- secondary: ["When a quantifier has fixed bounds (min equals max), there is no choice in how many times to match, so lazy vs greedy is irrelevant."],
17
- suggestions: ["Remove the '?' to use the greedy form."]
18
- } },
19
- setup(context) {
20
- function checkPattern(pattern, patternStart, flags) {
21
- const regexpAst = parseRegexpAst(pattern, flags);
22
- if (!regexpAst) return;
23
- visitRegExpAST(regexpAst, { onQuantifierEnter(node) {
24
- if (!node.greedy && node.min === node.max) {
25
- const range = {
26
- begin: patternStart + node.start,
27
- end: patternStart + node.end
28
- };
29
- context.report({
30
- data: {
31
- count: node.min,
32
- raw: node.raw
33
- },
34
- fix: {
35
- range,
36
- text: node.raw.slice(0, -1)
37
- },
38
- message: "uselessLazy",
39
- range
40
- });
41
- }
42
- } });
43
- }
44
- function checkRegexLiteral(node, services) {
45
- const details = getRegExpLiteralDetails(node, services);
46
- checkPattern(details.pattern, details.start, details.flags);
47
- }
48
- function checkRegExpConstructor(node, services) {
49
- const construction = getRegExpConstruction(node, services);
50
- if (!construction) return;
51
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
52
- }
53
- return { visitors: {
54
- CallExpression: checkRegExpConstructor,
55
- NewExpression: checkRegExpConstructor,
56
- RegularExpressionLiteral: checkRegexLiteral
57
- } };
58
- }
59
- });
60
- //#endregion
61
- export { regexUnusedLazyQuantifiers_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports quantifiers that match exactly once, making them unnecessary.";
3
- readonly id: "regexUnusedQuantifiers";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "uselessQuantifier", undefined>;
9
- export default _default;
@@ -1,61 +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/regexUnusedQuantifiers.ts
8
- var regexUnusedQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
9
- about: {
10
- description: "Reports quantifiers that match exactly once, making them unnecessary.",
11
- id: "regexUnusedQuantifiers",
12
- presets: ["logical"]
13
- },
14
- messages: { uselessQuantifier: {
15
- primary: "Quantifier `{{ raw }}` is unnecessary because it matches exactly once.",
16
- secondary: ["A quantifier that matches exactly once can be removed without changing the pattern's behavior."],
17
- suggestions: ["Remove the quantifier if one match is all that is needed.", "Change the quantifier if multiple matches are intended."]
18
- } },
19
- setup(context) {
20
- function checkPattern(pattern, patternStart, flags) {
21
- const regexpAst = parseRegexpAst(pattern, flags);
22
- if (!regexpAst) return;
23
- visitRegExpAST(regexpAst, { onQuantifierEnter(node) {
24
- if (node.min === 1 && node.max === 1) {
25
- const quantifierStart = node.element.end;
26
- context.report({
27
- data: { raw: node.raw },
28
- fix: {
29
- range: {
30
- begin: patternStart + quantifierStart,
31
- end: patternStart + node.end
32
- },
33
- text: ""
34
- },
35
- message: "uselessQuantifier",
36
- range: {
37
- begin: patternStart + node.start,
38
- end: patternStart + node.end
39
- }
40
- });
41
- }
42
- } });
43
- }
44
- function checkRegexLiteral(node, services) {
45
- const details = getRegExpLiteralDetails(node, services);
46
- checkPattern(details.pattern, details.start, details.flags);
47
- }
48
- function checkRegExpConstructor(node, services) {
49
- const construction = getRegExpConstruction(node, services);
50
- if (!construction) return;
51
- checkPattern(construction.pattern, construction.start + 1, construction.flags);
52
- }
53
- return { visitors: {
54
- CallExpression: checkRegExpConstructor,
55
- NewExpression: checkRegExpConstructor,
56
- RegularExpressionLiteral: checkRegexLiteral
57
- } };
58
- }
59
- });
60
- //#endregion
61
- export { regexUnusedQuantifiers_default as default };
@@ -1,9 +0,0 @@
1
- declare const _default: import("@flint.fyi/core").Rule<{
2
- readonly description: "Reports invalid regular expressions.";
3
- readonly id: "regexValidity";
4
- readonly presets: readonly ["logical"];
5
- } & {
6
- readonly pluginId: string;
7
- readonly url: string;
8
- }, "conflictingFlags" | "duplicateFlag" | "invalidFlag" | "invalidPattern", undefined>;
9
- export default _default;