eslint-plugin-sonarjs 4.0.3 → 4.1.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 (810) hide show
  1. package/README.md +52 -56
  2. package/cjs/S100/generated-meta.js +2 -1
  3. package/cjs/S101/generated-meta.js +2 -1
  4. package/cjs/S104/generated-meta.js +2 -1
  5. package/cjs/S105/generated-meta.js +2 -1
  6. package/cjs/S1066/generated-meta.js +2 -1
  7. package/cjs/S1067/generated-meta.js +2 -1
  8. package/cjs/S1110/generated-meta.js +2 -1
  9. package/cjs/S1119/generated-meta.js +2 -1
  10. package/cjs/S1121/generated-meta.js +2 -1
  11. package/cjs/S1125/generated-meta.js +2 -1
  12. package/cjs/S1126/generated-meta.js +2 -1
  13. package/cjs/S1128/generated-meta.js +2 -1
  14. package/cjs/S1134/generated-meta.js +2 -1
  15. package/cjs/S1135/generated-meta.js +2 -1
  16. package/cjs/S1154/generated-meta.js +2 -1
  17. package/cjs/S1154/rule.js +21 -2
  18. package/cjs/S117/generated-meta.js +2 -1
  19. package/cjs/S1172/generated-meta.js +2 -1
  20. package/cjs/S1192/generated-meta.js +2 -1
  21. package/cjs/S1219/generated-meta.js +2 -1
  22. package/cjs/S1226/generated-meta.js +2 -1
  23. package/cjs/S124/generated-meta.js +2 -1
  24. package/cjs/{S2255 → S1244}/generated-meta.js +8 -7
  25. package/cjs/S1244/meta.js +21 -0
  26. package/cjs/S1244/rule.js +265 -0
  27. package/cjs/S125/generated-meta.js +3 -2
  28. package/cjs/S126/generated-meta.js +2 -1
  29. package/cjs/S1264/generated-meta.js +2 -1
  30. package/cjs/S128/generated-meta.js +2 -1
  31. package/cjs/S1291/generated-meta.js +2 -1
  32. package/cjs/S1301/generated-meta.js +3 -2
  33. package/cjs/S1313/generated-meta.js +2 -1
  34. package/cjs/S134/generated-meta.js +2 -1
  35. package/cjs/S135/generated-meta.js +2 -1
  36. package/cjs/S138/generated-meta.js +2 -1
  37. package/cjs/S1439/generated-meta.js +2 -1
  38. package/cjs/S1444/generated-meta.js +2 -1
  39. package/cjs/S1451/generated-meta.js +2 -1
  40. package/cjs/S1472/generated-meta.js +2 -1
  41. package/cjs/S1479/generated-meta.js +2 -1
  42. package/cjs/S1481/generated-meta.js +2 -1
  43. package/cjs/S1488/generated-meta.js +2 -1
  44. package/cjs/S1515/generated-meta.js +2 -1
  45. package/cjs/S1523/generated-meta.js +3 -2
  46. package/cjs/S1526/generated-meta.js +2 -1
  47. package/cjs/S1527/generated-meta.js +2 -1
  48. package/cjs/S1528/generated-meta.js +2 -1
  49. package/cjs/S1529/generated-meta.js +2 -1
  50. package/cjs/S1530/generated-meta.js +2 -1
  51. package/cjs/S1533/generated-meta.js +2 -1
  52. package/cjs/S1535/generated-meta.js +2 -1
  53. package/cjs/S1541/generated-meta.js +2 -1
  54. package/cjs/S1607/generated-meta.js +2 -1
  55. package/cjs/S1607/rule.js +72 -7
  56. package/cjs/S1764/generated-meta.js +2 -1
  57. package/cjs/S1821/generated-meta.js +2 -1
  58. package/cjs/S1848/generated-meta.js +2 -1
  59. package/cjs/S1854/generated-meta.js +2 -1
  60. package/cjs/S1862/generated-meta.js +2 -1
  61. package/cjs/S1871/generated-meta.js +2 -1
  62. package/cjs/S1874/generated-meta.js +2 -1
  63. package/cjs/S1940/generated-meta.js +2 -1
  64. package/cjs/S1994/generated-meta.js +2 -1
  65. package/cjs/S2004/generated-meta.js +2 -1
  66. package/cjs/S2068/generated-meta.js +2 -1
  67. package/cjs/S2068/rule.js +0 -14
  68. package/cjs/S2077/generated-meta.js +3 -2
  69. package/cjs/S2092/generated-meta.js +2 -1
  70. package/cjs/S2123/generated-meta.js +2 -1
  71. package/cjs/S2137/generated-meta.js +2 -1
  72. package/cjs/S2138/generated-meta.js +2 -1
  73. package/cjs/S2187/generated-meta.js +2 -1
  74. package/cjs/S2187/rule.js +50 -13
  75. package/cjs/S2201/generated-meta.js +2 -1
  76. package/cjs/S2208/generated-meta.js +2 -1
  77. package/cjs/S2234/generated-meta.js +2 -1
  78. package/cjs/S2245/generated-meta.js +3 -2
  79. package/cjs/S2251/generated-meta.js +2 -1
  80. package/cjs/S2259/generated-meta.js +2 -1
  81. package/cjs/S2301/generated-meta.js +2 -1
  82. package/cjs/S2310/generated-meta.js +2 -1
  83. package/cjs/S2392/generated-meta.js +2 -1
  84. package/cjs/S2424/generated-meta.js +2 -1
  85. package/cjs/S2428/generated-meta.js +2 -1
  86. package/cjs/S2486/generated-meta.js +2 -1
  87. package/cjs/S2589/generated-meta.js +2 -1
  88. package/cjs/S2598/generated-meta.js +2 -1
  89. package/cjs/S2612/generated-meta.js +2 -1
  90. package/cjs/S2639/generated-meta.js +2 -1
  91. package/cjs/S2681/generated-meta.js +2 -1
  92. package/cjs/S2692/generated-meta.js +2 -1
  93. package/cjs/S2699/generated-meta.js +2 -1
  94. package/cjs/S2699/rule.js +19 -5
  95. package/cjs/S2703/generated-meta.js +2 -1
  96. package/cjs/S2737/generated-meta.js +2 -1
  97. package/cjs/S2755/generated-meta.js +2 -1
  98. package/cjs/S2757/generated-meta.js +2 -1
  99. package/cjs/S2817/generated-meta.js +2 -1
  100. package/cjs/S2819/generated-meta.js +2 -1
  101. package/cjs/S2870/generated-meta.js +2 -1
  102. package/cjs/S2871/generated-meta.js +2 -1
  103. package/cjs/S2871/rule.js +85 -1
  104. package/cjs/S2970/generated-meta.js +2 -1
  105. package/cjs/S2990/generated-meta.js +2 -1
  106. package/cjs/S2999/generated-meta.js +2 -1
  107. package/cjs/S3001/generated-meta.js +2 -1
  108. package/cjs/S3003/generated-meta.js +2 -1
  109. package/cjs/S3317/generated-meta.js +2 -1
  110. package/cjs/S3330/generated-meta.js +3 -2
  111. package/cjs/S3358/generated-meta.js +2 -1
  112. package/cjs/S3402/generated-meta.js +2 -1
  113. package/cjs/S3403/generated-meta.js +2 -1
  114. package/cjs/S3403/rule.js +21 -1
  115. package/cjs/S3415/generated-meta.js +2 -1
  116. package/cjs/S3499/generated-meta.js +2 -1
  117. package/cjs/S3500/generated-meta.js +2 -1
  118. package/cjs/S3513/generated-meta.js +2 -1
  119. package/cjs/S3514/generated-meta.js +2 -1
  120. package/cjs/S3516/generated-meta.js +2 -1
  121. package/cjs/S3524/generated-meta.js +2 -1
  122. package/cjs/S3525/generated-meta.js +2 -1
  123. package/cjs/S3531/generated-meta.js +2 -1
  124. package/cjs/S3533/generated-meta.js +2 -1
  125. package/cjs/S3579/generated-meta.js +2 -1
  126. package/cjs/S3616/generated-meta.js +2 -1
  127. package/cjs/S3626/generated-meta.js +2 -1
  128. package/cjs/S3626/rule.js +1 -1
  129. package/cjs/S3686/generated-meta.js +2 -1
  130. package/cjs/S3699/generated-meta.js +2 -1
  131. package/cjs/S3735/generated-meta.js +2 -1
  132. package/cjs/S3757/generated-meta.js +2 -1
  133. package/cjs/S3757/rule.js +3 -1
  134. package/cjs/S3758/generated-meta.js +2 -1
  135. package/cjs/S3760/generated-meta.js +2 -1
  136. package/cjs/S3776/generated-meta.js +2 -1
  137. package/cjs/S3782/generated-meta.js +2 -1
  138. package/cjs/S3785/generated-meta.js +2 -1
  139. package/cjs/S3796/generated-meta.js +2 -1
  140. package/cjs/S3798/generated-meta.js +2 -1
  141. package/cjs/S3798/rule.js +57 -17
  142. package/cjs/S3800/generated-meta.js +2 -1
  143. package/cjs/S3801/generated-meta.js +2 -1
  144. package/cjs/S3827/generated-meta.js +2 -1
  145. package/cjs/S3923/generated-meta.js +2 -1
  146. package/cjs/S3972/generated-meta.js +2 -1
  147. package/cjs/S3973/generated-meta.js +2 -1
  148. package/cjs/S3981/generated-meta.js +2 -1
  149. package/cjs/S3984/generated-meta.js +2 -1
  150. package/cjs/S4030/generated-meta.js +2 -1
  151. package/cjs/S4036/generated-meta.js +3 -2
  152. package/cjs/S4043/generated-meta.js +2 -1
  153. package/cjs/S4139/generated-meta.js +2 -1
  154. package/cjs/S4143/generated-meta.js +2 -1
  155. package/cjs/S4144/generated-meta.js +2 -1
  156. package/cjs/S4158/generated-meta.js +2 -1
  157. package/cjs/S4165/generated-meta.js +2 -1
  158. package/cjs/S4322/generated-meta.js +2 -1
  159. package/cjs/S4323/generated-meta.js +2 -1
  160. package/cjs/S4324/generated-meta.js +2 -1
  161. package/cjs/S4328/generated-meta.js +2 -1
  162. package/cjs/S4328/rule.js +7 -2
  163. package/cjs/S4335/generated-meta.js +2 -1
  164. package/cjs/S4423/generated-meta.js +2 -1
  165. package/cjs/S4426/generated-meta.js +2 -1
  166. package/cjs/S4502/generated-meta.js +3 -2
  167. package/cjs/S4507/generated-meta.js +3 -2
  168. package/cjs/S4524/generated-meta.js +2 -1
  169. package/cjs/S4619/generated-meta.js +2 -1
  170. package/cjs/S4621/generated-meta.js +2 -1
  171. package/cjs/S4622/generated-meta.js +2 -1
  172. package/cjs/S4623/generated-meta.js +2 -1
  173. package/cjs/S4624/generated-meta.js +2 -1
  174. package/cjs/S4624/rule.js +2 -7
  175. package/cjs/S4634/generated-meta.js +2 -1
  176. package/cjs/S4721/generated-meta.js +5 -4
  177. package/cjs/S4782/generated-meta.js +2 -1
  178. package/cjs/S4782/rule.js +96 -14
  179. package/cjs/S4790/generated-meta.js +3 -2
  180. package/cjs/S4790/rule.js +217 -2
  181. package/cjs/S4798/generated-meta.js +2 -1
  182. package/cjs/S4822/generated-meta.js +2 -1
  183. package/cjs/S4830/generated-meta.js +2 -1
  184. package/cjs/S5042/generated-meta.js +2 -1
  185. package/cjs/S5122/generated-meta.js +2 -1
  186. package/cjs/S5148/generated-meta.js +2 -1
  187. package/cjs/S5247/generated-meta.js +3 -2
  188. package/cjs/S5256/generated-meta.js +2 -1
  189. package/cjs/S5257/generated-meta.js +2 -1
  190. package/cjs/S5260/generated-meta.js +2 -1
  191. package/cjs/S5264/generated-meta.js +2 -1
  192. package/cjs/S5332/generated-meta.js +3 -2
  193. package/cjs/S5332/rule.lib.js +54 -46
  194. package/cjs/S5443/generated-meta.js +2 -1
  195. package/cjs/S5527/generated-meta.js +2 -1
  196. package/cjs/S5542/generated-meta.js +2 -1
  197. package/cjs/S5547/generated-meta.js +2 -1
  198. package/cjs/S5604/generated-meta.js +5 -4
  199. package/cjs/S5659/generated-meta.js +2 -1
  200. package/cjs/S5689/generated-meta.js +2 -1
  201. package/cjs/S5691/generated-meta.js +5 -4
  202. package/cjs/S5693/generated-meta.js +2 -1
  203. package/cjs/S5693/rule.js +45 -1
  204. package/cjs/S5725/generated-meta.js +3 -2
  205. package/cjs/S5725/rule.js +75 -12
  206. package/cjs/S5728/generated-meta.js +3 -2
  207. package/cjs/S5730/generated-meta.js +5 -4
  208. package/cjs/S5732/generated-meta.js +5 -4
  209. package/cjs/S5734/generated-meta.js +3 -2
  210. package/cjs/S5736/generated-meta.js +3 -2
  211. package/cjs/S5739/generated-meta.js +3 -2
  212. package/cjs/S5757/generated-meta.js +5 -4
  213. package/cjs/S5759/generated-meta.js +5 -4
  214. package/cjs/S5842/generated-meta.js +2 -1
  215. package/cjs/S5843/generated-meta.js +2 -1
  216. package/cjs/S5845/generated-meta.js +52 -0
  217. package/cjs/S5845/meta.js +21 -0
  218. package/cjs/S5845/rule.js +296 -0
  219. package/cjs/S5850/generated-meta.js +2 -1
  220. package/cjs/S5852/generated-meta.js +3 -2
  221. package/cjs/S5852/rule.js +11 -3
  222. package/cjs/S5856/generated-meta.js +2 -1
  223. package/cjs/S5860/generated-meta.js +2 -1
  224. package/cjs/S5863/generated-meta.js +2 -1
  225. package/cjs/S5867/generated-meta.js +2 -1
  226. package/cjs/S5868/generated-meta.js +2 -1
  227. package/cjs/S5868/rule.js +54 -25
  228. package/cjs/S5869/generated-meta.js +2 -1
  229. package/cjs/S5876/generated-meta.js +2 -1
  230. package/cjs/S5906/assertion-suggestions.js +279 -0
  231. package/cjs/S5906/assertion-utils.js +103 -0
  232. package/cjs/S5906/cypress-suggestions.js +62 -0
  233. package/cjs/S5906/expect-chain.js +16 -0
  234. package/cjs/S5906/generated-meta.js +52 -0
  235. package/cjs/S5906/meta.js +21 -0
  236. package/cjs/S5906/playwright-suggestions.js +103 -0
  237. package/cjs/S5906/rule.js +365 -0
  238. package/cjs/S5914/generated-meta.js +52 -0
  239. package/cjs/{S4817 → S5914}/meta.js +1 -1
  240. package/cjs/S5914/rule.js +213 -0
  241. package/cjs/S5958/generated-meta.js +2 -1
  242. package/cjs/S5973/generated-meta.js +2 -1
  243. package/cjs/S5973/rule.js +1 -1
  244. package/cjs/S6019/generated-meta.js +2 -1
  245. package/cjs/S6035/generated-meta.js +2 -1
  246. package/cjs/S6079/generated-meta.js +2 -1
  247. package/cjs/S6080/generated-meta.js +2 -1
  248. package/cjs/S6092/generated-meta.js +2 -1
  249. package/cjs/S6249/generated-meta.js +3 -2
  250. package/cjs/S6252/generated-meta.js +3 -2
  251. package/cjs/S6265/generated-meta.js +2 -1
  252. package/cjs/S6268/generated-meta.js +3 -2
  253. package/cjs/S6270/generated-meta.js +2 -1
  254. package/cjs/S6275/generated-meta.js +2 -1
  255. package/cjs/S6281/generated-meta.js +3 -2
  256. package/cjs/S6281/rule.js +7 -20
  257. package/cjs/S6302/generated-meta.js +2 -1
  258. package/cjs/S6303/generated-meta.js +2 -1
  259. package/cjs/S6304/generated-meta.js +3 -2
  260. package/cjs/S6308/generated-meta.js +2 -1
  261. package/cjs/S6317/generated-meta.js +2 -1
  262. package/cjs/S6319/generated-meta.js +3 -2
  263. package/cjs/S6321/generated-meta.js +2 -1
  264. package/cjs/S6323/generated-meta.js +2 -1
  265. package/cjs/S6324/generated-meta.js +2 -1
  266. package/cjs/S6324/rule.js +5 -5
  267. package/cjs/S6326/generated-meta.js +2 -1
  268. package/cjs/S6327/generated-meta.js +3 -2
  269. package/cjs/S6328/generated-meta.js +2 -1
  270. package/cjs/S6329/generated-meta.js +3 -2
  271. package/cjs/S6330/generated-meta.js +2 -1
  272. package/cjs/S6331/generated-meta.js +2 -1
  273. package/cjs/S6332/generated-meta.js +3 -2
  274. package/cjs/S6333/generated-meta.js +3 -2
  275. package/cjs/S6351/generated-meta.js +2 -1
  276. package/cjs/S6353/generated-meta.js +2 -1
  277. package/cjs/S6397/generated-meta.js +2 -1
  278. package/cjs/S6418/generated-meta.js +2 -1
  279. package/cjs/S6426/generated-meta.js +2 -1
  280. package/cjs/S6426/rule.js +6 -1
  281. package/cjs/S6437/generated-meta.js +2 -1
  282. package/cjs/S6437/rule.js +4 -2
  283. package/cjs/S6439/generated-meta.js +2 -1
  284. package/cjs/S6442/generated-meta.js +2 -1
  285. package/cjs/S6443/generated-meta.js +2 -1
  286. package/cjs/S6486/generated-meta.js +2 -1
  287. package/cjs/S6486/rule.js +4 -4
  288. package/cjs/S6564/generated-meta.js +2 -1
  289. package/cjs/S6594/generated-meta.js +2 -1
  290. package/cjs/S6627/generated-meta.js +2 -1
  291. package/cjs/S6759/generated-meta.js +2 -1
  292. package/cjs/S6759/rule.js +31 -1
  293. package/cjs/S6958/generated-meta.js +2 -1
  294. package/cjs/S6959/generated-meta.js +2 -1
  295. package/cjs/S7059/generated-meta.js +2 -1
  296. package/cjs/S7639/generated-meta.js +2 -1
  297. package/cjs/S7790/generated-meta.js +2 -1
  298. package/cjs/S8441/generated-meta.js +2 -1
  299. package/cjs/S8479/generated-meta.js +3 -2
  300. package/cjs/{S4817 → S8754}/generated-meta.js +10 -9
  301. package/cjs/{S5743 → S8754}/meta.js +1 -1
  302. package/cjs/S8754/rule.js +289 -0
  303. package/cjs/{S4784 → S8780}/generated-meta.js +9 -8
  304. package/cjs/{S2255 → S8780}/meta.js +1 -1
  305. package/cjs/S8780/rule.js +321 -0
  306. package/cjs/S8781/generated-meta.js +52 -0
  307. package/cjs/{S4787 → S8781}/meta.js +1 -1
  308. package/cjs/{S4784 → S8781}/rule.js +38 -46
  309. package/cjs/S8782/generated-meta.js +52 -0
  310. package/cjs/{S4784 → S8782}/meta.js +1 -1
  311. package/cjs/S8782/rule.js +148 -0
  312. package/cjs/S8783/generated-meta.js +52 -0
  313. package/cjs/S8783/meta.js +21 -0
  314. package/cjs/S8783/rule.js +167 -0
  315. package/cjs/{S4787 → S8786}/generated-meta.js +9 -8
  316. package/cjs/S8786/meta.js +22 -0
  317. package/cjs/{S4818 → S8786}/rule.js +24 -20
  318. package/cjs/S881/generated-meta.js +2 -1
  319. package/cjs/S888/generated-meta.js +2 -1
  320. package/cjs/S930/generated-meta.js +2 -1
  321. package/cjs/helpers/assertions-chai-common.js +29 -0
  322. package/cjs/helpers/assertions-chai.js +331 -0
  323. package/cjs/helpers/assertions-cypress.js +95 -0
  324. package/cjs/helpers/assertions.js +285 -0
  325. package/cjs/helpers/ast.js +30 -0
  326. package/cjs/helpers/chai.js +1 -1
  327. package/cjs/helpers/configs.js +37 -1
  328. package/cjs/helpers/cypress.js +73 -0
  329. package/cjs/helpers/dependency-manifests/all-in-parent-dirs.js +92 -0
  330. package/cjs/helpers/{package-jsons → dependency-manifests}/closest.js +17 -9
  331. package/cjs/helpers/dependency-manifests/dependencies.js +255 -0
  332. package/cjs/helpers/dependency-manifests/index.js +78 -0
  333. package/cjs/helpers/dependency-manifests/parse.js +51 -0
  334. package/cjs/helpers/dependency-manifests/parsed-dependency-files.js +80 -0
  335. package/cjs/helpers/dependency-manifests/resolvers/deno.js +79 -0
  336. package/cjs/helpers/dependency-manifests/resolvers/helpers.js +41 -0
  337. package/cjs/helpers/dependency-manifests/resolvers/package-json.js +167 -0
  338. package/cjs/helpers/dependency-manifests/resolvers/types.js +4 -0
  339. package/cjs/helpers/files.js +29 -0
  340. package/cjs/helpers/find-up/all-in-parent-dirs.js +1 -0
  341. package/cjs/helpers/find-up/closest.js +1 -0
  342. package/cjs/helpers/find-up/find-minimatch.js +2 -2
  343. package/cjs/helpers/generate-meta.js +1 -1
  344. package/cjs/helpers/mocha-style-test-frameworks.js +132 -0
  345. package/cjs/helpers/mocha.js +17 -7
  346. package/cjs/helpers/module.js +116 -23
  347. package/cjs/helpers/numbers.js +62 -0
  348. package/cjs/helpers/playwright.js +13 -0
  349. package/cjs/helpers/regex/extract.js +21 -9
  350. package/cjs/helpers/regex/flags.js +12 -5
  351. package/cjs/helpers/sinon.js +0 -4
  352. package/cjs/helpers/supertest.js +0 -4
  353. package/cjs/helpers/test-file-pattern.js +63 -0
  354. package/cjs/helpers/type-origin.js +82 -0
  355. package/cjs/helpers/type.js +162 -1
  356. package/cjs/helpers/vitest.js +0 -4
  357. package/cjs/plugin-rules.js +296 -298
  358. package/docs/async-test-assertions.md +7 -0
  359. package/docs/aws-apigateway-public-api.md +1 -1
  360. package/docs/aws-ec2-rds-dms-public.md +1 -1
  361. package/docs/aws-efs-unencrypted.md +1 -1
  362. package/docs/aws-iam-all-resources-accessible.md +1 -1
  363. package/docs/aws-s3-bucket-insecure-http.md +1 -1
  364. package/docs/aws-s3-bucket-public-access.md +1 -1
  365. package/docs/aws-s3-bucket-versioning.md +1 -1
  366. package/docs/aws-sagemaker-unencrypted-notebook.md +1 -1
  367. package/docs/aws-sns-unencrypted-topics.md +1 -1
  368. package/docs/code-eval.md +1 -1
  369. package/docs/confidential-information-logging.md +4 -2
  370. package/docs/content-security-policy.md +1 -1
  371. package/docs/cookie-no-httponly.md +1 -1
  372. package/docs/csrf.md +1 -1
  373. package/docs/disabled-auto-escaping.md +1 -1
  374. package/docs/disabled-resource-integrity.md +1 -1
  375. package/docs/dompurify-unsafe-config.md +2 -0
  376. package/docs/frame-ancestors.md +4 -2
  377. package/docs/hashing.md +1 -1
  378. package/docs/hidden-files.md +4 -2
  379. package/docs/hooks-before-test-cases.md +7 -0
  380. package/docs/no-angular-bypass-sanitization.md +1 -1
  381. package/docs/no-clear-text-protocols.md +1 -1
  382. package/docs/no-commented-code.md +1 -1
  383. package/docs/no-duplicate-test-title.md +7 -0
  384. package/docs/no-empty-test-title.md +7 -0
  385. package/docs/no-floating-point-equality.md +7 -0
  386. package/docs/no-forced-browser-interaction.md +7 -0
  387. package/docs/no-incompatible-assertion-types.md +9 -0
  388. package/docs/no-intrusive-permissions.md +4 -2
  389. package/docs/no-ip-forward.md +4 -2
  390. package/docs/no-mime-sniff.md +1 -1
  391. package/docs/no-mixed-content.md +4 -2
  392. package/docs/no-os-command-from-path.md +1 -1
  393. package/docs/no-referrer-policy.md +1 -1
  394. package/docs/no-small-switch.md +2 -0
  395. package/docs/no-trivial-assertions.md +7 -0
  396. package/docs/os-command.md +4 -2
  397. package/docs/prefer-specific-assertions.md +9 -0
  398. package/docs/production-debug.md +1 -1
  399. package/docs/pseudo-random.md +1 -1
  400. package/docs/slow-regex.md +1 -1
  401. package/docs/sql-queries.md +1 -1
  402. package/docs/strict-transport-security.md +1 -1
  403. package/docs/super-linear-regex.md +7 -0
  404. package/package.json +5 -4
  405. package/types/S100/generated-meta.d.ts +1 -0
  406. package/types/S101/generated-meta.d.ts +1 -0
  407. package/types/S104/generated-meta.d.ts +1 -0
  408. package/types/S105/generated-meta.d.ts +1 -0
  409. package/types/S1066/generated-meta.d.ts +1 -0
  410. package/types/S1067/generated-meta.d.ts +1 -0
  411. package/types/S1110/generated-meta.d.ts +1 -0
  412. package/types/S1119/generated-meta.d.ts +1 -0
  413. package/types/S1121/generated-meta.d.ts +1 -0
  414. package/types/S1125/generated-meta.d.ts +1 -0
  415. package/types/S1126/generated-meta.d.ts +1 -0
  416. package/types/S1128/generated-meta.d.ts +1 -0
  417. package/types/S1134/generated-meta.d.ts +1 -0
  418. package/types/S1135/generated-meta.d.ts +1 -0
  419. package/types/S1154/generated-meta.d.ts +1 -0
  420. package/types/S117/generated-meta.d.ts +1 -0
  421. package/types/S1172/generated-meta.d.ts +1 -0
  422. package/types/S1192/generated-meta.d.ts +1 -0
  423. package/types/S1219/generated-meta.d.ts +1 -0
  424. package/types/S1226/generated-meta.d.ts +1 -0
  425. package/types/S124/generated-meta.d.ts +1 -0
  426. package/types/{S2255 → S1244}/generated-meta.d.ts +3 -2
  427. package/types/S1244/meta.d.ts +2 -0
  428. package/types/S125/generated-meta.d.ts +1 -0
  429. package/types/S126/generated-meta.d.ts +1 -0
  430. package/types/S1264/generated-meta.d.ts +1 -0
  431. package/types/S128/generated-meta.d.ts +1 -0
  432. package/types/S1291/generated-meta.d.ts +1 -0
  433. package/types/S1301/generated-meta.d.ts +2 -1
  434. package/types/S1313/generated-meta.d.ts +1 -0
  435. package/types/S134/generated-meta.d.ts +1 -0
  436. package/types/S135/generated-meta.d.ts +1 -0
  437. package/types/S138/generated-meta.d.ts +1 -0
  438. package/types/S1439/generated-meta.d.ts +1 -0
  439. package/types/S1444/generated-meta.d.ts +1 -0
  440. package/types/S1451/generated-meta.d.ts +1 -0
  441. package/types/S1472/generated-meta.d.ts +1 -0
  442. package/types/S1479/generated-meta.d.ts +1 -0
  443. package/types/S1481/generated-meta.d.ts +1 -0
  444. package/types/S1488/generated-meta.d.ts +1 -0
  445. package/types/S1515/generated-meta.d.ts +1 -0
  446. package/types/S1523/generated-meta.d.ts +1 -0
  447. package/types/S1526/generated-meta.d.ts +1 -0
  448. package/types/S1527/generated-meta.d.ts +1 -0
  449. package/types/S1528/generated-meta.d.ts +1 -0
  450. package/types/S1529/generated-meta.d.ts +1 -0
  451. package/types/S1530/generated-meta.d.ts +1 -0
  452. package/types/S1533/generated-meta.d.ts +1 -0
  453. package/types/S1535/generated-meta.d.ts +1 -0
  454. package/types/S1541/generated-meta.d.ts +1 -0
  455. package/types/S1607/generated-meta.d.ts +1 -0
  456. package/types/S1764/generated-meta.d.ts +1 -0
  457. package/types/S1821/generated-meta.d.ts +1 -0
  458. package/types/S1848/generated-meta.d.ts +1 -0
  459. package/types/S1854/generated-meta.d.ts +1 -0
  460. package/types/S1862/generated-meta.d.ts +1 -0
  461. package/types/S1871/generated-meta.d.ts +1 -0
  462. package/types/S1874/generated-meta.d.ts +1 -0
  463. package/types/S1940/generated-meta.d.ts +1 -0
  464. package/types/S1994/generated-meta.d.ts +1 -0
  465. package/types/S2004/generated-meta.d.ts +1 -0
  466. package/types/S2068/generated-meta.d.ts +1 -0
  467. package/types/S2077/generated-meta.d.ts +1 -0
  468. package/types/S2092/generated-meta.d.ts +1 -0
  469. package/types/S2123/generated-meta.d.ts +1 -0
  470. package/types/S2137/generated-meta.d.ts +1 -0
  471. package/types/S2138/generated-meta.d.ts +1 -0
  472. package/types/S2187/generated-meta.d.ts +1 -0
  473. package/types/S2201/generated-meta.d.ts +1 -0
  474. package/types/S2208/generated-meta.d.ts +1 -0
  475. package/types/S2234/generated-meta.d.ts +1 -0
  476. package/types/S2245/generated-meta.d.ts +1 -0
  477. package/types/S2251/generated-meta.d.ts +1 -0
  478. package/types/S2259/generated-meta.d.ts +1 -0
  479. package/types/S2301/generated-meta.d.ts +1 -0
  480. package/types/S2310/generated-meta.d.ts +1 -0
  481. package/types/S2392/generated-meta.d.ts +1 -0
  482. package/types/S2424/generated-meta.d.ts +1 -0
  483. package/types/S2428/generated-meta.d.ts +1 -0
  484. package/types/S2486/generated-meta.d.ts +1 -0
  485. package/types/S2589/generated-meta.d.ts +1 -0
  486. package/types/S2598/generated-meta.d.ts +1 -0
  487. package/types/S2612/generated-meta.d.ts +1 -0
  488. package/types/S2639/generated-meta.d.ts +1 -0
  489. package/types/S2681/generated-meta.d.ts +1 -0
  490. package/types/S2692/generated-meta.d.ts +1 -0
  491. package/types/S2699/generated-meta.d.ts +1 -0
  492. package/types/S2703/generated-meta.d.ts +1 -0
  493. package/types/S2737/generated-meta.d.ts +1 -0
  494. package/types/S2755/generated-meta.d.ts +1 -0
  495. package/types/S2757/generated-meta.d.ts +1 -0
  496. package/types/S2817/generated-meta.d.ts +1 -0
  497. package/types/S2819/generated-meta.d.ts +1 -0
  498. package/types/S2870/generated-meta.d.ts +1 -0
  499. package/types/S2871/generated-meta.d.ts +1 -0
  500. package/types/S2970/generated-meta.d.ts +1 -0
  501. package/types/S2990/generated-meta.d.ts +1 -0
  502. package/types/S2999/generated-meta.d.ts +1 -0
  503. package/types/S3001/generated-meta.d.ts +1 -0
  504. package/types/S3003/generated-meta.d.ts +1 -0
  505. package/types/S3317/generated-meta.d.ts +1 -0
  506. package/types/S3330/generated-meta.d.ts +1 -0
  507. package/types/S3358/generated-meta.d.ts +1 -0
  508. package/types/S3402/generated-meta.d.ts +1 -0
  509. package/types/S3403/generated-meta.d.ts +1 -0
  510. package/types/S3415/generated-meta.d.ts +1 -0
  511. package/types/S3499/generated-meta.d.ts +1 -0
  512. package/types/S3500/generated-meta.d.ts +1 -0
  513. package/types/S3513/generated-meta.d.ts +1 -0
  514. package/types/S3514/generated-meta.d.ts +1 -0
  515. package/types/S3516/generated-meta.d.ts +1 -0
  516. package/types/S3524/generated-meta.d.ts +1 -0
  517. package/types/S3525/generated-meta.d.ts +1 -0
  518. package/types/S3531/generated-meta.d.ts +1 -0
  519. package/types/S3533/generated-meta.d.ts +1 -0
  520. package/types/S3579/generated-meta.d.ts +1 -0
  521. package/types/S3616/generated-meta.d.ts +1 -0
  522. package/types/S3626/generated-meta.d.ts +1 -0
  523. package/types/S3686/generated-meta.d.ts +1 -0
  524. package/types/S3699/generated-meta.d.ts +1 -0
  525. package/types/S3735/generated-meta.d.ts +1 -0
  526. package/types/S3757/generated-meta.d.ts +1 -0
  527. package/types/S3758/generated-meta.d.ts +1 -0
  528. package/types/S3760/generated-meta.d.ts +1 -0
  529. package/types/S3776/generated-meta.d.ts +1 -0
  530. package/types/S3782/generated-meta.d.ts +1 -0
  531. package/types/S3785/generated-meta.d.ts +1 -0
  532. package/types/S3796/generated-meta.d.ts +1 -0
  533. package/types/S3798/generated-meta.d.ts +1 -0
  534. package/types/S3800/generated-meta.d.ts +1 -0
  535. package/types/S3801/generated-meta.d.ts +1 -0
  536. package/types/S3827/generated-meta.d.ts +1 -0
  537. package/types/S3923/generated-meta.d.ts +1 -0
  538. package/types/S3972/generated-meta.d.ts +1 -0
  539. package/types/S3973/generated-meta.d.ts +1 -0
  540. package/types/S3981/generated-meta.d.ts +1 -0
  541. package/types/S3984/generated-meta.d.ts +1 -0
  542. package/types/S4030/generated-meta.d.ts +1 -0
  543. package/types/S4036/generated-meta.d.ts +1 -0
  544. package/types/S4043/generated-meta.d.ts +1 -0
  545. package/types/S4139/generated-meta.d.ts +1 -0
  546. package/types/S4143/generated-meta.d.ts +1 -0
  547. package/types/S4144/generated-meta.d.ts +1 -0
  548. package/types/S4158/generated-meta.d.ts +1 -0
  549. package/types/S4165/generated-meta.d.ts +1 -0
  550. package/types/S4322/generated-meta.d.ts +1 -0
  551. package/types/S4323/generated-meta.d.ts +1 -0
  552. package/types/S4324/generated-meta.d.ts +1 -0
  553. package/types/S4328/generated-meta.d.ts +1 -0
  554. package/types/S4335/generated-meta.d.ts +1 -0
  555. package/types/S4423/generated-meta.d.ts +1 -0
  556. package/types/S4426/generated-meta.d.ts +1 -0
  557. package/types/S4502/generated-meta.d.ts +1 -0
  558. package/types/S4507/generated-meta.d.ts +1 -0
  559. package/types/S4524/generated-meta.d.ts +1 -0
  560. package/types/S4619/generated-meta.d.ts +1 -0
  561. package/types/S4621/generated-meta.d.ts +1 -0
  562. package/types/S4622/generated-meta.d.ts +1 -0
  563. package/types/S4623/generated-meta.d.ts +1 -0
  564. package/types/S4624/generated-meta.d.ts +1 -0
  565. package/types/S4634/generated-meta.d.ts +1 -0
  566. package/types/S4721/generated-meta.d.ts +2 -1
  567. package/types/S4782/generated-meta.d.ts +1 -0
  568. package/types/S4790/generated-meta.d.ts +1 -0
  569. package/types/S4798/generated-meta.d.ts +1 -0
  570. package/types/S4822/generated-meta.d.ts +1 -0
  571. package/types/S4830/generated-meta.d.ts +1 -0
  572. package/types/S5042/generated-meta.d.ts +1 -0
  573. package/types/S5122/generated-meta.d.ts +1 -0
  574. package/types/S5148/generated-meta.d.ts +1 -0
  575. package/types/S5247/generated-meta.d.ts +1 -0
  576. package/types/S5256/generated-meta.d.ts +1 -0
  577. package/types/S5257/generated-meta.d.ts +1 -0
  578. package/types/S5260/generated-meta.d.ts +1 -0
  579. package/types/S5264/generated-meta.d.ts +1 -0
  580. package/types/S5332/generated-meta.d.ts +1 -0
  581. package/types/S5443/generated-meta.d.ts +1 -0
  582. package/types/S5527/generated-meta.d.ts +1 -0
  583. package/types/S5542/generated-meta.d.ts +1 -0
  584. package/types/S5547/generated-meta.d.ts +1 -0
  585. package/types/S5604/generated-meta.d.ts +2 -1
  586. package/types/S5659/generated-meta.d.ts +1 -0
  587. package/types/S5689/generated-meta.d.ts +1 -0
  588. package/types/S5691/generated-meta.d.ts +2 -1
  589. package/types/S5693/generated-meta.d.ts +1 -0
  590. package/types/S5725/generated-meta.d.ts +1 -0
  591. package/types/S5728/generated-meta.d.ts +1 -0
  592. package/types/S5730/generated-meta.d.ts +2 -1
  593. package/types/S5732/generated-meta.d.ts +2 -1
  594. package/types/S5734/generated-meta.d.ts +1 -0
  595. package/types/S5736/generated-meta.d.ts +1 -0
  596. package/types/S5739/generated-meta.d.ts +1 -0
  597. package/types/S5757/generated-meta.d.ts +2 -1
  598. package/types/S5759/generated-meta.d.ts +2 -1
  599. package/types/S5842/generated-meta.d.ts +1 -0
  600. package/types/S5843/generated-meta.d.ts +1 -0
  601. package/types/S5845/generated-meta.d.ts +18 -0
  602. package/types/S5845/meta.d.ts +2 -0
  603. package/types/S5850/generated-meta.d.ts +1 -0
  604. package/types/S5852/generated-meta.d.ts +1 -0
  605. package/types/S5856/generated-meta.d.ts +1 -0
  606. package/types/S5860/generated-meta.d.ts +1 -0
  607. package/types/S5863/generated-meta.d.ts +1 -0
  608. package/types/S5867/generated-meta.d.ts +1 -0
  609. package/types/S5868/generated-meta.d.ts +1 -0
  610. package/types/S5869/generated-meta.d.ts +1 -0
  611. package/types/S5876/generated-meta.d.ts +1 -0
  612. package/types/S5906/assertion-suggestions.d.ts +7 -0
  613. package/types/S5906/assertion-utils.d.ts +14 -0
  614. package/types/S5906/cypress-suggestions.d.ts +4 -0
  615. package/types/S5906/expect-chain.d.ts +5 -0
  616. package/types/S5906/generated-meta.d.ts +18 -0
  617. package/types/S5906/meta.d.ts +2 -0
  618. package/types/S5906/playwright-suggestions.d.ts +4 -0
  619. package/types/{S4817 → S5914}/generated-meta.d.ts +5 -4
  620. package/types/S5914/meta.d.ts +2 -0
  621. package/types/S5958/generated-meta.d.ts +1 -0
  622. package/types/S5973/generated-meta.d.ts +1 -0
  623. package/types/S6019/generated-meta.d.ts +1 -0
  624. package/types/S6035/generated-meta.d.ts +1 -0
  625. package/types/S6079/generated-meta.d.ts +1 -0
  626. package/types/S6080/generated-meta.d.ts +1 -0
  627. package/types/S6092/generated-meta.d.ts +1 -0
  628. package/types/S6249/generated-meta.d.ts +1 -0
  629. package/types/S6252/generated-meta.d.ts +1 -0
  630. package/types/S6265/generated-meta.d.ts +1 -0
  631. package/types/S6268/generated-meta.d.ts +1 -0
  632. package/types/S6270/generated-meta.d.ts +1 -0
  633. package/types/S6275/generated-meta.d.ts +1 -0
  634. package/types/S6281/generated-meta.d.ts +1 -0
  635. package/types/S6302/generated-meta.d.ts +1 -0
  636. package/types/S6303/generated-meta.d.ts +1 -0
  637. package/types/S6304/generated-meta.d.ts +1 -0
  638. package/types/S6308/generated-meta.d.ts +1 -0
  639. package/types/S6317/generated-meta.d.ts +1 -0
  640. package/types/S6319/generated-meta.d.ts +1 -0
  641. package/types/S6321/generated-meta.d.ts +1 -0
  642. package/types/S6323/generated-meta.d.ts +1 -0
  643. package/types/S6324/generated-meta.d.ts +1 -0
  644. package/types/S6326/generated-meta.d.ts +1 -0
  645. package/types/S6327/generated-meta.d.ts +1 -0
  646. package/types/S6328/generated-meta.d.ts +1 -0
  647. package/types/S6329/generated-meta.d.ts +1 -0
  648. package/types/S6330/generated-meta.d.ts +1 -0
  649. package/types/S6331/generated-meta.d.ts +1 -0
  650. package/types/S6332/generated-meta.d.ts +1 -0
  651. package/types/S6333/generated-meta.d.ts +1 -0
  652. package/types/S6351/generated-meta.d.ts +1 -0
  653. package/types/S6353/generated-meta.d.ts +1 -0
  654. package/types/S6397/generated-meta.d.ts +1 -0
  655. package/types/S6418/generated-meta.d.ts +1 -0
  656. package/types/S6426/generated-meta.d.ts +1 -0
  657. package/types/S6437/generated-meta.d.ts +1 -0
  658. package/types/S6439/generated-meta.d.ts +1 -0
  659. package/types/S6442/generated-meta.d.ts +1 -0
  660. package/types/S6443/generated-meta.d.ts +1 -0
  661. package/types/S6486/generated-meta.d.ts +1 -0
  662. package/types/S6564/generated-meta.d.ts +1 -0
  663. package/types/S6594/generated-meta.d.ts +1 -0
  664. package/types/S6627/generated-meta.d.ts +1 -0
  665. package/types/S6759/generated-meta.d.ts +1 -0
  666. package/types/S6958/generated-meta.d.ts +1 -0
  667. package/types/S6959/generated-meta.d.ts +1 -0
  668. package/types/S7059/generated-meta.d.ts +1 -0
  669. package/types/S7639/generated-meta.d.ts +1 -0
  670. package/types/S7790/generated-meta.d.ts +1 -0
  671. package/types/S8441/generated-meta.d.ts +1 -0
  672. package/types/S8479/generated-meta.d.ts +2 -1
  673. package/types/S8754/generated-meta.d.ts +18 -0
  674. package/types/{S5743 → S8754}/meta.d.ts +1 -1
  675. package/types/{S4787 → S8780}/generated-meta.d.ts +4 -3
  676. package/types/S8780/meta.d.ts +2 -0
  677. package/types/S8781/generated-meta.d.ts +18 -0
  678. package/types/S8781/meta.d.ts +2 -0
  679. package/types/S8782/generated-meta.d.ts +18 -0
  680. package/types/S8782/meta.d.ts +2 -0
  681. package/types/S8783/generated-meta.d.ts +18 -0
  682. package/types/S8783/meta.d.ts +2 -0
  683. package/types/{S4784 → S8786}/generated-meta.d.ts +4 -3
  684. package/types/S8786/meta.d.ts +2 -0
  685. package/types/S881/generated-meta.d.ts +1 -0
  686. package/types/S888/generated-meta.d.ts +1 -0
  687. package/types/S930/generated-meta.d.ts +1 -0
  688. package/types/helpers/assertions-chai-common.d.ts +7 -0
  689. package/types/helpers/assertions-chai.d.ts +4 -0
  690. package/types/helpers/assertions-cypress.d.ts +7 -0
  691. package/types/helpers/assertions.d.ts +39 -0
  692. package/types/helpers/ast.d.ts +10 -0
  693. package/types/helpers/configs.d.ts +7 -38
  694. package/types/helpers/cypress.d.ts +11 -0
  695. package/types/helpers/dependency-manifests/all-in-parent-dirs.d.ts +18 -0
  696. package/types/helpers/dependency-manifests/closest.d.ts +5 -0
  697. package/types/helpers/{package-jsons → dependency-manifests}/dependencies.d.ts +22 -17
  698. package/types/helpers/dependency-manifests/index.d.ts +22 -0
  699. package/types/helpers/dependency-manifests/parse.d.ts +12 -0
  700. package/types/helpers/dependency-manifests/parsed-dependency-files.d.ts +8 -0
  701. package/types/helpers/dependency-manifests/resolvers/deno.d.ts +12 -0
  702. package/types/helpers/dependency-manifests/resolvers/helpers.d.ts +12 -0
  703. package/types/helpers/dependency-manifests/resolvers/package-json.d.ts +2 -0
  704. package/types/helpers/dependency-manifests/resolvers/types.d.ts +46 -0
  705. package/types/helpers/files.d.ts +10 -2
  706. package/types/helpers/generate-meta.d.ts +5 -0
  707. package/types/helpers/mocha-style-test-frameworks.d.ts +19 -0
  708. package/types/helpers/mocha.d.ts +7 -0
  709. package/types/helpers/module.d.ts +14 -8
  710. package/types/helpers/numbers.d.ts +4 -0
  711. package/types/helpers/playwright.d.ts +2 -0
  712. package/types/helpers/regex/extract.d.ts +7 -3
  713. package/types/helpers/sinon.d.ts +0 -1
  714. package/types/helpers/supertest.d.ts +0 -1
  715. package/types/helpers/test-file-pattern.d.ts +17 -0
  716. package/types/helpers/type-origin.d.ts +31 -0
  717. package/types/helpers/type.d.ts +92 -1
  718. package/types/helpers/vitest.d.ts +0 -1
  719. package/types/plugin-rules.d.ts +10 -11
  720. package/cjs/S2255/rule.js +0 -111
  721. package/cjs/S4787/rule.js +0 -124
  722. package/cjs/S4817/rule.js +0 -103
  723. package/cjs/S4818/generated-meta.js +0 -51
  724. package/cjs/S4818/meta.js +0 -21
  725. package/cjs/S4823/generated-meta.js +0 -51
  726. package/cjs/S4823/meta.js +0 -21
  727. package/cjs/S4823/rule.js +0 -75
  728. package/cjs/S4829/generated-meta.js +0 -51
  729. package/cjs/S4829/meta.js +0 -21
  730. package/cjs/S4829/rule.js +0 -75
  731. package/cjs/S5742/generated-meta.js +0 -51
  732. package/cjs/S5742/meta.js +0 -22
  733. package/cjs/S5742/rule.js +0 -75
  734. package/cjs/S5743/generated-meta.js +0 -51
  735. package/cjs/S5743/rule.js +0 -78
  736. package/cjs/S6245/generated-meta.js +0 -51
  737. package/cjs/S6245/meta.js +0 -22
  738. package/cjs/S6245/rule.js +0 -87
  739. package/cjs/S6299/generated-meta.js +0 -51
  740. package/cjs/S6299/index.js +0 -21
  741. package/cjs/S6299/meta.js +0 -21
  742. package/cjs/S6299/rule.js +0 -93
  743. package/cjs/helpers/package-jsons/all-in-parent-dirs.js +0 -31
  744. package/cjs/helpers/package-jsons/dependencies.js +0 -221
  745. package/cjs/helpers/package-jsons/index.js +0 -42
  746. package/cjs/helpers/package-jsons/parse.js +0 -79
  747. package/docs/aws-s3-bucket-server-encryption.md +0 -9
  748. package/docs/certificate-transparency.md +0 -9
  749. package/docs/cookies.md +0 -9
  750. package/docs/dns-prefetching.md +0 -9
  751. package/docs/encryption.md +0 -9
  752. package/docs/no-vue-bypass-sanitization.md +0 -9
  753. package/docs/process-argv.md +0 -9
  754. package/docs/regular-expr.md +0 -9
  755. package/docs/sockets.md +0 -9
  756. package/docs/standard-input.md +0 -9
  757. package/docs/xpath.md +0 -9
  758. package/types/S2255/meta.d.ts +0 -2
  759. package/types/S4784/meta.d.ts +0 -2
  760. package/types/S4787/meta.d.ts +0 -2
  761. package/types/S4817/meta.d.ts +0 -2
  762. package/types/S4818/generated-meta.d.ts +0 -17
  763. package/types/S4818/meta.d.ts +0 -2
  764. package/types/S4823/generated-meta.d.ts +0 -17
  765. package/types/S4823/meta.d.ts +0 -2
  766. package/types/S4829/generated-meta.d.ts +0 -17
  767. package/types/S4829/meta.d.ts +0 -2
  768. package/types/S5742/generated-meta.d.ts +0 -17
  769. package/types/S5742/meta.d.ts +0 -3
  770. package/types/S5743/generated-meta.d.ts +0 -17
  771. package/types/S6245/generated-meta.d.ts +0 -17
  772. package/types/S6245/meta.d.ts +0 -3
  773. package/types/S6299/generated-meta.d.ts +0 -17
  774. package/types/S6299/index.d.ts +0 -1
  775. package/types/S6299/meta.d.ts +0 -2
  776. package/types/S6299/rule.d.ts +0 -2
  777. package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +0 -10
  778. package/types/helpers/package-jsons/closest.d.ts +0 -2
  779. package/types/helpers/package-jsons/index.d.ts +0 -8
  780. package/types/helpers/package-jsons/parse.d.ts +0 -13
  781. /package/cjs/{S2255 → S1244}/index.js +0 -0
  782. /package/cjs/{S4784 → S5845}/index.js +0 -0
  783. /package/cjs/{S4787 → S5906}/index.js +0 -0
  784. /package/cjs/{S4817 → S5914}/index.js +0 -0
  785. /package/cjs/{S4818 → S8754}/index.js +0 -0
  786. /package/cjs/{S4823 → S8780}/index.js +0 -0
  787. /package/cjs/{S4829 → S8781}/index.js +0 -0
  788. /package/cjs/{S5742 → S8782}/index.js +0 -0
  789. /package/cjs/{S5743 → S8783}/index.js +0 -0
  790. /package/cjs/{S6245 → S8786}/index.js +0 -0
  791. /package/types/{S2255 → S1244}/index.d.ts +0 -0
  792. /package/types/{S2255 → S1244}/rule.d.ts +0 -0
  793. /package/types/{S4784 → S5845}/index.d.ts +0 -0
  794. /package/types/{S4784 → S5845}/rule.d.ts +0 -0
  795. /package/types/{S4787 → S5906}/index.d.ts +0 -0
  796. /package/types/{S4787 → S5906}/rule.d.ts +0 -0
  797. /package/types/{S4817 → S5914}/index.d.ts +0 -0
  798. /package/types/{S4817 → S5914}/rule.d.ts +0 -0
  799. /package/types/{S4818 → S8754}/index.d.ts +0 -0
  800. /package/types/{S4818 → S8754}/rule.d.ts +0 -0
  801. /package/types/{S4823 → S8780}/index.d.ts +0 -0
  802. /package/types/{S4823 → S8780}/rule.d.ts +0 -0
  803. /package/types/{S4829 → S8781}/index.d.ts +0 -0
  804. /package/types/{S4829 → S8781}/rule.d.ts +0 -0
  805. /package/types/{S5742 → S8782}/index.d.ts +0 -0
  806. /package/types/{S5742 → S8782}/rule.d.ts +0 -0
  807. /package/types/{S5743 → S8783}/index.d.ts +0 -0
  808. /package/types/{S5743 → S8783}/rule.d.ts +0 -0
  809. /package/types/{S6245 → S8786}/index.d.ts +0 -0
  810. /package/types/{S6245 → S8786}/rule.d.ts +0 -0
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ /*
3
+ * SonarQube JavaScript Plugin
4
+ * Copyright (C) SonarSource Sàrl
5
+ * mailto:info AT sonarsource DOT com
6
+ *
7
+ * You can redistribute and/or modify this program under the terms of
8
+ * the Sonar Source-Available License Version 1, as published by SonarSource Sàrl.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the Sonar Source-Available License for more details.
14
+ *
15
+ * You should have received a copy of the Sonar Source-Available License
16
+ * along with this program; if not, see https://sonarsource.com/license/ssal/
17
+ */
18
+ // https://sonarsource.github.io/rspec/#/rspec/S8754/javascript
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.rule = void 0;
54
+ const ast_js_1 = require("../helpers/ast.js");
55
+ const ancestor_js_1 = require("../helpers/ancestor.js");
56
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
57
+ const location_js_1 = require("../helpers/location.js");
58
+ const module_js_1 = require("../helpers/module.js");
59
+ const mocha_style_test_frameworks_js_1 = require("../helpers/mocha-style-test-frameworks.js");
60
+ const meta = __importStar(require("./generated-meta.js"));
61
+ const PLAYWRIGHT_DISABLED_DESCRIBE_MODIFIERS = new Set(['skip', 'fixme']);
62
+ const MESSAGE = 'Rename this test title to make it unique within the suite.';
63
+ const MESSAGE_ID = 'renameDuplicateTitle';
64
+ exports.rule = {
65
+ meta: (0, generate_meta_js_1.generateMeta)(meta, {
66
+ messages: {
67
+ [MESSAGE_ID]: MESSAGE,
68
+ },
69
+ }),
70
+ create(context) {
71
+ if (!(0, module_js_1.importsOrDependsOnModule)(context, mocha_style_test_frameworks_js_1.SUPPORTED_TEST_FRAMEWORKS, mocha_style_test_frameworks_js_1.SUPPORTED_TEST_FRAMEWORKS)) {
72
+ return {};
73
+ }
74
+ let suiteStack = [createSuiteFrame()];
75
+ const pushedSuiteCalls = new Set();
76
+ const concreteSuiteCallbacks = new Set();
77
+ const helperExpansionPath = new Set();
78
+ let testNesting = 0;
79
+ let ignoredSuiteNesting = 0;
80
+ let functionNesting = 0;
81
+ let concreteSuiteCallbackNesting = 0;
82
+ return {
83
+ CallExpression(node) {
84
+ if (isIgnoredSuiteDeclaration(context, node)) {
85
+ ignoredSuiteNesting++;
86
+ }
87
+ else if (isSuiteDeclaration(context, node)) {
88
+ pushedSuiteCalls.add(node);
89
+ const callback = getCallback(node);
90
+ if (callback !== undefined) {
91
+ concreteSuiteCallbacks.add(callback);
92
+ }
93
+ suiteStack.push(createSuiteFrame());
94
+ }
95
+ const currentSuiteFrame = suiteStack.at(-1);
96
+ if (currentSuiteFrame !== undefined &&
97
+ ignoredSuiteNesting === 0 &&
98
+ testNesting === 0 &&
99
+ isInConcreteCollectionCallback(functionNesting, concreteSuiteCallbackNesting)) {
100
+ if (isTestDeclaration(context, node)) {
101
+ checkTestTitle(context, node, currentSuiteFrame);
102
+ }
103
+ else {
104
+ checkHelperDefinedTests(context, node, currentSuiteFrame, helperExpansionPath);
105
+ }
106
+ }
107
+ if (isConcreteTestDeclaration(context, node)) {
108
+ testNesting++;
109
+ }
110
+ },
111
+ 'CallExpression:exit'(node) {
112
+ if (isIgnoredSuiteDeclaration(context, node)) {
113
+ ignoredSuiteNesting--;
114
+ }
115
+ if (isConcreteTestDeclaration(context, node)) {
116
+ testNesting--;
117
+ }
118
+ if (pushedSuiteCalls.delete(node)) {
119
+ suiteStack.pop();
120
+ }
121
+ },
122
+ ':function'(node) {
123
+ functionNesting++;
124
+ if (concreteSuiteCallbacks.has(node)) {
125
+ concreteSuiteCallbackNesting++;
126
+ }
127
+ },
128
+ ':function:exit'(node) {
129
+ if (concreteSuiteCallbacks.delete(node)) {
130
+ concreteSuiteCallbackNesting--;
131
+ }
132
+ functionNesting--;
133
+ },
134
+ 'Program:exit'() {
135
+ suiteStack = [createSuiteFrame()];
136
+ pushedSuiteCalls.clear();
137
+ concreteSuiteCallbacks.clear();
138
+ helperExpansionPath.clear();
139
+ testNesting = 0;
140
+ ignoredSuiteNesting = 0;
141
+ functionNesting = 0;
142
+ concreteSuiteCallbackNesting = 0;
143
+ },
144
+ };
145
+ },
146
+ };
147
+ function createSuiteFrame() {
148
+ return { titles: new Map() };
149
+ }
150
+ function checkTestTitle(context, node, suiteFrame) {
151
+ const titleNode = node.arguments[0];
152
+ const title = titleNode && (0, mocha_style_test_frameworks_js_1.getStaticTitle)(titleNode);
153
+ if (title === undefined) {
154
+ return;
155
+ }
156
+ const originalTitleNode = suiteFrame.titles.get(title);
157
+ if (originalTitleNode) {
158
+ (0, location_js_1.report)(context, {
159
+ node: titleNode,
160
+ messageId: MESSAGE_ID,
161
+ message: MESSAGE,
162
+ }, [(0, location_js_1.toSecondaryLocation)(originalTitleNode, 'Original test title.')]);
163
+ return;
164
+ }
165
+ suiteFrame.titles.set(title, titleNode);
166
+ }
167
+ function checkHelperDefinedTests(context, node, suiteFrame, helperExpansionPath) {
168
+ const helper = getLocalHelperFunction(context, node);
169
+ if (helper === undefined || helperExpansionPath.has(helper)) {
170
+ return;
171
+ }
172
+ helperExpansionPath.add(helper);
173
+ checkHelperNode(context, helper.body, suiteFrame, helperExpansionPath);
174
+ helperExpansionPath.delete(helper);
175
+ }
176
+ function checkHelperNode(context, node, suiteFrame, helperExpansionPath) {
177
+ if (node.type === 'CallExpression') {
178
+ if (isIgnoredSuiteDeclaration(context, node)) {
179
+ return;
180
+ }
181
+ if (isSuiteDeclaration(context, node)) {
182
+ const nestedSuiteFrame = createSuiteFrame();
183
+ const callback = getCallback(node);
184
+ if (callback !== undefined) {
185
+ checkHelperNode(context, callback.body, nestedSuiteFrame, helperExpansionPath);
186
+ }
187
+ return;
188
+ }
189
+ if (isTestDeclaration(context, node)) {
190
+ checkTestTitle(context, node, suiteFrame);
191
+ return;
192
+ }
193
+ checkHelperDefinedTests(context, node, suiteFrame, helperExpansionPath);
194
+ }
195
+ for (const child of (0, ancestor_js_1.childrenOf)(node, context.sourceCode.visitorKeys)) {
196
+ if (!ast_js_1.FUNCTION_NODES.includes(child.type)) {
197
+ checkHelperNode(context, child, suiteFrame, helperExpansionPath);
198
+ }
199
+ }
200
+ }
201
+ function isSuiteDeclaration(context, node) {
202
+ return ((0, mocha_style_test_frameworks_js_1.isMochaTestConstruct)(context, node, mocha_style_test_frameworks_js_1.SUITE_FUNCTION_NAMES) ||
203
+ isPlaywrightDescribe(context, node.callee));
204
+ }
205
+ function isTestDeclaration(context, node) {
206
+ return isConcreteTestDeclaration(context, node) || isPlaywrightTest(context, node);
207
+ }
208
+ function isConcreteTestDeclaration(context, node) {
209
+ return (0, mocha_style_test_frameworks_js_1.isMochaTestConstruct)(context, node, mocha_style_test_frameworks_js_1.TEST_FUNCTION_NAMES) && (0, mocha_style_test_frameworks_js_1.hasCallback)(node);
210
+ }
211
+ function isIgnoredSuiteDeclaration(context, node) {
212
+ if (isNonConcreteMochaSuite(context, node.callee)) {
213
+ return true;
214
+ }
215
+ return getPlaywrightDescribeClassification(context, node.callee) === 'ignored';
216
+ }
217
+ function isNonConcreteMochaSuite(context, node) {
218
+ const calleeParts = (0, mocha_style_test_frameworks_js_1.getMochaCalleeParts)(node);
219
+ if (calleeParts === undefined) {
220
+ return false;
221
+ }
222
+ const constructName = (0, mocha_style_test_frameworks_js_1.getMochaConstructName)(context, calleeParts.base);
223
+ if (constructName === undefined || !mocha_style_test_frameworks_js_1.SUITE_FUNCTION_NAMES.includes(constructName)) {
224
+ return false;
225
+ }
226
+ return !calleeParts.modifiers.every(modifier => (0, mocha_style_test_frameworks_js_1.isConcreteMochaTestModifier)(context, modifier));
227
+ }
228
+ function getCallback(node) {
229
+ return node.arguments.find(isCallbackFunctionNode);
230
+ }
231
+ function isCallbackFunctionNode(node) {
232
+ return node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression';
233
+ }
234
+ function isFunctionNode(node) {
235
+ return ast_js_1.FUNCTION_NODES.includes(node.type);
236
+ }
237
+ function getLocalHelperFunction(context, node) {
238
+ if (node.callee.type !== 'Identifier') {
239
+ return undefined;
240
+ }
241
+ const variable = (0, ast_js_1.getVariableFromScope)(context.sourceCode.getScope(node.callee), node.callee.name);
242
+ const definition = variable?.defs.find(isLocalFunctionDefinition);
243
+ if (definition?.node.type === 'FunctionDeclaration') {
244
+ return definition.node;
245
+ }
246
+ if (definition?.node.type === 'VariableDeclarator' &&
247
+ definition.node.init != null &&
248
+ isFunctionNode(definition.node.init)) {
249
+ return definition.node.init;
250
+ }
251
+ return undefined;
252
+ }
253
+ function isLocalFunctionDefinition(definition) {
254
+ if (definition.type === 'FunctionName') {
255
+ return true;
256
+ }
257
+ return (definition.type === 'Variable' &&
258
+ definition.node.type === 'VariableDeclarator' &&
259
+ definition.node.init != null &&
260
+ isFunctionNode(definition.node.init));
261
+ }
262
+ function isInConcreteCollectionCallback(functionNesting, concreteSuiteCallbackNesting) {
263
+ return functionNesting === concreteSuiteCallbackNesting;
264
+ }
265
+ function isPlaywrightDescribe(context, callee) {
266
+ return getPlaywrightDescribeClassification(context, callee) === 'concrete';
267
+ }
268
+ function isPlaywrightTest(context, node) {
269
+ const qualifiers = (0, mocha_style_test_frameworks_js_1.getPlaywrightTestQualifiers)(context, node.callee);
270
+ if (qualifiers === undefined) {
271
+ return false;
272
+ }
273
+ return (qualifiers.every(qualifier => mocha_style_test_frameworks_js_1.PLAYWRIGHT_TEST_MODIFIERS.has(qualifier)) &&
274
+ (!qualifiers.includes('fail') || (0, mocha_style_test_frameworks_js_1.hasCallback)(node)));
275
+ }
276
+ function getPlaywrightDescribeClassification(context, callee) {
277
+ const qualifiers = (0, mocha_style_test_frameworks_js_1.getPlaywrightTestQualifiers)(context, callee) ?? (0, mocha_style_test_frameworks_js_1.getPlaywrightDescribeQualifiers)(callee);
278
+ if (qualifiers?.[0] !== 'describe') {
279
+ return 'unknown';
280
+ }
281
+ const modifiers = qualifiers.slice(1);
282
+ if (modifiers.some(modifier => PLAYWRIGHT_DISABLED_DESCRIBE_MODIFIERS.has(modifier))) {
283
+ return 'ignored';
284
+ }
285
+ const runnableModifiers = modifiers.at(-1) === mocha_style_test_frameworks_js_1.PLAYWRIGHT_DESCRIBE_FOCUS_MODIFIER ? modifiers.slice(0, -1) : modifiers;
286
+ return runnableModifiers.every(modifier => mocha_style_test_frameworks_js_1.PLAYWRIGHT_DESCRIBE_MODIFIERS.has(modifier))
287
+ ? 'concrete'
288
+ : 'unknown';
289
+ }
@@ -15,7 +15,7 @@
15
15
  * You should have received a copy of the Sonar Source-Available License
