eslint-plugin-sonarjs 4.0.0 → 4.0.2

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 (413) hide show
  1. package/README.md +269 -268
  2. package/cjs/S100/rule.js +7 -5
  3. package/cjs/S101/rule.js +2 -2
  4. package/cjs/S104/rule.js +2 -2
  5. package/cjs/S105/rule.js +2 -2
  6. package/cjs/S1066/rule.js +5 -4
  7. package/cjs/S1067/rule.js +8 -6
  8. package/cjs/S1110/rule.js +7 -5
  9. package/cjs/S1119/rule.js +85 -7
  10. package/cjs/S1121/rule.js +4 -3
  11. package/cjs/S1125/rule.js +9 -8
  12. package/cjs/S1126/rule.js +2 -2
  13. package/cjs/S1128/rule.js +8 -5
  14. package/cjs/S1134/rule.js +2 -2
  15. package/cjs/S1135/rule.js +2 -2
  16. package/cjs/S1154/rule.js +6 -4
  17. package/cjs/S117/rule.js +6 -5
  18. package/cjs/S1172/rule.js +2 -2
  19. package/cjs/S1192/rule.js +5 -4
  20. package/cjs/S1219/rule.js +4 -3
  21. package/cjs/S1226/rule.js +6 -4
  22. package/cjs/S124/rule.js +2 -2
  23. package/cjs/S125/rule.js +9 -7
  24. package/cjs/S126/rule.js +2 -2
  25. package/cjs/S1264/rule.js +2 -2
  26. package/cjs/S128/rule.js +4 -3
  27. package/cjs/S1291/rule.js +2 -2
  28. package/cjs/S1301/rule.js +2 -2
  29. package/cjs/S1313/rule.js +2 -2
  30. package/cjs/S134/rule.js +7 -5
  31. package/cjs/S135/rule.js +5 -4
  32. package/cjs/S138/rule.js +9 -6
  33. package/cjs/S1439/rule.js +2 -2
  34. package/cjs/S1444/rule.js +2 -2
  35. package/cjs/S1451/rule.js +2 -2
  36. package/cjs/S1472/rule.js +2 -2
  37. package/cjs/S1479/rule.js +2 -2
  38. package/cjs/S1481/rule.js +2 -2
  39. package/cjs/S1488/generated-meta.js +1 -1
  40. package/cjs/S1488/rule.js +11 -7
  41. package/cjs/S1515/rule.js +10 -8
  42. package/cjs/{helpers/aws/index.js → S1523/generated-meta.js} +34 -18
  43. package/cjs/S1523/index.js +21 -0
  44. package/cjs/S1523/meta.js +21 -0
  45. package/cjs/S1523/rule.js +143 -0
  46. package/cjs/S1526/rule.js +5 -4
  47. package/cjs/S1527/rule.js +2 -2
  48. package/cjs/S1528/rule.js +2 -2
  49. package/cjs/S1529/generated-meta.js +1 -1
  50. package/cjs/S1529/rule.js +4 -3
  51. package/cjs/S1530/rule.js +5 -3
  52. package/cjs/S1533/rule.js +2 -2
  53. package/cjs/S1535/rule.js +2 -2
  54. package/cjs/S1541/rule.js +10 -7
  55. package/cjs/S1607/rule.js +22 -20
  56. package/cjs/S1764/rule.js +10 -7
  57. package/cjs/S1821/rule.js +2 -2
  58. package/cjs/S1848/rule.js +10 -7
  59. package/cjs/S1854/rule.js +18 -14
  60. package/cjs/S1862/rule.js +10 -8
  61. package/cjs/S1871/rule.js +21 -16
  62. package/cjs/S1874/rule.js +4 -3
  63. package/cjs/S1940/rule.js +2 -2
  64. package/cjs/S1994/rule.js +10 -7
  65. package/cjs/S2004/rule.js +9 -7
  66. package/cjs/S2068/rule.js +75 -12
  67. package/cjs/S2077/generated-meta.js +1 -1
  68. package/cjs/S2077/rule.js +10 -6
  69. package/cjs/S2092/rule.js +2 -2
  70. package/cjs/S2123/rule.js +2 -2
  71. package/cjs/S2137/rule.js +2 -2
  72. package/cjs/S2138/rule.js +4 -3
  73. package/cjs/S2187/rule.js +2 -2
  74. package/cjs/S2201/rule.js +47 -5
  75. package/cjs/S2208/rule.js +2 -2
  76. package/cjs/S2234/rule.js +58 -11
  77. package/cjs/S2245/rule.js +4 -3
  78. package/cjs/S2251/rule.js +5 -4
  79. package/cjs/S2255/rule.js +6 -5
  80. package/cjs/S2259/rule.js +14 -9
  81. package/cjs/S2301/rule.js +14 -9
  82. package/cjs/S2310/rule.js +80 -9
  83. package/cjs/S2392/rule.js +7 -5
  84. package/cjs/S2424/rule.js +2 -2
  85. package/cjs/S2428/rule.js +8 -6
  86. package/cjs/S2486/rule.js +4 -3
  87. package/cjs/S2589/rule.js +12 -10
  88. package/cjs/S2598/rule.js +17 -14
  89. package/cjs/S2612/generated-meta.js +1 -1
  90. package/cjs/S2612/rule.js +8 -6
  91. package/cjs/S2639/rule.js +2 -2
  92. package/cjs/S2681/rule.js +2 -2
  93. package/cjs/S2692/rule.js +6 -4
  94. package/cjs/S2699/generated-meta.js +1 -1
  95. package/cjs/S2699/rule.js +40 -31
  96. package/cjs/S2703/rule.js +2 -2
  97. package/cjs/S2737/rule.js +6 -4
  98. package/cjs/S2755/rule.js +9 -6
  99. package/cjs/S2757/rule.js +2 -2
  100. package/cjs/S2817/rule.js +10 -7
  101. package/cjs/S2819/rule.js +16 -12
  102. package/cjs/S2870/rule.js +8 -5
  103. package/cjs/S2871/rule.js +12 -9
  104. package/cjs/S2970/rule.js +9 -8
  105. package/cjs/S2990/rule.js +2 -2
  106. package/cjs/S2999/rule.js +10 -7
  107. package/cjs/S3001/rule.js +2 -2
  108. package/cjs/S3003/rule.js +10 -7
  109. package/cjs/S3317/rule.js +4 -3
  110. package/cjs/S3330/rule.js +2 -2
  111. package/cjs/S3358/rule.js +2 -2
  112. package/cjs/S3402/rule.js +14 -10
  113. package/cjs/S3403/rule.js +10 -7
  114. package/cjs/S3415/rule.js +16 -13
  115. package/cjs/S3499/rule.js +5 -4
  116. package/cjs/S3500/rule.js +5 -4
  117. package/cjs/S3513/rule.js +5 -4
  118. package/cjs/S3514/rule.js +10 -7
  119. package/cjs/S3516/rule.js +10 -7
  120. package/cjs/S3524/rule.js +2 -2
  121. package/cjs/S3525/rule.js +6 -4
  122. package/cjs/S3531/rule.js +5 -3
  123. package/cjs/S3533/rule.js +8 -7
  124. package/cjs/S3579/rule.js +6 -4
  125. package/cjs/S3616/rule.js +6 -4
  126. package/cjs/S3626/rule.js +4 -3
  127. package/cjs/S3686/rule.js +7 -5
  128. package/cjs/S3699/rule.js +4 -3
  129. package/cjs/S3735/rule.js +8 -5
  130. package/cjs/S3757/rule.js +8 -6
  131. package/cjs/S3758/rule.js +9 -7
  132. package/cjs/S3760/rule.js +24 -21
  133. package/cjs/S3776/rule.js +26 -22
  134. package/cjs/S3782/rule.js +6 -4
  135. package/cjs/S3785/rule.js +9 -6
  136. package/cjs/S3796/rule.js +12 -8
  137. package/cjs/S3798/rule.js +4 -3
  138. package/cjs/S3800/rule.js +22 -11
  139. package/cjs/S3801/generated-meta.js +1 -1
  140. package/cjs/S3801/rule.js +15 -11
  141. package/cjs/S3827/rule.js +9 -6
  142. package/cjs/S3923/rule.js +9 -6
  143. package/cjs/S3972/rule.js +5 -4
  144. package/cjs/S3973/rule.js +7 -5
  145. package/cjs/S3981/rule.js +4 -3
  146. package/cjs/S3984/rule.js +4 -3
  147. package/cjs/S4030/rule.js +10 -7
  148. package/cjs/S4036/rule.js +7 -5
  149. package/cjs/S4043/rule.js +12 -8
  150. package/cjs/S4139/rule.js +7 -5
  151. package/cjs/S4143/rule.js +12 -9
  152. package/cjs/S4144/rule.js +12 -9
  153. package/cjs/S4158/rule.js +11 -8
  154. package/cjs/S4165/rule.js +14 -12
  155. package/cjs/S4322/rule.js +8 -5
  156. package/cjs/S4323/rule.js +4 -3
  157. package/cjs/S4324/rule.js +7 -5
  158. package/cjs/S4328/rule.js +2 -2
  159. package/cjs/S4335/rule.js +6 -4
  160. package/cjs/S4423/rule.js +4 -3
  161. package/cjs/S4423/rule.lib.js +8 -7
  162. package/cjs/S4426/rule.js +11 -10
  163. package/cjs/S4502/rule.js +16 -13
  164. package/cjs/S4507/rule.js +8 -6
  165. package/cjs/S4524/rule.js +2 -2
  166. package/cjs/S4619/rule.js +6 -4
  167. package/cjs/S4621/rule.js +5 -4
  168. package/cjs/S4622/rule.js +5 -3
  169. package/cjs/S4623/rule.js +8 -5
  170. package/cjs/S4624/rule.js +6 -4
  171. package/cjs/S4634/rule.js +4 -3
  172. package/cjs/S4721/rule.js +7 -5
  173. package/cjs/S4782/rule.js +7 -5
  174. package/cjs/S4784/rule.js +5 -4
  175. package/cjs/S4787/rule.js +9 -7
  176. package/cjs/S4790/rule.js +7 -5
  177. package/cjs/S4798/rule.js +2 -2
  178. package/cjs/S4817/rule.js +10 -8
  179. package/cjs/S4818/rule.js +4 -3
  180. package/cjs/S4822/rule.js +13 -9
  181. package/cjs/S4823/rule.js +4 -3
  182. package/cjs/S4829/rule.js +4 -3
  183. package/cjs/S4830/rule.js +11 -8
  184. package/cjs/S5042/rule.js +9 -7
  185. package/cjs/S5122/rule.js +40 -36
  186. package/cjs/S5148/rule.js +9 -8
  187. package/cjs/S5247/rule.js +22 -18
  188. package/cjs/S5256/rule.js +5 -4
  189. package/cjs/S5257/rule.js +4 -3
  190. package/cjs/S5260/rule.js +4 -3
  191. package/cjs/S5264/rule.js +4 -3
  192. package/cjs/S5332/rule.js +4 -3
  193. package/cjs/S5332/rule.lib.js +19 -17
  194. package/cjs/S5443/rule.js +2 -2
  195. package/cjs/S5527/rule.js +18 -14
  196. package/cjs/S5542/rule.js +6 -4
  197. package/cjs/S5547/rule.js +6 -4
  198. package/cjs/S5604/rule.js +15 -14
  199. package/cjs/S5659/rule.js +15 -12
  200. package/cjs/S5689/rule.js +11 -8
  201. package/cjs/S5691/rule.js +7 -5
  202. package/cjs/S5693/rule.js +14 -12
  203. package/cjs/S5725/rule.js +9 -6
  204. package/cjs/S5728/rule.js +7 -4
  205. package/cjs/S5730/rule.js +9 -6
  206. package/cjs/S5732/rule.js +8 -5
  207. package/cjs/S5734/rule.js +7 -4
  208. package/cjs/S5736/rule.js +8 -5
  209. package/cjs/S5739/rule.js +11 -8
  210. package/cjs/S5742/rule.js +7 -4
  211. package/cjs/S5743/rule.js +8 -6
  212. package/cjs/S5757/rule.js +13 -10
  213. package/cjs/S5759/rule.js +10 -7
  214. package/cjs/S5842/rule.js +2 -2
  215. package/cjs/S5843/rule.js +22 -19
  216. package/cjs/S5850/rule.js +4 -3
  217. package/cjs/S5852/rule.js +2 -2
  218. package/cjs/S5856/rule.js +10 -7
  219. package/cjs/S5860/rule.js +30 -26
  220. package/cjs/S5863/rule.js +15 -11
  221. package/cjs/S5867/rule.js +8 -7
  222. package/cjs/S5868/rule.js +7 -5
  223. package/cjs/S5869/rule.js +6 -5
  224. package/cjs/S5876/rule.js +12 -8
  225. package/cjs/S5958/rule.js +12 -9
  226. package/cjs/S5973/rule.js +10 -7
  227. package/cjs/S6019/rule.js +4 -3
  228. package/cjs/S6035/rule.js +2 -2
  229. package/cjs/S6079/rule.js +9 -6
  230. package/cjs/S6080/rule.js +13 -10
  231. package/cjs/S6092/rule.js +9 -7
  232. package/cjs/S6245/rule.js +14 -9
  233. package/cjs/S6249/rule.js +7 -5
  234. package/cjs/S6252/rule.js +12 -8
  235. package/cjs/S6265/rule.js +27 -20
  236. package/cjs/S6268/rule.js +5 -4
  237. package/cjs/S6270/rule.js +12 -9
  238. package/cjs/S6275/rule.js +2 -2
  239. package/cjs/S6281/rule.js +22 -17
  240. package/cjs/S6299/rule.js +2 -2
  241. package/cjs/S6302/rule.js +6 -5
  242. package/cjs/S6303/rule.js +12 -10
  243. package/cjs/S6304/rule.js +6 -5
  244. package/cjs/S6308/rule.js +7 -5
  245. package/cjs/S6317/rule.js +5 -4
  246. package/cjs/S6319/rule.js +2 -2
  247. package/cjs/S6321/rule.js +25 -23
  248. package/cjs/S6323/rule.js +4 -3
  249. package/cjs/S6324/rule.js +2 -2
  250. package/cjs/S6326/rule.js +2 -2
  251. package/cjs/S6327/rule.js +2 -2
  252. package/cjs/S6328/rule.js +4 -3
  253. package/cjs/S6329/rule.js +7 -5
  254. package/cjs/S6330/rule.js +2 -2
  255. package/cjs/S6332/rule.js +2 -2
  256. package/cjs/S6333/rule.js +8 -6
  257. package/cjs/S6351/rule.js +22 -19
  258. package/cjs/S6353/rule.js +2 -2
  259. package/cjs/S6397/rule.js +2 -2
  260. package/cjs/S6418/config.js +1 -1
  261. package/cjs/S6418/rule.js +9 -24
  262. package/cjs/S6426/rule.js +5 -4
  263. package/cjs/S6437/rule.js +10 -7
  264. package/cjs/S6439/rule.js +9 -7
  265. package/cjs/S6442/rule.js +11 -8
  266. package/cjs/S6443/rule.js +9 -7
  267. package/cjs/S6486/rule.js +5 -4
  268. package/cjs/S6564/rule.js +4 -3
  269. package/cjs/S6594/rule.js +12 -8
  270. package/cjs/S6627/rule.js +6 -4
  271. package/cjs/S6759/rule.js +10 -6
  272. package/cjs/S6958/rule.js +2 -2
  273. package/cjs/S6959/rule.js +9 -6
  274. package/cjs/S7059/generated-meta.js +1 -1
  275. package/cjs/S7059/rule.js +8 -5
  276. package/cjs/S7639/generated-meta.js +1 -1
  277. package/cjs/S7639/rule.js +5 -4
  278. package/cjs/S7790/generated-meta.js +1 -1
  279. package/cjs/S7790/rule.js +7 -5
  280. package/cjs/S8441/generated-meta.js +1 -1
  281. package/cjs/S8441/rule.js +13 -9
  282. package/cjs/S881/rule.js +2 -2
  283. package/cjs/S888/rule.js +4 -3
  284. package/cjs/S930/rule.js +14 -12
  285. package/cjs/helpers/ast.js +11 -8
  286. package/cjs/helpers/aws/s3.js +9 -6
  287. package/cjs/helpers/chai.js +41 -43
  288. package/cjs/helpers/configs.js +92 -0
  289. package/cjs/helpers/cookie-flag-check.js +19 -17
  290. package/cjs/helpers/{decorators/index.js → entropy.js} +16 -17
  291. package/cjs/helpers/express.js +127 -128
  292. package/cjs/helpers/find-up/all-in-parent-dirs.js +0 -16
  293. package/cjs/helpers/mocha.js +50 -54
  294. package/cjs/helpers/regex/ast.js +7 -6
  295. package/cjs/helpers/regex/extract.js +11 -11
  296. package/cjs/helpers/regex/group.js +2 -2
  297. package/cjs/helpers/regex/location.js +2 -2
  298. package/cjs/helpers/regex/range.js +5 -4
  299. package/cjs/helpers/regex/rule-template.js +4 -3
  300. package/cjs/helpers/sinon.js +33 -36
  301. package/cjs/helpers/supertest.js +34 -37
  302. package/cjs/helpers/vitest.js +29 -32
  303. package/cjs/plugin-rules.js +452 -450
  304. package/docs/assertions-in-tests.md +2 -0
  305. package/docs/bitwise-operators.md +2 -0
  306. package/docs/code-eval.md +7 -0
  307. package/docs/file-permissions.md +1 -1
  308. package/docs/no-async-constructor.md +2 -0
  309. package/docs/no-inconsistent-returns.md +2 -0
  310. package/docs/prefer-immediate-return.md +2 -0
  311. package/docs/sql-queries.md +2 -0
  312. package/package.json +39 -1
  313. package/types/S1067/rule.d.ts +1 -1
  314. package/types/S1110/rule.d.ts +1 -1
  315. package/types/S1128/rule.d.ts +1 -1
  316. package/types/S1172/rule.d.ts +1 -1
  317. package/types/S1226/rule.d.ts +1 -1
  318. package/types/S134/rule.d.ts +1 -1
  319. package/types/S1472/rule.d.ts +1 -1
  320. package/types/S1481/rule.d.ts +1 -1
  321. package/types/S1488/generated-meta.d.ts +1 -1
  322. package/types/S1515/rule.d.ts +1 -1
  323. package/types/S1523/generated-meta.d.ts +17 -0
  324. package/types/S1523/index.d.ts +1 -0
  325. package/types/S1523/meta.d.ts +2 -0
  326. package/types/S1523/rule.d.ts +2 -0
  327. package/types/S1527/rule.d.ts +1 -1
  328. package/types/S1529/generated-meta.d.ts +1 -1
  329. package/types/S1541/rule.d.ts +1 -1
  330. package/types/S1862/rule.d.ts +1 -1
  331. package/types/S2077/generated-meta.d.ts +1 -1
  332. package/types/S2123/rule.d.ts +1 -1
  333. package/types/S2259/rule.d.ts +1 -1
  334. package/types/S2428/rule.d.ts +1 -1
  335. package/types/S2589/rule.d.ts +1 -1
  336. package/types/S2598/rule.d.ts +1 -1
  337. package/types/S2699/generated-meta.d.ts +1 -1
  338. package/types/S2699/rule.d.ts +1 -1
  339. package/types/S2737/rule.d.ts +1 -1
  340. package/types/S2757/rule.d.ts +1 -1
  341. package/types/S2819/rule.d.ts +1 -1
  342. package/types/S3001/rule.d.ts +1 -1
  343. package/types/S3317/rule.d.ts +1 -1
  344. package/types/S3500/rule.d.ts +1 -1
  345. package/types/S3513/rule.d.ts +1 -1
  346. package/types/S3686/rule.d.ts +1 -1
  347. package/types/S3801/generated-meta.d.ts +1 -1
  348. package/types/S3972/rule.d.ts +1 -1
  349. package/types/S3973/rule.d.ts +1 -1
  350. package/types/S4030/rule.d.ts +1 -1
  351. package/types/S4143/rule.d.ts +1 -1
  352. package/types/S4158/rule.d.ts +1 -1
  353. package/types/S4621/rule.d.ts +1 -1
  354. package/types/S4782/rule.d.ts +1 -1
  355. package/types/S5693/rule.d.ts +1 -1
  356. package/types/S5725/rule.d.ts +1 -1
  357. package/types/S5860/rule.d.ts +1 -1
  358. package/types/S5868/rule.d.ts +1 -1
  359. package/types/S5869/rule.d.ts +1 -1
  360. package/types/S6079/rule.d.ts +1 -1
  361. package/types/S6326/rule.d.ts +1 -1
  362. package/types/S6351/rule.d.ts +1 -1
  363. package/types/S6418/config.d.ts +1 -1
  364. package/types/S6443/rule.d.ts +1 -1
  365. package/types/S7059/generated-meta.d.ts +1 -1
  366. package/types/S7639/generated-meta.d.ts +1 -1
  367. package/types/S7790/generated-meta.d.ts +1 -1
  368. package/types/S8441/generated-meta.d.ts +1 -1
  369. package/types/S930/rule.d.ts +1 -1
  370. package/types/helpers/ancestor.d.ts +3 -3
  371. package/types/helpers/ast.d.ts +1 -1
  372. package/types/helpers/aws/iam.d.ts +2 -2
  373. package/types/helpers/aws/s3.d.ts +1 -1
  374. package/types/helpers/chai.d.ts +3 -5
  375. package/types/helpers/configs.d.ts +39 -1
  376. package/types/helpers/entropy.d.ts +1 -0
  377. package/types/helpers/equivalence.d.ts +1 -1
  378. package/types/helpers/express.d.ts +38 -43
  379. package/types/helpers/find-up/all-in-parent-dirs.d.ts +1 -1
  380. package/types/helpers/find-up/closest.d.ts +1 -1
  381. package/types/helpers/find-up/find-minimatch.d.ts +1 -1
  382. package/types/helpers/generate-meta.d.ts +1 -1
  383. package/types/helpers/mocha.d.ts +19 -21
  384. package/types/helpers/module.d.ts +1 -1
  385. package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +1 -1
  386. package/types/helpers/package-jsons/dependencies.d.ts +1 -1
  387. package/types/helpers/recognizers/CodeRecognizer.d.ts +1 -1
  388. package/types/helpers/recognizers/JavaScriptFootPrint.d.ts +2 -2
  389. package/types/helpers/recognizers/LanguageFootprint.d.ts +1 -1
  390. package/types/helpers/regex/alternation.d.ts +1 -1
  391. package/types/helpers/regex/ast.d.ts +1 -1
  392. package/types/helpers/regex/location.d.ts +2 -2
  393. package/types/helpers/regex/range.d.ts +2 -2
  394. package/types/helpers/regex/rule-template.d.ts +1 -1
  395. package/types/helpers/result.d.ts +1 -1
  396. package/types/helpers/sinon.d.ts +4 -6
  397. package/types/helpers/sonar-runtime.d.ts +1 -1
  398. package/types/helpers/supertest.d.ts +4 -6
  399. package/types/helpers/type.d.ts +1 -1
  400. package/types/helpers/vitest.d.ts +4 -6
  401. package/types/plugin-rules.d.ts +1 -0
  402. package/cjs/helpers/decorators/interceptor.js +0 -88
  403. package/cjs/helpers/index.js +0 -60
  404. package/cjs/helpers/recognizers/index.js +0 -37
  405. package/cjs/helpers/rule-detect-react.js +0 -29
  406. package/cjs/helpers/validate-version.js +0 -94
  407. package/types/helpers/aws/index.d.ts +0 -3
  408. package/types/helpers/decorators/index.d.ts +0 -2
  409. package/types/helpers/decorators/interceptor.d.ts +0 -16
  410. package/types/helpers/index.d.ts +0 -28
  411. package/types/helpers/recognizers/index.d.ts +0 -2
  412. package/types/helpers/rule-detect-react.d.ts +0 -2
  413. package/types/helpers/validate-version.d.ts +0 -13
