@flint.fyi/ts 0.14.6 → 0.18.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 (930) hide show
  1. package/lib/index.d.ts +2 -7
  2. package/lib/index.js +2 -7
  3. package/lib/plugin.d.ts +2160 -204
  4. package/lib/plugin.js +610 -107
  5. package/lib/rules/accessorPairGroups.d.ts +10 -0
  6. package/lib/rules/accessorPairGroups.js +48 -0
  7. package/lib/rules/accessorPairTypes.d.ts +10 -0
  8. package/lib/rules/accessorPairTypes.js +72 -0
  9. package/lib/rules/accessorThisRecursion.d.ts +10 -0
  10. package/lib/rules/accessorThisRecursion.js +65 -0
  11. package/lib/rules/anyArguments.d.ts +10 -0
  12. package/lib/rules/anyArguments.js +234 -0
  13. package/lib/rules/anyAssignments.d.ts +10 -0
  14. package/lib/rules/anyAssignments.js +266 -0
  15. package/lib/rules/anyCalls.d.ts +10 -0
  16. package/lib/rules/anyCalls.js +68 -0
  17. package/lib/rules/anyMemberAccess.d.ts +10 -0
  18. package/lib/rules/anyMemberAccess.js +85 -0
  19. package/lib/rules/anyReturns.d.ts +6 -2
  20. package/lib/rules/anyReturns.js +98 -183
  21. package/lib/rules/arguments.d.ts +10 -0
  22. package/lib/rules/arguments.js +38 -0
  23. package/lib/rules/arrayCallbackReturns.d.ts +10 -0
  24. package/lib/rules/arrayCallbackReturns.js +73 -0
  25. package/lib/rules/arrayConstructors.d.ts +10 -0
  26. package/lib/rules/arrayConstructors.js +47 -0
  27. package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +10 -0
  28. package/lib/rules/arrayDeleteUnnecessaryCounts.js +54 -0
  29. package/lib/rules/arrayElementDeletions.d.ts +10 -0
  30. package/lib/rules/arrayElementDeletions.js +43 -0
  31. package/lib/rules/arrayEmptyCallbackSlots.d.ts +10 -0
  32. package/lib/rules/arrayEmptyCallbackSlots.js +45 -0
  33. package/lib/rules/arrayExistenceChecksConsistency.d.ts +10 -0
  34. package/lib/rules/arrayExistenceChecksConsistency.js +86 -0
  35. package/lib/rules/arrayFilteredFinds.d.ts +10 -0
  36. package/lib/rules/arrayFilteredFinds.js +80 -0
  37. package/lib/rules/arrayFinds.d.ts +10 -0
  38. package/lib/rules/arrayFinds.js +41 -0
  39. package/lib/rules/arrayFlatMapMethods.d.ts +10 -0
  40. package/lib/rules/arrayFlatMapMethods.js +47 -0
  41. package/lib/rules/arrayFlatMethods.d.ts +10 -0
  42. package/lib/rules/arrayFlatMethods.js +83 -0
  43. package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +10 -0
  44. package/lib/rules/arrayFlatUnnecessaryDepths.js +33 -0
  45. package/lib/rules/arrayIncludes.d.ts +10 -0
  46. package/lib/rules/arrayIncludes.js +59 -0
  47. package/lib/rules/arrayIncludesMethods.d.ts +10 -0
  48. package/lib/rules/arrayIncludesMethods.js +37 -0
  49. package/lib/rules/arrayIndexOfMethods.d.ts +10 -0
  50. package/lib/rules/arrayIndexOfMethods.js +51 -0
  51. package/lib/rules/arrayLoops.d.ts +10 -0
  52. package/lib/rules/arrayLoops.js +36 -0
  53. package/lib/rules/arrayMapIdentities.d.ts +10 -0
  54. package/lib/rules/arrayMapIdentities.js +74 -0
  55. package/lib/rules/arrayMutableReverses.d.ts +10 -0
  56. package/lib/rules/arrayMutableReverses.js +39 -0
  57. package/lib/rules/arrayMutableSorts.d.ts +10 -0
  58. package/lib/rules/arrayMutableSorts.js +72 -0
  59. package/lib/rules/arrayReduceTypeArguments.d.ts +10 -0
  60. package/lib/rules/arrayReduceTypeArguments.js +64 -0
  61. package/lib/rules/arraySliceUnnecessaryEnd.d.ts +10 -0
  62. package/lib/rules/arraySliceUnnecessaryEnd.js +51 -0
  63. package/lib/rules/arraySomeMethods.d.ts +10 -0
  64. package/lib/rules/arraySomeMethods.js +77 -0
  65. package/lib/rules/arrayTernarySpreadingConsistency.d.ts +10 -0
  66. package/lib/rules/arrayTernarySpreadingConsistency.js +74 -0
  67. package/lib/rules/arrayTypes.d.ts +17 -0
  68. package/lib/rules/arrayTypes.js +111 -0
  69. package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +10 -0
  70. package/lib/rules/arrayUnnecessaryLengthChecks.js +97 -0
  71. package/lib/rules/asConstAssertions.d.ts +10 -0
  72. package/lib/rules/asConstAssertions.js +57 -0
  73. package/lib/rules/assignmentOperatorShorthands.d.ts +10 -0
  74. package/lib/rules/assignmentOperatorShorthands.js +47 -0
  75. package/lib/rules/asyncPromiseExecutors.d.ts +6 -2
  76. package/lib/rules/asyncPromiseExecutors.js +40 -50
  77. package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +10 -0
  78. package/lib/rules/asyncUnnecessaryPromiseWrappers.js +52 -0
  79. package/lib/rules/atAccesses.d.ts +10 -0
  80. package/lib/rules/atAccesses.js +52 -0
  81. package/lib/rules/builtinCoercions.d.ts +10 -0
  82. package/lib/rules/builtinCoercions.js +117 -0
  83. package/lib/rules/builtinConstructorNews.d.ts +10 -0
  84. package/lib/rules/builtinConstructorNews.js +89 -0
  85. package/lib/rules/caseDeclarations.d.ts +6 -2
  86. package/lib/rules/caseDeclarations.js +38 -51
  87. package/lib/rules/caseDuplicates.d.ts +6 -2
  88. package/lib/rules/caseDuplicates.js +35 -48
  89. package/lib/rules/caseFallthroughs.d.ts +10 -0
  90. package/lib/rules/caseFallthroughs.js +76 -0
  91. package/lib/rules/catchCallbackTypes.d.ts +10 -0
  92. package/lib/rules/catchCallbackTypes.js +67 -0
  93. package/lib/rules/caughtVariableNames.d.ts +10 -0
  94. package/lib/rules/caughtVariableNames.js +40 -0
  95. package/lib/rules/chainedAssignments.d.ts +6 -2
  96. package/lib/rules/chainedAssignments.js +31 -47
  97. package/lib/rules/charAtComparisons.d.ts +10 -0
  98. package/lib/rules/charAtComparisons.js +58 -0
  99. package/lib/rules/classAssignments.d.ts +6 -2
  100. package/lib/rules/classAssignments.js +31 -41
  101. package/lib/rules/classFieldDeclarations.d.ts +10 -0
  102. package/lib/rules/classFieldDeclarations.js +40 -0
  103. package/lib/rules/classLiteralProperties.d.ts +10 -0
  104. package/lib/rules/classLiteralProperties.js +45 -0
  105. package/lib/rules/classMemberDuplicates.d.ts +10 -0
  106. package/lib/rules/classMemberDuplicates.js +71 -0
  107. package/lib/rules/classMethodsThis.d.ts +14 -0
  108. package/lib/rules/classMethodsThis.js +124 -0
  109. package/lib/rules/combinedPushes.d.ts +10 -0
  110. package/lib/rules/combinedPushes.js +56 -0
  111. package/lib/rules/consecutiveNonNullAssertions.d.ts +6 -2
  112. package/lib/rules/consecutiveNonNullAssertions.js +38 -41
  113. package/lib/rules/consoleCalls.d.ts +9 -0
  114. package/lib/rules/consoleCalls.js +28 -0
  115. package/lib/rules/constantAssignments.d.ts +6 -2
  116. package/lib/rules/constantAssignments.js +43 -60
  117. package/lib/rules/constructorGenericCalls.d.ts +16 -0
  118. package/lib/rules/constructorGenericCalls.js +138 -0
  119. package/lib/rules/constructorReturns.d.ts +6 -2
  120. package/lib/rules/constructorReturns.js +39 -50
  121. package/lib/rules/constructorSupers.d.ts +10 -0
  122. package/lib/rules/constructorSupers.js +77 -0
  123. package/lib/rules/dateConstructorClones.d.ts +10 -0
  124. package/lib/rules/dateConstructorClones.js +37 -0
  125. package/lib/rules/dateNowTimestamps.d.ts +10 -0
  126. package/lib/rules/dateNowTimestamps.js +57 -0
  127. package/lib/rules/debuggerStatements.d.ts +6 -2
  128. package/lib/rules/debuggerStatements.js +32 -42
  129. package/lib/rules/defaultCaseLast.d.ts +6 -2
  130. package/lib/rules/defaultCaseLast.js +35 -42
  131. package/lib/rules/defaultParameterLast.d.ts +10 -0
  132. package/lib/rules/defaultParameterLast.js +42 -0
  133. package/lib/rules/deprecated.d.ts +10 -0
  134. package/lib/rules/deprecated.js +243 -0
  135. package/lib/rules/destructuringConsistency.d.ts +10 -0
  136. package/lib/rules/destructuringConsistency.js +112 -0
  137. package/lib/rules/duplicateArguments.d.ts +6 -2
  138. package/lib/rules/duplicateArguments.js +44 -50
  139. package/lib/rules/dynamicDeletes.d.ts +10 -0
  140. package/lib/rules/dynamicDeletes.js +37 -0
  141. package/lib/rules/elseIfDuplicates.d.ts +6 -2
  142. package/lib/rules/elseIfDuplicates.js +37 -52
  143. package/lib/rules/elseReturns.d.ts +10 -0
  144. package/lib/rules/elseReturns.js +67 -0
  145. package/lib/rules/emptyBlocks.d.ts +6 -2
  146. package/lib/rules/emptyBlocks.js +53 -63
  147. package/lib/rules/emptyDestructures.d.ts +6 -2
  148. package/lib/rules/emptyDestructures.js +33 -39
  149. package/lib/rules/emptyEnums.d.ts +10 -0
  150. package/lib/rules/emptyEnums.js +30 -0
  151. package/lib/rules/emptyExports.d.ts +10 -0
  152. package/lib/rules/emptyExports.js +60 -0
  153. package/lib/rules/emptyFiles.d.ts +10 -0
  154. package/lib/rules/emptyFiles.js +44 -0
  155. package/lib/rules/emptyFunctions.d.ts +10 -0
  156. package/lib/rules/emptyFunctions.js +61 -0
  157. package/lib/rules/emptyModuleAttributes.d.ts +10 -0
  158. package/lib/rules/emptyModuleAttributes.js +35 -0
  159. package/lib/rules/emptyObjectTypes.d.ts +10 -0
  160. package/lib/rules/emptyObjectTypes.js +47 -0
  161. package/lib/rules/emptyStaticBlocks.d.ts +6 -2
  162. package/lib/rules/emptyStaticBlocks.js +41 -53
  163. package/lib/rules/emptyTypeParameterLists.d.ts +10 -0
  164. package/lib/rules/emptyTypeParameterLists.js +31 -0
  165. package/lib/rules/enumInitializers.d.ts +10 -0
  166. package/lib/rules/enumInitializers.js +54 -0
  167. package/lib/rules/enumMemberLiterals.d.ts +10 -0
  168. package/lib/rules/enumMemberLiterals.js +39 -0
  169. package/lib/rules/enumValueConsistency.d.ts +10 -0
  170. package/lib/rules/enumValueConsistency.js +56 -0
  171. package/lib/rules/enumValueDuplicates.d.ts +10 -0
  172. package/lib/rules/enumValueDuplicates.js +60 -0
  173. package/lib/rules/equalityOperatorNegations.d.ts +9 -0
  174. package/lib/rules/equalityOperatorNegations.js +60 -0
  175. package/lib/rules/equalityOperators.d.ts +10 -0
  176. package/lib/rules/equalityOperators.js +44 -0
  177. package/lib/rules/errorMessages.d.ts +10 -0
  178. package/lib/rules/errorMessages.js +60 -0
  179. package/lib/rules/errorSubclassProperties.d.ts +10 -0
  180. package/lib/rules/errorSubclassProperties.js +144 -0
  181. package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +10 -0
  182. package/lib/rules/errorUnnecessaryCaptureStackTraces.js +55 -0
  183. package/lib/rules/escapeSequenceCasing.d.ts +10 -0
  184. package/lib/rules/escapeSequenceCasing.js +75 -0
  185. package/lib/rules/evals.d.ts +10 -0
  186. package/lib/rules/evals.js +31 -0
  187. package/lib/rules/evolvingVariableTypes.d.ts +10 -0
  188. package/lib/rules/evolvingVariableTypes.js +33 -0
  189. package/lib/rules/exceptionAssignments.d.ts +6 -2
  190. package/lib/rules/exceptionAssignments.js +41 -60
  191. package/lib/rules/explicitAnys.d.ts +10 -0
  192. package/lib/rules/explicitAnys.js +55 -0
  193. package/lib/rules/exponentiationOperators.d.ts +10 -0
  194. package/lib/rules/exponentiationOperators.js +34 -0
  195. package/lib/rules/exportFromImports.d.ts +10 -0
  196. package/lib/rules/exportFromImports.js +119 -0
  197. package/lib/rules/exportMutables.d.ts +10 -0
  198. package/lib/rules/exportMutables.js +33 -0
  199. package/lib/rules/exportUniqueNames.d.ts +10 -0
  200. package/lib/rules/exportUniqueNames.js +65 -0
  201. package/lib/rules/extraneousClasses.d.ts +16 -0
  202. package/lib/rules/extraneousClasses.js +111 -0
  203. package/lib/rules/fetchMethodBodies.d.ts +10 -0
  204. package/lib/rules/fetchMethodBodies.js +72 -0
  205. package/lib/rules/finallyStatementSafety.d.ts +10 -0
  206. package/lib/rules/finallyStatementSafety.js +47 -0
  207. package/lib/rules/forDirections.d.ts +6 -2
  208. package/lib/rules/forDirections.js +68 -124
  209. package/lib/rules/forInArrays.d.ts +6 -2
  210. package/lib/rules/forInArrays.js +43 -50
  211. package/lib/rules/forInGuards.d.ts +9 -0
  212. package/lib/rules/forInGuards.js +44 -0
  213. package/lib/rules/functionApplySpreads.d.ts +10 -0
  214. package/lib/rules/functionApplySpreads.js +63 -0
  215. package/lib/rules/functionAssignments.d.ts +6 -2
  216. package/lib/rules/functionAssignments.js +31 -41
  217. package/lib/rules/functionCurryingRedundancy.d.ts +10 -0
  218. package/lib/rules/functionCurryingRedundancy.js +53 -0
  219. package/lib/rules/functionDeclarationStyles.d.ts +16 -0
  220. package/lib/rules/functionDeclarationStyles.js +67 -0
  221. package/lib/rules/functionNameMatches.d.ts +10 -0
  222. package/lib/rules/functionNameMatches.js +74 -0
  223. package/lib/rules/functionNewCalls.d.ts +6 -2
  224. package/lib/rules/functionNewCalls.js +41 -59
  225. package/lib/rules/generatorFunctionYields.d.ts +6 -2
  226. package/lib/rules/generatorFunctionYields.js +46 -53
  227. package/lib/rules/getterReturns.d.ts +10 -0
  228. package/lib/rules/getterReturns.js +65 -0
  229. package/lib/rules/globalAssignments.d.ts +6 -2
  230. package/lib/rules/globalAssignments.js +45 -57
  231. package/lib/rules/globalObjectCalls.d.ts +6 -2
  232. package/lib/rules/globalObjectCalls.js +41 -42
  233. package/lib/rules/globalThisAliases.d.ts +10 -0
  234. package/lib/rules/globalThisAliases.js +47 -0
  235. package/lib/rules/impliedEvals.d.ts +10 -0
  236. package/lib/rules/impliedEvals.js +130 -0
  237. package/lib/rules/importEmptyBlocks.d.ts +10 -0
  238. package/lib/rules/importEmptyBlocks.js +53 -0
  239. package/lib/rules/importTypeSideEffects.d.ts +10 -0
  240. package/lib/rules/importTypeSideEffects.js +31 -0
  241. package/lib/rules/indexedObjectTypes.d.ts +16 -0
  242. package/lib/rules/indexedObjectTypes.js +83 -0
  243. package/lib/rules/instanceOfArrays.d.ts +10 -0
  244. package/lib/rules/instanceOfArrays.js +31 -0
  245. package/lib/rules/irregularWhitespaces.d.ts +16 -0
  246. package/lib/rules/irregularWhitespaces.js +97 -0
  247. package/lib/rules/isNaNComparisons.d.ts +10 -0
  248. package/lib/rules/isNaNComparisons.js +43 -0
  249. package/lib/rules/literalConstructorWrappers.d.ts +10 -0
  250. package/lib/rules/literalConstructorWrappers.js +64 -0
  251. package/lib/rules/mathMethods.d.ts +10 -0
  252. package/lib/rules/mathMethods.js +128 -0
  253. package/lib/rules/meaninglessVoidOperators.d.ts +10 -0
  254. package/lib/rules/meaninglessVoidOperators.js +39 -0
  255. package/lib/rules/misleadingVoidExpressions.d.ts +10 -0
  256. package/lib/rules/misleadingVoidExpressions.js +128 -0
  257. package/lib/rules/moduleSpecifierLists.d.ts +10 -0
  258. package/lib/rules/moduleSpecifierLists.js +92 -0
  259. package/lib/rules/multilineAmbiguities.d.ts +10 -0
  260. package/lib/rules/multilineAmbiguities.js +64 -0
  261. package/lib/rules/namedDefaultExports.d.ts +10 -0
  262. package/lib/rules/namedDefaultExports.js +60 -0
  263. package/lib/rules/namespaceDeclarations.d.ts +7 -3
  264. package/lib/rules/namespaceDeclarations.js +35 -55
  265. package/lib/rules/namespaceImplicitAmbientImports.d.ts +10 -0
  266. package/lib/rules/namespaceImplicitAmbientImports.js +40 -0
  267. package/lib/rules/namespaceKeywords.d.ts +10 -0
  268. package/lib/rules/namespaceKeywords.js +40 -0
  269. package/lib/rules/nativeObjectExtensions.d.ts +10 -0
  270. package/lib/rules/nativeObjectExtensions.js +114 -0
  271. package/lib/rules/negativeIndexLengthMethods.d.ts +10 -0
  272. package/lib/rules/negativeIndexLengthMethods.js +180 -0
  273. package/lib/rules/negativeZeroComparisons.d.ts +6 -2
  274. package/lib/rules/negativeZeroComparisons.js +45 -62
  275. package/lib/rules/nestedStandaloneIfs.d.ts +10 -0
  276. package/lib/rules/nestedStandaloneIfs.js +105 -0
  277. package/lib/rules/newDefinitions.d.ts +10 -0
  278. package/lib/rules/newDefinitions.js +84 -0
  279. package/lib/rules/newExpressions.d.ts +6 -2
  280. package/lib/rules/newExpressions.js +37 -53
  281. package/lib/rules/newNativeNonConstructors.d.ts +6 -2
  282. package/lib/rules/newNativeNonConstructors.js +38 -48
  283. package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +10 -0
  284. package/lib/rules/nonNullAssertedNullishCoalesces.js +63 -0
  285. package/lib/rules/nonNullAssertedOptionalChains.d.ts +10 -0
  286. package/lib/rules/nonNullAssertedOptionalChains.js +69 -0
  287. package/lib/rules/nonNullAssertionPlacement.d.ts +10 -0
  288. package/lib/rules/nonNullAssertionPlacement.js +94 -0
  289. package/lib/rules/nonNullableTypeAssertions.d.ts +10 -0
  290. package/lib/rules/nonNullableTypeAssertions.js +78 -0
  291. package/lib/rules/nonOctalDecimalEscapes.d.ts +6 -2
  292. package/lib/rules/nonOctalDecimalEscapes.js +46 -55
  293. package/lib/rules/nullishCheckStyle.d.ts +21 -0
  294. package/lib/rules/nullishCheckStyle.js +144 -0
  295. package/lib/rules/nullishCoalescingOperators.d.ts +22 -0
  296. package/lib/rules/nullishCoalescingOperators.js +311 -0
  297. package/lib/rules/numberMethodRanges.d.ts +10 -0
  298. package/lib/rules/numberMethodRanges.js +74 -0
  299. package/lib/rules/numberStaticMethods.d.ts +10 -0
  300. package/lib/rules/numberStaticMethods.js +53 -0
  301. package/lib/rules/numericErasingOperations.d.ts +10 -0
  302. package/lib/rules/numericErasingOperations.js +46 -0
  303. package/lib/rules/numericLiteralParsing.d.ts +6 -2
  304. package/lib/rules/numericLiteralParsing.js +59 -90
  305. package/lib/rules/numericPrecision.d.ts +10 -0
  306. package/lib/rules/numericPrecision.js +102 -0
  307. package/lib/rules/numericSeparatorGroups.d.ts +10 -0
  308. package/lib/rules/numericSeparatorGroups.js +101 -0
  309. package/lib/rules/objectAssignSpreads.d.ts +10 -0
  310. package/lib/rules/objectAssignSpreads.js +53 -0
  311. package/lib/rules/objectCalls.d.ts +10 -0
  312. package/lib/rules/objectCalls.js +38 -0
  313. package/lib/rules/objectEntriesMethods.d.ts +10 -0
  314. package/lib/rules/objectEntriesMethods.js +82 -0
  315. package/lib/rules/objectHasOwns.d.ts +10 -0
  316. package/lib/rules/objectHasOwns.js +50 -0
  317. package/lib/rules/objectKeyDuplicates.d.ts +10 -0
  318. package/lib/rules/objectKeyDuplicates.js +63 -0
  319. package/lib/rules/objectProto.d.ts +6 -2
  320. package/lib/rules/objectProto.js +49 -53
  321. package/lib/rules/objectPrototypeBuiltIns.d.ts +10 -0
  322. package/lib/rules/objectPrototypeBuiltIns.js +54 -0
  323. package/lib/rules/objectShorthand.d.ts +10 -0
  324. package/lib/rules/objectShorthand.js +84 -0
  325. package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +10 -0
  326. package/lib/rules/objectSpreadUnnecessaryFallbacks.js +43 -0
  327. package/lib/rules/objectTypeDefinitions.d.ts +10 -0
  328. package/lib/rules/objectTypeDefinitions.js +34 -0
  329. package/lib/rules/octalEscapes.d.ts +6 -2
  330. package/lib/rules/octalEscapes.js +54 -67
  331. package/lib/rules/octalNumbers.d.ts +6 -2
  332. package/lib/rules/octalNumbers.js +54 -67
  333. package/lib/rules/operatorAssignmentShorthand.d.ts +10 -0
  334. package/lib/rules/operatorAssignmentShorthand.js +77 -0
  335. package/lib/rules/overloadSignaturesAdjacent.d.ts +10 -0
  336. package/lib/rules/overloadSignaturesAdjacent.js +140 -0
  337. package/lib/rules/parameterReassignments.d.ts +10 -0
  338. package/lib/rules/parameterReassignments.js +76 -0
  339. package/lib/rules/parseIntRadixes.d.ts +10 -0
  340. package/lib/rules/parseIntRadixes.js +62 -0
  341. package/lib/rules/propertyAccessNotation.d.ts +13 -0
  342. package/lib/rules/propertyAccessNotation.js +119 -0
  343. package/lib/rules/recursionOnlyArguments.d.ts +10 -0
  344. package/lib/rules/recursionOnlyArguments.js +71 -0
  345. package/lib/rules/redundantTypeConstituents.d.ts +10 -0
  346. package/lib/rules/redundantTypeConstituents.js +277 -0
  347. package/lib/rules/regexAllGlobalFlags.d.ts +10 -0
  348. package/lib/rules/regexAllGlobalFlags.js +56 -0
  349. package/lib/rules/regexAmbiguousInvalidity.d.ts +10 -0
  350. package/lib/rules/regexAmbiguousInvalidity.js +297 -0
  351. package/lib/rules/regexCharacterClassRanges.d.ts +10 -0
  352. package/lib/rules/regexCharacterClassRanges.js +137 -0
  353. package/lib/rules/regexCharacterClassSetOperations.d.ts +10 -0
  354. package/lib/rules/regexCharacterClassSetOperations.js +81 -0
  355. package/lib/rules/regexCharacterClasses.d.ts +10 -0
  356. package/lib/rules/regexCharacterClasses.js +234 -0
  357. package/lib/rules/regexConciseCharacterClassNegations.d.ts +10 -0
  358. package/lib/rules/regexConciseCharacterClassNegations.js +52 -0
  359. package/lib/rules/regexContradictoryAssertions.d.ts +10 -0
  360. package/lib/rules/regexContradictoryAssertions.js +210 -0
  361. package/lib/rules/regexControlCharacterEscapes.d.ts +10 -0
  362. package/lib/rules/regexControlCharacterEscapes.js +130 -0
  363. package/lib/rules/regexControlCharacters.d.ts +10 -0
  364. package/lib/rules/regexControlCharacters.js +95 -0
  365. package/lib/rules/regexDigitMatchers.d.ts +10 -0
  366. package/lib/rules/regexDigitMatchers.js +180 -0
  367. package/lib/rules/regexDollarEscapes.d.ts +10 -0
  368. package/lib/rules/regexDollarEscapes.js +91 -0
  369. package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +10 -0
  370. package/lib/rules/regexDuplicateCharacterClassCharacters.js +128 -0
  371. package/lib/rules/regexEmptyAlternatives.d.ts +10 -0
  372. package/lib/rules/regexEmptyAlternatives.js +140 -0
  373. package/lib/rules/regexEmptyCapturingGroups.d.ts +10 -0
  374. package/lib/rules/regexEmptyCapturingGroups.js +67 -0
  375. package/lib/rules/regexEmptyCharacterClasses.d.ts +10 -0
  376. package/lib/rules/regexEmptyCharacterClasses.js +68 -0
  377. package/lib/rules/regexEmptyGroups.d.ts +10 -0
  378. package/lib/rules/regexEmptyGroups.js +66 -0
  379. package/lib/rules/regexEmptyLazyQuantifiers.d.ts +10 -0
  380. package/lib/rules/regexEmptyLazyQuantifiers.js +92 -0
  381. package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +10 -0
  382. package/lib/rules/regexEmptyLookaroundsAssertions.js +68 -0
  383. package/lib/rules/regexEmptyStringLiterals.d.ts +10 -0
  384. package/lib/rules/regexEmptyStringLiterals.js +66 -0
  385. package/lib/rules/regexEscapeBackspaces.d.ts +10 -0
  386. package/lib/rules/regexEscapeBackspaces.js +69 -0
  387. package/lib/rules/regexExecutors.d.ts +10 -0
  388. package/lib/rules/regexExecutors.js +58 -0
  389. package/lib/rules/regexGraphemeStringLiterals.d.ts +10 -0
  390. package/lib/rules/regexGraphemeStringLiterals.js +51 -0
  391. package/lib/rules/regexHexadecimalEscapes.d.ts +10 -0
  392. package/lib/rules/regexHexadecimalEscapes.js +71 -0
  393. package/lib/rules/regexIgnoreCaseFlags.d.ts +10 -0
  394. package/lib/rules/regexIgnoreCaseFlags.js +145 -0
  395. package/lib/rules/regexInvisibleCharacters.d.ts +10 -0
  396. package/lib/rules/regexInvisibleCharacters.js +90 -0
  397. package/lib/rules/regexLetterCasing.d.ts +10 -0
  398. package/lib/rules/regexLetterCasing.js +186 -0
  399. package/lib/rules/regexLiterals.d.ts +10 -0
  400. package/lib/rules/regexLiterals.js +92 -0
  401. package/lib/rules/regexLookaroundAssertions.d.ts +10 -0
  402. package/lib/rules/regexLookaroundAssertions.js +163 -0
  403. package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +10 -0
  404. package/lib/rules/regexLookaroundQuantifierOptimizations.js +94 -0
  405. package/lib/rules/regexMatchNotation.d.ts +10 -0
  406. package/lib/rules/regexMatchNotation.js +139 -0
  407. package/lib/rules/regexMisleadingCapturingGroups.d.ts +10 -0
  408. package/lib/rules/regexMisleadingCapturingGroups.js +229 -0
  409. package/lib/rules/regexMisleadingQuantifiers.d.ts +10 -0
  410. package/lib/rules/regexMisleadingQuantifiers.js +78 -0
  411. package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +10 -0
  412. package/lib/rules/regexMisleadingUnicodeCharacters.js +203 -0
  413. package/lib/rules/regexNamedBackreferences.d.ts +10 -0
  414. package/lib/rules/regexNamedBackreferences.js +48 -0
  415. package/lib/rules/regexNamedCaptureGroups.d.ts +9 -0
  416. package/lib/rules/regexNamedCaptureGroups.js +67 -0
  417. package/lib/rules/regexNamedReplacements.d.ts +10 -0
  418. package/lib/rules/regexNamedReplacements.js +93 -0
  419. package/lib/rules/regexNonStandardFlags.d.ts +10 -0
  420. package/lib/rules/regexNonStandardFlags.js +66 -0
  421. package/lib/rules/regexObscureRanges.d.ts +10 -0
  422. package/lib/rules/regexObscureRanges.js +93 -0
  423. package/lib/rules/regexOctalEscapes.d.ts +10 -0
  424. package/lib/rules/regexOctalEscapes.js +70 -0
  425. package/lib/rules/regexPlusQuantifiers.d.ts +10 -0
  426. package/lib/rules/regexPlusQuantifiers.js +68 -0
  427. package/lib/rules/regexPredefinedAssertions.d.ts +10 -0
  428. package/lib/rules/regexPredefinedAssertions.js +127 -0
  429. package/lib/rules/regexQuestionQuantifiers.d.ts +10 -0
  430. package/lib/rules/regexQuestionQuantifiers.js +104 -0
  431. package/lib/rules/regexRepeatQuantifiers.d.ts +10 -0
  432. package/lib/rules/regexRepeatQuantifiers.js +96 -0
  433. package/lib/rules/regexResultArrayGroups.d.ts +10 -0
  434. package/lib/rules/regexResultArrayGroups.js +187 -0
  435. package/lib/rules/regexSetOperationOptimizations.d.ts +10 -0
  436. package/lib/rules/regexSetOperationOptimizations.js +177 -0
  437. package/lib/rules/regexStandaloneBackslashes.d.ts +10 -0
  438. package/lib/rules/regexStandaloneBackslashes.js +59 -0
  439. package/lib/rules/regexStarQuantifiers.d.ts +10 -0
  440. package/lib/rules/regexStarQuantifiers.js +68 -0
  441. package/lib/rules/regexSuperLinearBacktracking.d.ts +10 -0
  442. package/lib/rules/regexSuperLinearBacktracking.js +98 -0
  443. package/lib/rules/regexSuperLinearMoves.d.ts +10 -0
  444. package/lib/rules/regexSuperLinearMoves.js +142 -0
  445. package/lib/rules/regexTestMethods.d.ts +10 -0
  446. package/lib/rules/regexTestMethods.js +83 -0
  447. package/lib/rules/regexUnicodeCodepointEscapes.d.ts +10 -0
  448. package/lib/rules/regexUnicodeCodepointEscapes.js +107 -0
  449. package/lib/rules/regexUnicodeEscapes.d.ts +9 -0
  450. package/lib/rules/regexUnicodeEscapes.js +97 -0
  451. package/lib/rules/regexUnicodeFlag.d.ts +9 -0
  452. package/lib/rules/regexUnicodeFlag.js +97 -0
  453. package/lib/rules/regexUnicodeProperties.d.ts +10 -0
  454. package/lib/rules/regexUnicodeProperties.js +133 -0
  455. package/lib/rules/regexUnnecessaryAssertions.d.ts +10 -0
  456. package/lib/rules/regexUnnecessaryAssertions.js +223 -0
  457. package/lib/rules/regexUnnecessaryBackreferences.d.ts +10 -0
  458. package/lib/rules/regexUnnecessaryBackreferences.js +125 -0
  459. package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +10 -0
  460. package/lib/rules/regexUnnecessaryCharacterClasses.js +74 -0
  461. package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +10 -0
  462. package/lib/rules/regexUnnecessaryCharacterRanges.js +108 -0
  463. package/lib/rules/regexUnnecessaryDisjunctions.d.ts +10 -0
  464. package/lib/rules/regexUnnecessaryDisjunctions.js +118 -0
  465. package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +10 -0
  466. package/lib/rules/regexUnnecessaryDollarReplacements.js +144 -0
  467. package/lib/rules/regexUnnecessaryEscapes.d.ts +10 -0
  468. package/lib/rules/regexUnnecessaryEscapes.js +136 -0
  469. package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +10 -0
  470. package/lib/rules/regexUnnecessaryLookaroundAssertions.js +80 -0
  471. package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +10 -0
  472. package/lib/rules/regexUnnecessaryNestedAssertions.js +198 -0
  473. package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +10 -0
  474. package/lib/rules/regexUnnecessaryNestedQuantifiers.js +93 -0
  475. package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +10 -0
  476. package/lib/rules/regexUnnecessaryNonCapturingGroups.js +104 -0
  477. package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +10 -0
  478. package/lib/rules/regexUnnecessaryNumericQuantifiers.js +69 -0
  479. package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +10 -0
  480. package/lib/rules/regexUnnecessaryOptionalAssertions.js +137 -0
  481. package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +10 -0
  482. package/lib/rules/regexUnnecessaryReferentialBackreferences.js +123 -0
  483. package/lib/rules/regexUnnecessarySetOperands.d.ts +10 -0
  484. package/lib/rules/regexUnnecessarySetOperands.js +136 -0
  485. package/lib/rules/regexUnusedCapturingGroups.d.ts +10 -0
  486. package/lib/rules/regexUnusedCapturingGroups.js +69 -0
  487. package/lib/rules/regexUnusedFlags.d.ts +10 -0
  488. package/lib/rules/regexUnusedFlags.js +116 -0
  489. package/lib/rules/regexUnusedLazyQuantifiers.d.ts +10 -0
  490. package/lib/rules/regexUnusedLazyQuantifiers.js +63 -0
  491. package/lib/rules/regexUnusedQuantifiers.d.ts +10 -0
  492. package/lib/rules/regexUnusedQuantifiers.js +63 -0
  493. package/lib/rules/regexValidity.d.ts +10 -0
  494. package/lib/rules/regexValidity.js +146 -0
  495. package/lib/rules/regexWordMatchers.d.ts +10 -0
  496. package/lib/rules/regexWordMatchers.js +146 -0
  497. package/lib/rules/regexZeroQuantifiers.d.ts +10 -0
  498. package/lib/rules/regexZeroQuantifiers.js +60 -0
  499. package/lib/rules/responseJsonMethods.d.ts +10 -0
  500. package/lib/rules/responseJsonMethods.js +51 -0
  501. package/lib/rules/restrictedIdentifiers.d.ts +13 -0
  502. package/lib/rules/restrictedIdentifiers.js +41 -0
  503. package/lib/rules/returnAssignments.d.ts +6 -2
  504. package/lib/rules/returnAssignments.js +36 -48
  505. package/lib/rules/returnThisTypes.d.ts +10 -0
  506. package/lib/rules/returnThisTypes.js +94 -0
  507. package/lib/rules/ruleCreator.d.ts +3 -0
  508. package/lib/rules/ruleCreator.js +17 -0
  509. package/lib/rules/selfAssignments.d.ts +6 -2
  510. package/lib/rules/selfAssignments.js +28 -43
  511. package/lib/rules/sequences.d.ts +6 -2
  512. package/lib/rules/sequences.js +27 -33
  513. package/lib/rules/setSizeLengthChecks.d.ts +10 -0
  514. package/lib/rules/setSizeLengthChecks.js +48 -0
  515. package/lib/rules/setterReturns.d.ts +10 -0
  516. package/lib/rules/setterReturns.js +41 -0
  517. package/lib/rules/shadowedRestrictedNames.d.ts +6 -2
  518. package/lib/rules/shadowedRestrictedNames.js +65 -92
  519. package/lib/rules/singleVariableDeclarations.d.ts +10 -0
  520. package/lib/rules/singleVariableDeclarations.js +36 -0
  521. package/lib/rules/sizeComparisonOperators.d.ts +16 -0
  522. package/lib/rules/sizeComparisonOperators.js +148 -0
  523. package/lib/rules/sparseArrays.d.ts +6 -2
  524. package/lib/rules/sparseArrays.js +42 -53
  525. package/lib/rules/staticMemberOnlyClasses.d.ts +10 -0
  526. package/lib/rules/staticMemberOnlyClasses.js +77 -0
  527. package/lib/rules/stringCaseMismatches.d.ts +10 -0
  528. package/lib/rules/stringCaseMismatches.js +58 -0
  529. package/lib/rules/stringCodePoints.d.ts +10 -0
  530. package/lib/rules/stringCodePoints.js +50 -0
  531. package/lib/rules/stringSliceMethods.d.ts +10 -0
  532. package/lib/rules/stringSliceMethods.js +47 -0
  533. package/lib/rules/stringStartsEndsWith.d.ts +10 -0
  534. package/lib/rules/stringStartsEndsWith.js +79 -0
  535. package/lib/rules/structuredCloneMethods.d.ts +10 -0
  536. package/lib/rules/structuredCloneMethods.js +39 -0
  537. package/lib/rules/symbolDescriptions.d.ts +6 -2
  538. package/lib/rules/symbolDescriptions.js +31 -40
  539. package/lib/rules/thisAliases.d.ts +10 -0
  540. package/lib/rules/thisAliases.js +44 -0
  541. package/lib/rules/thisBeforeSuper.d.ts +10 -0
  542. package/lib/rules/thisBeforeSuper.js +86 -0
  543. package/lib/rules/throwErrors.d.ts +10 -0
  544. package/lib/rules/throwErrors.js +61 -0
  545. package/lib/rules/topLevelAwaits.d.ts +10 -0
  546. package/lib/rules/topLevelAwaits.js +49 -0
  547. package/lib/rules/tripleSlashReferenceValidity.d.ts +10 -0
  548. package/lib/rules/tripleSlashReferenceValidity.js +54 -0
  549. package/lib/rules/tripleSlashReferences.d.ts +10 -0
  550. package/lib/rules/tripleSlashReferences.js +34 -0
  551. package/lib/rules/tsComments.d.ts +22 -0
  552. package/lib/rules/tsComments.js +130 -0
  553. package/lib/rules/tslintComments.d.ts +10 -0
  554. package/lib/rules/tslintComments.js +36 -0
  555. package/lib/rules/typeAssertionStyles.d.ts +10 -0
  556. package/lib/rules/typeAssertionStyles.js +32 -0
  557. package/lib/rules/typeofComparisons.d.ts +6 -2
  558. package/lib/rules/typeofComparisons.js +51 -71
  559. package/lib/rules/unassignedVariables.d.ts +6 -2
  560. package/lib/rules/unassignedVariables.js +36 -54
  561. package/lib/rules/undefinedTypeofChecks.d.ts +10 -0
  562. package/lib/rules/undefinedTypeofChecks.js +41 -0
  563. package/lib/rules/undefinedVariables.d.ts +6 -2
  564. package/lib/rules/undefinedVariables.js +38 -75
  565. package/lib/rules/unicodeBOMs.d.ts +6 -2
  566. package/lib/rules/unicodeBOMs.js +38 -40
  567. package/lib/rules/unnecessaryBinds.d.ts +10 -0
  568. package/lib/rules/unnecessaryBinds.js +78 -0
  569. package/lib/rules/unnecessaryBlocks.d.ts +6 -2
  570. package/lib/rules/unnecessaryBlocks.js +59 -74
  571. package/lib/rules/unnecessaryBooleanCasts.d.ts +10 -0
  572. package/lib/rules/unnecessaryBooleanCasts.js +58 -0
  573. package/lib/rules/unnecessaryCatches.d.ts +6 -2
  574. package/lib/rules/unnecessaryCatches.js +47 -67
  575. package/lib/rules/unnecessaryComparisons.d.ts +10 -0
  576. package/lib/rules/unnecessaryComparisons.js +300 -0
  577. package/lib/rules/unnecessaryConcatenation.d.ts +6 -2
  578. package/lib/rules/unnecessaryConcatenation.js +27 -37
  579. package/lib/rules/unnecessaryEscapes.d.ts +10 -0
  580. package/lib/rules/unnecessaryEscapes.js +134 -0
  581. package/lib/rules/unnecessaryMathClamps.d.ts +10 -0
  582. package/lib/rules/unnecessaryMathClamps.js +114 -0
  583. package/lib/rules/unnecessaryNumericFractions.d.ts +10 -0
  584. package/lib/rules/unnecessaryNumericFractions.js +50 -0
  585. package/lib/rules/unnecessaryRenames.d.ts +10 -0
  586. package/lib/rules/unnecessaryRenames.js +92 -0
  587. package/lib/rules/unnecessaryTernaries.d.ts +10 -0
  588. package/lib/rules/unnecessaryTernaries.js +88 -0
  589. package/lib/rules/unnecessaryUseStricts.d.ts +10 -0
  590. package/lib/rules/unnecessaryUseStricts.js +40 -0
  591. package/lib/rules/unsafeNegations.d.ts +6 -2
  592. package/lib/rules/unsafeNegations.js +37 -49
  593. package/lib/rules/utils/collectAccessorPairs.d.ts +12 -0
  594. package/lib/rules/utils/collectAccessorPairs.js +29 -0
  595. package/lib/rules/utils/countCommentsInRange.d.ts +3 -0
  596. package/lib/rules/utils/countCommentsInRange.js +12 -0
  597. package/lib/rules/utils/discriminateAnyType.d.ts +13 -9
  598. package/lib/rules/utils/discriminateAnyType.js +34 -37
  599. package/lib/rules/utils/equalityOperators.d.ts +9 -0
  600. package/lib/rules/utils/equalityOperators.js +36 -0
  601. package/lib/rules/utils/forEachReturnStatement.d.ts +3 -0
  602. package/lib/rules/utils/forEachReturnStatement.js +29 -0
  603. package/lib/rules/utils/formatReportedType.d.ts +4 -0
  604. package/lib/rules/utils/formatReportedType.js +9 -0
  605. package/lib/rules/utils/getConstrainedType.d.ts +3 -2
  606. package/lib/rules/utils/getConstrainedType.js +8 -3
  607. package/lib/rules/utils/getFunctionName.d.ts +3 -0
  608. package/lib/rules/utils/getFunctionName.js +16 -0
  609. package/lib/rules/utils/getRegExpConstruction.d.ts +10 -0
  610. package/lib/rules/utils/getRegExpConstruction.js +26 -0
  611. package/lib/rules/utils/getRegExpLiteralDetails.d.ts +7 -0
  612. package/lib/rules/utils/getRegExpLiteralDetails.js +13 -0
  613. package/lib/rules/utils/getThisExpression.d.ts +3 -2
  614. package/lib/rules/utils/getThisExpression.js +15 -22
  615. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +3 -0
  616. package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +13 -0
  617. package/lib/rules/utils/isBuiltinSymbolLike.d.ts +3 -0
  618. package/lib/rules/utils/isBuiltinSymbolLike.js +33 -0
  619. package/lib/rules/utils/isDirectEqualityCheck.d.ts +4 -0
  620. package/lib/rules/utils/isDirectEqualityCheck.js +29 -0
  621. package/lib/rules/utils/isErrorSubclass.d.ts +3 -0
  622. package/lib/rules/utils/isErrorSubclass.js +27 -0
  623. package/lib/rules/utils/isInBooleanContext.d.ts +3 -0
  624. package/lib/rules/utils/isInBooleanContext.js +22 -0
  625. package/lib/rules/utils/isTypeRecursive.d.ts +2 -1
  626. package/lib/rules/utils/isTypeRecursive.js +7 -4
  627. package/lib/rules/utils/isUnsafeAssignment.d.ts +4 -2
  628. package/lib/rules/utils/isUnsafeAssignment.js +41 -72
  629. package/lib/rules/utils/operators.d.ts +5 -4
  630. package/lib/rules/utils/operators.js +32 -33
  631. package/lib/rules/utils/parseRegexpAst.d.ts +2 -0
  632. package/lib/rules/utils/parseRegexpAst.js +17 -0
  633. package/lib/rules/utils/parseRegexpAstFull.d.ts +3 -0
  634. package/lib/rules/utils/parseRegexpAstFull.js +18 -0
  635. package/lib/rules/utils/skipParentheses.d.ts +3 -0
  636. package/lib/rules/utils/skipParentheses.js +10 -0
  637. package/lib/rules/variableDeletions.d.ts +6 -2
  638. package/lib/rules/variableDeletions.js +34 -38
  639. package/lib/rules/voidOperator.d.ts +6 -2
  640. package/lib/rules/voidOperator.js +33 -35
  641. package/lib/rules/withStatements.d.ts +10 -0
  642. package/lib/rules/withStatements.js +30 -0
  643. package/lib/rules/wrapperObjects.d.ts +10 -0
  644. package/lib/rules/wrapperObjects.js +36 -0
  645. package/package.json +29 -13
  646. package/CHANGELOG.md +0 -91
  647. package/lib/collectReferencedFilePaths.d.ts +0 -2
  648. package/lib/collectReferencedFilePaths.js +0 -21
  649. package/lib/createTypeScriptFileFromProgram.d.ts +0 -3
  650. package/lib/createTypeScriptFileFromProgram.js +0 -63
  651. package/lib/createTypeScriptFileFromProjectService.d.ts +0 -10
  652. package/lib/createTypeScriptFileFromProjectService.js +0 -20
  653. package/lib/directives/parseDirectivesFromTypeScriptFile.d.ts +0 -5
  654. package/lib/directives/parseDirectivesFromTypeScriptFile.js +0 -21
  655. package/lib/directives/parseDirectivesFromTypeScriptFile.test.d.ts +0 -1
  656. package/lib/directives/parseDirectivesFromTypeScriptFile.test.js +0 -91
  657. package/lib/formatDiagnostic.d.ts +0 -10
  658. package/lib/formatDiagnostic.js +0 -121
  659. package/lib/getFirstEnumValues.d.ts +0 -35
  660. package/lib/getFirstEnumValues.js +0 -51
  661. package/lib/getFirstEnumValues.test.d.ts +0 -1
  662. package/lib/getFirstEnumValues.test.js +0 -45
  663. package/lib/getTSNodeRange.d.ts +0 -3
  664. package/lib/getTSNodeRange.js +0 -6
  665. package/lib/language.d.ts +0 -8
  666. package/lib/language.js +0 -65
  667. package/lib/nodes.d.ts +0 -142
  668. package/lib/nodes.js +0 -1
  669. package/lib/normalizeRange.d.ts +0 -3
  670. package/lib/normalizeRange.js +0 -13
  671. package/lib/prepareTypeScriptFile.d.ts +0 -7
  672. package/lib/prepareTypeScriptFile.js +0 -7
  673. package/lib/rules/anyReturns.test.d.ts +0 -1
  674. package/lib/rules/anyReturns.test.js +0 -647
  675. package/lib/rules/asyncPromiseExecutors.test.d.ts +0 -1
  676. package/lib/rules/asyncPromiseExecutors.test.js +0 -71
  677. package/lib/rules/caseDeclarations.test.d.ts +0 -1
  678. package/lib/rules/caseDeclarations.test.js +0 -227
  679. package/lib/rules/caseDuplicates.test.d.ts +0 -1
  680. package/lib/rules/caseDuplicates.test.js +0 -307
  681. package/lib/rules/chainedAssignments.test.d.ts +0 -1
  682. package/lib/rules/chainedAssignments.test.js +0 -262
  683. package/lib/rules/classAssignments.test.d.ts +0 -1
  684. package/lib/rules/classAssignments.test.js +0 -156
  685. package/lib/rules/consecutiveNonNullAssertions.test.d.ts +0 -1
  686. package/lib/rules/consecutiveNonNullAssertions.test.js +0 -32
  687. package/lib/rules/constantAssignments.test.d.ts +0 -1
  688. package/lib/rules/constantAssignments.test.js +0 -221
  689. package/lib/rules/constructorReturns.test.d.ts +0 -1
  690. package/lib/rules/constructorReturns.test.js +0 -96
  691. package/lib/rules/debuggerStatements.test.d.ts +0 -1
  692. package/lib/rules/debuggerStatements.test.js +0 -80
  693. package/lib/rules/defaultCaseLast.test.d.ts +0 -1
  694. package/lib/rules/defaultCaseLast.test.js +0 -195
  695. package/lib/rules/duplicateArguments.test.d.ts +0 -1
  696. package/lib/rules/duplicateArguments.test.js +0 -139
  697. package/lib/rules/elseIfDuplicates.test.d.ts +0 -1
  698. package/lib/rules/elseIfDuplicates.test.js +0 -176
  699. package/lib/rules/emptyBlocks.test.d.ts +0 -1
  700. package/lib/rules/emptyBlocks.test.js +0 -135
  701. package/lib/rules/emptyDestructures.test.d.ts +0 -1
  702. package/lib/rules/emptyDestructures.test.js +0 -186
  703. package/lib/rules/emptyStaticBlocks.test.d.ts +0 -1
  704. package/lib/rules/emptyStaticBlocks.test.js +0 -167
  705. package/lib/rules/exceptionAssignments.test.d.ts +0 -1
  706. package/lib/rules/exceptionAssignments.test.js +0 -264
  707. package/lib/rules/forDirections.test.d.ts +0 -1
  708. package/lib/rules/forDirections.test.js +0 -124
  709. package/lib/rules/forInArrays.test.d.ts +0 -1
  710. package/lib/rules/forInArrays.test.js +0 -24
  711. package/lib/rules/functionAssignments.test.d.ts +0 -1
  712. package/lib/rules/functionAssignments.test.js +0 -209
  713. package/lib/rules/functionNewCalls.test.d.ts +0 -1
  714. package/lib/rules/functionNewCalls.test.js +0 -115
  715. package/lib/rules/generatorFunctionYields.test.d.ts +0 -1
  716. package/lib/rules/generatorFunctionYields.test.js +0 -151
  717. package/lib/rules/globalAssignments.test.d.ts +0 -1
  718. package/lib/rules/globalAssignments.test.js +0 -215
  719. package/lib/rules/globalObjectCalls.test.d.ts +0 -1
  720. package/lib/rules/globalObjectCalls.test.js +0 -93
  721. package/lib/rules/namespaceDeclarations.test.d.ts +0 -1
  722. package/lib/rules/namespaceDeclarations.test.js +0 -40
  723. package/lib/rules/negativeZeroComparisons.test.d.ts +0 -1
  724. package/lib/rules/negativeZeroComparisons.test.js +0 -209
  725. package/lib/rules/newExpressions.test.d.ts +0 -1
  726. package/lib/rules/newExpressions.test.js +0 -79
  727. package/lib/rules/newNativeNonConstructors.test.d.ts +0 -1
  728. package/lib/rules/newNativeNonConstructors.test.js +0 -94
  729. package/lib/rules/nonOctalDecimalEscapes.test.d.ts +0 -1
  730. package/lib/rules/nonOctalDecimalEscapes.test.js +0 -69
  731. package/lib/rules/numericLiteralParsing.test.d.ts +0 -1
  732. package/lib/rules/numericLiteralParsing.test.js +0 -99
  733. package/lib/rules/objectProto.test.d.ts +0 -1
  734. package/lib/rules/objectProto.test.js +0 -96
  735. package/lib/rules/octalEscapes.test.d.ts +0 -1
  736. package/lib/rules/octalEscapes.test.js +0 -213
  737. package/lib/rules/octalNumbers.test.d.ts +0 -1
  738. package/lib/rules/octalNumbers.test.js +0 -245
  739. package/lib/rules/returnAssignments.test.d.ts +0 -1
  740. package/lib/rules/returnAssignments.test.js +0 -185
  741. package/lib/rules/ruleTester.d.ts +0 -2
  742. package/lib/rules/ruleTester.js +0 -3
  743. package/lib/rules/selfAssignments.test.d.ts +0 -1
  744. package/lib/rules/selfAssignments.test.js +0 -66
  745. package/lib/rules/selfComparisons.d.ts +0 -6
  746. package/lib/rules/selfComparisons.js +0 -41
  747. package/lib/rules/selfComparisons.test.d.ts +0 -1
  748. package/lib/rules/selfComparisons.test.js +0 -297
  749. package/lib/rules/sequences.test.d.ts +0 -1
  750. package/lib/rules/sequences.test.js +0 -48
  751. package/lib/rules/shadowedRestrictedNames.test.d.ts +0 -1
  752. package/lib/rules/shadowedRestrictedNames.test.js +0 -147
  753. package/lib/rules/sparseArrays.test.d.ts +0 -1
  754. package/lib/rules/sparseArrays.test.js +0 -110
  755. package/lib/rules/symbolDescriptions.test.d.ts +0 -1
  756. package/lib/rules/symbolDescriptions.test.js +0 -89
  757. package/lib/rules/typeofComparisons.test.d.ts +0 -1
  758. package/lib/rules/typeofComparisons.test.js +0 -85
  759. package/lib/rules/unassignedVariables.test.d.ts +0 -1
  760. package/lib/rules/unassignedVariables.test.js +0 -72
  761. package/lib/rules/undefinedVariables.test.d.ts +0 -1
  762. package/lib/rules/undefinedVariables.test.js +0 -80
  763. package/lib/rules/unicodeBOMs.test.d.ts +0 -1
  764. package/lib/rules/unicodeBOMs.test.js +0 -66
  765. package/lib/rules/unnecessaryBlocks.test.d.ts +0 -1
  766. package/lib/rules/unnecessaryBlocks.test.js +0 -147
  767. package/lib/rules/unnecessaryCatches.test.d.ts +0 -1
  768. package/lib/rules/unnecessaryCatches.test.js +0 -210
  769. package/lib/rules/unnecessaryConcatenation.test.d.ts +0 -1
  770. package/lib/rules/unnecessaryConcatenation.test.js +0 -87
  771. package/lib/rules/unsafeNegations.test.d.ts +0 -1
  772. package/lib/rules/unsafeNegations.test.js +0 -63
  773. package/lib/rules/variableDeletions.test.d.ts +0 -1
  774. package/lib/rules/variableDeletions.test.js +0 -75
  775. package/lib/rules/voidOperator.test.d.ts +0 -1
  776. package/lib/rules/voidOperator.test.js +0 -98
  777. package/lib/utils/declarationIncludesGlobal.d.ts +0 -2
  778. package/lib/utils/declarationIncludesGlobal.js +0 -5
  779. package/lib/utils/declarationsIncludeGlobal.d.ts +0 -2
  780. package/lib/utils/declarationsIncludeGlobal.js +0 -4
  781. package/lib/utils/getDeclarationsIfGlobal.d.ts +0 -2
  782. package/lib/utils/getDeclarationsIfGlobal.js +0 -7
  783. package/lib/utils/getModifyingReferences.d.ts +0 -8
  784. package/lib/utils/getModifyingReferences.js +0 -42
  785. package/lib/utils/hasSameTokens.d.ts +0 -2
  786. package/lib/utils/hasSameTokens.js +0 -30
  787. package/lib/utils/isGlobalDeclaration.d.ts +0 -2
  788. package/lib/utils/isGlobalDeclaration.js +0 -4
  789. package/lib/utils/isGlobalDeclarationOfName.d.ts +0 -5
  790. package/lib/utils/isGlobalDeclarationOfName.js +0 -35
  791. package/lib/utils/isGlobalVariable.d.ts +0 -8
  792. package/lib/utils/isGlobalVariable.js +0 -21
  793. package/lib/utils/unwrapParentParenthesizedExpressions.d.ts +0 -2
  794. package/lib/utils/unwrapParentParenthesizedExpressions.js +0 -6
  795. package/lib/utils/unwrapParenthesizedExpression.d.ts +0 -2
  796. package/lib/utils/unwrapParenthesizedExpression.js +0 -6
  797. package/src/collectReferencedFilePaths.ts +0 -37
  798. package/src/createTypeScriptFileFromProgram.ts +0 -86
  799. package/src/createTypeScriptFileFromProjectService.ts +0 -31
  800. package/src/directives/parseDirectivesFromTypeScriptFile.test.ts +0 -108
  801. package/src/directives/parseDirectivesFromTypeScriptFile.ts +0 -31
  802. package/src/formatDiagnostic.ts +0 -166
  803. package/src/getFirstEnumValues.test.ts +0 -51
  804. package/src/getFirstEnumValues.ts +0 -59
  805. package/src/getTSNodeRange.ts +0 -13
  806. package/src/index.ts +0 -7
  807. package/src/language.ts +0 -122
  808. package/src/nodes.ts +0 -146
  809. package/src/normalizeRange.ts +0 -25
  810. package/src/plugin.ts +0 -111
  811. package/src/prepareTypeScriptFile.ts +0 -14
  812. package/src/rules/anyReturns.test.ts +0 -649
  813. package/src/rules/anyReturns.ts +0 -263
  814. package/src/rules/asyncPromiseExecutors.test.ts +0 -72
  815. package/src/rules/asyncPromiseExecutors.ts +0 -61
  816. package/src/rules/caseDeclarations.test.ts +0 -228
  817. package/src/rules/caseDeclarations.ts +0 -70
  818. package/src/rules/caseDuplicates.test.ts +0 -308
  819. package/src/rules/caseDuplicates.ts +0 -57
  820. package/src/rules/chainedAssignments.test.ts +0 -263
  821. package/src/rules/chainedAssignments.ts +0 -58
  822. package/src/rules/classAssignments.test.ts +0 -157
  823. package/src/rules/classAssignments.ts +0 -50
  824. package/src/rules/consecutiveNonNullAssertions.test.ts +0 -33
  825. package/src/rules/consecutiveNonNullAssertions.ts +0 -46
  826. package/src/rules/constantAssignments.test.ts +0 -222
  827. package/src/rules/constantAssignments.ts +0 -78
  828. package/src/rules/constructorReturns.test.ts +0 -97
  829. package/src/rules/constructorReturns.ts +0 -59
  830. package/src/rules/debuggerStatements.test.ts +0 -81
  831. package/src/rules/debuggerStatements.ts +0 -45
  832. package/src/rules/defaultCaseLast.test.ts +0 -196
  833. package/src/rules/defaultCaseLast.ts +0 -54
  834. package/src/rules/duplicateArguments.test.ts +0 -140
  835. package/src/rules/duplicateArguments.ts +0 -58
  836. package/src/rules/elseIfDuplicates.test.ts +0 -177
  837. package/src/rules/elseIfDuplicates.ts +0 -69
  838. package/src/rules/emptyBlocks.test.ts +0 -136
  839. package/src/rules/emptyBlocks.ts +0 -73
  840. package/src/rules/emptyDestructures.test.ts +0 -187
  841. package/src/rules/emptyDestructures.ts +0 -48
  842. package/src/rules/emptyStaticBlocks.test.ts +0 -168
  843. package/src/rules/emptyStaticBlocks.ts +0 -60
  844. package/src/rules/exceptionAssignments.test.ts +0 -265
  845. package/src/rules/exceptionAssignments.ts +0 -77
  846. package/src/rules/forDirections.test.ts +0 -125
  847. package/src/rules/forDirections.ts +0 -174
  848. package/src/rules/forInArrays.test.ts +0 -25
  849. package/src/rules/forInArrays.ts +0 -70
  850. package/src/rules/functionAssignments.test.ts +0 -210
  851. package/src/rules/functionAssignments.ts +0 -51
  852. package/src/rules/functionNewCalls.test.ts +0 -116
  853. package/src/rules/functionNewCalls.ts +0 -75
  854. package/src/rules/generatorFunctionYields.test.ts +0 -152
  855. package/src/rules/generatorFunctionYields.ts +0 -71
  856. package/src/rules/globalAssignments.test.ts +0 -216
  857. package/src/rules/globalAssignments.ts +0 -67
  858. package/src/rules/globalObjectCalls.test.ts +0 -94
  859. package/src/rules/globalObjectCalls.ts +0 -52
  860. package/src/rules/namespaceDeclarations.test.ts +0 -41
  861. package/src/rules/namespaceDeclarations.ts +0 -74
  862. package/src/rules/negativeZeroComparisons.test.ts +0 -210
  863. package/src/rules/negativeZeroComparisons.ts +0 -87
  864. package/src/rules/newExpressions.test.ts +0 -80
  865. package/src/rules/newExpressions.ts +0 -67
  866. package/src/rules/newNativeNonConstructors.test.ts +0 -95
  867. package/src/rules/newNativeNonConstructors.ts +0 -59
  868. package/src/rules/nonOctalDecimalEscapes.test.ts +0 -70
  869. package/src/rules/nonOctalDecimalEscapes.ts +0 -70
  870. package/src/rules/numericLiteralParsing.test.ts +0 -100
  871. package/src/rules/numericLiteralParsing.ts +0 -116
  872. package/src/rules/objectProto.test.ts +0 -97
  873. package/src/rules/objectProto.ts +0 -62
  874. package/src/rules/octalEscapes.test.ts +0 -214
  875. package/src/rules/octalEscapes.ts +0 -85
  876. package/src/rules/octalNumbers.test.ts +0 -246
  877. package/src/rules/octalNumbers.ts +0 -75
  878. package/src/rules/returnAssignments.test.ts +0 -186
  879. package/src/rules/returnAssignments.ts +0 -57
  880. package/src/rules/ruleTester.ts +0 -4
  881. package/src/rules/selfAssignments.test.ts +0 -67
  882. package/src/rules/selfAssignments.ts +0 -50
  883. package/src/rules/selfComparisons.test.ts +0 -298
  884. package/src/rules/selfComparisons.ts +0 -45
  885. package/src/rules/sequences.test.ts +0 -49
  886. package/src/rules/sequences.ts +0 -37
  887. package/src/rules/shadowedRestrictedNames.test.ts +0 -148
  888. package/src/rules/shadowedRestrictedNames.ts +0 -105
  889. package/src/rules/sparseArrays.test.ts +0 -111
  890. package/src/rules/sparseArrays.ts +0 -61
  891. package/src/rules/symbolDescriptions.test.ts +0 -90
  892. package/src/rules/symbolDescriptions.ts +0 -47
  893. package/src/rules/typeofComparisons.test.ts +0 -86
  894. package/src/rules/typeofComparisons.ts +0 -88
  895. package/src/rules/unassignedVariables.test.ts +0 -73
  896. package/src/rules/unassignedVariables.ts +0 -69
  897. package/src/rules/undefinedVariables.test.ts +0 -81
  898. package/src/rules/undefinedVariables.ts +0 -97
  899. package/src/rules/unicodeBOMs.test.ts +0 -67
  900. package/src/rules/unicodeBOMs.ts +0 -44
  901. package/src/rules/unnecessaryBlocks.test.ts +0 -148
  902. package/src/rules/unnecessaryBlocks.ts +0 -89
  903. package/src/rules/unnecessaryCatches.test.ts +0 -211
  904. package/src/rules/unnecessaryCatches.ts +0 -84
  905. package/src/rules/unnecessaryConcatenation.test.ts +0 -88
  906. package/src/rules/unnecessaryConcatenation.ts +0 -44
  907. package/src/rules/unsafeNegations.test.ts +0 -64
  908. package/src/rules/unsafeNegations.ts +0 -59
  909. package/src/rules/utils/discriminateAnyType.ts +0 -66
  910. package/src/rules/utils/getConstrainedType.ts +0 -9
  911. package/src/rules/utils/getThisExpression.ts +0 -24
  912. package/src/rules/utils/isTypeRecursive.ts +0 -10
  913. package/src/rules/utils/isUnsafeAssignment.ts +0 -113
  914. package/src/rules/utils/operators.ts +0 -39
  915. package/src/rules/variableDeletions.test.ts +0 -76
  916. package/src/rules/variableDeletions.ts +0 -43
  917. package/src/rules/voidOperator.test.ts +0 -99
  918. package/src/rules/voidOperator.ts +0 -38
  919. package/src/utils/declarationIncludesGlobal.ts +0 -9
  920. package/src/utils/declarationsIncludeGlobal.ts +0 -7
  921. package/src/utils/getDeclarationsIfGlobal.ts +0 -14
  922. package/src/utils/getModifyingReferences.ts +0 -58
  923. package/src/utils/hasSameTokens.ts +0 -45
  924. package/src/utils/isGlobalDeclaration.ts +0 -10
  925. package/src/utils/isGlobalDeclarationOfName.ts +0 -56
  926. package/src/utils/isGlobalVariable.ts +0 -30
  927. package/src/utils/unwrapParentParenthesizedExpressions.ts +0 -7
  928. package/src/utils/unwrapParenthesizedExpression.ts +0 -9
  929. package/tsconfig.json +0 -9
  930. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,104 @@
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/regexQuestionQuantifiers.ts
8
+ function getQuantifierOffsets(quantifier) {
9
+ return [quantifier.element.end - quantifier.start, quantifier.greedy ? quantifier.end - quantifier.start : quantifier.end - quantifier.start - 1];
10
+ }
11
+ function hasTrailingEmptyAlternative(group) {
12
+ if (group.alternatives.length < 2) return false;
13
+ return !group.alternatives.at(-1).elements.length;
14
+ }
15
+ function isGroupQuantified(group) {
16
+ const parent = group.parent;
17
+ return parent.type === "Quantifier" && parent.element === group;
18
+ }
19
+ var regexQuestionQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
20
+ about: {
21
+ description: "Reports quantifiers `{0,1}` in regular expressions that should use `?` instead.",
22
+ id: "regexQuestionQuantifiers",
23
+ presets: ["stylisticStrict"]
24
+ },
25
+ messages: {
26
+ preferOptionalGroup: {
27
+ primary: "Prefer optional group syntax using `?` instead of a trailing empty alternative.",
28
+ secondary: ["Using `(?:...)?` is clearer than using an empty alternative `(?:...|)`."],
29
+ suggestions: ["Remove the trailing empty alternative and add `?` quantifier."]
30
+ },
31
+ preferQuestion: {
32
+ primary: "Prefer the more succinct `?` quantifier instead of '{{ quantifier }}'.",
33
+ secondary: ["The `?` quantifier is a more concise way to express matching zero or one of the preceding element."],
34
+ suggestions: ["Replace '{{ quantifier }}' with `?`."]
35
+ }
36
+ },
37
+ setup(context) {
38
+ function checkPattern(pattern, patternStart, flags, isStringPattern) {
39
+ const regexpAst = parseRegexpAst(pattern, flags);
40
+ if (!regexpAst) return;
41
+ visitRegExpAST(regexpAst, {
42
+ onGroupEnter(group) {
43
+ if (!hasTrailingEmptyAlternative(group) || isGroupQuantified(group)) return;
44
+ const removeStart = group.alternatives.at(-2).end - group.start;
45
+ const removeEnd = group.end - group.start;
46
+ context.report({
47
+ fix: {
48
+ range: {
49
+ begin: patternStart + group.start + removeStart,
50
+ end: patternStart + group.start + removeEnd
51
+ },
52
+ text: ")?"
53
+ },
54
+ message: "preferOptionalGroup",
55
+ range: {
56
+ begin: patternStart + group.start,
57
+ end: patternStart + group.end
58
+ }
59
+ });
60
+ },
61
+ onQuantifierEnter(quantifier) {
62
+ if (quantifier.min !== 0 || quantifier.max !== 1) return;
63
+ const [startOffset, endOffset] = getQuantifierOffsets(quantifier);
64
+ const quantifierText = quantifier.raw.slice(startOffset, endOffset);
65
+ if (quantifierText === "?") return;
66
+ const replacement = quantifier.greedy ? "?" : "??";
67
+ context.report({
68
+ data: { quantifier: quantifierText },
69
+ fix: {
70
+ range: {
71
+ begin: patternStart + quantifier.start + startOffset,
72
+ end: patternStart + quantifier.start + (isStringPattern ? endOffset : quantifier.raw.length)
73
+ },
74
+ text: replacement
75
+ },
76
+ message: "preferQuestion",
77
+ range: {
78
+ begin: patternStart + quantifier.start + startOffset,
79
+ end: patternStart + quantifier.start + endOffset
80
+ }
81
+ });
82
+ }
83
+ });
84
+ }
85
+ function checkRegexLiteral(node, services) {
86
+ const details = getRegExpLiteralDetails(node, services);
87
+ checkPattern(details.pattern, details.start, details.flags, false);
88
+ }
89
+ function checkRegExpConstructor(node, services) {
90
+ const construction = getRegExpConstruction(node, services);
91
+ if (!construction) return;
92
+ checkPattern(construction.raw, construction.start + 1, construction.flags, true);
93
+ }
94
+ return { visitors: {
95
+ CallExpression: checkRegExpConstructor,
96
+ NewExpression: checkRegExpConstructor,
97
+ RegularExpressionLiteral: checkRegexLiteral
98
+ } };
99
+ }
100
+ });
101
+ //#endregion
102
+ export { regexQuestionQuantifiers_default as default };
103
+
104
+ //# sourceMappingURL=regexQuestionQuantifiers.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports consecutive identical elements in regular expressions that should use quantifiers.";
3
+ readonly id: "regexRepeatQuantifiers";
4
+ readonly presets: ["stylistic", "stylisticStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "preferQuantifier", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexRepeatQuantifiers.d.ts.map
@@ -0,0 +1,96 @@
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/regexRepeatQuantifiers.ts
8
+ function getSignature(element) {
9
+ return element.type + ":" + element.raw;
10
+ }
11
+ function isFixableAtom(element) {
12
+ switch (element.type) {
13
+ case "Backreference":
14
+ case "CharacterClass":
15
+ case "CharacterSet": return true;
16
+ case "Character": return element.raw !== "{" && element.raw !== "}";
17
+ default: return false;
18
+ }
19
+ }
20
+ var regexRepeatQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
21
+ about: {
22
+ description: "Reports consecutive identical elements in regular expressions that should use quantifiers.",
23
+ id: "regexRepeatQuantifiers",
24
+ presets: ["stylistic", "stylisticStrict"]
25
+ },
26
+ messages: { preferQuantifier: {
27
+ primary: "Prefer `{{ replacement }}` instead of repeating `{{ atom }}` {{ count }} times.",
28
+ secondary: ["Using a quantifier is more concise than repeating the same element."],
29
+ suggestions: ["Replace with `{{ replacement }}`."]
30
+ } },
31
+ setup(context) {
32
+ function checkPattern(pattern, patternStart, flags) {
33
+ const regexpAst = parseRegexpAst(pattern, flags);
34
+ if (!regexpAst) return;
35
+ visitRegExpAST(regexpAst, { onAlternativeEnter(alternative) {
36
+ const elements = alternative.elements;
37
+ let index = 0;
38
+ while (index < elements.length) {
39
+ const element = elements[index];
40
+ if (!isFixableAtom(element)) {
41
+ index++;
42
+ continue;
43
+ }
44
+ const signature = getSignature(element);
45
+ let endIndex = index + 1;
46
+ while (endIndex < elements.length && isFixableAtom(elements[endIndex]) && getSignature(elements[endIndex]) === signature) endIndex++;
47
+ const count = endIndex - index;
48
+ if (count >= 5) {
49
+ const atomText = element.raw;
50
+ const replacement = atomText + "{" + String(count) + "}";
51
+ const runStart = element.start;
52
+ const runEnd = elements[endIndex - 1].end;
53
+ context.report({
54
+ data: {
55
+ atom: atomText,
56
+ count: String(count),
57
+ replacement
58
+ },
59
+ fix: {
60
+ range: {
61
+ begin: patternStart + runStart,
62
+ end: patternStart + runEnd
63
+ },
64
+ text: replacement
65
+ },
66
+ message: "preferQuantifier",
67
+ range: {
68
+ begin: patternStart + runStart,
69
+ end: patternStart + runEnd
70
+ }
71
+ });
72
+ }
73
+ index = endIndex;
74
+ }
75
+ } });
76
+ }
77
+ function checkRegexLiteral(node, services) {
78
+ const details = getRegExpLiteralDetails(node, services);
79
+ checkPattern(details.pattern, details.start, details.flags);
80
+ }
81
+ function checkRegExpConstructor(node, services) {
82
+ const construction = getRegExpConstruction(node, services);
83
+ if (!construction) return;
84
+ checkPattern(construction.raw, construction.start + 1, construction.flags);
85
+ }
86
+ return { visitors: {
87
+ CallExpression: checkRegExpConstructor,
88
+ NewExpression: checkRegExpConstructor,
89
+ RegularExpressionLiteral: checkRegexLiteral
90
+ } };
91
+ }
92
+ });
93
+ //#endregion
94
+ export { regexRepeatQuantifiers_default as default };
95
+
96
+ //# sourceMappingURL=regexRepeatQuantifiers.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports indexed access on regex result arrays when named capturing groups should be used.";
3
+ readonly id: "regexResultArrayGroups";
4
+ readonly presets: ["stylisticStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "preferGroups", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexResultArrayGroups.d.ts.map
@@ -0,0 +1,187 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { skipParentheses } from "./utils/skipParentheses.js";
3
+ import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
4
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
5
+ import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
6
+ import ts from "typescript";
7
+ import { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
8
+ //#region src/rules/regexResultArrayGroups.ts
9
+ function extractCallExpression(expression) {
10
+ const unwrapped = skipParentheses(expression);
11
+ if (ts.isCallExpression(unwrapped)) return unwrapped;
12
+ if (ts.isNonNullExpression(unwrapped) || ts.isAsExpression(unwrapped) || ts.isTypeAssertionExpression(unwrapped)) return extractCallExpression(unwrapped.expression);
13
+ }
14
+ function findAssignmentsToSymbol(symbol, sourceFile, typeChecker) {
15
+ const assignments = [];
16
+ function visit(node) {
17
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken && ts.isIdentifier(node.left)) {
18
+ if (typeChecker.getSymbolAtLocation(node.left) === symbol) assignments.push(node);
19
+ }
20
+ ts.forEachChild(node, visit);
21
+ }
22
+ visit(sourceFile);
23
+ return assignments;
24
+ }
25
+ function getNamedCapturingGroups(pattern, flags) {
26
+ const groups = [];
27
+ let ast;
28
+ try {
29
+ ast = parseRegExpLiteral(new RegExp(pattern, flags));
30
+ } catch {
31
+ return groups;
32
+ }
33
+ let index = 0;
34
+ visitRegExpAST(ast, { onCapturingGroupEnter(node) {
35
+ index++;
36
+ if (node.name) groups.push({
37
+ index,
38
+ name: node.name
39
+ });
40
+ } });
41
+ return groups;
42
+ }
43
+ function getNamedGroupsFromExpression(node, typeChecker, sourceFile) {
44
+ const unwrapped = skipParentheses(node);
45
+ if (ts.isIdentifier(unwrapped)) {
46
+ const symbol = typeChecker.getSymbolAtLocation(unwrapped);
47
+ if (symbol) return getRegexInfoFromSymbol(symbol.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(symbol) : symbol, typeChecker, sourceFile);
48
+ }
49
+ if (ts.isCallExpression(unwrapped)) {
50
+ const regexInfo = getRegexFromCall(unwrapped, typeChecker, sourceFile);
51
+ if (regexInfo) {
52
+ const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
53
+ if (namedGroups.length) return namedGroups;
54
+ }
55
+ }
56
+ if (ts.isNonNullExpression(unwrapped) || ts.isAsExpression(unwrapped) || ts.isTypeAssertionExpression(unwrapped)) return getNamedGroupsFromExpression(unwrapped.expression, typeChecker, sourceFile);
57
+ }
58
+ function getRegexFromCall(node, typeChecker, sourceFile) {
59
+ return getRegexFromExecCall(node, typeChecker, sourceFile) ?? getRegexFromMatchCall(node, typeChecker, sourceFile) ?? getRegexFromMatchAllCall(node, typeChecker, sourceFile);
60
+ }
61
+ function getRegexFromExecCall(node, typeChecker, sourceFile) {
62
+ if (!ts.isPropertyAccessExpression(node.expression)) return;
63
+ if (node.expression.name.text !== "exec" || node.arguments.length !== 1) return;
64
+ const regexObject = node.expression.expression;
65
+ return getRegexInfoFromExpression(regexObject, typeChecker, sourceFile);
66
+ }
67
+ function getRegexFromMatchAllCall(node, typeChecker, sourceFile) {
68
+ if (!ts.isPropertyAccessExpression(node.expression)) return;
69
+ if (node.expression.name.text !== "matchAll" || node.arguments.length !== 1) return;
70
+ if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
71
+ const regexArg = node.arguments[0];
72
+ return getRegexInfoFromExpression(regexArg, typeChecker, sourceFile);
73
+ }
74
+ function getRegexFromMatchCall(node, typeChecker, sourceFile) {
75
+ if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "match" || node.arguments.length !== 1) return;
76
+ if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
77
+ const regexArg = node.arguments[0];
78
+ const info = getRegexInfoFromExpression(regexArg, typeChecker, sourceFile);
79
+ if (info?.flags.includes("g")) return;
80
+ return info;
81
+ }
82
+ function getRegexInfoFromExpression(node, typeChecker, sourceFile) {
83
+ const unwrapped = skipParentheses(node);
84
+ if (ts.isRegularExpressionLiteral(unwrapped)) return getRegExpLiteralDetails(unwrapped, { sourceFile });
85
+ if (ts.isCallExpression(unwrapped) || ts.isNewExpression(unwrapped)) {
86
+ const construction = getRegExpConstruction(unwrapped, {
87
+ sourceFile,
88
+ typeChecker
89
+ });
90
+ if (construction) return {
91
+ flags: construction.flags,
92
+ pattern: construction.pattern.replace(/\\\\/g, "\\")
93
+ };
94
+ }
95
+ if (ts.isIdentifier(unwrapped)) {
96
+ const symbol = typeChecker.getSymbolAtLocation(unwrapped);
97
+ if (symbol) {
98
+ const declarations = symbol.getDeclarations();
99
+ if (declarations) {
100
+ for (const declaration of declarations) if (ts.isVariableDeclaration(declaration) && declaration.initializer) return getRegexInfoFromExpression(declaration.initializer, typeChecker, sourceFile);
101
+ }
102
+ }
103
+ }
104
+ }
105
+ function getRegexInfoFromSymbol(symbol, typeChecker, sourceFile) {
106
+ const declarations = symbol.getDeclarations();
107
+ if (declarations) for (const declaration of declarations) {
108
+ if (ts.isVariableDeclaration(declaration) && declaration.initializer) {
109
+ const callExpression = extractCallExpression(declaration.initializer);
110
+ if (callExpression) {
111
+ const regexInfo = getRegexFromCall(callExpression, typeChecker, sourceFile);
112
+ if (regexInfo) {
113
+ const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
114
+ if (namedGroups.length) return namedGroups;
115
+ }
116
+ }
117
+ }
118
+ if (ts.isParameter(declaration)) continue;
119
+ }
120
+ const assignments = findAssignmentsToSymbol(symbol, sourceFile, typeChecker);
121
+ for (const assignment of assignments) {
122
+ const callExpression = extractCallExpression(assignment.right);
123
+ if (callExpression) {
124
+ const regexInfo = getRegexFromCall(callExpression, typeChecker, sourceFile);
125
+ if (regexInfo) {
126
+ const namedGroups = getNamedCapturingGroups(regexInfo.pattern, regexInfo.flags);
127
+ if (namedGroups.length) return namedGroups;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ function isAnyType(type) {
133
+ return (type.flags & ts.TypeFlags.Any) !== 0;
134
+ }
135
+ function isRegExpExecArrayOrRegExpMatchArray(type, typeChecker) {
136
+ const symbol = type.getSymbol();
137
+ if (symbol) {
138
+ const name = symbol.getName();
139
+ if (name === "RegExpExecArray" || name === "RegExpMatchArray") return true;
140
+ }
141
+ if (type.isUnionOrIntersection()) return type.types.every((constituent) => isRegExpExecArrayOrRegExpMatchArray(constituent, typeChecker) || (constituent.flags & ts.TypeFlags.Null) !== 0 || (constituent.flags & ts.TypeFlags.Undefined) !== 0);
142
+ return false;
143
+ }
144
+ var regexResultArrayGroups_default = ruleCreator.createRule(typescriptLanguage, {
145
+ about: {
146
+ description: "Reports indexed access on regex result arrays when named capturing groups should be used.",
147
+ id: "regexResultArrayGroups",
148
+ presets: ["stylisticStrict"]
149
+ },
150
+ messages: { preferGroups: {
151
+ primary: "Use `.groups.{{ name }}` instead of numeric index for the named capturing group '{{ name }}'.",
152
+ secondary: ["When a regex has named capturing groups, accessing them by name is more readable and maintainable.", "Numeric indices are fragile and can break if the regex pattern is modified."],
153
+ suggestions: ["Replace the indexed access with `.groups.{{ name }}`.", "Use the named capturing group syntax for better code clarity."]
154
+ } },
155
+ setup(context) {
156
+ return { visitors: { ElementAccessExpression: (node, { sourceFile, typeChecker }) => {
157
+ const argument = skipParentheses(node.argumentExpression);
158
+ if (!ts.isNumericLiteral(argument)) return;
159
+ const index = Number(argument.text);
160
+ if (index <= 0 || !Number.isInteger(index)) return;
161
+ const object = skipParentheses(node.expression);
162
+ const objectType = typeChecker.getTypeAtLocation(object);
163
+ if (isAnyType(objectType)) return;
164
+ if (!isRegExpExecArrayOrRegExpMatchArray(objectType, typeChecker)) return;
165
+ const namedGroups = getNamedGroupsFromExpression(object, typeChecker, sourceFile);
166
+ if (!namedGroups) return;
167
+ const namedGroup = namedGroups.find((group) => group.index === index);
168
+ if (!namedGroup) return;
169
+ context.report({
170
+ data: { name: namedGroup.name },
171
+ fix: {
172
+ range: getTSNodeRange(node, sourceFile),
173
+ text: `${object.getText(sourceFile)}${node.questionDotToken ? "?" : ""}.groups.${namedGroup.name}`
174
+ },
175
+ message: "preferGroups",
176
+ range: {
177
+ begin: node.argumentExpression.getStart(sourceFile),
178
+ end: node.getEnd()
179
+ }
180
+ });
181
+ } } };
182
+ }
183
+ });
184
+ //#endregion
185
+ export { regexResultArrayGroups_default as default };
186
+
187
+ //# sourceMappingURL=regexResultArrayGroups.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports set operations in regular expressions that can be simplified.";
3
+ readonly id: "regexSetOperationOptimizations";
4
+ readonly presets: ["logical", "logicalStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "toIntersection" | "toNegationOfConjunction" | "toNegationOfDisjunction" | "toSubtraction", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexSetOperationOptimizations.d.ts.map
@@ -0,0 +1,177 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
3
+ import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
4
+ import { RegExpParser, visitRegExpAST } from "@eslint-community/regexpp";
5
+ import { toUnicodeSet } from "regexp-ast-analysis";
6
+ //#region src/rules/regexSetOperationOptimizations.ts
7
+ function collectIntersectionOperands(expression) {
8
+ const operands = [];
9
+ let operand = expression;
10
+ while (operand.type === "ClassIntersection") {
11
+ operands.push(operand.right);
12
+ operand = operand.left;
13
+ }
14
+ return [operand, ...operands.toReversed()];
15
+ }
16
+ function getParsedElement(pattern, unicodeSets) {
17
+ try {
18
+ const ast = new RegExpParser().parsePattern(pattern, void 0, void 0, {
19
+ unicode: false,
20
+ unicodeSets
21
+ });
22
+ if (ast.alternatives.length !== 1) return;
23
+ const alt = ast.alternatives[0];
24
+ if (alt.elements.length !== 1) return;
25
+ const element = alt.elements[0];
26
+ if (element.type === "Assertion" || element.type === "Quantifier" || element.type === "CapturingGroup" || element.type === "Group" || element.type === "Backreference") return;
27
+ return element;
28
+ } catch {
29
+ return;
30
+ }
31
+ }
32
+ function getRawTextToNot(negatedNode) {
33
+ if (negatedNode.type === "CharacterClass" || negatedNode.type === "ExpressionCharacterClass") return `${negatedNode.raw[0]}${negatedNode.raw.slice(2)}`;
34
+ const escapeChar = negatedNode.raw[1]?.toLowerCase();
35
+ if (!escapeChar) return negatedNode.raw;
36
+ return `${negatedNode.raw[0]}${escapeChar}${negatedNode.raw.slice(2)}`;
37
+ }
38
+ function hasNegate(node) {
39
+ return node.type === "CharacterClass" || node.type === "ExpressionCharacterClass" || node.type === "CharacterSet" && (node.kind !== "property" || !node.strings);
40
+ }
41
+ function isFixedPatternEquivalent(targetNode, fixedText, unicodeSets) {
42
+ const flags = {
43
+ unicode: false,
44
+ unicodeSets
45
+ };
46
+ const originalUs = toUnicodeSet(targetNode, flags);
47
+ const convertedElement = getParsedElement(fixedText, unicodeSets);
48
+ if (!convertedElement) return false;
49
+ const convertedUs = toUnicodeSet(convertedElement, flags);
50
+ return originalUs.equals(convertedUs);
51
+ }
52
+ function isNegated(node) {
53
+ return hasNegate(node) && node.negate;
54
+ }
55
+ var regexSetOperationOptimizations_default = ruleCreator.createRule(typescriptLanguage, {
56
+ about: {
57
+ description: "Reports set operations in regular expressions that can be simplified.",
58
+ id: "regexSetOperationOptimizations",
59
+ presets: ["logical", "logicalStrict"]
60
+ },
61
+ messages: {
62
+ toIntersection: {
63
+ primary: "This subtraction can be simplified to an intersection.",
64
+ secondary: ["Subtracting a negated set is equivalent to intersecting with the positive set.", "This simplification allows for a more clear and readable regular expression."],
65
+ suggestions: ["Convert the subtraction to an intersection."]
66
+ },
67
+ toNegationOfConjunction: {
68
+ primary: "This character class can be simplified to a negated conjunction.",
69
+ secondary: ["A union of negated sets is equivalent to the negation of their intersection.", "This simplification allows for a more clear and readable regular expression."],
70
+ suggestions: ["Convert to a negated conjunction."]
71
+ },
72
+ toNegationOfDisjunction: {
73
+ primary: "This {{ target }} can be simplified to a negated disjunction.",
74
+ secondary: ["An intersection of negated sets is equivalent to the negation of their union.", "This simplification allows for a more clear and readable regular expression."],
75
+ suggestions: ["Convert to a negated disjunction."]
76
+ },
77
+ toSubtraction: {
78
+ primary: "This intersection can be simplified to a subtraction.",
79
+ secondary: ["Intersecting with a negated set is equivalent to subtracting the positive set.", "This simplification allows for a more clear and readable regular expression."],
80
+ suggestions: ["Convert the intersection to a subtraction."]
81
+ }
82
+ },
83
+ setup(context) {
84
+ return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
85
+ const details = getRegExpLiteralDetails(node, { sourceFile });
86
+ if (!details.flags.includes("v")) return;
87
+ let regexpAst;
88
+ try {
89
+ regexpAst = new RegExpParser().parsePattern(details.pattern, void 0, void 0, {
90
+ unicode: false,
91
+ unicodeSets: true
92
+ });
93
+ } catch {
94
+ return;
95
+ }
96
+ const nodeRange = getTSNodeRange(node, sourceFile);
97
+ function reportWithFix(targetNode, messageId, fixedText, data) {
98
+ if (!details.pattern) return false;
99
+ if (!isFixedPatternEquivalent(targetNode, fixedText, true)) return false;
100
+ const newPattern = details.pattern.slice(0, targetNode.start) + fixedText + details.pattern.slice(targetNode.end);
101
+ context.report({
102
+ data,
103
+ fix: {
104
+ range: nodeRange,
105
+ text: `/${newPattern}/${details.flags}`
106
+ },
107
+ message: messageId,
108
+ range: nodeRange
109
+ });
110
+ return true;
111
+ }
112
+ function toNegationOfDisjunction(classNode) {
113
+ if (classNode.expression.type !== "ClassIntersection") return false;
114
+ const operands = collectIntersectionOperands(classNode.expression);
115
+ const negatedOperands = [];
116
+ const others = [];
117
+ for (const operand of operands) if (isNegated(operand)) negatedOperands.push(operand);
118
+ else others.push(operand);
119
+ if (negatedOperands.length < 2) return false;
120
+ const fixedOperands = negatedOperands.map((negatedOperand) => getRawTextToNot(negatedOperand)).join("");
121
+ if (negatedOperands.length === operands.length) return reportWithFix(classNode, "toNegationOfDisjunction", `[${classNode.negate ? "" : "^"}${fixedOperands}]`, { target: "character class" });
122
+ const operandTextList = [`[^${fixedOperands}]`, ...others.map((operand) => operand.raw)];
123
+ return reportWithFix(classNode, "toNegationOfDisjunction", `[${classNode.negate ? "^" : ""}${operandTextList.join("&&")}]`, { target: "expression" });
124
+ }
125
+ function toNegationOfConjunction(ccNode) {
126
+ if (ccNode.elements.length <= 1) return false;
127
+ const elements = ccNode.elements;
128
+ const negatedElements = elements.filter(isNegated);
129
+ if (negatedElements.length !== elements.length) return false;
130
+ const fixedElements = negatedElements.map((negatedElement) => getRawTextToNot(negatedElement));
131
+ return reportWithFix(ccNode, "toNegationOfConjunction", `[${ccNode.negate ? "" : "^"}${fixedElements.join("&&")}]`);
132
+ }
133
+ function toSubtraction(classNode) {
134
+ const expression = classNode.expression;
135
+ if (expression.type !== "ClassIntersection") return false;
136
+ const operands = collectIntersectionOperands(expression);
137
+ const negatedOperand = operands.find(isNegated);
138
+ if (!negatedOperand) return false;
139
+ const others = operands.filter((operand) => operand !== negatedOperand);
140
+ let fixedLeftText = others.map((operand) => operand.raw).join("&&");
141
+ if (others.length >= 2) fixedLeftText = `[${fixedLeftText}]`;
142
+ const fixedRightText = getRawTextToNot(negatedOperand);
143
+ return reportWithFix(classNode, "toSubtraction", `[${classNode.negate ? "^" : ""}${fixedLeftText}--${fixedRightText}]`);
144
+ }
145
+ function toIntersection(expression, expressionRight, eccNode) {
146
+ if (expression.type !== "ClassSubtraction") return false;
147
+ const { left, right } = expression;
148
+ if (!isNegated(right)) return false;
149
+ let fixedText = `${left.type === "ClassSubtraction" ? `[${left.raw}]` : left.raw}&&${getRawTextToNot(right)}`;
150
+ if (expressionRight) fixedText = `[${fixedText}]`;
151
+ const targetRaw = eccNode.raw;
152
+ return reportWithFix(eccNode, "toIntersection", targetRaw.slice(0, expression.start - eccNode.start) + fixedText + targetRaw.slice(expression.end - eccNode.start));
153
+ }
154
+ function verifyExpressions(eccNode) {
155
+ let operand = eccNode.expression;
156
+ let right = null;
157
+ while (operand.type === "ClassIntersection" || operand.type === "ClassSubtraction") {
158
+ toIntersection(operand, right, eccNode);
159
+ right = operand.right;
160
+ operand = operand.left;
161
+ }
162
+ }
163
+ visitRegExpAST(regexpAst, {
164
+ onCharacterClassEnter(ccNode) {
165
+ toNegationOfConjunction(ccNode);
166
+ },
167
+ onExpressionCharacterClassEnter(eccNode) {
168
+ if (!toNegationOfDisjunction(eccNode) && !toSubtraction(eccNode)) verifyExpressions(eccNode);
169
+ }
170
+ });
171
+ } } };
172
+ }
173
+ });
174
+ //#endregion
175
+ export { regexSetOperationOptimizations_default as default };
176
+
177
+ //# sourceMappingURL=regexSetOperationOptimizations.js.map
@@ -0,0 +1,10 @@
1
+ declare const _default: import("@flint.fyi/core").Rule<{
2
+ readonly description: "Reports standalone backslashes in regex patterns that look like incomplete escape sequences.";
3
+ readonly id: "regexStandaloneBackslashes";
4
+ readonly presets: ["logical", "logicalStrict"];
5
+ } & {
6
+ presets?: ("javascript" | "logical" | "logicalStrict" | "stylistic" | "stylisticStrict")[];
7
+ url: string;
8
+ }, object, object, "standaloneBackslash", import("@flint.fyi/core").AnyOptionalSchema>;
9
+ export default _default;
10
+ //# sourceMappingURL=regexStandaloneBackslashes.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { ruleCreator } from "./ruleCreator.js";
2
+ import { parseRegexpAst } from "./utils/parseRegexpAst.js";
3
+ import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
4
+ import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
5
+ import { typescriptLanguage } from "@flint.fyi/typescript-language";
6
+ import { visitRegExpAST } from "@eslint-community/regexpp";
7
+ //#region src/rules/regexStandaloneBackslashes.ts
8
+ const codepointBackslash = 92;
9
+ var regexStandaloneBackslashes_default = ruleCreator.createRule(typescriptLanguage, {
10
+ about: {
11
+ description: "Reports standalone backslashes in regex patterns that look like incomplete escape sequences.",
12
+ id: "regexStandaloneBackslashes",
13
+ presets: ["logical", "logicalStrict"]
14
+ },
15
+ messages: { standaloneBackslash: {
16
+ primary: "This standalone backslash (`\\`) looks like an incomplete escape sequence.",
17
+ secondary: ["This backslash is interpreted as a literal `\\` character because the following character doesn't form a valid escape sequence.", "This commonly happens with incomplete control escapes like `\\c` or `\\c1`."],
18
+ suggestions: ["Use a valid escape sequence or escape the backslash with `\\\\`."]
19
+ } },
20
+ setup(context) {
21
+ function findStandaloneBackslashes(pattern, flags) {
22
+ const results = [];
23
+ const regexpAst = parseRegexpAst(pattern, flags);
24
+ if (!regexpAst) return results;
25
+ visitRegExpAST(regexpAst, { onCharacterEnter(charNode) {
26
+ if (charNode.value === codepointBackslash && charNode.raw === "\\") results.push(charNode);
27
+ } });
28
+ return results;
29
+ }
30
+ function checkPattern(pattern, patternStart, flags) {
31
+ const backslashes = findStandaloneBackslashes(pattern, flags);
32
+ for (const backslash of backslashes) context.report({
33
+ message: "standaloneBackslash",
34
+ range: {
35
+ begin: patternStart + backslash.start,
36
+ end: patternStart + backslash.end
37
+ }
38
+ });
39
+ }
40
+ function checkRegexLiteral(node, services) {
41
+ const details = getRegExpLiteralDetails(node, services);
42
+ checkPattern(details.pattern, details.start, details.flags);
43
+ }
44
+ function checkRegExpConstructor(node, services) {
45
+ const construction = getRegExpConstruction(node, services);
46
+ if (!construction) return;
47
+ checkPattern(construction.pattern.replace(/\\\\/g, "\\"), construction.start + 1, construction.flags);
48
+ }
49
+ return { visitors: {
50
+ CallExpression: checkRegExpConstructor,
51
+ NewExpression: checkRegExpConstructor,
52
+ RegularExpressionLiteral: checkRegexLiteral
53
+ } };
54
+ }
55
+ });
56
+ //#endregion
57
+ export { regexStandaloneBackslashes_default as default };
58
+
59
+ //# sourceMappingURL=regexStandaloneBackslashes.js.map