16
16
  * along with this program; if not, see https://sonarsource.com/license/ssal/
17
17
  */
18
- // https://sonarsource.github.io/rspec/#/rspec/S4784/javascript
18
+ // https://sonarsource.github.io/rspec/#/rspec/S8780/javascript
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
21
21
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -31,21 +31,22 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
31
31
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
32
32
  };
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.requiredDependency = exports.languages = exports.scope = exports.sonarKey = exports.meta = void 0;
34
+ exports.skipOnGeneratedSource = exports.requiredDependency = exports.languages = exports.scope = exports.sonarKey = exports.meta = void 0;
35
35
  __exportStar(require("./meta.js"), exports);
36
36
  exports.meta = {
37
37
  type: 'problem',
38
38
  docs: {
39
- description: 'Using regular expressions is security-sensitive',
40
- recommended: false,
41
- url: 'https://sonarsource.github.io/rspec/#/rspec/S4784/javascript',
39
+ description: 'Async test assertions should be awaited or returned',
40
+ recommended: true,
41
+ url: 'https://sonarsource.github.io/rspec/#/rspec/S8780/javascript',
42
42
  requiresTypeChecking: false,
43
43
  },
44
44
  fixable: undefined,
45
- deprecated: true,
45
+ deprecated: false,
46
46
  defaultOptions: [],
47
47
  };
