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.
- package/README.md +52 -56
- package/cjs/S100/generated-meta.js +2 -1
- package/cjs/S101/generated-meta.js +2 -1
- package/cjs/S104/generated-meta.js +2 -1
- package/cjs/S105/generated-meta.js +2 -1
- package/cjs/S1066/generated-meta.js +2 -1
- package/cjs/S1067/generated-meta.js +2 -1
- package/cjs/S1110/generated-meta.js +2 -1
- package/cjs/S1119/generated-meta.js +2 -1
- package/cjs/S1121/generated-meta.js +2 -1
- package/cjs/S1125/generated-meta.js +2 -1
- package/cjs/S1126/generated-meta.js +2 -1
- package/cjs/S1128/generated-meta.js +2 -1
- package/cjs/S1134/generated-meta.js +2 -1
- package/cjs/S1135/generated-meta.js +2 -1
- package/cjs/S1154/generated-meta.js +2 -1
- package/cjs/S1154/rule.js +21 -2
- package/cjs/S117/generated-meta.js +2 -1
- package/cjs/S1172/generated-meta.js +2 -1
- package/cjs/S1192/generated-meta.js +2 -1
- package/cjs/S1219/generated-meta.js +2 -1
- package/cjs/S1226/generated-meta.js +2 -1
- package/cjs/S124/generated-meta.js +2 -1
- package/cjs/{S2255 → S1244}/generated-meta.js +8 -7
- package/cjs/S1244/meta.js +21 -0
- package/cjs/S1244/rule.js +265 -0
- package/cjs/S125/generated-meta.js +3 -2
- package/cjs/S126/generated-meta.js +2 -1
- package/cjs/S1264/generated-meta.js +2 -1
- package/cjs/S128/generated-meta.js +2 -1
- package/cjs/S1291/generated-meta.js +2 -1
- package/cjs/S1301/generated-meta.js +3 -2
- package/cjs/S1313/generated-meta.js +2 -1
- package/cjs/S134/generated-meta.js +2 -1
- package/cjs/S135/generated-meta.js +2 -1
- package/cjs/S138/generated-meta.js +2 -1
- package/cjs/S1439/generated-meta.js +2 -1
- package/cjs/S1444/generated-meta.js +2 -1
- package/cjs/S1451/generated-meta.js +2 -1
- package/cjs/S1472/generated-meta.js +2 -1
- package/cjs/S1479/generated-meta.js +2 -1
- package/cjs/S1481/generated-meta.js +2 -1
- package/cjs/S1488/generated-meta.js +2 -1
- package/cjs/S1515/generated-meta.js +2 -1
- package/cjs/S1523/generated-meta.js +3 -2
- package/cjs/S1526/generated-meta.js +2 -1
- package/cjs/S1527/generated-meta.js +2 -1
- package/cjs/S1528/generated-meta.js +2 -1
- package/cjs/S1529/generated-meta.js +2 -1
- package/cjs/S1530/generated-meta.js +2 -1
- package/cjs/S1533/generated-meta.js +2 -1
- package/cjs/S1535/generated-meta.js +2 -1
- package/cjs/S1541/generated-meta.js +2 -1
- package/cjs/S1607/generated-meta.js +2 -1
- package/cjs/S1607/rule.js +72 -7
- package/cjs/S1764/generated-meta.js +2 -1
- package/cjs/S1821/generated-meta.js +2 -1
- package/cjs/S1848/generated-meta.js +2 -1
- package/cjs/S1854/generated-meta.js +2 -1
- package/cjs/S1862/generated-meta.js +2 -1
- package/cjs/S1871/generated-meta.js +2 -1
- package/cjs/S1874/generated-meta.js +2 -1
- package/cjs/S1940/generated-meta.js +2 -1
- package/cjs/S1994/generated-meta.js +2 -1
- package/cjs/S2004/generated-meta.js +2 -1
- package/cjs/S2068/generated-meta.js +2 -1
- package/cjs/S2068/rule.js +0 -14
- package/cjs/S2077/generated-meta.js +3 -2
- package/cjs/S2092/generated-meta.js +2 -1
- package/cjs/S2123/generated-meta.js +2 -1
- package/cjs/S2137/generated-meta.js +2 -1
- package/cjs/S2138/generated-meta.js +2 -1
- package/cjs/S2187/generated-meta.js +2 -1
- package/cjs/S2187/rule.js +50 -13
- package/cjs/S2201/generated-meta.js +2 -1
- package/cjs/S2208/generated-meta.js +2 -1
- package/cjs/S2234/generated-meta.js +2 -1
- package/cjs/S2245/generated-meta.js +3 -2
- package/cjs/S2251/generated-meta.js +2 -1
- package/cjs/S2259/generated-meta.js +2 -1
- package/cjs/S2301/generated-meta.js +2 -1
- package/cjs/S2310/generated-meta.js +2 -1
- package/cjs/S2392/generated-meta.js +2 -1
- package/cjs/S2424/generated-meta.js +2 -1
- package/cjs/S2428/generated-meta.js +2 -1
- package/cjs/S2486/generated-meta.js +2 -1
- package/cjs/S2589/generated-meta.js +2 -1
- package/cjs/S2598/generated-meta.js +2 -1
- package/cjs/S2612/generated-meta.js +2 -1
- package/cjs/S2639/generated-meta.js +2 -1
- package/cjs/S2681/generated-meta.js +2 -1
- package/cjs/S2692/generated-meta.js +2 -1
- package/cjs/S2699/generated-meta.js +2 -1
- package/cjs/S2699/rule.js +19 -5
- package/cjs/S2703/generated-meta.js +2 -1
- package/cjs/S2737/generated-meta.js +2 -1
- package/cjs/S2755/generated-meta.js +2 -1
- package/cjs/S2757/generated-meta.js +2 -1
- package/cjs/S2817/generated-meta.js +2 -1
- package/cjs/S2819/generated-meta.js +2 -1
- package/cjs/S2870/generated-meta.js +2 -1
- package/cjs/S2871/generated-meta.js +2 -1
- package/cjs/S2871/rule.js +85 -1
- package/cjs/S2970/generated-meta.js +2 -1
- package/cjs/S2990/generated-meta.js +2 -1
- package/cjs/S2999/generated-meta.js +2 -1
- package/cjs/S3001/generated-meta.js +2 -1
- package/cjs/S3003/generated-meta.js +2 -1
- package/cjs/S3317/generated-meta.js +2 -1
- package/cjs/S3330/generated-meta.js +3 -2
- package/cjs/S3358/generated-meta.js +2 -1
- package/cjs/S3402/generated-meta.js +2 -1
- package/cjs/S3403/generated-meta.js +2 -1
- package/cjs/S3403/rule.js +21 -1
- package/cjs/S3415/generated-meta.js +2 -1
- package/cjs/S3499/generated-meta.js +2 -1
- package/cjs/S3500/generated-meta.js +2 -1
- package/cjs/S3513/generated-meta.js +2 -1
- package/cjs/S3514/generated-meta.js +2 -1
- package/cjs/S3516/generated-meta.js +2 -1
- package/cjs/S3524/generated-meta.js +2 -1
- package/cjs/S3525/generated-meta.js +2 -1
- package/cjs/S3531/generated-meta.js +2 -1
- package/cjs/S3533/generated-meta.js +2 -1
- package/cjs/S3579/generated-meta.js +2 -1
- package/cjs/S3616/generated-meta.js +2 -1
- package/cjs/S3626/generated-meta.js +2 -1
- package/cjs/S3626/rule.js +1 -1
- package/cjs/S3686/generated-meta.js +2 -1
- package/cjs/S3699/generated-meta.js +2 -1
- package/cjs/S3735/generated-meta.js +2 -1
- package/cjs/S3757/generated-meta.js +2 -1
- package/cjs/S3757/rule.js +3 -1
- package/cjs/S3758/generated-meta.js +2 -1
- package/cjs/S3760/generated-meta.js +2 -1
- package/cjs/S3776/generated-meta.js +2 -1
- package/cjs/S3782/generated-meta.js +2 -1
- package/cjs/S3785/generated-meta.js +2 -1
- package/cjs/S3796/generated-meta.js +2 -1
- package/cjs/S3798/generated-meta.js +2 -1
- package/cjs/S3798/rule.js +57 -17
- package/cjs/S3800/generated-meta.js +2 -1
- package/cjs/S3801/generated-meta.js +2 -1
- package/cjs/S3827/generated-meta.js +2 -1
- package/cjs/S3923/generated-meta.js +2 -1
- package/cjs/S3972/generated-meta.js +2 -1
- package/cjs/S3973/generated-meta.js +2 -1
- package/cjs/S3981/generated-meta.js +2 -1
- package/cjs/S3984/generated-meta.js +2 -1
- package/cjs/S4030/generated-meta.js +2 -1
- package/cjs/S4036/generated-meta.js +3 -2
- package/cjs/S4043/generated-meta.js +2 -1
- package/cjs/S4139/generated-meta.js +2 -1
- package/cjs/S4143/generated-meta.js +2 -1
- package/cjs/S4144/generated-meta.js +2 -1
- package/cjs/S4158/generated-meta.js +2 -1
- package/cjs/S4165/generated-meta.js +2 -1
- package/cjs/S4322/generated-meta.js +2 -1
- package/cjs/S4323/generated-meta.js +2 -1
- package/cjs/S4324/generated-meta.js +2 -1
- package/cjs/S4328/generated-meta.js +2 -1
- package/cjs/S4328/rule.js +7 -2
- package/cjs/S4335/generated-meta.js +2 -1
- package/cjs/S4423/generated-meta.js +2 -1
- package/cjs/S4426/generated-meta.js +2 -1
- package/cjs/S4502/generated-meta.js +3 -2
- package/cjs/S4507/generated-meta.js +3 -2
- package/cjs/S4524/generated-meta.js +2 -1
- package/cjs/S4619/generated-meta.js +2 -1
- package/cjs/S4621/generated-meta.js +2 -1
- package/cjs/S4622/generated-meta.js +2 -1
- package/cjs/S4623/generated-meta.js +2 -1
- package/cjs/S4624/generated-meta.js +2 -1
- package/cjs/S4624/rule.js +2 -7
- package/cjs/S4634/generated-meta.js +2 -1
- package/cjs/S4721/generated-meta.js +5 -4
- package/cjs/S4782/generated-meta.js +2 -1
- package/cjs/S4782/rule.js +96 -14
- package/cjs/S4790/generated-meta.js +3 -2
- package/cjs/S4790/rule.js +217 -2
- package/cjs/S4798/generated-meta.js +2 -1
- package/cjs/S4822/generated-meta.js +2 -1
- package/cjs/S4830/generated-meta.js +2 -1
- package/cjs/S5042/generated-meta.js +2 -1
- package/cjs/S5122/generated-meta.js +2 -1
- package/cjs/S5148/generated-meta.js +2 -1
- package/cjs/S5247/generated-meta.js +3 -2
- package/cjs/S5256/generated-meta.js +2 -1
- package/cjs/S5257/generated-meta.js +2 -1
- package/cjs/S5260/generated-meta.js +2 -1
- package/cjs/S5264/generated-meta.js +2 -1
- package/cjs/S5332/generated-meta.js +3 -2
- package/cjs/S5332/rule.lib.js +54 -46
- package/cjs/S5443/generated-meta.js +2 -1
- package/cjs/S5527/generated-meta.js +2 -1
- package/cjs/S5542/generated-meta.js +2 -1
- package/cjs/S5547/generated-meta.js +2 -1
- package/cjs/S5604/generated-meta.js +5 -4
- package/cjs/S5659/generated-meta.js +2 -1
- package/cjs/S5689/generated-meta.js +2 -1
- package/cjs/S5691/generated-meta.js +5 -4
- package/cjs/S5693/generated-meta.js +2 -1
- package/cjs/S5693/rule.js +45 -1
- package/cjs/S5725/generated-meta.js +3 -2
- package/cjs/S5725/rule.js +75 -12
- package/cjs/S5728/generated-meta.js +3 -2
- package/cjs/S5730/generated-meta.js +5 -4
- package/cjs/S5732/generated-meta.js +5 -4
- package/cjs/S5734/generated-meta.js +3 -2
- package/cjs/S5736/generated-meta.js +3 -2
- package/cjs/S5739/generated-meta.js +3 -2
- package/cjs/S5757/generated-meta.js +5 -4
- package/cjs/S5759/generated-meta.js +5 -4
- package/cjs/S5842/generated-meta.js +2 -1
- package/cjs/S5843/generated-meta.js +2 -1
- package/cjs/S5845/generated-meta.js +52 -0
- package/cjs/S5845/meta.js +21 -0
- package/cjs/S5845/rule.js +296 -0
- package/cjs/S5850/generated-meta.js +2 -1
- package/cjs/S5852/generated-meta.js +3 -2
- package/cjs/S5852/rule.js +11 -3
- package/cjs/S5856/generated-meta.js +2 -1
- package/cjs/S5860/generated-meta.js +2 -1
- package/cjs/S5863/generated-meta.js +2 -1
- package/cjs/S5867/generated-meta.js +2 -1
- package/cjs/S5868/generated-meta.js +2 -1
- package/cjs/S5868/rule.js +54 -25
- package/cjs/S5869/generated-meta.js +2 -1
- package/cjs/S5876/generated-meta.js +2 -1
- package/cjs/S5906/assertion-suggestions.js +279 -0
- package/cjs/S5906/assertion-utils.js +103 -0
- package/cjs/S5906/cypress-suggestions.js +62 -0
- package/cjs/S5906/expect-chain.js +16 -0
- package/cjs/S5906/generated-meta.js +52 -0
- package/cjs/S5906/meta.js +21 -0
- package/cjs/S5906/playwright-suggestions.js +103 -0
- package/cjs/S5906/rule.js +365 -0
- package/cjs/S5914/generated-meta.js +52 -0
- package/cjs/{S4817 → S5914}/meta.js +1 -1
- package/cjs/S5914/rule.js +213 -0
- package/cjs/S5958/generated-meta.js +2 -1
- package/cjs/S5973/generated-meta.js +2 -1
- package/cjs/S5973/rule.js +1 -1
- package/cjs/S6019/generated-meta.js +2 -1
- package/cjs/S6035/generated-meta.js +2 -1
- package/cjs/S6079/generated-meta.js +2 -1
- package/cjs/S6080/generated-meta.js +2 -1
- package/cjs/S6092/generated-meta.js +2 -1
- package/cjs/S6249/generated-meta.js +3 -2
- package/cjs/S6252/generated-meta.js +3 -2
- package/cjs/S6265/generated-meta.js +2 -1
- package/cjs/S6268/generated-meta.js +3 -2
- package/cjs/S6270/generated-meta.js +2 -1
- package/cjs/S6275/generated-meta.js +2 -1
- package/cjs/S6281/generated-meta.js +3 -2
- package/cjs/S6281/rule.js +7 -20
- package/cjs/S6302/generated-meta.js +2 -1
- package/cjs/S6303/generated-meta.js +2 -1
- package/cjs/S6304/generated-meta.js +3 -2
- package/cjs/S6308/generated-meta.js +2 -1
- package/cjs/S6317/generated-meta.js +2 -1
- package/cjs/S6319/generated-meta.js +3 -2
- package/cjs/S6321/generated-meta.js +2 -1
- package/cjs/S6323/generated-meta.js +2 -1
- package/cjs/S6324/generated-meta.js +2 -1
- package/cjs/S6324/rule.js +5 -5
- package/cjs/S6326/generated-meta.js +2 -1
- package/cjs/S6327/generated-meta.js +3 -2
- package/cjs/S6328/generated-meta.js +2 -1
- package/cjs/S6329/generated-meta.js +3 -2
- package/cjs/S6330/generated-meta.js +2 -1
- package/cjs/S6331/generated-meta.js +2 -1
- package/cjs/S6332/generated-meta.js +3 -2
- package/cjs/S6333/generated-meta.js +3 -2
- package/cjs/S6351/generated-meta.js +2 -1
- package/cjs/S6353/generated-meta.js +2 -1
- package/cjs/S6397/generated-meta.js +2 -1
- package/cjs/S6418/generated-meta.js +2 -1
- package/cjs/S6426/generated-meta.js +2 -1
- package/cjs/S6426/rule.js +6 -1
- package/cjs/S6437/generated-meta.js +2 -1
- package/cjs/S6437/rule.js +4 -2
- package/cjs/S6439/generated-meta.js +2 -1
- package/cjs/S6442/generated-meta.js +2 -1
- package/cjs/S6443/generated-meta.js +2 -1
- package/cjs/S6486/generated-meta.js +2 -1
- package/cjs/S6486/rule.js +4 -4
- package/cjs/S6564/generated-meta.js +2 -1
- package/cjs/S6594/generated-meta.js +2 -1
- package/cjs/S6627/generated-meta.js +2 -1
- package/cjs/S6759/generated-meta.js +2 -1
- package/cjs/S6759/rule.js +31 -1
- package/cjs/S6958/generated-meta.js +2 -1
- package/cjs/S6959/generated-meta.js +2 -1
- package/cjs/S7059/generated-meta.js +2 -1
- package/cjs/S7639/generated-meta.js +2 -1
- package/cjs/S7790/generated-meta.js +2 -1
- package/cjs/S8441/generated-meta.js +2 -1
- package/cjs/S8479/generated-meta.js +3 -2
- package/cjs/{S4817 → S8754}/generated-meta.js +10 -9
- package/cjs/{S5743 → S8754}/meta.js +1 -1
- package/cjs/S8754/rule.js +289 -0
- package/cjs/{S4784 → S8780}/generated-meta.js +9 -8
- package/cjs/{S2255 → S8780}/meta.js +1 -1
- package/cjs/S8780/rule.js +321 -0
- package/cjs/S8781/generated-meta.js +52 -0
- package/cjs/{S4787 → S8781}/meta.js +1 -1
- package/cjs/{S4784 → S8781}/rule.js +38 -46
- package/cjs/S8782/generated-meta.js +52 -0
- package/cjs/{S4784 → S8782}/meta.js +1 -1
- package/cjs/S8782/rule.js +148 -0
- package/cjs/S8783/generated-meta.js +52 -0
- package/cjs/S8783/meta.js +21 -0
- package/cjs/S8783/rule.js +167 -0
- package/cjs/{S4787 → S8786}/generated-meta.js +9 -8
- package/cjs/S8786/meta.js +22 -0
- package/cjs/{S4818 → S8786}/rule.js +24 -20
- package/cjs/S881/generated-meta.js +2 -1
- package/cjs/S888/generated-meta.js +2 -1
- package/cjs/S930/generated-meta.js +2 -1
- package/cjs/helpers/assertions-chai-common.js +29 -0
- package/cjs/helpers/assertions-chai.js +331 -0
- package/cjs/helpers/assertions-cypress.js +95 -0
- package/cjs/helpers/assertions.js +285 -0
- package/cjs/helpers/ast.js +30 -0
- package/cjs/helpers/chai.js +1 -1
- package/cjs/helpers/configs.js +37 -1
- package/cjs/helpers/cypress.js +73 -0
- package/cjs/helpers/dependency-manifests/all-in-parent-dirs.js +92 -0
- package/cjs/helpers/{package-jsons → dependency-manifests}/closest.js +17 -9
- package/cjs/helpers/dependency-manifests/dependencies.js +255 -0
- package/cjs/helpers/dependency-manifests/index.js +78 -0
- package/cjs/helpers/dependency-manifests/parse.js +51 -0
- package/cjs/helpers/dependency-manifests/parsed-dependency-files.js +80 -0
- package/cjs/helpers/dependency-manifests/resolvers/deno.js +79 -0
- package/cjs/helpers/dependency-manifests/resolvers/helpers.js +41 -0
- package/cjs/helpers/dependency-manifests/resolvers/package-json.js +167 -0
- package/cjs/helpers/dependency-manifests/resolvers/types.js +4 -0
- package/cjs/helpers/files.js +29 -0
- package/cjs/helpers/find-up/all-in-parent-dirs.js +1 -0
- package/cjs/helpers/find-up/closest.js +1 -0
- package/cjs/helpers/find-up/find-minimatch.js +2 -2
- package/cjs/helpers/generate-meta.js +1 -1
- package/cjs/helpers/mocha-style-test-frameworks.js +132 -0
- package/cjs/helpers/mocha.js +17 -7
- package/cjs/helpers/module.js +116 -23
- package/cjs/helpers/numbers.js +62 -0
- package/cjs/helpers/playwright.js +13 -0
- package/cjs/helpers/regex/extract.js +21 -9
- package/cjs/helpers/regex/flags.js +12 -5
- package/cjs/helpers/sinon.js +0 -4
- package/cjs/helpers/supertest.js +0 -4
- package/cjs/helpers/test-file-pattern.js +63 -0
- package/cjs/helpers/type-origin.js +82 -0
- package/cjs/helpers/type.js +162 -1
- package/cjs/helpers/vitest.js +0 -4
- package/cjs/plugin-rules.js +296 -298
- package/docs/async-test-assertions.md +7 -0
- package/docs/aws-apigateway-public-api.md +1 -1
- package/docs/aws-ec2-rds-dms-public.md +1 -1
- package/docs/aws-efs-unencrypted.md +1 -1
- package/docs/aws-iam-all-resources-accessible.md +1 -1
- package/docs/aws-s3-bucket-insecure-http.md +1 -1
- package/docs/aws-s3-bucket-public-access.md +1 -1
- package/docs/aws-s3-bucket-versioning.md +1 -1
- package/docs/aws-sagemaker-unencrypted-notebook.md +1 -1
- package/docs/aws-sns-unencrypted-topics.md +1 -1
- package/docs/code-eval.md +1 -1
- package/docs/confidential-information-logging.md +4 -2
- package/docs/content-security-policy.md +1 -1
- package/docs/cookie-no-httponly.md +1 -1
- package/docs/csrf.md +1 -1
- package/docs/disabled-auto-escaping.md +1 -1
- package/docs/disabled-resource-integrity.md +1 -1
- package/docs/dompurify-unsafe-config.md +2 -0
- package/docs/frame-ancestors.md +4 -2
- package/docs/hashing.md +1 -1
- package/docs/hidden-files.md +4 -2
- package/docs/hooks-before-test-cases.md +7 -0
- package/docs/no-angular-bypass-sanitization.md +1 -1
- package/docs/no-clear-text-protocols.md +1 -1
- package/docs/no-commented-code.md +1 -1
- package/docs/no-duplicate-test-title.md +7 -0
- package/docs/no-empty-test-title.md +7 -0
- package/docs/no-floating-point-equality.md +7 -0
- package/docs/no-forced-browser-interaction.md +7 -0
- package/docs/no-incompatible-assertion-types.md +9 -0
- package/docs/no-intrusive-permissions.md +4 -2
- package/docs/no-ip-forward.md +4 -2
- package/docs/no-mime-sniff.md +1 -1
- package/docs/no-mixed-content.md +4 -2
- package/docs/no-os-command-from-path.md +1 -1
- package/docs/no-referrer-policy.md +1 -1
- package/docs/no-small-switch.md +2 -0
- package/docs/no-trivial-assertions.md +7 -0
- package/docs/os-command.md +4 -2
- package/docs/prefer-specific-assertions.md +9 -0
- package/docs/production-debug.md +1 -1
- package/docs/pseudo-random.md +1 -1
- package/docs/slow-regex.md +1 -1
- package/docs/sql-queries.md +1 -1
- package/docs/strict-transport-security.md +1 -1
- package/docs/super-linear-regex.md +7 -0
- package/package.json +5 -4
- package/types/S100/generated-meta.d.ts +1 -0
- package/types/S101/generated-meta.d.ts +1 -0
- package/types/S104/generated-meta.d.ts +1 -0
- package/types/S105/generated-meta.d.ts +1 -0
- package/types/S1066/generated-meta.d.ts +1 -0
- package/types/S1067/generated-meta.d.ts +1 -0
- package/types/S1110/generated-meta.d.ts +1 -0
- package/types/S1119/generated-meta.d.ts +1 -0
- package/types/S1121/generated-meta.d.ts +1 -0
- package/types/S1125/generated-meta.d.ts +1 -0
- package/types/S1126/generated-meta.d.ts +1 -0
- package/types/S1128/generated-meta.d.ts +1 -0
- package/types/S1134/generated-meta.d.ts +1 -0
- package/types/S1135/generated-meta.d.ts +1 -0
- package/types/S1154/generated-meta.d.ts +1 -0
- package/types/S117/generated-meta.d.ts +1 -0
- package/types/S1172/generated-meta.d.ts +1 -0
- package/types/S1192/generated-meta.d.ts +1 -0
- package/types/S1219/generated-meta.d.ts +1 -0
- package/types/S1226/generated-meta.d.ts +1 -0
- package/types/S124/generated-meta.d.ts +1 -0
- package/types/{S2255 → S1244}/generated-meta.d.ts +3 -2
- package/types/S1244/meta.d.ts +2 -0
- package/types/S125/generated-meta.d.ts +1 -0
- package/types/S126/generated-meta.d.ts +1 -0
- package/types/S1264/generated-meta.d.ts +1 -0
- package/types/S128/generated-meta.d.ts +1 -0
- package/types/S1291/generated-meta.d.ts +1 -0
- package/types/S1301/generated-meta.d.ts +2 -1
- package/types/S1313/generated-meta.d.ts +1 -0
- package/types/S134/generated-meta.d.ts +1 -0
- package/types/S135/generated-meta.d.ts +1 -0
- package/types/S138/generated-meta.d.ts +1 -0
- package/types/S1439/generated-meta.d.ts +1 -0
- package/types/S1444/generated-meta.d.ts +1 -0
- package/types/S1451/generated-meta.d.ts +1 -0
- package/types/S1472/generated-meta.d.ts +1 -0
- package/types/S1479/generated-meta.d.ts +1 -0
- package/types/S1481/generated-meta.d.ts +1 -0
- package/types/S1488/generated-meta.d.ts +1 -0
- package/types/S1515/generated-meta.d.ts +1 -0
- package/types/S1523/generated-meta.d.ts +1 -0
- package/types/S1526/generated-meta.d.ts +1 -0
- package/types/S1527/generated-meta.d.ts +1 -0
- package/types/S1528/generated-meta.d.ts +1 -0
- package/types/S1529/generated-meta.d.ts +1 -0
- package/types/S1530/generated-meta.d.ts +1 -0
- package/types/S1533/generated-meta.d.ts +1 -0
- package/types/S1535/generated-meta.d.ts +1 -0
- package/types/S1541/generated-meta.d.ts +1 -0
- package/types/S1607/generated-meta.d.ts +1 -0
- package/types/S1764/generated-meta.d.ts +1 -0
- package/types/S1821/generated-meta.d.ts +1 -0
- package/types/S1848/generated-meta.d.ts +1 -0
- package/types/S1854/generated-meta.d.ts +1 -0
- package/types/S1862/generated-meta.d.ts +1 -0
- package/types/S1871/generated-meta.d.ts +1 -0
- package/types/S1874/generated-meta.d.ts +1 -0
- package/types/S1940/generated-meta.d.ts +1 -0
- package/types/S1994/generated-meta.d.ts +1 -0
- package/types/S2004/generated-meta.d.ts +1 -0
- package/types/S2068/generated-meta.d.ts +1 -0
- package/types/S2077/generated-meta.d.ts +1 -0
- package/types/S2092/generated-meta.d.ts +1 -0
- package/types/S2123/generated-meta.d.ts +1 -0
- package/types/S2137/generated-meta.d.ts +1 -0
- package/types/S2138/generated-meta.d.ts +1 -0
- package/types/S2187/generated-meta.d.ts +1 -0
- package/types/S2201/generated-meta.d.ts +1 -0
- package/types/S2208/generated-meta.d.ts +1 -0
- package/types/S2234/generated-meta.d.ts +1 -0
- package/types/S2245/generated-meta.d.ts +1 -0
- package/types/S2251/generated-meta.d.ts +1 -0
- package/types/S2259/generated-meta.d.ts +1 -0
- package/types/S2301/generated-meta.d.ts +1 -0
- package/types/S2310/generated-meta.d.ts +1 -0
- package/types/S2392/generated-meta.d.ts +1 -0
- package/types/S2424/generated-meta.d.ts +1 -0
- package/types/S2428/generated-meta.d.ts +1 -0
- package/types/S2486/generated-meta.d.ts +1 -0
- package/types/S2589/generated-meta.d.ts +1 -0
- package/types/S2598/generated-meta.d.ts +1 -0
- package/types/S2612/generated-meta.d.ts +1 -0
- package/types/S2639/generated-meta.d.ts +1 -0
- package/types/S2681/generated-meta.d.ts +1 -0
- package/types/S2692/generated-meta.d.ts +1 -0
- package/types/S2699/generated-meta.d.ts +1 -0
- package/types/S2703/generated-meta.d.ts +1 -0
- package/types/S2737/generated-meta.d.ts +1 -0
- package/types/S2755/generated-meta.d.ts +1 -0
- package/types/S2757/generated-meta.d.ts +1 -0
- package/types/S2817/generated-meta.d.ts +1 -0
- package/types/S2819/generated-meta.d.ts +1 -0
- package/types/S2870/generated-meta.d.ts +1 -0
- package/types/S2871/generated-meta.d.ts +1 -0
- package/types/S2970/generated-meta.d.ts +1 -0
- package/types/S2990/generated-meta.d.ts +1 -0
- package/types/S2999/generated-meta.d.ts +1 -0
- package/types/S3001/generated-meta.d.ts +1 -0
- package/types/S3003/generated-meta.d.ts +1 -0
- package/types/S3317/generated-meta.d.ts +1 -0
- package/types/S3330/generated-meta.d.ts +1 -0
- package/types/S3358/generated-meta.d.ts +1 -0
- package/types/S3402/generated-meta.d.ts +1 -0
- package/types/S3403/generated-meta.d.ts +1 -0
- package/types/S3415/generated-meta.d.ts +1 -0
- package/types/S3499/generated-meta.d.ts +1 -0
- package/types/S3500/generated-meta.d.ts +1 -0
- package/types/S3513/generated-meta.d.ts +1 -0
- package/types/S3514/generated-meta.d.ts +1 -0
- package/types/S3516/generated-meta.d.ts +1 -0
- package/types/S3524/generated-meta.d.ts +1 -0
- package/types/S3525/generated-meta.d.ts +1 -0
- package/types/S3531/generated-meta.d.ts +1 -0
- package/types/S3533/generated-meta.d.ts +1 -0
- package/types/S3579/generated-meta.d.ts +1 -0
- package/types/S3616/generated-meta.d.ts +1 -0
- package/types/S3626/generated-meta.d.ts +1 -0
- package/types/S3686/generated-meta.d.ts +1 -0
- package/types/S3699/generated-meta.d.ts +1 -0
- package/types/S3735/generated-meta.d.ts +1 -0
- package/types/S3757/generated-meta.d.ts +1 -0
- package/types/S3758/generated-meta.d.ts +1 -0
- package/types/S3760/generated-meta.d.ts +1 -0
- package/types/S3776/generated-meta.d.ts +1 -0
- package/types/S3782/generated-meta.d.ts +1 -0
- package/types/S3785/generated-meta.d.ts +1 -0
- package/types/S3796/generated-meta.d.ts +1 -0
- package/types/S3798/generated-meta.d.ts +1 -0
- package/types/S3800/generated-meta.d.ts +1 -0
- package/types/S3801/generated-meta.d.ts +1 -0
- package/types/S3827/generated-meta.d.ts +1 -0
- package/types/S3923/generated-meta.d.ts +1 -0
- package/types/S3972/generated-meta.d.ts +1 -0
- package/types/S3973/generated-meta.d.ts +1 -0
- package/types/S3981/generated-meta.d.ts +1 -0
- package/types/S3984/generated-meta.d.ts +1 -0
- package/types/S4030/generated-meta.d.ts +1 -0
- package/types/S4036/generated-meta.d.ts +1 -0
- package/types/S4043/generated-meta.d.ts +1 -0
- package/types/S4139/generated-meta.d.ts +1 -0
- package/types/S4143/generated-meta.d.ts +1 -0
- package/types/S4144/generated-meta.d.ts +1 -0
- package/types/S4158/generated-meta.d.ts +1 -0
- package/types/S4165/generated-meta.d.ts +1 -0
- package/types/S4322/generated-meta.d.ts +1 -0
- package/types/S4323/generated-meta.d.ts +1 -0
- package/types/S4324/generated-meta.d.ts +1 -0
- package/types/S4328/generated-meta.d.ts +1 -0
- package/types/S4335/generated-meta.d.ts +1 -0
- package/types/S4423/generated-meta.d.ts +1 -0
- package/types/S4426/generated-meta.d.ts +1 -0
- package/types/S4502/generated-meta.d.ts +1 -0
- package/types/S4507/generated-meta.d.ts +1 -0
- package/types/S4524/generated-meta.d.ts +1 -0
- package/types/S4619/generated-meta.d.ts +1 -0
- package/types/S4621/generated-meta.d.ts +1 -0
- package/types/S4622/generated-meta.d.ts +1 -0
- package/types/S4623/generated-meta.d.ts +1 -0
- package/types/S4624/generated-meta.d.ts +1 -0
- package/types/S4634/generated-meta.d.ts +1 -0
- package/types/S4721/generated-meta.d.ts +2 -1
- package/types/S4782/generated-meta.d.ts +1 -0
- package/types/S4790/generated-meta.d.ts +1 -0
- package/types/S4798/generated-meta.d.ts +1 -0
- package/types/S4822/generated-meta.d.ts +1 -0
- package/types/S4830/generated-meta.d.ts +1 -0
- package/types/S5042/generated-meta.d.ts +1 -0
- package/types/S5122/generated-meta.d.ts +1 -0
- package/types/S5148/generated-meta.d.ts +1 -0
- package/types/S5247/generated-meta.d.ts +1 -0
- package/types/S5256/generated-meta.d.ts +1 -0
- package/types/S5257/generated-meta.d.ts +1 -0
- package/types/S5260/generated-meta.d.ts +1 -0
- package/types/S5264/generated-meta.d.ts +1 -0
- package/types/S5332/generated-meta.d.ts +1 -0
- package/types/S5443/generated-meta.d.ts +1 -0
- package/types/S5527/generated-meta.d.ts +1 -0
- package/types/S5542/generated-meta.d.ts +1 -0
- package/types/S5547/generated-meta.d.ts +1 -0
- package/types/S5604/generated-meta.d.ts +2 -1
- package/types/S5659/generated-meta.d.ts +1 -0
- package/types/S5689/generated-meta.d.ts +1 -0
- package/types/S5691/generated-meta.d.ts +2 -1
- package/types/S5693/generated-meta.d.ts +1 -0
- package/types/S5725/generated-meta.d.ts +1 -0
- package/types/S5728/generated-meta.d.ts +1 -0
- package/types/S5730/generated-meta.d.ts +2 -1
- package/types/S5732/generated-meta.d.ts +2 -1
- package/types/S5734/generated-meta.d.ts +1 -0
- package/types/S5736/generated-meta.d.ts +1 -0
- package/types/S5739/generated-meta.d.ts +1 -0
- package/types/S5757/generated-meta.d.ts +2 -1
- package/types/S5759/generated-meta.d.ts +2 -1
- package/types/S5842/generated-meta.d.ts +1 -0
- package/types/S5843/generated-meta.d.ts +1 -0
- package/types/S5845/generated-meta.d.ts +18 -0
- package/types/S5845/meta.d.ts +2 -0
- package/types/S5850/generated-meta.d.ts +1 -0
- package/types/S5852/generated-meta.d.ts +1 -0
- package/types/S5856/generated-meta.d.ts +1 -0
- package/types/S5860/generated-meta.d.ts +1 -0
- package/types/S5863/generated-meta.d.ts +1 -0
- package/types/S5867/generated-meta.d.ts +1 -0
- package/types/S5868/generated-meta.d.ts +1 -0
- package/types/S5869/generated-meta.d.ts +1 -0
- package/types/S5876/generated-meta.d.ts +1 -0
- package/types/S5906/assertion-suggestions.d.ts +7 -0
- package/types/S5906/assertion-utils.d.ts +14 -0
- package/types/S5906/cypress-suggestions.d.ts +4 -0
- package/types/S5906/expect-chain.d.ts +5 -0
- package/types/S5906/generated-meta.d.ts +18 -0
- package/types/S5906/meta.d.ts +2 -0
- package/types/S5906/playwright-suggestions.d.ts +4 -0
- package/types/{S4817 → S5914}/generated-meta.d.ts +5 -4
- package/types/S5914/meta.d.ts +2 -0
- package/types/S5958/generated-meta.d.ts +1 -0
- package/types/S5973/generated-meta.d.ts +1 -0
- package/types/S6019/generated-meta.d.ts +1 -0
- package/types/S6035/generated-meta.d.ts +1 -0
- package/types/S6079/generated-meta.d.ts +1 -0
- package/types/S6080/generated-meta.d.ts +1 -0
- package/types/S6092/generated-meta.d.ts +1 -0
- package/types/S6249/generated-meta.d.ts +1 -0
- package/types/S6252/generated-meta.d.ts +1 -0
- package/types/S6265/generated-meta.d.ts +1 -0
- package/types/S6268/generated-meta.d.ts +1 -0
- package/types/S6270/generated-meta.d.ts +1 -0
- package/types/S6275/generated-meta.d.ts +1 -0
- package/types/S6281/generated-meta.d.ts +1 -0
- package/types/S6302/generated-meta.d.ts +1 -0
- package/types/S6303/generated-meta.d.ts +1 -0
- package/types/S6304/generated-meta.d.ts +1 -0
- package/types/S6308/generated-meta.d.ts +1 -0
- package/types/S6317/generated-meta.d.ts +1 -0
- package/types/S6319/generated-meta.d.ts +1 -0
- package/types/S6321/generated-meta.d.ts +1 -0
- package/types/S6323/generated-meta.d.ts +1 -0
- package/types/S6324/generated-meta.d.ts +1 -0
- package/types/S6326/generated-meta.d.ts +1 -0
- package/types/S6327/generated-meta.d.ts +1 -0
- package/types/S6328/generated-meta.d.ts +1 -0
- package/types/S6329/generated-meta.d.ts +1 -0
- package/types/S6330/generated-meta.d.ts +1 -0
- package/types/S6331/generated-meta.d.ts +1 -0
- package/types/S6332/generated-meta.d.ts +1 -0
- package/types/S6333/generated-meta.d.ts +1 -0
- package/types/S6351/generated-meta.d.ts +1 -0
- package/types/S6353/generated-meta.d.ts +1 -0
- package/types/S6397/generated-meta.d.ts +1 -0
- package/types/S6418/generated-meta.d.ts +1 -0
- package/types/S6426/generated-meta.d.ts +1 -0
- package/types/S6437/generated-meta.d.ts +1 -0
- package/types/S6439/generated-meta.d.ts +1 -0
- package/types/S6442/generated-meta.d.ts +1 -0
- package/types/S6443/generated-meta.d.ts +1 -0
- package/types/S6486/generated-meta.d.ts +1 -0
- package/types/S6564/generated-meta.d.ts +1 -0
- package/types/S6594/generated-meta.d.ts +1 -0
- package/types/S6627/generated-meta.d.ts +1 -0
- package/types/S6759/generated-meta.d.ts +1 -0
- package/types/S6958/generated-meta.d.ts +1 -0
- package/types/S6959/generated-meta.d.ts +1 -0
- package/types/S7059/generated-meta.d.ts +1 -0
- package/types/S7639/generated-meta.d.ts +1 -0
- package/types/S7790/generated-meta.d.ts +1 -0
- package/types/S8441/generated-meta.d.ts +1 -0
- package/types/S8479/generated-meta.d.ts +2 -1
- package/types/S8754/generated-meta.d.ts +18 -0
- package/types/{S5743 → S8754}/meta.d.ts +1 -1
- package/types/{S4787 → S8780}/generated-meta.d.ts +4 -3
- package/types/S8780/meta.d.ts +2 -0
- package/types/S8781/generated-meta.d.ts +18 -0
- package/types/S8781/meta.d.ts +2 -0
- package/types/S8782/generated-meta.d.ts +18 -0
- package/types/S8782/meta.d.ts +2 -0
- package/types/S8783/generated-meta.d.ts +18 -0
- package/types/S8783/meta.d.ts +2 -0
- package/types/{S4784 → S8786}/generated-meta.d.ts +4 -3
- package/types/S8786/meta.d.ts +2 -0
- package/types/S881/generated-meta.d.ts +1 -0
- package/types/S888/generated-meta.d.ts +1 -0
- package/types/S930/generated-meta.d.ts +1 -0
- package/types/helpers/assertions-chai-common.d.ts +7 -0
- package/types/helpers/assertions-chai.d.ts +4 -0
- package/types/helpers/assertions-cypress.d.ts +7 -0
- package/types/helpers/assertions.d.ts +39 -0
- package/types/helpers/ast.d.ts +10 -0
- package/types/helpers/configs.d.ts +7 -38
- package/types/helpers/cypress.d.ts +11 -0
- package/types/helpers/dependency-manifests/all-in-parent-dirs.d.ts +18 -0
- package/types/helpers/dependency-manifests/closest.d.ts +5 -0
- package/types/helpers/{package-jsons → dependency-manifests}/dependencies.d.ts +22 -17
- package/types/helpers/dependency-manifests/index.d.ts +22 -0
- package/types/helpers/dependency-manifests/parse.d.ts +12 -0
- package/types/helpers/dependency-manifests/parsed-dependency-files.d.ts +8 -0
- package/types/helpers/dependency-manifests/resolvers/deno.d.ts +12 -0
- package/types/helpers/dependency-manifests/resolvers/helpers.d.ts +12 -0
- package/types/helpers/dependency-manifests/resolvers/package-json.d.ts +2 -0
- package/types/helpers/dependency-manifests/resolvers/types.d.ts +46 -0
- package/types/helpers/files.d.ts +10 -2
- package/types/helpers/generate-meta.d.ts +5 -0
- package/types/helpers/mocha-style-test-frameworks.d.ts +19 -0
- package/types/helpers/mocha.d.ts +7 -0
- package/types/helpers/module.d.ts +14 -8
- package/types/helpers/numbers.d.ts +4 -0
- package/types/helpers/playwright.d.ts +2 -0
- package/types/helpers/regex/extract.d.ts +7 -3
- package/types/helpers/sinon.d.ts +0 -1
- package/types/helpers/supertest.d.ts +0 -1
- package/types/helpers/test-file-pattern.d.ts +17 -0
- package/types/helpers/type-origin.d.ts +31 -0
- package/types/helpers/type.d.ts +92 -1
- package/types/helpers/vitest.d.ts +0 -1
- package/types/plugin-rules.d.ts +10 -11
- package/cjs/S2255/rule.js +0 -111
- package/cjs/S4787/rule.js +0 -124
- package/cjs/S4817/rule.js +0 -103
- package/cjs/S4818/generated-meta.js +0 -51
- package/cjs/S4818/meta.js +0 -21
- package/cjs/S4823/generated-meta.js +0 -51
- package/cjs/S4823/meta.js +0 -21
- package/cjs/S4823/rule.js +0 -75
- package/cjs/S4829/generated-meta.js +0 -51
- package/cjs/S4829/meta.js +0 -21
- package/cjs/S4829/rule.js +0 -75
- package/cjs/S5742/generated-meta.js +0 -51
- package/cjs/S5742/meta.js +0 -22
- package/cjs/S5742/rule.js +0 -75
- package/cjs/S5743/generated-meta.js +0 -51
- package/cjs/S5743/rule.js +0 -78
- package/cjs/S6245/generated-meta.js +0 -51
- package/cjs/S6245/meta.js +0 -22
- package/cjs/S6245/rule.js +0 -87
- package/cjs/S6299/generated-meta.js +0 -51
- package/cjs/S6299/index.js +0 -21
- package/cjs/S6299/meta.js +0 -21
- package/cjs/S6299/rule.js +0 -93
- package/cjs/helpers/package-jsons/all-in-parent-dirs.js +0 -31
- package/cjs/helpers/package-jsons/dependencies.js +0 -221
- package/cjs/helpers/package-jsons/index.js +0 -42
- package/cjs/helpers/package-jsons/parse.js +0 -79
- package/docs/aws-s3-bucket-server-encryption.md +0 -9
- package/docs/certificate-transparency.md +0 -9
- package/docs/cookies.md +0 -9
- package/docs/dns-prefetching.md +0 -9
- package/docs/encryption.md +0 -9
- package/docs/no-vue-bypass-sanitization.md +0 -9
- package/docs/process-argv.md +0 -9
- package/docs/regular-expr.md +0 -9
- package/docs/sockets.md +0 -9
- package/docs/standard-input.md +0 -9
- package/docs/xpath.md +0 -9
- package/types/S2255/meta.d.ts +0 -2
- package/types/S4784/meta.d.ts +0 -2
- package/types/S4787/meta.d.ts +0 -2
- package/types/S4817/meta.d.ts +0 -2
- package/types/S4818/generated-meta.d.ts +0 -17
- package/types/S4818/meta.d.ts +0 -2
- package/types/S4823/generated-meta.d.ts +0 -17
- package/types/S4823/meta.d.ts +0 -2
- package/types/S4829/generated-meta.d.ts +0 -17
- package/types/S4829/meta.d.ts +0 -2
- package/types/S5742/generated-meta.d.ts +0 -17
- package/types/S5742/meta.d.ts +0 -3
- package/types/S5743/generated-meta.d.ts +0 -17
- package/types/S6245/generated-meta.d.ts +0 -17
- package/types/S6245/meta.d.ts +0 -3
- package/types/S6299/generated-meta.d.ts +0 -17
- package/types/S6299/index.d.ts +0 -1
- package/types/S6299/meta.d.ts +0 -2
- package/types/S6299/rule.d.ts +0 -2
- package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +0 -10
- package/types/helpers/package-jsons/closest.d.ts +0 -2
- package/types/helpers/package-jsons/index.d.ts +0 -8
- package/types/helpers/package-jsons/parse.d.ts +0 -13
- /package/cjs/{S2255 → S1244}/index.js +0 -0
- /package/cjs/{S4784 → S5845}/index.js +0 -0
- /package/cjs/{S4787 → S5906}/index.js +0 -0
- /package/cjs/{S4817 → S5914}/index.js +0 -0
- /package/cjs/{S4818 → S8754}/index.js +0 -0
- /package/cjs/{S4823 → S8780}/index.js +0 -0
- /package/cjs/{S4829 → S8781}/index.js +0 -0
- /package/cjs/{S5742 → S8782}/index.js +0 -0
- /package/cjs/{S5743 → S8783}/index.js +0 -0
- /package/cjs/{S6245 → S8786}/index.js +0 -0
- /package/types/{S2255 → S1244}/index.d.ts +0 -0
- /package/types/{S2255 → S1244}/rule.d.ts +0 -0
- /package/types/{S4784 → S5845}/index.d.ts +0 -0
- /package/types/{S4784 → S5845}/rule.d.ts +0 -0
- /package/types/{S4787 → S5906}/index.d.ts +0 -0
- /package/types/{S4787 → S5906}/rule.d.ts +0 -0
- /package/types/{S4817 → S5914}/index.d.ts +0 -0
- /package/types/{S4817 → S5914}/rule.d.ts +0 -0
- /package/types/{S4818 → S8754}/index.d.ts +0 -0
- /package/types/{S4818 → S8754}/rule.d.ts +0 -0
- /package/types/{S4823 → S8780}/index.d.ts +0 -0
- /package/types/{S4823 → S8780}/rule.d.ts +0 -0
- /package/types/{S4829 → S8781}/index.d.ts +0 -0
- /package/types/{S4829 → S8781}/rule.d.ts +0 -0
- /package/types/{S5742 → S8782}/index.d.ts +0 -0
- /package/types/{S5742 → S8782}/rule.d.ts +0 -0
- /package/types/{S5743 → S8783}/index.d.ts +0 -0
- /package/types/{S5743 → S8783}/rule.d.ts +0 -0
- /package/types/{S6245 → S8786}/index.d.ts +0 -0
- /package/types/{S6245 → S8786}/rule.d.ts +0 -0
|
@@ -0,0 +1,296 @@
|
|
|
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/S5845/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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
53
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
54
|
+
};
|
|
55
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
+
exports.rule = void 0;
|
|
57
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
58
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
59
|
+
const assertions_js_1 = require("../helpers/assertions.js");
|
|
60
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
61
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
62
|
+
const type_js_1 = require("../helpers/type.js");
|
|
63
|
+
const meta = __importStar(require("./generated-meta.js"));
|
|
64
|
+
const messages = {
|
|
65
|
+
incompatibleStaticTypes: 'Review this equality assertion: the compared expressions have incompatible static types ("{{actual}}" and "{{expected}}").',
|
|
66
|
+
};
|
|
67
|
+
exports.rule = {
|
|
68
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, { messages }),
|
|
69
|
+
/*
|
|
70
|
+
* High-level idea:
|
|
71
|
+
* - only run when the parser provides type information;
|
|
72
|
+
* - only analyse strict and deep equality assertions;
|
|
73
|
+
* - reduce both assertion operands to broad primitive families instead of comparing exact
|
|
74
|
+
* TypeScript types, because the rule is meant to highlight incompatible static typings on
|
|
75
|
+
* equality checks rather than to model all runtime equality behavior;
|
|
76
|
+
* - stay conservative whenever the type is imprecise (`any`, `unknown`, type parameters, etc.),
|
|
77
|
+
* or when a mutable identifier may have been reassigned to a different family.
|
|
78
|
+
*/
|
|
79
|
+
create(context) {
|
|
80
|
+
const services = context.sourceCode.parserServices;
|
|
81
|
+
if (!(0, parser_services_js_1.isRequiredParserServices)(services)) {
|
|
82
|
+
return {};
|
|
83
|
+
}
|
|
84
|
+
const checker = services.program.getTypeChecker();
|
|
85
|
+
const monkeyPatchedReceivers = new Set();
|
|
86
|
+
// Expressions that are not rooted in a mutable local binding can rely directly on the
|
|
87
|
+
// expression type at the assertion site:
|
|
88
|
+
// expect(getCount()).toBe('1');
|
|
89
|
+
// expect(Number(title)).toBe('1');
|
|
90
|
+
//
|
|
91
|
+
// Bare identifiers and member expressions rooted in an identifier need one extra guard.
|
|
92
|
+
// `getTypeAtLocation(value)` can stay narrow even after an imprecise write, so using the
|
|
93
|
+
// current type alone would introduce false positives:
|
|
94
|
+
// declare function readAny(): any;
|
|
95
|
+
// let value: number = 1;
|
|
96
|
+
// value = readAny();
|
|
97
|
+
// expect(value).toBe('1'); // keep silent: runtime value may be string
|
|
98
|
+
// let user: { id: number } = { id: 1 };
|
|
99
|
+
// user = readAny();
|
|
100
|
+
// expect(user.id).toBe('1'); // keep silent for the same reason
|
|
101
|
+
//
|
|
102
|
+
// We therefore trust the current type only when the root identifier of the expression has only
|
|
103
|
+
// been written with values that are themselves classifiable to primitive families. That still
|
|
104
|
+
// lets TypeScript's flow narrowing do the useful work for precise writes:
|
|
105
|
+
// let value: number | string;
|
|
106
|
+
// if (Math.random() > 0.5) value = 'ready'; else value = 1;
|
|
107
|
+
// if (typeof value === 'string') expect(value).toBe(true); // report
|
|
108
|
+
//
|
|
109
|
+
// This is intentionally coarser than full reaching-definitions. If any write is `any`,
|
|
110
|
+
// `unknown`, a type parameter, indexed access, etc., we bail out conservatively.
|
|
111
|
+
function checkAssertion(node) {
|
|
112
|
+
const assertion = (0, assertions_js_1.extractTestAssertion)(context, node);
|
|
113
|
+
if (!isRelevantAssertion(assertion)) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const actualType = checker.getBaseTypeOfLiteralType((0, type_js_1.getTypeFromTreeNode)(assertion.actual, services));
|
|
117
|
+
const expectedType = checker.getBaseTypeOfLiteralType((0, type_js_1.getTypeFromTreeNode)(assertion.expected, services));
|
|
118
|
+
if (!hasStablePrimitiveType(assertion.actual, actualType) ||
|
|
119
|
+
!hasStablePrimitiveType(assertion.expected, expectedType)) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const incompatibility = getIncompatibility(actualType, expectedType, checker);
|
|
123
|
+
if (incompatibility) {
|
|
124
|
+
context.report({
|
|
125
|
+
node: assertion.reportNode,
|
|
126
|
+
messageId: 'incompatibleStaticTypes',
|
|
127
|
+
data: incompatibility,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function hasStablePrimitiveType(node, nodeType) {
|
|
132
|
+
const monkeyPatchedReceiver = getMonkeyPatchedReceiver(node);
|
|
133
|
+
if (monkeyPatchedReceiver) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
const allowedCategories = getPrimitiveCategories(nodeType);
|
|
137
|
+
if (!allowedCategories) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
const rootIdentifier = getRootIdentifier(node);
|
|
141
|
+
if (!rootIdentifier) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, rootIdentifier.name, node);
|
|
145
|
+
if (!variable) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return variable.references
|
|
149
|
+
.filter(ref => ref.isWrite())
|
|
150
|
+
.every(ref => isPreciselyTypedWrite(ref.writeExpr, checker, services));
|
|
151
|
+
}
|
|
152
|
+
function getMonkeyPatchedReceiver(node) {
|
|
153
|
+
if (node.type !== 'CallExpression' || node.callee.type !== 'MemberExpression') {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const rootIdentifier = getRootIdentifier(node.callee.object);
|
|
157
|
+
if (!rootIdentifier) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, rootIdentifier.name, node);
|
|
161
|
+
return variable && monkeyPatchedReceivers.has(variable) ? variable : null;
|
|
162
|
+
}
|
|
163
|
+
function collectMonkeyPatchedReceiver(node) {
|
|
164
|
+
if (node.type !== 'AssignmentExpression' ||
|
|
165
|
+
node.operator !== '=' ||
|
|
166
|
+
node.left.type !== 'MemberExpression' ||
|
|
167
|
+
!isFunctionLikeExpression(node.right)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const rootIdentifier = getRootIdentifier(node.left.object);
|
|
171
|
+
if (!rootIdentifier) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, rootIdentifier.name, node);
|
|
175
|
+
if (variable) {
|
|
176
|
+
monkeyPatchedReceivers.add(variable);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
AssignmentExpression(node) {
|
|
181
|
+
collectMonkeyPatchedReceiver(node);
|
|
182
|
+
},
|
|
183
|
+
CallExpression(node) {
|
|
184
|
+
checkAssertion(node);
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
// Strict and deep equality assertions are in scope. Loose equality depends on coercion, while
|
|
190
|
+
// deep equality is relevant here because the rule only reasons about primitive type families.
|
|
191
|
+
function isRelevantAssertion(assertion) {
|
|
192
|
+
return (assertion?.kind === 'comparison' &&
|
|
193
|
+
(assertion.comparison === 'strict' || assertion.comparison === 'deep'));
|
|
194
|
+
}
|
|
195
|
+
// The rule reports only when the two operands have no plausible primitive-family overlap.
|
|
196
|
+
// If they share a family, or either side falls into a conservative family, we skip reporting.
|
|
197
|
+
function getIncompatibility(actualType, expectedType, checker) {
|
|
198
|
+
const actualCategories = getPrimitiveCategories(actualType);
|
|
199
|
+
const expectedCategories = getPrimitiveCategories(expectedType);
|
|
200
|
+
if (!actualCategories || !expectedCategories) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
for (const actualCategory of actualCategories) {
|
|
204
|
+
for (const expectedCategory of expectedCategories) {
|
|
205
|
+
if (actualCategory === expectedCategory ||
|
|
206
|
+
isConservativeCategory(actualCategory) ||
|
|
207
|
+
isConservativeCategory(expectedCategory)) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
actual: checker.typeToString(actualType),
|
|
214
|
+
expected: checker.typeToString(expectedType),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Objects, null, and undefined are kept conservative because structural typing and JS runtime
|
|
218
|
+
// behavior make "always incompatible" claims too risky for this rule.
|
|
219
|
+
function isConservativeCategory(category) {
|
|
220
|
+
return category === 'object' || category === 'null' || category === 'undefined';
|
|
221
|
+
}
|
|
222
|
+
// Normalise scalar and union types to a flat list so the rest of the logic can treat both cases
|
|
223
|
+
// uniformly.
|
|
224
|
+
function getUnionMembers(type) {
|
|
225
|
+
return type.isUnion() ? type.types : [type];
|
|
226
|
+
}
|
|
227
|
+
// Collapse a TypeScript type into primitive families. If any union member is too imprecise to
|
|
228
|
+
// classify, return null so callers can stay conservative.
|
|
229
|
+
function getPrimitiveCategories(type) {
|
|
230
|
+
const categories = getUnionMembers(type).map(getPrimitiveCategory);
|
|
231
|
+
return categories.every(isPrimitiveCategory) ? categories : null;
|
|
232
|
+
}
|
|
233
|
+
// Translate the detailed TypeScript type system into the coarse families this rule reasons about.
|
|
234
|
+
// Anything outside those obvious buckets is treated as indeterminate.
|
|
235
|
+
function getPrimitiveCategory(type) {
|
|
236
|
+
const indeterminateFlags = typescript_1.default.TypeFlags.Any |
|
|
237
|
+
typescript_1.default.TypeFlags.Unknown |
|
|
238
|
+
typescript_1.default.TypeFlags.TypeParameter |
|
|
239
|
+
typescript_1.default.TypeFlags.IndexedAccess;
|
|
240
|
+
if ((type.flags & indeterminateFlags) !== 0) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
if ((type.flags & typescript_1.default.TypeFlags.StringLike) !== 0) {
|
|
244
|
+
return 'string';
|
|
245
|
+
}
|
|
246
|
+
if ((type.flags & typescript_1.default.TypeFlags.NumberLike) !== 0) {
|
|
247
|
+
return 'number';
|
|
248
|
+
}
|
|
249
|
+
if ((type.flags & typescript_1.default.TypeFlags.BooleanLike) !== 0) {
|
|
250
|
+
return 'boolean';
|
|
251
|
+
}
|
|
252
|
+
if ((type.flags & typescript_1.default.TypeFlags.BigIntLike) !== 0) {
|
|
253
|
+
return 'bigint';
|
|
254
|
+
}
|
|
255
|
+
if ((type.flags & typescript_1.default.TypeFlags.ESSymbolLike) !== 0) {
|
|
256
|
+
return 'symbol';
|
|
257
|
+
}
|
|
258
|
+
if ((type.flags & typescript_1.default.TypeFlags.Null) !== 0) {
|
|
259
|
+
return 'null';
|
|
260
|
+
}
|
|
261
|
+
if ((type.flags & (typescript_1.default.TypeFlags.Undefined | typescript_1.default.TypeFlags.Void)) !== 0) {
|
|
262
|
+
return 'undefined';
|
|
263
|
+
}
|
|
264
|
+
if ((type.flags & typescript_1.default.TypeFlags.Object) !== 0) {
|
|
265
|
+
return 'object';
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
// Narrow the mapped category list back to `PrimitiveCategory[]` once null has been ruled out.
|
|
270
|
+
function isPrimitiveCategory(category) {
|
|
271
|
+
return category !== null;
|
|
272
|
+
}
|
|
273
|
+
// A write is trustworthy when TypeScript can still classify the assigned value into primitive
|
|
274
|
+
// families at the write site. If not, the identifier's current type is not reliable enough for
|
|
275
|
+
// this rule:
|
|
276
|
+
// value = readAny(); // bail out
|
|
277
|
+
// value = values[index]; // bail out when the indexed access is imprecise
|
|
278
|
+
//
|
|
279
|
+
// value = 'ready'; // precise
|
|
280
|
+
// value = 1; // precise
|
|
281
|
+
function isPreciselyTypedWrite(writeExpr, checker, services) {
|
|
282
|
+
if (!writeExpr) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
return (getPrimitiveCategories(checker.getBaseTypeOfLiteralType((0, type_js_1.getTypeFromTreeNode)(writeExpr, services))) !== null);
|
|
286
|
+
}
|
|
287
|
+
function getRootIdentifier(node) {
|
|
288
|
+
let current = node;
|
|
289
|
+
while (current.type === 'ChainExpression' || current.type === 'MemberExpression') {
|
|
290
|
+
current = current.type === 'ChainExpression' ? current.expression : current.object;
|
|
291
|
+
}
|
|
292
|
+
return current.type === 'Identifier' ? current : null;
|
|
293
|
+
}
|
|
294
|
+
function isFunctionLikeExpression(node) {
|
|
295
|
+
return node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression';
|
|
296
|
+
}
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5850';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
|
@@ -31,12 +31,12 @@ 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: '
|
|
39
|
+
description: 'Regular expressions should not cause catastrophic backtracking',
|
|
40
40
|
recommended: true,
|
|
41
41
|
url: 'https://sonarsource.github.io/rspec/#/rspec/S5852/javascript',
|
|
42
42
|
requiresTypeChecking: true,
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5852';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
package/cjs/S5852/rule.js
CHANGED
|
@@ -55,12 +55,20 @@ const scslre_1 = require("scslre");
|
|
|
55
55
|
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
57
57
|
const rule_template_js_1 = require("../helpers/regex/rule-template.js");
|
|
58
|
-
const message = `
|
|
58
|
+
const message = `Fix this regular expression that is vulnerable to exponential backtracking, as it can lead to denial of service.`;
|
|
59
59
|
exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
60
60
|
return {
|
|
61
61
|
onRegExpLiteralEnter: (node) => {
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
let reports;
|
|
63
|
+
try {
|
|
64
|
+
({ reports } = (0, scslre_1.analyse)(node));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// `scslre` does not understand every regexp accepted by the JS parser.
|
|
68
|
+
// Skip the S5852 check for those literals instead of aborting analysis for the whole file.
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (reports.some(r => r.exponential)) {
|
|
64
72
|
context.report({
|
|
65
73
|
message,
|
|
66
74
|
node: context.node,
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5856';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
|
@@ -31,7 +31,7 @@ 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: 'suggestion',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5860';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5863';
|
|
|
49
49
|
exports.scope = 'Tests';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = true;
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5867';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5868';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
package/cjs/S5868/rule.js
CHANGED
|
@@ -51,7 +51,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const ancestor_js_1 = require("../helpers/ancestor.js");
|
|
55
54
|
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
55
|
const ast_js_1 = require("../helpers/ast.js");
|
|
57
56
|
const regexpp_1 = require("@eslint-community/regexpp");
|
|
@@ -65,7 +64,21 @@ const MODIFIABLE_REGEXP_FLAGS_TYPES = new Set([
|
|
|
65
64
|
'TemplateLiteral',
|
|
66
65
|
'TaggedTemplateExpression',
|
|
67
66
|
]);
|
|
67
|
+
const MIN_HIGH_SURROGATE = 0xd800;
|
|
68
|
+
const MIN_LOW_SURROGATE = 0xdc00;
|
|
69
|
+
const MAX_LOW_SURROGATE_EXCLUSIVE = 0xe000;
|
|
70
|
+
const MIN_EMOJI_MODIFIER = 0x1f3fb;
|
|
71
|
+
const MAX_EMOJI_MODIFIER = 0x1f3ff;
|
|
72
|
+
const MIN_REGIONAL_INDICATOR = 0x1f1e6;
|
|
73
|
+
const MAX_REGIONAL_INDICATOR = 0x1f1ff;
|
|
74
|
+
const ZERO_WIDTH_JOINER = 0x200d;
|
|
68
75
|
exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
76
|
+
let currentSeams = [];
|
|
77
|
+
// Seam positions are in pattern space, while regexpp positions include the opening slash.
|
|
78
|
+
// A pair straddles a seam only when the seam is exactly before charB.
|
|
79
|
+
function spansSeam(charA, charB) {
|
|
80
|
+
return charA.end === charB.start && currentSeams.some(seam => seam + 1 === charB.start);
|
|
81
|
+
}
|
|
69
82
|
function checkSequence(sequence) {
|
|
70
83
|
// Stop on the first illegal character in the sequence
|
|
71
84
|
for (let index = 0; index < sequence.length; index++) {
|
|
@@ -75,20 +88,16 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
75
88
|
}
|
|
76
89
|
}
|
|
77
90
|
function checkCharacter(character, index, characters) {
|
|
78
|
-
// Stop on the first
|
|
79
|
-
// for instance a zero-width
|
|
80
|
-
|
|
81
|
-
if (check(character, index, characters)) {
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return false;
|
|
91
|
+
// Stop on the first check that fires as checks may overlap,
|
|
92
|
+
// for instance a zero-width sequence containing a modified emoji.
|
|
93
|
+
return characterChecks.some(check => check(character, index, characters));
|
|
86
94
|
}
|
|
87
95
|
function checkCombinedCharacter(character, index, characters) {
|
|
88
96
|
let reported = false;
|
|
89
97
|
if (index !== 0 &&
|
|
90
98
|
isCombiningCharacter(character.value) &&
|
|
91
|
-
!isCombiningCharacter(characters[index - 1].value)
|
|
99
|
+
!isCombiningCharacter(characters[index - 1].value) &&
|
|
100
|
+
!spansSeam(characters[index - 1], character)) {
|
|
92
101
|
const combinedChar = characters[index - 1].raw + characters[index].raw;
|
|
93
102
|
const message = `Move this Unicode combined character '${combinedChar}' outside of the character class`;
|
|
94
103
|
context.reportRegExpNode({ regexpNode: characters[index], node: context.node, message });
|
|
@@ -98,7 +107,9 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
98
107
|
}
|
|
99
108
|
function checkSurrogatePairTailCharacter(character, index, characters) {
|
|
100
109
|
let reported = false;
|
|
101
|
-
if (index !== 0 &&
|
|
110
|
+
if (index !== 0 &&
|
|
111
|
+
isSurrogatePair(characters[index - 1].value, character.value) &&
|
|
112
|
+
!spansSeam(characters[index - 1], character)) {
|
|
102
113
|
const surrogatePair = characters[index - 1].raw + characters[index].raw;
|
|
103
114
|
const message = `Move this Unicode surrogate pair '${surrogatePair}' outside of the character class or use 'u' flag`;
|
|
104
115
|
const pattern = (0, extract_js_1.getPatternFromNode)(context.node, context)?.pattern;
|
|
@@ -125,7 +136,7 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
125
136
|
if ((0, ast_js_1.isRegexLiteral)(node)) {
|
|
126
137
|
return insertTextAfter(fixer, node, 'u');
|
|
127
138
|
}
|
|
128
|
-
const regExpConstructor = getRegExpConstructor(node);
|
|
139
|
+
const regExpConstructor = getRegExpConstructor(node, sourceCode);
|
|
129
140
|
if (!regExpConstructor) {
|
|
130
141
|
return null;
|
|
131
142
|
}
|
|
@@ -144,7 +155,8 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
144
155
|
let reported = false;
|
|
145
156
|
if (index !== 0 &&
|
|
146
157
|
isEmojiModifier(character.value) &&
|
|
147
|
-
!isEmojiModifier(characters[index - 1].value)
|
|
158
|
+
!isEmojiModifier(characters[index - 1].value) &&
|
|
159
|
+
!spansSeam(characters[index - 1], character)) {
|
|
148
160
|
const modifiedEmoji = characters[index - 1].raw + characters[index].raw;
|
|
149
161
|
const message = `Move this Unicode modified Emoji '${modifiedEmoji}' outside of the character class`;
|
|
150
162
|
context.reportRegExpNode({ regexpNode: characters[index], node: context.node, message });
|
|
@@ -156,7 +168,8 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
156
168
|
let reported = false;
|
|
157
169
|
if (index !== 0 &&
|
|
158
170
|
isRegionalIndicator(character.value) &&
|
|
159
|
-
isRegionalIndicator(characters[index - 1].value)
|
|
171
|
+
isRegionalIndicator(characters[index - 1].value) &&
|
|
172
|
+
!spansSeam(characters[index - 1], character)) {
|
|
160
173
|
const regionalIndicator = characters[index - 1].raw + characters[index].raw;
|
|
161
174
|
const message = `Move this Unicode regional indicator '${regionalIndicator}' outside of the character class`;
|
|
162
175
|
context.reportRegExpNode({ regexpNode: characters[index], node: context.node, message });
|
|
@@ -170,7 +183,9 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
170
183
|
index !== characters.length - 1 &&
|
|
171
184
|
isZeroWidthJoiner(character.value) &&
|
|
172
185
|
!isZeroWidthJoiner(characters[index - 1].value) &&
|
|
173
|
-
!isZeroWidthJoiner(characters[index + 1].value)
|
|
186
|
+
!isZeroWidthJoiner(characters[index + 1].value) &&
|
|
187
|
+
!spansSeam(characters[index - 1], character) &&
|
|
188
|
+
!spansSeam(character, characters[index + 1])) {
|
|
174
189
|
// It's practically difficult to determine the full joined character sequence
|
|
175
190
|
// as it may join more than 2 elements that consist of characters or modified Emojis
|
|
176
191
|
// see: https://unicode.org/emoji/charts/emoji-zwj-sequences.html
|
|
@@ -186,7 +201,7 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
186
201
|
}
|
|
187
202
|
function isValidWithUnicodeFlag(pattern) {
|
|
188
203
|
try {
|
|
189
|
-
validator.validatePattern(pattern, undefined, undefined, true);
|
|
204
|
+
validator.validatePattern(pattern, undefined, undefined, { unicode: true });
|
|
190
205
|
return true;
|
|
191
206
|
}
|
|
192
207
|
catch {
|
|
@@ -205,6 +220,7 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
205
220
|
];
|
|
206
221
|
return {
|
|
207
222
|
onCharacterClassEnter(ccNode) {
|
|
223
|
+
currentSeams = (0, extract_js_1.getPatternFromNode)(context.node, context)?.seams ?? [];
|
|
208
224
|
for (const chars of characters(ccNode.elements)) {
|
|
209
225
|
checkSequence(chars);
|
|
210
226
|
}
|
|
@@ -219,10 +235,10 @@ function characters(nodes) {
|
|
|
219
235
|
current.push(node);
|
|
220
236
|
}
|
|
221
237
|
else if (node.type === 'CharacterClassRange') {
|
|
222
|
-
//
|
|
223
|
-
//
|
|
238
|
+
// For [xa-z], check [xa] but do not pair z with the next range or character.
|
|
239
|
+
// Report if the sequence ending at the range minimum is a grapheme cluster.
|
|
224
240
|
current.push(node.min);
|
|
225
|
-
current = [
|
|
241
|
+
current = [];
|
|
226
242
|
sequences.push(current);
|
|
227
243
|
}
|
|
228
244
|
else if (node.type === 'CharacterSet' && current.length > 0) {
|
|
@@ -238,19 +254,32 @@ function isCombiningCharacter(codePoint) {
|
|
|
238
254
|
return /^[\p{Mc}\p{Me}\p{Mn}]$/u.test(String.fromCodePoint(codePoint));
|
|
239
255
|
}
|
|
240
256
|
function isSurrogatePair(lead, tail) {
|
|
241
|
-
return lead >=
|
|
257
|
+
return (lead >= MIN_HIGH_SURROGATE &&
|
|
258
|
+
lead < MIN_LOW_SURROGATE &&
|
|
259
|
+
tail >= MIN_LOW_SURROGATE &&
|
|
260
|
+
tail < MAX_LOW_SURROGATE_EXCLUSIVE);
|
|
242
261
|
}
|
|
243
262
|
function isEmojiModifier(code) {
|
|
244
|
-
return code >=
|
|
263
|
+
return code >= MIN_EMOJI_MODIFIER && code <= MAX_EMOJI_MODIFIER;
|
|
245
264
|
}
|
|
246
265
|
function isRegionalIndicator(code) {
|
|
247
|
-
return code >=
|
|
266
|
+
return code >= MIN_REGIONAL_INDICATOR && code <= MAX_REGIONAL_INDICATOR;
|
|
248
267
|
}
|
|
249
268
|
function isZeroWidthJoiner(code) {
|
|
250
|
-
return code ===
|
|
269
|
+
return code === ZERO_WIDTH_JOINER;
|
|
270
|
+
}
|
|
271
|
+
function getRegExpConstructor(node, sourceCode) {
|
|
272
|
+
const ancestors = sourceCode.getAncestors(node);
|
|
273
|
+
for (let i = ancestors.length - 1; i >= 0; i--) {
|
|
274
|
+
const ancestor = ancestors[i];
|
|
275
|
+
if (ancestor && isRegExpConstructorCallOrNew(ancestor)) {
|
|
276
|
+
return ancestor;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return undefined;
|
|
251
280
|
}
|
|
252
|
-
function
|
|
253
|
-
return (0,
|
|
281
|
+
function isRegExpConstructorCallOrNew(node) {
|
|
282
|
+
return (0, ast_js_2.isRegExpConstructor)(node);
|
|
254
283
|
}
|
|
255
284
|
function hasModifiableFlags(regExpConstructor) {
|
|
256
285
|
const args = regExpConstructor.arguments;
|
|
@@ -31,7 +31,7 @@ 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: 'suggestion',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5869';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|
|
@@ -31,7 +31,7 @@ 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',
|
|
@@ -49,3 +49,4 @@ exports.sonarKey = 'S5876';
|
|
|
49
49
|
exports.scope = 'Main';
|
|
50
50
|
exports.languages = ['js', 'ts'];
|
|
51
51
|
exports.requiredDependency = [];
|
|
52
|
+
exports.skipOnGeneratedSource = false;
|