@@ -2,47 +2,42 @@ import type { Rule } from 'eslint';
2
2
  import type estree from 'estree';
3
3
  import type { RulesMeta } from '@eslint/core';
4
4
  /**
5
- * This modules provides utilities for writing rules about Express.js.
5
+ * Checks whether the declaration looks somewhat like `<id> = express()`
6
+ * and returns `<id>` if it matches.
6
7
  */
7
- export declare namespace Express {
8
- /**
9
- * Checks whether the declaration looks somewhat like `<id> = express()`
10
- * and returns `<id>` if it matches.
11
- */
12
- function attemptFindAppInstantiation(varDecl: estree.VariableDeclarator, context: Rule.RuleContext): estree.Identifier | undefined;
13
- /**
14
- * Checks whether the function injects an instantiated app and is exported like `module.exports = function(app) {}`
15
- * or `module.exports.property = function(app) {}`, and returns app if it matches.
16
- */
17
- function attemptFindAppInjection(functionDef: estree.Function, context: Rule.RuleContext, node: estree.Node): estree.Identifier | undefined;
18
- /**
19
- * Checks whether the expression looks somewhat like `app.use(m1, [m2, m3], ..., mN)`,
20
- * where one of `mK`-nodes satisfies the given predicate.
21
- */
22
- function isUsingMiddleware(context: Rule.RuleContext, callExpression: estree.CallExpression, app: estree.Identifier, middlewareNodePredicate: (n: estree.Node) => boolean): boolean;
23
- /**
24
- * Checks whether a node looks somewhat like `require('m')()` for
25
- * some middleware `m` from the list of middlewares.
26
- */
27
- function isMiddlewareInstance(context: Rule.RuleContext, middlewares: string[], n: estree.Node): boolean;
28
- /**
29
- * Rule factory for detecting sensitive settings that are passed to
30
- * middlewares eventually used by Express.js applications:
31
- *
32
- * app.use(
33
- * middleware(settings)
34
- * )
35
- *
36
- * or
37
- *
38
- * app.use(
39
- * middleware.method(settings)
40
- * )
41
- *
42
- * @param sensitivePropertyFinder - a function looking for a sensitive setting on a middleware call
43
- * @param message - the reported message when an issue is raised
44
- * @param meta - the rule metadata
45
- * @returns a rule module that raises issues when a sensitive property is found
46
- */
47
- function SensitiveMiddlewarePropertyRule(sensitivePropertyFinder: (context: Rule.RuleContext, middlewareCall: estree.CallExpression) => estree.Property[], message: string, meta?: RulesMeta): Rule.RuleModule;
48
- }
8
+ export declare function attemptFindAppInstantiation(varDecl: estree.VariableDeclarator, context: Rule.RuleContext): estree.Identifier | undefined;
9
+ /**
10
+ * Checks whether the function injects an instantiated app and is exported like `module.exports = function(app) {}`
11
+ * or `module.exports.property = function(app) {}`, and returns app if it matches.
12
+ */
13
+ export declare function attemptFindAppInjection(functionDef: estree.Function, context: Rule.RuleContext, node: estree.Node): estree.Identifier | undefined;
14
+ /**
15
+ * Checks whether the expression looks somewhat like `app.use(m1, [m2, m3], ..., mN)`,
16
+ * where one of `mK`-nodes satisfies the given predicate.
17
+ */
18
+ export declare function isUsingMiddleware(context: Rule.RuleContext, callExpression: estree.CallExpression, app: estree.Identifier, middlewareNodePredicate: (n: estree.Node) => boolean): boolean;
19
+ /**
20
+ * Checks whether a node looks somewhat like `require('m')()` for
21
+ * some middleware `m` from the list of middlewares.
22
+ */
23
+ export declare function isMiddlewareInstance(context: Rule.RuleContext, middlewares: string[], n: estree.Node): boolean;
24
+ /**
25
+ * Rule factory for detecting sensitive settings that are passed to
26
+ * middlewares eventually used by Express.js applications:
27
+ *
28
+ * app.use(
29
+ * middleware(settings)
30
+ * )
31
+ *
32
+ * or
33
+ *
34
+ * app.use(
35
+ * middleware.method(settings)
36
+ * )
37
+ *
38
+ * @param sensitivePropertyFinder - a function looking for a sensitive setting on a middleware call
39
+ * @param message - the reported message when an issue is raised
40
+ * @param meta - the rule metadata
41
+ * @returns a rule module that raises issues when a sensitive property is found
42
+ */
43
+ export declare function SensitiveMiddlewarePropertyRule(sensitivePropertyFinder: (context: Rule.RuleContext, middlewareCall: estree.CallExpression) => estree.Property[], message: string, meta?: RulesMeta): Rule.RuleModule;
@@ -1,4 +1,4 @@
1
- import { Filesystem } from './find-minimatch.js';
1
+ import type { Filesystem } from './find-minimatch.js';
2
2
  import { type File, type NormalizedAbsolutePath } from '../files.js';