48
- exports.sonarKey = 'S4784';
49
- exports.scope = 'Main';
48
+ exports.sonarKey = 'S8780';
49
+ exports.scope = 'Tests';
50
50
  exports.languages = ['js', 'ts'];
51
51
  exports.requiredDependency = [];
52
+ exports.skipOnGeneratedSource = false;
@@ -18,4 +18,4 @@ exports.eslintId = exports.implementation = void 0;
18
18
  * along with this program; if not, see https://sonarsource.com/license/ssal/
19
19
  */
20
20
  exports.implementation = 'original';
21
- exports.eslintId = 'cookies';
21
+ exports.eslintId = 'async-test-assertions';
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ /*
3
+ * SonarQube JavaScript Plugin
4
+ * Copyright (C) SonarSource Sàrl
5
+ * mailto:info AT sonarsource DOT com
6
+ *
7
+ * You can redistribute and/or modify this program under the terms of
8
+ * the Sonar Source-Available License Version 1, as published by SonarSource Sàrl.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ * See the Sonar Source-Available License for more details.
14
+ *
15
+ * You should have received a copy of the Sonar Source-Available License
16
+ * along with this program; if not, see https://sonarsource.com/license/ssal/
17
+ */
18
+ // https://sonarsource.github.io/rspec/#/rspec/S8780/javascript
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.rule = void 0;
54
+ const generate_meta_js_1 = require("../helpers/generate-meta.js");
55
+ const ast_js_1 = require("../helpers/ast.js");
56
+ const mocha_js_1 = require("../helpers/mocha.js");
57
+ const module_js_1 = require("../helpers/module.js");
58
+ const meta = __importStar(require("./generated-meta.js"));
59
+ const messages = {
60
+ awaitOrReturn: 'Await or return this async assertion.',
61
+ };
62
+ const JEST_MODULES = ['jest', '@jest/globals'];
63
+ const VITEST_MODULES = ['vitest'];
64
+ const JASMINE_MODULES = ['jasmine'];
65
+ const JASMINE_DEPENDENCIES = ['jasmine', 'jasmine-core', 'jasmine-node', 'karma-jasmine'];
66
+ const PLAYWRIGHT_MODULES = ['@playwright/test'];
67
+ const TEST_FUNCTION_NAMES = new Set([
68
+ 'it',
69
+ 'it.only',
70
+ 'it.skip',
71
+ 'test',
72
+ 'test.only',
73
+ 'test.skip',
74
+ 'specify',
75
+ 'specify.only',
76
+ 'specify.skip',
77
+ 'vitest.it',
78
+ 'vitest.it.only',
79
+ 'vitest.it.skip',
80
+ 'vitest.test',
81
+ 'vitest.test.only',
82
+ 'vitest.test.skip',
83
+ '@playwright.test.test',
84
+ '@playwright.test.test.only',
85
+ '@playwright.test.test.skip',
86
+ ]);
87
+ const PLAYWRIGHT_ASYNC_MATCHERS = new Set([
88
+ 'toBeAttached',
89
+ 'toBeChecked',
90
+ 'toBeDisabled',
91
+ 'toBeEditable',
92
+ 'toBeEmpty',
93
+ 'toBeEnabled',
94
+ 'toBeFocused',
95
+ 'toBeHidden',
96
+ 'toBeInViewport',
97
+ 'toBeOK',
98
+ 'toBeVisible',
99
+ 'toContainClass',
100
+ 'toContainText',
101
+ 'toHaveAccessibleDescription',
102
+ 'toHaveAccessibleName',
103
+ 'toHaveAttribute',
104
+ 'toHaveClass',
105
+ 'toHaveCount',
106
+ 'toHaveCSS',
107
+ 'toHaveId',
108
+ 'toHaveJSProperty',
109
+ 'toHaveRole',
110
+ 'toHaveScreenshot',
111
+ 'toHaveText',
112
+ 'toHaveTitle',
113
+ 'toHaveURL',
114
+ 'toHaveValue',
115
+ 'toHaveValues',
116
+ 'toMatchAriaSnapshot',
117
+ ]);
118
+ exports.rule = {
119
+ meta: (0, generate_meta_js_1.generateMeta)(meta, { messages }),
120
+ create(context) {
121
+ const frameworks = {
122
+ jest: (0, module_js_1.importsOrDependsOnModule)(context, JEST_MODULES, ['jest']),
123
+ vitest: (0, module_js_1.importsOrDependsOnModule)(context, VITEST_MODULES, VITEST_MODULES),
124
+ jasmine: (0, module_js_1.importsOrDependsOnModule)(context, JASMINE_MODULES, JASMINE_DEPENDENCIES),
125
+ playwright: (0, module_js_1.importsOrDependsOnModule)(context, PLAYWRIGHT_MODULES, PLAYWRIGHT_MODULES),
126
+ };
127
+ if (!Object.values(frameworks).some(Boolean)) {
128
+ return {};
129
+ }
130
+ return {
131
+ 'CallExpression:exit'(node) {
132
+ const call = node;
133
+ const callback = extractSupportedTestCallback(context, call);
134
+ if (!callback) {
135
+ return;
136
+ }
137
+ if (callback.body.type !== 'BlockStatement') {
138
+ return;
139
+ }
140
+ forEachExpressionStatement(callback.body, statement => {
141
+ const assertionNode = getAsyncAssertionNode(context, statement.expression, frameworks);
142
+ if (assertionNode) {
143
+ context.report({
144
+ node: assertionNode,
145
+ messageId: 'awaitOrReturn',
146
+ });
147
+ }
148
+ });
149
+ },
150
+ };
151
+ },
152
+ };
153
+ function extractSupportedTestCallback(context, call) {
154
+ const mochaTestCase = (0, mocha_js_1.extractTestCase)(call);
155
+ if (mochaTestCase) {
156
+ return isFunctionArgument(mochaTestCase.callback) ? mochaTestCase.callback : null;
157
+ }
158
+ const name = (0, module_js_1.getFullyQualifiedName)(context, call.callee) ?? getDottedName(call.callee);
159
+ if (!name || !TEST_FUNCTION_NAMES.has(name)) {
160
+ return null;
161
+ }
162
+ for (const argument of call.arguments) {
163
+ if (isFunctionArgument(argument)) {
164
+ return argument;
165
+ }
166
+ }
167
+ return null;
168
+ }
169
+ function isFunctionArgument(node) {
170
+ return node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression';
171
+ }
172
+ function forEachExpressionStatement(node, callback) {
173
+ switch (node.type) {
174
+ case 'ExpressionStatement':
175
+ callback(node);
176
+ return;
177
+ case 'BlockStatement':
178
+ node.body.forEach(child => forEachExpressionStatement(child, callback));
179
+ return;
180
+ case 'IfStatement':
181
+ forEachExpressionStatement(node.consequent, callback);
182
+ if (node.alternate) {
183
+ forEachExpressionStatement(node.alternate, callback);
184
+ }
185
+ return;
186
+ case 'ForStatement':
187
+ case 'ForInStatement':
188
+ case 'ForOfStatement':
189
+ case 'WhileStatement':
190
+ case 'DoWhileStatement':
191
+ case 'LabeledStatement':
192
+ case 'WithStatement':
193
+ forEachExpressionStatement(node.body, callback);
194
+ return;
195
+ case 'SwitchStatement':
196
+ node.cases.forEach(switchCase => switchCase.consequent.forEach(child => forEachExpressionStatement(child, callback)));
197
+ return;
198
+ case 'TryStatement':
199
+ forEachExpressionStatement(node.block, callback);
200
+ if (node.handler) {
201
+ forEachExpressionStatement(node.handler.body, callback);
202
+ }
203
+ if (node.finalizer) {
204
+ forEachExpressionStatement(node.finalizer, callback);
205
+ }
206
+ return;
207
+ }
208
+ }
209
+ function getAsyncAssertionNode(context, expression, frameworks) {
210
+ const unwrapped = unwrapChainExpression(expression);
211
+ if (unwrapped.type === 'AwaitExpression') {
212
+ return null;
213
+ }
214
+ if (unwrapped.type !== 'CallExpression') {
215
+ return null;
216
+ }
217
+ return (getJestOrVitestAsyncNode(context, unwrapped, frameworks) ??
218
+ getJasmineAsyncNode(context, unwrapped, frameworks) ??
219
+ getPlaywrightAsyncNode(context, unwrapped, frameworks));
220
+ }
221
+ function getJestOrVitestAsyncNode(context, call, frameworks) {
222
+ if (!frameworks.jest && !frameworks.vitest) {
223
+ return null;
224
+ }
225
+ const chain = collectCallChain(call);
226
+ const asyncSegment = chain.find(segment => segment.name === 'resolves' || segment.name === 'rejects');
227
+ if (!asyncSegment) {
228
+ return null;
229
+ }
230
+ const root = getRootCall(call);
231
+ if (!root || !isExpectCall(context, root, frameworks, false)) {
232
+ return null;
233
+ }
234
+ return asyncSegment.node;
235
+ }
236
+ function getJasmineAsyncNode(context, call, frameworks) {
237
+ if (!frameworks.jasmine) {
238
+ return null;
239
+ }
240
+ const root = getRootCall(call);
241
+ if (root && isNamedCall(context, root, 'expectAsync', ['jasmine.expectAsync'])) {
242
+ return root.callee;
243
+ }
244
+ return null;
245
+ }
246
+ function getPlaywrightAsyncNode(context, call, frameworks) {
247
+ if (!frameworks.playwright || call.callee.type !== 'MemberExpression' || call.callee.computed) {
248
+ return null;
249
+ }
250
+ const matcher = call.callee.property;
251
+ if (!(0, ast_js_1.isIdentifier)(matcher) || !PLAYWRIGHT_ASYNC_MATCHERS.has(matcher.name)) {
252
+ return null;
253
+ }
254
+ const root = getRootCall(call);
255
+ if (root && isExpectCall(context, root, frameworks, true)) {
256
+ return matcher;
257
+ }
258
+ return null;
259
+ }
260
+ function collectCallChain(call) {
261
+ const chain = [];
262
+ let current = call;
263
+ while (current.type === 'CallExpression' || current.type === 'MemberExpression') {
264
+ if (current.type === 'CallExpression') {
265
+ current = unwrapChainExpression(current.callee);
266
+ continue;
267
+ }
268
+ if (current.computed || !(0, ast_js_1.isIdentifier)(current.property)) {
269
+ break;
270
+ }
271
+ chain.push({ name: current.property.name, node: current.property });
272
+ current = unwrapChainExpression(current.object);
273
+ }
274
+ return chain;
275
+ }
276
+ function getRootCall(call) {
277
+ let current = call;
278
+ while (current.type === 'CallExpression' || current.type === 'MemberExpression') {
279
+ if (current.type === 'CallExpression') {
280
+ const callee = unwrapChainExpression(current.callee);
281
+ if (callee.type !== 'MemberExpression' ||
282
+ (callee.object.type !== 'CallExpression' && callee.object.type !== 'MemberExpression')) {
283
+ return current;
284
+ }
285
+ current = callee;
286
+ continue;
287
+ }
288
+ current = unwrapChainExpression(current.object);
289
+ }
290
+ return null;
291
+ }
292
+ function isExpectCall(context, call, frameworks, playwrightOnly) {
293
+ const fqn = (0, module_js_1.getFullyQualifiedName)(context, call.callee);
294
+ if (fqn) {
295
+ return playwrightOnly
296
+ ? fqn === '@playwright.test.expect'
297
+ : fqn === 'expect' ||
298
+ fqn === '@jest.globals.expect' ||
299
+ fqn === 'vitest.expect' ||
300
+ (frameworks.jest && (0, ast_js_1.isIdentifier)(call.callee, 'expect')) ||
301
+ (frameworks.vitest && (0, ast_js_1.isIdentifier)(call.callee, 'expect'));
302
+ }
303
+ return !playwrightOnly && (0, ast_js_1.isIdentifier)(call.callee, 'expect');
304
+ }
305
+ function isNamedCall(context, call, globalName, importedNames) {
306
+ const fqn = (0, module_js_1.getFullyQualifiedName)(context, call.callee);
307
+ return importedNames.includes(fqn ?? '') || (0, ast_js_1.isIdentifier)(call.callee, globalName);
308
+ }
309
+ function unwrapChainExpression(node) {
310
+ return node.type === 'ChainExpression' ? node.expression : node;
311
+ }
312
+ function getDottedName(node) {
313
+ if (node.type === 'Identifier') {
314
+ return node.name;
315
+ }
316
+ if (node.type !== 'MemberExpression' || node.computed || !(0, ast_js_1.isIdentifier)(node.property)) {
317
+ return null;
318
+ }
319
+ const objectName = getDottedName(node.object);
320
+ return objectName ? `${objectName}.${node.property.name}` : null;
321
+ }