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,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDescribe = isDescribe;
|
|
4
|
+
const ast_js_1 = require("./ast.js");
|
|
5
|
+
const describeModifiers = ['parallel', 'serial'];
|
|
6
|
+
function isDescribe(node) {
|
|
7
|
+
if (node?.type !== 'MemberExpression' || node.computed) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const { object, property } = node;
|
|
11
|
+
return (((0, ast_js_1.isIdentifier)(object, 'test') && (0, ast_js_1.isIdentifier)(property, 'describe')) ||
|
|
12
|
+
((0, ast_js_1.isIdentifier)(property, ...describeModifiers) && isDescribe(object)));
|
|
13
|
+
}
|
|
@@ -58,34 +58,46 @@ function getPatternFromNode(node, context) {
|
|
|
58
58
|
if (patternOnly && flags !== null) {
|
|
59
59
|
// if we can't extract flags correctly, we skip this
|
|
60
60
|
// to avoid FPs
|
|
61
|
-
return {
|
|
61
|
+
return { ...patternOnly, flags };
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
else if ((0, ast_js_1.isRegexLiteral)(node)) {
|
|
65
|
-
return node.regex;
|
|
65
|
+
return literalPattern(node.regex.pattern, node.regex.flags);
|
|
66
66
|
}
|
|
67
67
|
else if ((0, ast_js_1.isStringLiteral)(node)) {
|
|
68
|
-
return
|
|
68
|
+
return literalPattern(node.value);
|
|
69
69
|
}
|
|
70
70
|
else if ((0, ast_js_1.isStaticTemplateLiteral)(node)) {
|
|
71
|
-
return
|
|
71
|
+
return literalPattern(node.quasis[0].value.raw);
|
|
72
72
|
}
|
|
73
73
|
else if ((0, ast_js_1.isSimpleRawString)(node)) {
|
|
74
|
-
return
|
|
74
|
+
return literalPattern((0, ast_js_1.getSimpleRawStringValue)(node));
|
|
75
75
|
}
|
|
76
76
|
else if ((0, ast_js_1.isIdentifier)(node)) {
|
|
77
77
|
const assignedExpression = (0, ast_js_1.getUniqueWriteUsage)(context, node.name, node);
|
|
78
78
|
if (assignedExpression &&
|
|
79
79
|
assignedExpression.parent?.type === 'VariableDeclarator') {
|
|
80
|
-
|
|
80
|
+
const pattern = getPatternFromNode(assignedExpression, context);
|
|
81
|
+
return pattern ? { ...pattern, isPureLiteral: false } : null;
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
else if ((0, ast_js_1.isBinaryPlus)(node)) {
|
|
84
85
|
const left = getPatternFromNode(node.left, context);
|
|
85
86
|
const right = getPatternFromNode(node.right, context);
|
|
86
|
-
|
|
87
|
-
return { pattern: left.pattern + right.pattern, flags: '' };
|
|
88
|
-
}
|
|
87
|
+
return left && right ? concatPatterns(left, right) : null;
|
|
89
88
|
}
|
|
90
89
|
return null;
|
|
91
90
|
}
|
|
91
|
+
function literalPattern(pattern, flags = '') {
|
|
92
|
+
return { pattern, flags, seams: [], isPureLiteral: true };
|
|
93
|
+
}
|
|
94
|
+
function concatPatterns(left, right) {
|
|
95
|
+
const splitOffset = left.pattern.length;
|
|
96
|
+
const splitSeams = left.isPureLiteral && right.isPureLiteral ? [] : [splitOffset];
|
|
97
|
+
return {
|
|
98
|
+
pattern: left.pattern + right.pattern,
|
|
99
|
+
flags: '',
|
|
100
|
+
seams: [...left.seams, ...splitSeams, ...right.seams.map(s => s + splitOffset)],
|
|
101
|
+
isPureLiteral: left.isPureLiteral && right.isPureLiteral,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -8,18 +8,25 @@ function getFlags(callExpr, context) {
|
|
|
8
8
|
return '';
|
|
9
9
|
}
|
|
10
10
|
const flags = callExpr.arguments[1];
|
|
11
|
-
|
|
12
|
-
if (
|
|
13
|
-
return
|
|
11
|
+
const staticFlags = getStaticFlagsValue(flags);
|
|
12
|
+
if (staticFlags !== null) {
|
|
13
|
+
return staticFlags;
|
|
14
14
|
}
|
|
15
15
|
if (flags.type === 'Identifier' && context !== undefined) {
|
|
16
16
|
// it's a variable, so we try to extract its value, but only if it's written once (const)
|
|
17
17
|
const variable = (0, reaching_definitions_js_1.getVariableFromIdentifier)(flags, context.sourceCode.getScope(callExpr));
|
|
18
18
|
const ref = (0, ast_js_1.getUniqueWriteReference)(variable);
|
|
19
|
-
if (ref !== undefined
|
|
20
|
-
return ref
|
|
19
|
+
if (ref !== undefined) {
|
|
20
|
+
return getStaticFlagsValue(ref);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function getStaticFlagsValue(flags) {
|
|
26
|
+
// Matches flags in: new RegExp(pattern, 'u')
|
|
27
|
+
if ((0, ast_js_1.isStringLiteral)(flags)) {
|
|
28
|
+
return flags.value;
|
|
29
|
+
}
|
|
23
30
|
// Matches flags with basic template literals as in: new RegExp(pattern, `u`)
|
|
24
31
|
// but not: new RegExp(pattern, `${flag}`)
|
|
25
32
|
// The cooked value should always be non-null in this case.
|
package/cjs/helpers/sinon.js
CHANGED
|
@@ -3,15 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isImported = isImported;
|
|
7
6
|
exports.isAssertion = isAssertion;
|
|
8
7
|
exports.isTSAssertion = isTSAssertion;
|
|
9
8
|
const module_js_1 = require("./module.js");
|
|
10
9
|
const module_ts_js_1 = require("./module-ts.js");
|
|
11
10
|
const typescript_1 = __importDefault(require("typescript"));
|
|
12
|
-
function isImported(context) {
|
|
13
|
-
return ((0, module_js_1.getRequireCalls)(context).some(r => r.arguments[0].type === 'Literal' && r.arguments[0].value === 'sinon') || (0, module_js_1.getImportDeclarations)(context).some(i => i.source.value === 'sinon'));
|
|
14
|
-
}
|
|
15
11
|
function isAssertion(context, node) {
|
|
16
12
|
return isAssertUsage(context, node);
|
|
17
13
|
}
|
package/cjs/helpers/supertest.js
CHANGED
|
@@ -3,15 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isImported = isImported;
|
|
7
6
|
exports.isAssertion = isAssertion;
|
|
8
7
|
exports.isTSAssertion = isTSAssertion;
|
|
9
8
|
const module_js_1 = require("./module.js");
|
|
10
9
|
const module_ts_js_1 = require("./module-ts.js");
|
|
11
10
|
const typescript_1 = __importDefault(require("typescript"));
|
|
12
|
-
function isImported(context) {
|
|
13
|
-
return ((0, module_js_1.getRequireCalls)(context).some(r => r.arguments[0].type === 'Literal' && r.arguments[0].value === 'supertest') || (0, module_js_1.getImportDeclarations)(context).some(i => i.source.value === 'supertest'));
|
|
14
|
-
}
|
|
15
11
|
function isAssertion(context, node) {
|
|
16
12
|
const fqn = extractFQNForCallExpression(context, node);
|
|
17
13
|
return isFQNAssertion(fqn);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_TEST_FILE_EXTENSIONS = void 0;
|
|
4
|
+
exports.isTestFile = isTestFile;
|
|
5
|
+
exports.isTestRelatedFile = isTestRelatedFile;
|
|
6
|
+
/*
|
|
7
|
+
* SonarQube JavaScript Plugin
|
|
8
|
+
* Copyright (C) SonarSource Sàrl
|
|
9
|
+
* mailto:info AT sonarsource DOT com
|
|
10
|
+
*
|
|
11
|
+
* You can redistribute and/or modify this program under the terms of
|
|
12
|
+
* the Sonar Source-Available License Version 1, as published by SonarSource Sàrl.
|
|
13
|
+
*
|
|
14
|
+
* This program is distributed in the hope that it will be useful,
|
|
15
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
17
|
+
* See the Sonar Source-Available License for more details.
|
|
18
|
+
*
|
|
19
|
+
* You should have received a copy of the Sonar Source-Available License
|
|
20
|
+
* along with this program; if not, see https://sonarsource.com/license/ssal/
|
|
21
|
+
*/
|
|
22
|
+
exports.DEFAULT_TEST_FILE_EXTENSIONS = [
|
|
23
|
+
'.js',
|
|
24
|
+
'.mjs',
|
|
25
|
+
'.cjs',
|
|
26
|
+
'.jsx',
|
|
27
|
+
'.vue',
|
|
28
|
+
'.ts',
|
|
29
|
+
'.mts',
|
|
30
|
+
'.cts',
|
|
31
|
+
'.tsx',
|
|
32
|
+
];
|
|
33
|
+
function suffixAlternation(extensions) {
|
|
34
|
+
const effective = extensions?.length ? extensions : exports.DEFAULT_TEST_FILE_EXTENSIONS;
|
|
35
|
+
return effective.map(ext => (ext.startsWith('.') ? ext.slice(1) : ext)).join('|');
|
|
36
|
+
}
|
|
37
|
+
function testFilePattern(extensions) {
|
|
38
|
+
return new RegExp(String.raw `\.(?:test|spec|cy)\.(?:${suffixAlternation(extensions)})$`);
|
|
39
|
+
}
|
|
40
|
+
function testRelatedFilePattern(extensions) {
|
|
41
|
+
const alternation = suffixAlternation(extensions);
|
|
42
|
+
return new RegExp(String.raw `\.(?:test|spec|cy)\.(?:${alternation})$|\.(?:e2e|mock)\.(?:${alternation})$|(?:^|[\\/])(?:__tests__|__mocks__)[\\/]`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks whether a file path matches a test file pattern.
|
|
46
|
+
*
|
|
47
|
+
* @param filePath the file path to test.
|
|
48
|
+
* @param extensions the allowed test file extensions.
|
|
49
|
+
* @returns true when the path looks like a test file.
|
|
50
|
+
*/
|
|
51
|
+
function isTestFile(filePath, extensions) {
|
|
52
|
+
return testFilePattern(extensions).test(filePath);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Checks whether a file path looks test-related.
|
|
56
|
+
*
|
|
57
|
+
* @param filePath the file path to test.
|
|
58
|
+
* @param extensions the allowed test file extensions.
|
|
59
|
+
* @returns true when the path looks test-related.
|
|
60
|
+
*/
|
|
61
|
+
function isTestRelatedFile(filePath, extensions) {
|
|
62
|
+
return testRelatedFilePattern(extensions).test(filePath);
|
|
63
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.classifyTypesByOrigin = classifyTypesByOrigin;
|
|
7
|
+
/*
|
|
8
|
+
* SonarQube JavaScript Plugin
|
|
9
|
+
* Copyright (C) SonarSource Sàrl
|
|
10
|
+
* mailto:info AT sonarsource DOT com
|
|
11
|
+
*
|
|
12
|
+
* You can redistribute and/or modify this program under the terms of
|
|
13
|
+
* the Sonar Source-Available License Version 1, as published by SonarSource Sàrl.
|
|
14
|
+
*
|
|
15
|
+
* This program is distributed in the hope that it will be useful,
|
|
16
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
18
|
+
* See the Sonar Source-Available License for more details.
|
|
19
|
+
*
|
|
20
|
+
* You should have received a copy of the Sonar Source-Available License
|
|
21
|
+
* along with this program; if not, see https://sonarsource.com/license/ssal/
|
|
22
|
+
*/
|
|
23
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
24
|
+
/**
|
|
25
|
+
* Partitions the syntactic members of a type annotation into "internal"
|
|
26
|
+
* (user-writable in this project) and "external" (declared in node_modules
|
|
27
|
+
* or in the TypeScript default lib).
|
|
28
|
+
*
|
|
29
|
+
* Operates on the syntactic AST node, not on a resolved `ts.Type`. Returning
|
|
30
|
+
* the original AST nodes lets callers produce locations, suggestions, or
|
|
31
|
+
* fixes targeting exactly what the user wrote.
|
|
32
|
+
*
|
|
33
|
+
* Classification rules per top-level member:
|
|
34
|
+
* - Keyword / literal types -> internal (the user wrote them directly).
|
|
35
|
+
* - TSTypeReference -> resolves the type name to a symbol and inspects its
|
|
36
|
+
* declarations. A reference is external only when ALL declarations live in
|
|
37
|
+
* files that satisfy `isSourceFileFromExternalLibrary` or
|
|
38
|
+
* `isSourceFileDefaultLibrary`. Any local declaration (declaration-merging
|
|
39
|
+
* escape hatch) makes the reference internal.
|
|
40
|
+
* - Any other composite constructor (TSIntersectionType, TSArrayType,
|
|
41
|
+
* TSTypeLiteral, TSConditionalType, ...) -> internal at the top level. We
|
|
42
|
+
* do not recurse; callers can if they need to.
|
|
43
|
+
*
|
|
44
|
+
* Known limitation: alias chains are not followed. If the user re-aliases an
|
|
45
|
+
* external type locally (e.g. `type Inner = ReactNode`), the local alias is
|
|
46
|
+
* internal because the user has a place to edit.
|
|
47
|
+
*/
|
|
48
|
+
function classifyTypesByOrigin(typeNode, services) {
|
|
49
|
+
const members = typeNode.type === 'TSUnionType' ? typeNode.types : [typeNode];
|
|
50
|
+
const result = { internal: [], external: [] };
|
|
51
|
+
for (const member of members) {
|
|
52
|
+
if (isExternalMember(member, services)) {
|
|
53
|
+
result.external.push(member);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
result.internal.push(member);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
function isExternalMember(member, services) {
|
|
62
|
+
if (member.type !== 'TSTypeReference') {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const checker = services.program.getTypeChecker();
|
|
66
|
+
const tsNode = services.esTreeNodeToTSNodeMap.get(member);
|
|
67
|
+
let symbol = checker.getSymbolAtLocation(tsNode.typeName);
|
|
68
|
+
// Imported names resolve to a local alias symbol pointing at the import
|
|
69
|
+
// statement; without following the alias, external imports would look local.
|
|
70
|
+
if (symbol && symbol.flags & typescript_1.default.SymbolFlags.Alias) {
|
|
71
|
+
symbol = checker.getAliasedSymbol(symbol);
|
|
72
|
+
}
|
|
73
|
+
if (!symbol?.declarations?.length) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const program = services.program;
|
|
77
|
+
return symbol.declarations.every(decl => {
|
|
78
|
+
const sourceFile = decl.getSourceFile();
|
|
79
|
+
return (program.isSourceFileFromExternalLibrary(sourceFile) ||
|
|
80
|
+
program.isSourceFileDefaultLibrary(sourceFile));
|
|
81
|
+
});
|
|
82
|
+
}
|
package/cjs/helpers/type.js
CHANGED
|
@@ -17,6 +17,8 @@ exports.isUndefinedOrNull = isUndefinedOrNull;
|
|
|
17
17
|
exports.isThenable = isThenable;
|
|
18
18
|
exports.isThenableOrVoidUnion = isThenableOrVoidUnion;
|
|
19
19
|
exports.isAny = isAny;
|
|
20
|
+
exports.areMutuallyAssignableTypes = areMutuallyAssignableTypes;
|
|
21
|
+
exports.areSameTypeDeclarations = areSameTypeDeclarations;
|
|
20
22
|
exports.isGenericType = isGenericType;
|
|
21
23
|
exports.getTypeFromTreeNode = getTypeFromTreeNode;
|
|
22
24
|
exports.getTypeAsString = getTypeAsString;
|
|
@@ -26,6 +28,7 @@ exports.isArrayLikeType = isArrayLikeType;
|
|
|
26
28
|
exports.isStringArray = isStringArray;
|
|
27
29
|
exports.isNumberArray = isNumberArray;
|
|
28
30
|
exports.isBigIntArray = isBigIntArray;
|
|
31
|
+
exports.isBooleanArray = isBooleanArray;
|
|
29
32
|
exports.isTypeAlias = isTypeAlias;
|
|
30
33
|
exports.isBooleanTrueType = isBooleanTrueType;
|
|
31
34
|
exports.isBooleanType = isBooleanType;
|
|
@@ -36,6 +39,9 @@ exports.isIterable = isIterable;
|
|
|
36
39
|
exports.getFunctionParameterCount = getFunctionParameterCount;
|
|
37
40
|
const typescript_1 = __importDefault(require("typescript"));
|
|
38
41
|
const ast_js_1 = require("./ast.js");
|
|
42
|
+
/**
|
|
43
|
+
* Returns true when `node` resolves to the built-in `Array` type.
|
|
44
|
+
*/
|
|
39
45
|
function isArray(node, services) {
|
|
40
46
|
const type = getTypeFromTreeNode(node, services);
|
|
41
47
|
return type.symbol?.name === 'Array';
|
|
@@ -95,30 +101,51 @@ function isTypedArray(node, services) {
|
|
|
95
101
|
const type = getTypeFromTreeNode(node, services);
|
|
96
102
|
return TYPED_ARRAY_TYPES.has(type.symbol?.name);
|
|
97
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns true when `node` resolves to a string-like type.
|
|
106
|
+
*/
|
|
98
107
|
function isString(node, services) {
|
|
99
108
|
const checker = services.program.getTypeChecker();
|
|
100
109
|
const typ = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
101
110
|
return (typ.getFlags() & typescript_1.default.TypeFlags.StringLike) !== 0;
|
|
102
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Returns true when `node` resolves to a number-like type.
|
|
114
|
+
*/
|
|
103
115
|
function isNumber(node, services) {
|
|
104
116
|
const checker = services.program.getTypeChecker();
|
|
105
117
|
const typ = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
106
118
|
return (typ.getFlags() & typescript_1.default.TypeFlags.NumberLike) !== 0;
|
|
107
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns true when `type` is bigint-like.
|
|
122
|
+
*/
|
|
108
123
|
function isBigIntType(type) {
|
|
109
124
|
return (type.getFlags() & typescript_1.default.TypeFlags.BigIntLike) !== 0;
|
|
110
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Returns true when `type` is number-like.
|
|
128
|
+
*/
|
|
111
129
|
function isNumberType(type) {
|
|
112
130
|
return (type.getFlags() & typescript_1.default.TypeFlags.NumberLike) !== 0;
|
|
113
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Returns true when `type` is string-like.
|
|
134
|
+
*/
|
|
114
135
|
function isStringType(type) {
|
|
115
136
|
return (type.flags & typescript_1.default.TypeFlags.StringLike) > 0 || type.symbol?.name === 'String';
|
|
116
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Returns true when `node` resolves to a function type.
|
|
140
|
+
*/
|
|
117
141
|
function isFunction(node, services) {
|
|
118
142
|
const checker = services.program.getTypeChecker();
|
|
119
143
|
const type = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
120
144
|
return type.symbol && (type.symbol.flags & typescript_1.default.SymbolFlags.Function) !== 0;
|
|
121
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Returns true when `node` resolves to a union type.
|
|
148
|
+
*/
|
|
122
149
|
function isUnion(node, services) {
|
|
123
150
|
const checker = services.program.getTypeChecker();
|
|
124
151
|
const type = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
@@ -133,11 +160,17 @@ function isUnion(node, services) {
|
|
|
133
160
|
function getUnionTypes(type) {
|
|
134
161
|
return type.isUnion() ? type.types : [type];
|
|
135
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Returns true when `node` resolves to `undefined`, `null`, or a union containing either.
|
|
165
|
+
*/
|
|
136
166
|
function isUndefinedOrNull(node, services) {
|
|
137
167
|
const checker = services.program.getTypeChecker();
|
|
138
168
|
const typ = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
139
169
|
return ((typ.getFlags() & typescript_1.default.TypeFlags.Undefined) !== 0 || (typ.getFlags() & typescript_1.default.TypeFlags.Null) !== 0);
|
|
140
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns true when `node` resolves to a thenable type.
|
|
173
|
+
*/
|
|
141
174
|
function isThenable(node, services) {
|
|
142
175
|
const mapped = services.esTreeNodeToTSNodeMap.get(node);
|
|
143
176
|
const checker = services.program.getTypeChecker();
|
|
@@ -174,9 +207,102 @@ function hasThenMethod(type, checker) {
|
|
|
174
207
|
const thenType = checker.getTypeOfSymbol(thenProperty);
|
|
175
208
|
return thenType.getCallSignatures().length > 0;
|
|
176
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Returns true when `type` is exactly `any`.
|
|
212
|
+
*/
|
|
177
213
|
function isAny(type) {
|
|
178
214
|
return type.flags === typescript_1.default.TypeFlags.Any;
|
|
179
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Returns true when both types are specific enough to compare (neither `any`
|
|
218
|
+
* nor `unknown`) and are mutually assignable.
|
|
219
|
+
*
|
|
220
|
+
* Mutual assignability is stricter than symbol equality for generic aliases:
|
|
221
|
+
* `Props<User>` and `Props<Product>` share the same alias symbol, but they are
|
|
222
|
+
* not mutually assignable and therefore do not represent the same effective type.
|
|
223
|
+
*/
|
|
224
|
+
function areMutuallyAssignableTypes(checker, left, right) {
|
|
225
|
+
if (!left || !right || isAnyOrUnknownType(left) || isAnyOrUnknownType(right)) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
// @ts-ignore -- isTypeAssignableTo is a private TypeScript API
|
|
229
|
+
return checker.isTypeAssignableTo(left, right) && checker.isTypeAssignableTo(right, left);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Returns true when both types come from the same named declaration and, for
|
|
233
|
+
* generic declarations, are instantiated with the same type arguments.
|
|
234
|
+
*
|
|
235
|
+
* The comparison has two steps:
|
|
236
|
+
* 1. the declarations must resolve to the same symbol
|
|
237
|
+
* 2. each type argument must match through `areSameTypeArguments(...)`
|
|
238
|
+
*
|
|
239
|
+
* That helper can call back into this function for named type arguments, so
|
|
240
|
+
* generic comparisons recurse through nested declarations.
|
|
241
|
+
*
|
|
242
|
+
* This is intentionally stricter than structural equality: `Props<User>` and
|
|
243
|
+
* `Props<Product>` are different, and `Props<User>` also stays different from
|
|
244
|
+
* `Props<{ id: string }>` even if the shapes happen to match.
|
|
245
|
+
*/
|
|
246
|
+
function areSameTypeDeclarations(checker, left, right) {
|
|
247
|
+
if (!left || !right || isAnyOrUnknownType(left) || isAnyOrUnknownType(right)) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
const leftSymbol = getComparableDeclaredTypeSymbol(left);
|
|
251
|
+
const rightSymbol = getComparableDeclaredTypeSymbol(right);
|
|
252
|
+
if (!leftSymbol || leftSymbol !== rightSymbol) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
const leftArgs = getDeclaredTypeArguments(left, checker);
|
|
256
|
+
const rightArgs = getDeclaredTypeArguments(right, checker);
|
|
257
|
+
return (leftArgs.length === rightArgs.length &&
|
|
258
|
+
leftArgs.every((argument, index) => areSameTypeArguments(checker, argument, rightArgs[index])));
|
|
259
|
+
}
|
|
260
|
+
function areSameTypeArguments(checker, left, right) {
|
|
261
|
+
if (!left || !right) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
if (isAnyOrUnknownType(left) || isAnyOrUnknownType(right)) {
|
|
265
|
+
return (isAnyOrUnknownType(left) &&
|
|
266
|
+
isAnyOrUnknownType(right) &&
|
|
267
|
+
checker.typeToString(left) === checker.typeToString(right));
|
|
268
|
+
}
|
|
269
|
+
const leftSymbol = getComparableDeclaredTypeSymbol(left);
|
|
270
|
+
const rightSymbol = getComparableDeclaredTypeSymbol(right);
|
|
271
|
+
if (leftSymbol || rightSymbol) {
|
|
272
|
+
// Keep named type arguments distinct from anonymous structural literals.
|
|
273
|
+
return leftSymbol !== undefined && leftSymbol === rightSymbol
|
|
274
|
+
? areSameTypeDeclarations(checker, left, right)
|
|
275
|
+
: false;
|
|
276
|
+
}
|
|
277
|
+
// Primitives, unions, tuples, and anonymous object literals do not have a
|
|
278
|
+
// stable declared type symbol, so compare their effective instantiated form.
|
|
279
|
+
return checker.typeToString(left) === checker.typeToString(right);
|
|
280
|
+
}
|
|
281
|
+
function isAnyOrUnknownType(type) {
|
|
282
|
+
return (type.flags & (typescript_1.default.TypeFlags.Any | typescript_1.default.TypeFlags.Unknown)) !== 0;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Returns the symbol to use for declaration-based comparisons.
|
|
286
|
+
*
|
|
287
|
+
* Anonymous type literals such as `{ id: string }` are intentionally excluded:
|
|
288
|
+
* their `TypeLiteral` symbols do not represent stable declaration identities.
|
|
289
|
+
* Named interfaces and type aliases are still kept because we prefer
|
|
290
|
+
* `aliasSymbol` over the underlying `TypeLiteral` symbol.
|
|
291
|
+
*/
|
|
292
|
+
function getComparableDeclaredTypeSymbol(type) {
|
|
293
|
+
const symbol = type.aliasSymbol ?? type.symbol;
|
|
294
|
+
return symbol && (symbol.flags & typescript_1.default.SymbolFlags.TypeLiteral) === 0 ? symbol : undefined;
|
|
295
|
+
}
|
|
296
|
+
function getDeclaredTypeArguments(type, checker) {
|
|
297
|
+
if (type.aliasTypeArguments?.length) {
|
|
298
|
+
return type.aliasTypeArguments;
|
|
299
|
+
}
|
|
300
|
+
return isTypeReference(type) ? checker.getTypeArguments(type) : [];
|
|
301
|
+
}
|
|
302
|
+
function isTypeReference(type) {
|
|
303
|
+
return ((type.flags & typescript_1.default.TypeFlags.Object) !== 0 &&
|
|
304
|
+
(type.objectFlags & typescript_1.default.ObjectFlags.Reference) !== 0);
|
|
305
|
+
}
|
|
180
306
|
/**
|
|
181
307
|
* Checks if a node has a generic type like:
|
|
182
308
|
*
|
|
@@ -192,18 +318,30 @@ function isGenericType(node, services) {
|
|
|
192
318
|
const type = getTypeFromTreeNode(node, services);
|
|
193
319
|
return type.isTypeParameter();
|
|
194
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Returns the TypeScript type resolved at `node`.
|
|
323
|
+
*/
|
|
195
324
|
function getTypeFromTreeNode(node, services) {
|
|
196
325
|
const checker = services.program.getTypeChecker();
|
|
197
326
|
return checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
198
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Returns the widened string representation of the type resolved at `node`.
|
|
330
|
+
*/
|
|
199
331
|
function getTypeAsString(node, services) {
|
|
200
332
|
const { typeToString, getBaseTypeOfLiteralType } = services.program.getTypeChecker();
|
|
201
333
|
return typeToString(getBaseTypeOfLiteralType(getTypeFromTreeNode(node, services)));
|
|
202
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Returns the symbol resolved at `node`, if any.
|
|
337
|
+
*/
|
|
203
338
|
function getSymbolAtLocation(node, services) {
|
|
204
339
|
const checker = services.program.getTypeChecker();
|
|
205
340
|
return checker.getSymbolAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
206
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Returns the resolved call signature for the call-like expression at `node`.
|
|
344
|
+
*/
|
|
207
345
|
function getSignatureFromCallee(node, services) {
|
|
208
346
|
const checker = services.program.getTypeChecker();
|
|
209
347
|
return checker.getResolvedSignature(services.esTreeNodeToTSNodeMap.get(node));
|
|
@@ -251,6 +389,14 @@ function isNumberArray(type, services) {
|
|
|
251
389
|
function isBigIntArray(type, services) {
|
|
252
390
|
return isArrayElementTypeMatching(type, services, isBigIntType);
|
|
253
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* Test if the provided type is an array of booleans.
|
|
394
|
+
* @param type A TypeScript type.
|
|
395
|
+
* @param services The services used to get access to the TypeScript type checker
|
|
396
|
+
*/
|
|
397
|
+
function isBooleanArray(type, services) {
|
|
398
|
+
return isArrayElementTypeMatching(type, services, isBooleanType);
|
|
399
|
+
}
|
|
254
400
|
function isArrayElementTypeMatching(type, services, predicate) {
|
|
255
401
|
const checker = services.program.getTypeChecker();
|
|
256
402
|
if (!isArrayType(type, services)) {
|
|
@@ -284,18 +430,33 @@ function isTypeAlias(node, context) {
|
|
|
284
430
|
function isBooleanLiteralType(type) {
|
|
285
431
|
return type.flags === typescript_1.default.TypeFlags.BooleanLiteral;
|
|
286
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Returns true when `type` is the boolean literal `true`.
|
|
435
|
+
*/
|
|
287
436
|
function isBooleanTrueType(type) {
|
|
288
437
|
return isBooleanLiteralType(type) && type.intrinsicName === 'true';
|
|
289
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* Returns true when `type` is boolean-like.
|
|
441
|
+
*/
|
|
290
442
|
function isBooleanType({ flags }) {
|
|
291
|
-
return flags & typescript_1.default.TypeFlags.BooleanLike;
|
|
443
|
+
return (flags & typescript_1.default.TypeFlags.BooleanLike) !== 0;
|
|
292
444
|
}
|
|
445
|
+
/**
|
|
446
|
+
* Returns true when `type` is `null`, `undefined`, or a union containing either.
|
|
447
|
+
*/
|
|
293
448
|
function isNullOrUndefinedType({ flags }) {
|
|
294
449
|
return flags & typescript_1.default.TypeFlags.Null || flags & typescript_1.default.TypeFlags.Undefined;
|
|
295
450
|
}
|
|
451
|
+
/**
|
|
452
|
+
* Returns true when `type` is object-like.
|
|
453
|
+
*/
|
|
296
454
|
function isObjectType({ flags }) {
|
|
297
455
|
return flags & typescript_1.default.TypeFlags.Object;
|
|
298
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* Returns true when `node` exposes a callable member named `methodName`.
|
|
459
|
+
*/
|
|
299
460
|
function typeHasMethod(node, methodName, services) {
|
|
300
461
|
const type = getTypeFromTreeNode(node, services);
|
|
301
462
|
const property = type.getProperty(methodName);
|
package/cjs/helpers/vitest.js
CHANGED
|
@@ -3,15 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isImported = isImported;
|
|
7
6
|
exports.isAssertion = isAssertion;
|
|
8
7
|
exports.isTSAssertion = isTSAssertion;
|
|
9
8
|
const module_js_1 = require("./module.js");
|
|
10
9
|
const module_ts_js_1 = require("./module-ts.js");
|
|
11
10
|
const typescript_1 = __importDefault(require("typescript"));
|
|
12
|
-
function isImported(context) {
|
|
13
|
-
return ((0, module_js_1.getRequireCalls)(context).some(r => r.arguments[0].type === 'Literal' && r.arguments[0].value === 'vitest') || (0, module_js_1.getImportDeclarations)(context).some(i => i.source.value === 'vitest'));
|
|
14
|
-
}
|
|
15
11
|
function isAssertion(context, node) {
|
|
16
12
|
const fullyQualifiedName = extractFQNforCallExpression(context, node);
|
|
17
13
|
return isFQNAssertion(fullyQualifiedName);
|