3
3
  import { ComputedCache } from '../cache.js';
4
4
  export declare const patternInParentsCache: ComputedCache<string, ComputedCache<NormalizedAbsolutePath, ComputedCache<NormalizedAbsolutePath, File[], null>, null>, Filesystem>;
@@ -1,4 +1,4 @@
1
1
  import { type File, type NormalizedAbsolutePath } from '../files.js';
2
2
  import { ComputedCache } from '../cache.js';
3
- import { Filesystem } from './find-minimatch.js';
3
+ import { type Filesystem } from './find-minimatch.js';
4
4
  export declare const closestPatternCache: ComputedCache<string, ComputedCache<NormalizedAbsolutePath, ComputedCache<NormalizedAbsolutePath, File | undefined, null>, null>, Filesystem>;
@@ -1,4 +1,4 @@
1
- import { Minimatch } from 'minimatch';
1
+ import type { Minimatch } from 'minimatch';
2
2
  import { type File, type NormalizedAbsolutePath } from '../files.js';
3
3
  import fs from 'node:fs';
4
4
  import { ComputedCache } from '../cache.js';
@@ -1,7 +1,7 @@
1
1
  import type { Rule } from 'eslint';
2
2
  import type { RulesMeta } from '@eslint/core';
3
3
  import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema';
4
- import { ESLintConfiguration } from './configs.js';
4
+ import type { ESLintConfiguration } from './configs.js';
5
5
  export type SonarMeta = {
6
6
  meta: Rule.RuleMetaData & {
7
7
  docs?: {
@@ -1,23 +1,21 @@
1
1
  import type estree from 'estree';
2
- export declare namespace Mocha {
3
- interface TestCase {
4
- node: estree.Node;
5
- callback: estree.Function;
6
- }
7
- function isTestConstruct(node: estree.Node, constructs?: string[]): boolean;
8
- function extractTestCase(node: estree.Node): TestCase | null;
9
- /**
10
- * returns true if the node is a test case
11
- *
12
- * @param node
13
- * @returns
14
- */
15
- function isTestCase(node: estree.Node): boolean;
16
- /**
17
- * returns true if the node is a describe block
18
- *
19
- * @param node
20
- * @returns
21
- */
22
- function isDescribeCase(node: estree.Node): boolean;
2
+ export interface TestCase {
3
+ node: estree.Node;
4
+ callback: estree.Function;
23
5
  }
6
+ export declare function isTestConstruct(node: estree.Node, constructs?: string[]): boolean;
7
+ export declare function extractTestCase(node: estree.Node): TestCase | null;
8
+ /**
9
+ * returns true if the node is a test case
10
+ *
11
+ * @param node
12
+ * @returns
13
+ */
14
+ export declare function isTestCase(node: estree.Node): boolean;
15
+ /**
16
+ * returns true if the node is a describe block
17
+ *
18
+ * @param node
19
+ * @returns
20
+ */
21
+ export declare function isDescribeCase(node: estree.Node): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { Rule, Scope } from 'eslint';
2
2
  import type estree from 'estree';
3
- import { Node } from './ast.js';
3
+ import { type Node } from './ast.js';
4
4
  /**
5
5
  * Checks if the current file is an ES module based on sourceType.
6
6
  *
@@ -1,4 +1,4 @@
1
- import { Filesystem } from '../find-up/find-minimatch.js';
1
+ import type { Filesystem } from '../find-up/find-minimatch.js';
2
2
  import type { PackageJson } from 'type-fest';
3
3
  import { type NormalizedAbsolutePath } from '../files.js';
4
4
  import type { Rule } from 'eslint';
@@ -1,6 +1,6 @@
1
1
  import type { Rule } from 'eslint';
2
2
  import { ComputedCache } from '../cache.js';
3
- import { Minimatch } from 'minimatch';
3
+ import type { Minimatch } from 'minimatch';
4
4
  import { type NormalizedAbsolutePath } from '../files.js';
5
5
  /**
6
6
  * Cache for the available dependencies by dirname. Exported for tests
@@ -1,4 +1,4 @@
1
- import LanguageFootprint from './LanguageFootprint.js';
1
+ import type LanguageFootprint from './LanguageFootprint.js';
2
2
  export declare class CodeRecognizer {
3
3
  language: LanguageFootprint;
4
4
  threshold: number;
@@ -1,5 +1,5 @@
1
- import Detector from './Detector.js';
2
- import LanguageFootprint from './LanguageFootprint.js';
1
+ import type Detector from './Detector.js';
2
+ import type LanguageFootprint from './LanguageFootprint.js';
3
3
  export declare class JavaScriptFootPrint implements LanguageFootprint {
4
4
  detectors: Set<Detector>;
5
5
  constructor();
@@ -1,4 +1,4 @@
1
- import Detector from './Detector.js';
1
+ import type Detector from './Detector.js';
2
2
  export default interface LanguageFootprint {
3
3
  getDetectors(): Set<Detector>;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { CapturingGroup, Group, LookaroundAssertion, Pattern } from '@eslint-community/regexpp/ast';
1
+ import type { CapturingGroup, Group, LookaroundAssertion, Pattern } from '@eslint-community/regexpp/ast';
2
2
  /**
3
3
  * An alternation is a regexpp node that has an `alternatives` field.
4
4
  */
@@ -1,5 +1,5 @@
1
1
  import type estree from 'estree';
2
- import { RequiredParserServices } from '../index.js';
2
+ import type { RequiredParserServices } from '../parser-services.js';
3
3
  export declare function isRegExpConstructor(node: estree.Node): node is estree.CallExpression;
4
4
  export declare function isStringReplaceCall(call: estree.CallExpression, services: RequiredParserServices): boolean;
5
5
  export declare function isStringRegexMethodCall(call: estree.CallExpression, services: RequiredParserServices): boolean;
@@ -1,6 +1,6 @@
1
- import { AST, Rule } from 'eslint';
1
+ import type { AST, Rule } from 'eslint';
2
2
  import type estree from 'estree';
3
- import * as regexpp from '@eslint-community/regexpp';
3
+ import type * as regexpp from '@eslint-community/regexpp';
4
4
  /**
5
5
  * Gets the regexp node location in the ESLint referential
6
6
  * @param node the ESLint regex node
@@ -1,6 +1,6 @@
1
- import { AST } from 'eslint';
1
+ import type { AST } from 'eslint';
2
2
  import type estree from 'estree';
3
- import * as regexpp from '@eslint-community/regexpp';
3
+ import type * as regexpp from '@eslint-community/regexpp';
4
4
  /**
5
5
  * Returns the location of regexpNode relative to the node, which is regexp string or literal. If the computation
6
6
  * of location fails, it returns the range of the whole node.
@@ -3,7 +3,7 @@ import type { RulesMeta } from '@eslint/core';
3
3
  import type estree from 'estree';
4
4
  import * as regexpp from '@eslint-community/regexpp';
5
5
  import type { RegExpVisitor } from '@eslint-community/regexpp/visitor';
6
- import { IssueLocation } from '../index.js';
6
+ import { type IssueLocation } from '../location.js';
7
7
  /**
8
8
  * Rule context for regex rules that also includes the original ESLint node
9
9
  * denoting the regular expression (string) literal.
@@ -1,5 +1,5 @@
1
1
  import type { Node } from 'estree';
2
- import { StringLiteral } from './ast.js';
2
+ import { type StringLiteral } from './ast.js';
3
3
  import type { Rule } from 'eslint';
4
4
  export declare class Result {
5
5
  readonly ctx: Rule.RuleContext;
@@ -1,9 +1,7 @@
1
1
  import type { Rule } from 'eslint';
2
2
  import type estree from 'estree';
3
- import { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
3
+ import type { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
4
4
  import ts from 'typescript';
5
- export declare namespace Sinon {
6
- function isImported(context: Rule.RuleContext): boolean;
7
- function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
8
- function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
9
- }
5
+ export declare function isImported(context: Rule.RuleContext): boolean;
6
+ export declare function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
7
+ export declare function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
@@ -1,2 +1,2 @@
1
- import { Rule } from 'eslint';
1
+ import type { Rule } from 'eslint';
2
2
  export declare function isSonarRuntime(context: Rule.RuleContext): boolean;
@@ -1,9 +1,7 @@
1
1
  import type { Rule } from 'eslint';
2
2
  import type estree from 'estree';
3
- import { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
3
+ import type { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
4
4
  import ts from 'typescript';
5
- export declare namespace Supertest {
6
- function isImported(context: Rule.RuleContext): boolean;
7
- function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
8
- function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
9
- }
5
+ export declare function isImported(context: Rule.RuleContext): boolean;
6
+ export declare function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
7
+ export declare function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
@@ -1,7 +1,7 @@
1
1
  import type estree from 'estree';
2
2
  import ts from 'typescript';
3
3
  import type { TSESLint, TSESTree } from '@typescript-eslint/utils';
4
- import { RequiredParserServices } from '../helpers/index.js';
4
+ import type { RequiredParserServices } from './parser-services.js';
5
5
  import type { Rule } from 'eslint';
6
6
  export type RuleContext = TSESLint.RuleContext<string, string[]>;
7
7
  export declare function isArray(node: estree.Node, services: RequiredParserServices): boolean;
@@ -1,9 +1,7 @@
1
1
  import type { Rule } from 'eslint';
2
2
  import type estree from 'estree';
3
- import { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
3
+ import type { ParserServicesWithTypeInformation } from '@typescript-eslint/utils';
4
4
  import ts from 'typescript';
5
- export declare namespace Vitest {
6
- function isImported(context: Rule.RuleContext): boolean;
7
- function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
8
- function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
9
- }
5
+ export declare function isImported(context: Rule.RuleContext): boolean;
6
+ export declare function isAssertion(context: Rule.RuleContext, node: estree.Node): boolean;
7
+ export declare function isTSAssertion(services: ParserServicesWithTypeInformation, node: ts.Node): boolean;
@@ -41,6 +41,7 @@ export declare const rules: {
41
41
  'no-unused-vars': import("eslint").Rule.RuleModule;
42
42
  'prefer-immediate-return': import("eslint").Rule.RuleModule;
43
43
  'function-inside-loop': import("eslint").Rule.RuleModule;
44
+ 'code-eval': import("eslint").Rule.RuleModule;
44
45
  'no-variable-usage-before-declaration': import("eslint").Rule.RuleModule;
45
46
  'future-reserved-words': import("eslint").Rule.RuleModule;
46
47
  'array-constructor': import("eslint").Rule.RuleModule;
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.interceptReport = interceptReport;
4
- exports.interceptReportForReact = interceptReportForReact;
5
- const NUM_ARGS_NODE_MESSAGE = 2;
6
- /**
7
- * Modifies the behavior of `context.report(descriptor)` for a given rule.
8
- *
9
- * Useful for performing additional checks before reporting an issue.
10
- *
11
- * @param rule the original rule
12
- * @param onReport replacement for `context.report(descr)`
13
- * invocations used inside of the rule
14
- * @param contextOverrider optional function to change the default context overriding mechanism
15
- */
16
- function interceptReport(rule, onReport, contextOverrider) {
17
- return {
18
- // meta should be defined only when it's defined on original rule, otherwise NodeRuleTester will fail
19
- ...(!!rule.meta && { meta: rule.meta }),
20
- create(originalContext) {
21
- let interceptingContext;
22
- if (contextOverrider == null) {
23
- interceptingContext = {
24
- id: originalContext.id,
25
- options: originalContext.options,
26
- settings: originalContext.settings,
27
- parserPath: originalContext.parserPath,
28
- parserOptions: originalContext.parserOptions,
29
- sourceCode: originalContext.sourceCode,
30
- cwd: originalContext.cwd,
31
- filename: originalContext.filename,
32
- physicalFilename: originalContext.physicalFilename,
33
- languageOptions: originalContext.languageOptions,
34
- getCwd() {
35
- return originalContext.cwd;
36
- },
37
- getPhysicalFilename() {
38
- return originalContext.physicalFilename;
39
- },
40
- getFilename() {
41
- return originalContext.filename;
42
- },
43
- getSourceCode() {
44
- return originalContext.sourceCode;
45
- },
46
- // @ts-ignore
47
- getSource(...args) {
48
- return originalContext.sourceCode.getText(...args);
49
- },
50
- report(...args) {
51
- let descr = undefined;
52
- if (args.length === 1) {
53
- descr = args[0];
54
- }
55
- else if (args.length === NUM_ARGS_NODE_MESSAGE && typeof args[1] === 'string') {
56
- // not declared in the `.d.ts`, but used in practice by rules written in JS
57
- descr = {
58
- node: args[0],
59
- message: args[1],
60
- };
61
- }
62
- if (descr) {
63
- onReport(originalContext, descr);
64
- }
65
- },
66
- };
67
- }
68
- else {
69
- interceptingContext = contextOverrider(originalContext, onReport);
70
- }
71
- return rule.create(interceptingContext);
72
- },
73
- };
74
- }
75
- // interceptReport() by default doesn't work with the React plugin
76
- // as the rules fail to find the context getFirstTokens() function.
77
- function interceptReportForReact(rule, onReport) {
78
- return interceptReport(rule, onReport, contextOverriderForReact);
79
- }
80
- function contextOverriderForReact(context, onReport) {
81
- const overriddenReportContext = {
82
- report(reportDescriptor) {
83
- onReport(context, reportDescriptor);
84
- },
85
- };
86
- Object.setPrototypeOf(overriddenReportContext, context);
87
- return overriddenReportContext;
88
- }
@@ -1,60 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- /*
18
- * SonarQube JavaScript Plugin
19
- * Copyright (C) 2011-2025 SonarSource Sàrl
20
- * mailto:info AT sonarsource DOT com
21
- *
22
- * This program is free software; you can redistribute it and/or
23
- * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA.
24
- *
25
- * This program is distributed in the hope that it will be useful,
26
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
27
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28
- * See the Sonar Source-Available License for more details.
29
- *
30
- * You should have received a copy of the Sonar Source-Available License
31
- * along with this program; if not, see https://sonarsource.com/license/ssal/
32
- */
33
- __exportStar(require("./accessibility.js"), exports);
34
- __exportStar(require("./ancestor.js"), exports);
35
- __exportStar(require("./ast.js"), exports);
36
- __exportStar(require("./aws/index.js"), exports);
37
- __exportStar(require("./chai.js"), exports);
38
- __exportStar(require("./collection.js"), exports);
39
- __exportStar(require("./conditions.js"), exports);
40
- __exportStar(require("./decorators/index.js"), exports);
41
- __exportStar(require("./equivalence.js"), exports);
42
- __exportStar(require("./express.js"), exports);
43
- __exportStar(require("./files.js"), exports);
44
- __exportStar(require("./generate-meta.js"), exports);
45
- __exportStar(require("./jsx.js"), exports);
46
- __exportStar(require("./location.js"), exports);
47
- __exportStar(require("./lva.js"), exports);
48
- __exportStar(require("./mocha.js"), exports);
49
- __exportStar(require("./module.js"), exports);
50
- __exportStar(require("./module-ts.js"), exports);
51
- __exportStar(require("./quickfix.js"), exports);
52
- __exportStar(require("./reaching-definitions.js"), exports);
53
- __exportStar(require("./rule-detect-react.js"), exports);
54
- __exportStar(require("./sinon.js"), exports);
55
- __exportStar(require("./test-frameworks.js"), exports);
56
- __exportStar(require("./type.js"), exports);
57
- __exportStar(require("./validate-version.js"), exports);
58
- __exportStar(require("./vitest.js"), exports);
59
- __exportStar(require("./vue.js"), exports);
60
- __exportStar(require("./parser-services.js"), exports);
@@ -1,37 +0,0 @@
1
- "use strict";
2
- /*
3
- * SonarQube JavaScript Plugin
4
- * Copyright (C) 2011-2025 SonarSource Sàrl
5
- * mailto:info AT sonarsource DOT com
6
- *
7
- * This program is free software; you can redistribute it and/or
8
- * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA.
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
- // Inspired from sonar-java and sonar-analyzer-commons
19
- // - https://github.com/SonarSource/sonar-java/blob/e3b4ce381eb994235ab811d253953e400d12aab2/java-checks/src/main/java/org/sonar/java/checks/JavaFootprint.java#L31
20
- // - https://github.com/SonarSource/sonar-analyzer-commons/blob/e2881512ce632259981c65b587652151e876d736/recognizers/src/main/java/org/sonarsource/analyzer/commons/recognizers/CodeRecognizer.java#L25
21
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- var desc = Object.getOwnPropertyDescriptor(m, k);
24
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
25
- desc = { enumerable: true, get: function() { return m[k]; } };
26
- }
27
- Object.defineProperty(o, k2, desc);
28
- }) : (function(o, m, k, k2) {
29
- if (k2 === undefined) k2 = k;
30
- o[k2] = m[k];
31
- }));
32
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
33
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
34
- };
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- __exportStar(require("./JavaScriptFootPrint.js"), exports);
37
- __exportStar(require("./CodeRecognizer.js"), exports);
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectReactRule = void 0;
4
- const detectReactSelector = [
5
- ':matches(',
6
- [
7
- 'CallExpression[callee.name="require"][arguments.0.value="react"]',
8
- 'CallExpression[callee.name="require"][arguments.0.value="create-react-class"]',
9
- 'ImportDeclaration[source.value="react"]',
10
- ].join(','),
11
- ')',
12
- ].join('');
13
- exports.detectReactRule = {
14
- meta: {
15
- messages: {
16
- reactDetected: 'React detected',
17
- },
18
- },
19
- create(context) {
20
- return {
21
- [detectReactSelector](node) {
22
- context.report({
23
- messageId: 'reactDetected',
24
- node,
25
- });
26
- },
27
- };
28
- },
29
- };