eslint-plugin-sonarjs 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +269 -268
- package/cjs/S100/rule.js +7 -5
- package/cjs/S101/rule.js +2 -2
- package/cjs/S104/rule.js +2 -2
- package/cjs/S105/rule.js +2 -2
- package/cjs/S1066/rule.js +5 -4
- package/cjs/S1067/rule.js +8 -6
- package/cjs/S1110/rule.js +7 -5
- package/cjs/S1119/rule.js +85 -7
- package/cjs/S1121/rule.js +4 -3
- package/cjs/S1125/rule.js +9 -8
- package/cjs/S1126/rule.js +2 -2
- package/cjs/S1128/rule.js +8 -5
- package/cjs/S1134/rule.js +2 -2
- package/cjs/S1135/rule.js +2 -2
- package/cjs/S1154/rule.js +6 -4
- package/cjs/S117/rule.js +6 -5
- package/cjs/S1172/rule.js +2 -2
- package/cjs/S1192/rule.js +5 -4
- package/cjs/S1219/rule.js +4 -3
- package/cjs/S1226/rule.js +6 -4
- package/cjs/S124/rule.js +2 -2
- package/cjs/S125/rule.js +9 -7
- package/cjs/S126/rule.js +2 -2
- package/cjs/S1264/rule.js +2 -2
- package/cjs/S128/rule.js +4 -3
- package/cjs/S1291/rule.js +2 -2
- package/cjs/S1301/rule.js +2 -2
- package/cjs/S1313/rule.js +2 -2
- package/cjs/S134/rule.js +7 -5
- package/cjs/S135/rule.js +5 -4
- package/cjs/S138/rule.js +9 -6
- package/cjs/S1439/rule.js +2 -2
- package/cjs/S1444/rule.js +2 -2
- package/cjs/S1451/rule.js +2 -2
- package/cjs/S1472/rule.js +2 -2
- package/cjs/S1479/rule.js +2 -2
- package/cjs/S1481/rule.js +2 -2
- package/cjs/S1488/generated-meta.js +1 -1
- package/cjs/S1488/rule.js +11 -7
- package/cjs/S1515/rule.js +10 -8
- package/cjs/{helpers/aws/index.js → S1523/generated-meta.js} +34 -18
- package/cjs/S1523/index.js +21 -0
- package/cjs/S1523/meta.js +21 -0
- package/cjs/S1523/rule.js +143 -0
- package/cjs/S1526/rule.js +5 -4
- package/cjs/S1527/rule.js +2 -2
- package/cjs/S1528/rule.js +2 -2
- package/cjs/S1529/generated-meta.js +1 -1
- package/cjs/S1529/rule.js +4 -3
- package/cjs/S1530/rule.js +5 -3
- package/cjs/S1533/rule.js +2 -2
- package/cjs/S1535/rule.js +2 -2
- package/cjs/S1541/rule.js +10 -7
- package/cjs/S1607/rule.js +22 -20
- package/cjs/S1764/rule.js +10 -7
- package/cjs/S1821/rule.js +2 -2
- package/cjs/S1848/rule.js +10 -7
- package/cjs/S1854/rule.js +18 -14
- package/cjs/S1862/rule.js +10 -8
- package/cjs/S1871/rule.js +21 -16
- package/cjs/S1874/rule.js +4 -3
- package/cjs/S1940/rule.js +2 -2
- package/cjs/S1994/rule.js +10 -7
- package/cjs/S2004/rule.js +9 -7
- package/cjs/S2068/rule.js +75 -12
- package/cjs/S2077/generated-meta.js +1 -1
- package/cjs/S2077/rule.js +10 -6
- package/cjs/S2092/rule.js +2 -2
- package/cjs/S2123/rule.js +2 -2
- package/cjs/S2137/rule.js +2 -2
- package/cjs/S2138/rule.js +4 -3
- package/cjs/S2187/rule.js +2 -2
- package/cjs/S2201/rule.js +47 -5
- package/cjs/S2208/rule.js +2 -2
- package/cjs/S2234/rule.js +58 -11
- package/cjs/S2245/rule.js +4 -3
- package/cjs/S2251/rule.js +5 -4
- package/cjs/S2255/rule.js +6 -5
- package/cjs/S2259/rule.js +14 -9
- package/cjs/S2301/rule.js +14 -9
- package/cjs/S2310/rule.js +80 -9
- package/cjs/S2392/rule.js +7 -5
- package/cjs/S2424/rule.js +2 -2
- package/cjs/S2428/rule.js +8 -6
- package/cjs/S2486/rule.js +4 -3
- package/cjs/S2589/rule.js +12 -10
- package/cjs/S2598/rule.js +17 -14
- package/cjs/S2612/generated-meta.js +1 -1
- package/cjs/S2612/rule.js +8 -6
- package/cjs/S2639/rule.js +2 -2
- package/cjs/S2681/rule.js +2 -2
- package/cjs/S2692/rule.js +6 -4
- package/cjs/S2699/generated-meta.js +1 -1
- package/cjs/S2699/rule.js +40 -31
- package/cjs/S2703/rule.js +2 -2
- package/cjs/S2737/rule.js +6 -4
- package/cjs/S2755/rule.js +9 -6
- package/cjs/S2757/rule.js +2 -2
- package/cjs/S2817/rule.js +10 -7
- package/cjs/S2819/rule.js +16 -12
- package/cjs/S2870/rule.js +8 -5
- package/cjs/S2871/rule.js +12 -9
- package/cjs/S2970/rule.js +9 -8
- package/cjs/S2990/rule.js +2 -2
- package/cjs/S2999/rule.js +10 -7
- package/cjs/S3001/rule.js +2 -2
- package/cjs/S3003/rule.js +10 -7
- package/cjs/S3317/rule.js +4 -3
- package/cjs/S3330/rule.js +2 -2
- package/cjs/S3358/rule.js +2 -2
- package/cjs/S3402/rule.js +14 -10
- package/cjs/S3403/rule.js +10 -7
- package/cjs/S3415/rule.js +16 -13
- package/cjs/S3499/rule.js +5 -4
- package/cjs/S3500/rule.js +5 -4
- package/cjs/S3513/rule.js +5 -4
- package/cjs/S3514/rule.js +10 -7
- package/cjs/S3516/rule.js +10 -7
- package/cjs/S3524/rule.js +2 -2
- package/cjs/S3525/rule.js +6 -4
- package/cjs/S3531/rule.js +5 -3
- package/cjs/S3533/rule.js +8 -7
- package/cjs/S3579/rule.js +6 -4
- package/cjs/S3616/rule.js +6 -4
- package/cjs/S3626/rule.js +4 -3
- package/cjs/S3686/rule.js +7 -5
- package/cjs/S3699/rule.js +4 -3
- package/cjs/S3735/rule.js +8 -5
- package/cjs/S3757/rule.js +8 -6
- package/cjs/S3758/rule.js +9 -7
- package/cjs/S3760/rule.js +24 -21
- package/cjs/S3776/rule.js +26 -22
- package/cjs/S3782/rule.js +6 -4
- package/cjs/S3785/rule.js +9 -6
- package/cjs/S3796/rule.js +12 -8
- package/cjs/S3798/rule.js +4 -3
- package/cjs/S3800/rule.js +22 -11
- package/cjs/S3801/generated-meta.js +1 -1
- package/cjs/S3801/rule.js +15 -11
- package/cjs/S3827/rule.js +9 -6
- package/cjs/S3923/rule.js +9 -6
- package/cjs/S3972/rule.js +5 -4
- package/cjs/S3973/rule.js +7 -5
- package/cjs/S3981/rule.js +4 -3
- package/cjs/S3984/rule.js +4 -3
- package/cjs/S4030/rule.js +10 -7
- package/cjs/S4036/rule.js +7 -5
- package/cjs/S4043/rule.js +12 -8
- package/cjs/S4139/rule.js +7 -5
- package/cjs/S4143/rule.js +12 -9
- package/cjs/S4144/rule.js +12 -9
- package/cjs/S4158/rule.js +11 -8
- package/cjs/S4165/rule.js +14 -12
- package/cjs/S4322/rule.js +8 -5
- package/cjs/S4323/rule.js +4 -3
- package/cjs/S4324/rule.js +7 -5
- package/cjs/S4328/rule.js +2 -2
- package/cjs/S4335/rule.js +6 -4
- package/cjs/S4423/rule.js +4 -3
- package/cjs/S4423/rule.lib.js +8 -7
- package/cjs/S4426/rule.js +11 -10
- package/cjs/S4502/rule.js +16 -13
- package/cjs/S4507/rule.js +8 -6
- package/cjs/S4524/rule.js +2 -2
- package/cjs/S4619/rule.js +6 -4
- package/cjs/S4621/rule.js +5 -4
- package/cjs/S4622/rule.js +5 -3
- package/cjs/S4623/rule.js +8 -5
- package/cjs/S4624/rule.js +6 -4
- package/cjs/S4634/rule.js +4 -3
- package/cjs/S4721/rule.js +7 -5
- package/cjs/S4782/rule.js +7 -5
- package/cjs/S4784/rule.js +5 -4
- package/cjs/S4787/rule.js +9 -7
- package/cjs/S4790/rule.js +7 -5
- package/cjs/S4798/rule.js +2 -2
- package/cjs/S4817/rule.js +10 -8
- package/cjs/S4818/rule.js +4 -3
- package/cjs/S4822/rule.js +13 -9
- package/cjs/S4823/rule.js +4 -3
- package/cjs/S4829/rule.js +4 -3
- package/cjs/S4830/rule.js +11 -8
- package/cjs/S5042/rule.js +9 -7
- package/cjs/S5122/rule.js +40 -36
- package/cjs/S5148/rule.js +9 -8
- package/cjs/S5247/rule.js +22 -18
- package/cjs/S5256/rule.js +5 -4
- package/cjs/S5257/rule.js +4 -3
- package/cjs/S5260/rule.js +4 -3
- package/cjs/S5264/rule.js +4 -3
- package/cjs/S5332/rule.js +4 -3
- package/cjs/S5332/rule.lib.js +19 -17
- package/cjs/S5443/rule.js +2 -2
- package/cjs/S5527/rule.js +18 -14
- package/cjs/S5542/rule.js +6 -4
- package/cjs/S5547/rule.js +6 -4
- package/cjs/S5604/rule.js +15 -14
- package/cjs/S5659/rule.js +15 -12
- package/cjs/S5689/rule.js +11 -8
- package/cjs/S5691/rule.js +7 -5
- package/cjs/S5693/rule.js +14 -12
- package/cjs/S5725/rule.js +9 -6
- package/cjs/S5728/rule.js +7 -4
- package/cjs/S5730/rule.js +9 -6
- package/cjs/S5732/rule.js +8 -5
- package/cjs/S5734/rule.js +7 -4
- package/cjs/S5736/rule.js +8 -5
- package/cjs/S5739/rule.js +11 -8
- package/cjs/S5742/rule.js +7 -4
- package/cjs/S5743/rule.js +8 -6
- package/cjs/S5757/rule.js +13 -10
- package/cjs/S5759/rule.js +10 -7
- package/cjs/S5842/rule.js +2 -2
- package/cjs/S5843/rule.js +22 -19
- package/cjs/S5850/rule.js +4 -3
- package/cjs/S5852/rule.js +2 -2
- package/cjs/S5856/rule.js +10 -7
- package/cjs/S5860/rule.js +30 -26
- package/cjs/S5863/rule.js +15 -11
- package/cjs/S5867/rule.js +8 -7
- package/cjs/S5868/rule.js +7 -5
- package/cjs/S5869/rule.js +6 -5
- package/cjs/S5876/rule.js +12 -8
- package/cjs/S5958/rule.js +12 -9
- package/cjs/S5973/rule.js +10 -7
- package/cjs/S6019/rule.js +4 -3
- package/cjs/S6035/rule.js +2 -2
- package/cjs/S6079/rule.js +9 -6
- package/cjs/S6080/rule.js +13 -10
- package/cjs/S6092/rule.js +9 -7
- package/cjs/S6245/rule.js +14 -9
- package/cjs/S6249/rule.js +7 -5
- package/cjs/S6252/rule.js +12 -8
- package/cjs/S6265/rule.js +27 -20
- package/cjs/S6268/rule.js +5 -4
- package/cjs/S6270/rule.js +12 -9
- package/cjs/S6275/rule.js +2 -2
- package/cjs/S6281/rule.js +22 -17
- package/cjs/S6299/rule.js +2 -2
- package/cjs/S6302/rule.js +6 -5
- package/cjs/S6303/rule.js +12 -10
- package/cjs/S6304/rule.js +6 -5
- package/cjs/S6308/rule.js +7 -5
- package/cjs/S6317/rule.js +5 -4
- package/cjs/S6319/rule.js +2 -2
- package/cjs/S6321/rule.js +25 -23
- package/cjs/S6323/rule.js +4 -3
- package/cjs/S6324/rule.js +2 -2
- package/cjs/S6326/rule.js +2 -2
- package/cjs/S6327/rule.js +2 -2
- package/cjs/S6328/rule.js +4 -3
- package/cjs/S6329/rule.js +7 -5
- package/cjs/S6330/rule.js +2 -2
- package/cjs/S6332/rule.js +2 -2
- package/cjs/S6333/rule.js +8 -6
- package/cjs/S6351/rule.js +22 -19
- package/cjs/S6353/rule.js +2 -2
- package/cjs/S6397/rule.js +2 -2
- package/cjs/S6418/config.js +1 -1
- package/cjs/S6418/rule.js +9 -24
- package/cjs/S6426/rule.js +5 -4
- package/cjs/S6437/rule.js +10 -7
- package/cjs/S6439/rule.js +9 -7
- package/cjs/S6442/rule.js +11 -8
- package/cjs/S6443/rule.js +9 -7
- package/cjs/S6486/rule.js +5 -4
- package/cjs/S6564/rule.js +4 -3
- package/cjs/S6594/rule.js +12 -8
- package/cjs/S6627/rule.js +6 -4
- package/cjs/S6759/rule.js +10 -6
- package/cjs/S6958/rule.js +2 -2
- package/cjs/S6959/rule.js +9 -6
- package/cjs/S7059/generated-meta.js +1 -1
- package/cjs/S7059/rule.js +8 -5
- package/cjs/S7639/generated-meta.js +1 -1
- package/cjs/S7639/rule.js +5 -4
- package/cjs/S7790/generated-meta.js +1 -1
- package/cjs/S7790/rule.js +7 -5
- package/cjs/S8441/generated-meta.js +1 -1
- package/cjs/S8441/rule.js +13 -9
- package/cjs/S881/rule.js +2 -2
- package/cjs/S888/rule.js +4 -3
- package/cjs/S930/rule.js +14 -12
- package/cjs/helpers/ast.js +11 -8
- package/cjs/helpers/aws/s3.js +9 -6
- package/cjs/helpers/chai.js +41 -43
- package/cjs/helpers/configs.js +92 -0
- package/cjs/helpers/cookie-flag-check.js +19 -17
- package/cjs/helpers/{decorators/index.js → entropy.js} +16 -17
- package/cjs/helpers/express.js +127 -128
- package/cjs/helpers/find-up/all-in-parent-dirs.js +0 -16
- package/cjs/helpers/mocha.js +50 -54
- package/cjs/helpers/regex/ast.js +7 -6
- package/cjs/helpers/regex/extract.js +11 -11
- package/cjs/helpers/regex/group.js +2 -2
- package/cjs/helpers/regex/location.js +2 -2
- package/cjs/helpers/regex/range.js +5 -4
- package/cjs/helpers/regex/rule-template.js +4 -3
- package/cjs/helpers/sinon.js +33 -36
- package/cjs/helpers/supertest.js +34 -37
- package/cjs/helpers/vitest.js +29 -32
- package/cjs/plugin-rules.js +452 -450
- package/docs/assertions-in-tests.md +2 -0
- package/docs/bitwise-operators.md +2 -0
- package/docs/code-eval.md +7 -0
- package/docs/file-permissions.md +1 -1
- package/docs/no-async-constructor.md +2 -0
- package/docs/no-inconsistent-returns.md +2 -0
- package/docs/prefer-immediate-return.md +2 -0
- package/docs/sql-queries.md +2 -0
- package/package.json +39 -1
- package/types/S1067/rule.d.ts +1 -1
- package/types/S1110/rule.d.ts +1 -1
- package/types/S1128/rule.d.ts +1 -1
- package/types/S1172/rule.d.ts +1 -1
- package/types/S1226/rule.d.ts +1 -1
- package/types/S134/rule.d.ts +1 -1
- package/types/S1472/rule.d.ts +1 -1
- package/types/S1481/rule.d.ts +1 -1
- package/types/S1488/generated-meta.d.ts +1 -1
- package/types/S1515/rule.d.ts +1 -1
- package/types/S1523/generated-meta.d.ts +17 -0
- package/types/S1523/index.d.ts +1 -0
- package/types/S1523/meta.d.ts +2 -0
- package/types/S1523/rule.d.ts +2 -0
- package/types/S1527/rule.d.ts +1 -1
- package/types/S1529/generated-meta.d.ts +1 -1
- package/types/S1541/rule.d.ts +1 -1
- package/types/S1862/rule.d.ts +1 -1
- package/types/S2077/generated-meta.d.ts +1 -1
- package/types/S2123/rule.d.ts +1 -1
- package/types/S2259/rule.d.ts +1 -1
- package/types/S2428/rule.d.ts +1 -1
- package/types/S2589/rule.d.ts +1 -1
- package/types/S2598/rule.d.ts +1 -1
- package/types/S2699/generated-meta.d.ts +1 -1
- package/types/S2699/rule.d.ts +1 -1
- package/types/S2737/rule.d.ts +1 -1
- package/types/S2757/rule.d.ts +1 -1
- package/types/S2819/rule.d.ts +1 -1
- package/types/S3001/rule.d.ts +1 -1
- package/types/S3317/rule.d.ts +1 -1
- package/types/S3500/rule.d.ts +1 -1
- package/types/S3513/rule.d.ts +1 -1
- package/types/S3686/rule.d.ts +1 -1
- package/types/S3801/generated-meta.d.ts +1 -1
- package/types/S3972/rule.d.ts +1 -1
- package/types/S3973/rule.d.ts +1 -1
- package/types/S4030/rule.d.ts +1 -1
- package/types/S4143/rule.d.ts +1 -1
- package/types/S4158/rule.d.ts +1 -1
- package/types/S4621/rule.d.ts +1 -1
- package/types/S4782/rule.d.ts +1 -1
- package/types/S5693/rule.d.ts +1 -1
- package/types/S5725/rule.d.ts +1 -1
- package/types/S5860/rule.d.ts +1 -1
- package/types/S5868/rule.d.ts +1 -1
- package/types/S5869/rule.d.ts +1 -1
- package/types/S6079/rule.d.ts +1 -1
- package/types/S6326/rule.d.ts +1 -1
- package/types/S6351/rule.d.ts +1 -1
- package/types/S6418/config.d.ts +1 -1
- package/types/S6443/rule.d.ts +1 -1
- package/types/S7059/generated-meta.d.ts +1 -1
- package/types/S7639/generated-meta.d.ts +1 -1
- package/types/S7790/generated-meta.d.ts +1 -1
- package/types/S8441/generated-meta.d.ts +1 -1
- package/types/S930/rule.d.ts +1 -1
- package/types/helpers/ancestor.d.ts +3 -3
- package/types/helpers/ast.d.ts +1 -1
- package/types/helpers/aws/iam.d.ts +2 -2
- package/types/helpers/aws/s3.d.ts +1 -1
- package/types/helpers/chai.d.ts +3 -5
- package/types/helpers/configs.d.ts +39 -1
- package/types/helpers/entropy.d.ts +1 -0
- package/types/helpers/equivalence.d.ts +1 -1
- package/types/helpers/express.d.ts +38 -43
- package/types/helpers/find-up/all-in-parent-dirs.d.ts +1 -1
- package/types/helpers/find-up/closest.d.ts +1 -1
- package/types/helpers/find-up/find-minimatch.d.ts +1 -1
- package/types/helpers/generate-meta.d.ts +1 -1
- package/types/helpers/mocha.d.ts +19 -21
- package/types/helpers/module.d.ts +1 -1
- package/types/helpers/package-jsons/all-in-parent-dirs.d.ts +1 -1
- package/types/helpers/package-jsons/dependencies.d.ts +1 -1
- package/types/helpers/recognizers/CodeRecognizer.d.ts +1 -1
- package/types/helpers/recognizers/JavaScriptFootPrint.d.ts +2 -2
- package/types/helpers/recognizers/LanguageFootprint.d.ts +1 -1
- package/types/helpers/regex/alternation.d.ts +1 -1
- package/types/helpers/regex/ast.d.ts +1 -1
- package/types/helpers/regex/location.d.ts +2 -2
- package/types/helpers/regex/range.d.ts +2 -2
- package/types/helpers/regex/rule-template.d.ts +1 -1
- package/types/helpers/result.d.ts +1 -1
- package/types/helpers/sinon.d.ts +4 -6
- package/types/helpers/sonar-runtime.d.ts +1 -1
- package/types/helpers/supertest.d.ts +4 -6
- package/types/helpers/type.d.ts +1 -1
- package/types/helpers/vitest.d.ts +4 -6
- package/types/plugin-rules.d.ts +1 -0
- package/cjs/helpers/decorators/interceptor.js +0 -88
- package/cjs/helpers/index.js +0 -60
- package/cjs/helpers/recognizers/index.js +0 -37
- package/cjs/helpers/rule-detect-react.js +0 -29
- package/cjs/helpers/validate-version.js +0 -94
- package/types/helpers/aws/index.d.ts +0 -3
- package/types/helpers/decorators/index.d.ts +0 -2
- package/types/helpers/decorators/interceptor.d.ts +0 -16
- package/types/helpers/index.d.ts +0 -28
- package/types/helpers/recognizers/index.d.ts +0 -2
- package/types/helpers/rule-detect-react.d.ts +0 -2
- package/types/helpers/validate-version.d.ts +0 -13
package/cjs/S6351/rule.js
CHANGED
|
@@ -51,12 +51,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const ancestor_js_1 = require("../helpers/ancestor.js");
|
|
57
|
+
const location_js_1 = require("../helpers/location.js");
|
|
55
58
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
|
-
const
|
|
59
|
+
const ast_js_2 = require("../helpers/regex/ast.js");
|
|
57
60
|
const flags_js_1 = require("../helpers/regex/flags.js");
|
|
58
61
|
exports.rule = {
|
|
59
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta),
|
|
60
63
|
create(context) {
|
|
61
64
|
const invocations = new Map();
|
|
62
65
|
const regexes = [];
|
|
@@ -89,22 +92,22 @@ exports.rule = {
|
|
|
89
92
|
},
|
|
90
93
|
};
|
|
91
94
|
function extractRegex(node, acc) {
|
|
92
|
-
if ((0,
|
|
95
|
+
if ((0, ast_js_1.isRegexLiteral)(node)) {
|
|
93
96
|
const { flags } = node.regex;
|
|
94
97
|
acc.push({ node, flags });
|
|
95
98
|
}
|
|
96
|
-
else if ((0,
|
|
99
|
+
else if ((0, ast_js_2.isRegExpConstructor)(node)) {
|
|
97
100
|
const flags = (0, flags_js_1.getFlags)(node) ?? '';
|
|
98
101
|
acc.push({ node, flags });
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
104
|
function extractRegexInvocation(callExpr, regexes, invocations, context) {
|
|
102
|
-
if ((0,
|
|
105
|
+
if ((0, ast_js_1.isCallingMethod)(callExpr, 1, 'exec', 'test') &&
|
|
103
106
|
callExpr.callee.object.type === 'Identifier') {
|
|
104
107
|
const { object } = callExpr.callee;
|
|
105
|
-
const variable = (0,
|
|
108
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, object.name, callExpr);
|
|
106
109
|
if (variable) {
|
|
107
|
-
const value = (0,
|
|
110
|
+
const value = (0, ast_js_1.getUniqueWriteUsage)(context, variable.name, callExpr);
|
|
108
111
|
const regex = regexes.find(r => r.node === value);
|
|
109
112
|
if (regex?.flags.includes('g')) {
|
|
110
113
|
const usages = invocations.get(variable);
|
|
@@ -120,14 +123,14 @@ function extractRegexInvocation(callExpr, regexes, invocations, context) {
|
|
|
120
123
|
}
|
|
121
124
|
function extractResetRegex(node, regexes, resets, context) {
|
|
122
125
|
/* RegExp.prototype.lastIndex = ... */
|
|
123
|
-
if ((0,
|
|
126
|
+
if ((0, ast_js_1.isDotNotation)(node) &&
|
|
124
127
|
node.object.type === 'Identifier' &&
|
|
125
128
|
node.property.name === 'lastIndex') {
|
|
126
|
-
const parent = (0,
|
|
129
|
+
const parent = (0, ancestor_js_1.getParent)(context, node);
|
|
127
130
|
if (parent?.type === 'AssignmentExpression' && parent.left === node) {
|
|
128
|
-
const variable = (0,
|
|
131
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, node.object.name, node);
|
|
129
132
|
if (variable) {
|
|
130
|
-
const value = (0,
|
|
133
|
+
const value = (0, ast_js_1.getUniqueWriteUsage)(context, variable.name, node);
|
|
131
134
|
const regex = regexes.find(r => r.node === value);
|
|
132
135
|
if (regex) {
|
|
133
136
|
resets.add(variable);
|
|
@@ -138,12 +141,12 @@ function extractResetRegex(node, regexes, resets, context) {
|
|
|
138
141
|
}
|
|
139
142
|
function checkWhileConditionRegex(callExpr, context) {
|
|
140
143
|
/* RegExp.prototype.exec() within while conditions */
|
|
141
|
-
if ((0,
|
|
144
|
+
if ((0, ast_js_1.isMethodCall)(callExpr)) {
|
|
142
145
|
const { object, property } = callExpr.callee;
|
|
143
|
-
if (((0,
|
|
146
|
+
if (((0, ast_js_1.isRegexLiteral)(object) || (0, ast_js_2.isRegExpConstructor)(object)) && property.name === 'exec') {
|
|
144
147
|
const flags = object.type === 'Literal' ? object.regex.flags : (0, flags_js_1.getFlags)(object);
|
|
145
148
|
if (flags?.includes('g') && isWithinWhileCondition(callExpr, context)) {
|
|
146
|
-
(0,
|
|
149
|
+
(0, location_js_1.report)(context, {
|
|
147
150
|
message: 'Extract this regular expression to avoid infinite loop.',
|
|
148
151
|
node: object,
|
|
149
152
|
});
|
|
@@ -154,7 +157,7 @@ function checkWhileConditionRegex(callExpr, context) {
|
|
|
154
157
|
function checkGlobalStickyRegex(regex, context) {
|
|
155
158
|
/* RegExp with `g` and `y` flags */
|
|
156
159
|
if (regex.flags.includes('g') && regex.flags.includes('y')) {
|
|
157
|
-
(0,
|
|
160
|
+
(0, location_js_1.report)(context, {
|
|
158
161
|
message: `Remove the 'g' flag from this regex as it is shadowed by the 'y' flag.`,
|
|
159
162
|
node: regex.node,
|
|
160
163
|
});
|
|
@@ -168,10 +171,10 @@ function checkMultipleInputsRegex(regex, usages, resets, context) {
|
|
|
168
171
|
const regexReset = uniqueInputs.has(`''`) || uniqueInputs.has(`""`);
|
|
169
172
|
if (definition && uniqueInputs.size > 1 && !regexReset) {
|
|
170
173
|
const pattern = definition.node.init;
|
|
171
|
-
(0,
|
|
174
|
+
(0, location_js_1.report)(context, {
|
|
172
175
|
message: `Remove the 'g' flag from this regex as it is used on different inputs.`,
|
|
173
176
|
node: pattern,
|
|
174
|
-
}, usages.map((node, idx) => (0,
|
|
177
|
+
}, usages.map((node, idx) => (0, location_js_1.toSecondaryLocation)(node, `Usage ${idx + 1}`)));
|
|
175
178
|
}
|
|
176
179
|
}
|
|
177
180
|
}
|
|
@@ -180,7 +183,7 @@ function isWithinWhileCondition(node, context) {
|
|
|
180
183
|
let parent;
|
|
181
184
|
let child = node;
|
|
182
185
|
while ((parent = ancestors.pop()) !== undefined) {
|
|
183
|
-
if (
|
|
186
|
+
if (ast_js_1.functionLike.has(parent.type)) {
|
|
184
187
|
break;
|
|
185
188
|
}
|
|
186
189
|
if (parent.type === 'WhileStatement' || parent.type === 'DoWhileStatement') {
|
package/cjs/S6353/rule.js
CHANGED
|
@@ -51,7 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
55
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
56
|
const rule_template_js_1 = require("../helpers/regex/rule-template.js");
|
|
57
57
|
exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
@@ -69,7 +69,7 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
69
69
|
checkBulkyQuantifier(node, context);
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
|
-
}, (0,
|
|
72
|
+
}, (0, generate_meta_js_1.generateMeta)(meta));
|
|
73
73
|
function checkBulkyAnyCharacterClass(node, flags, context) {
|
|
74
74
|
if (node.negate || node.elements.length !== 2) {
|
|
75
75
|
return;
|
package/cjs/S6397/rule.js
CHANGED
|
@@ -51,7 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
55
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
56
|
const rule_template_js_1 = require("../helpers/regex/rule-template.js");
|
|
57
57
|
const FORBIDDEN_TYPES = new Set([
|
|
@@ -73,7 +73,7 @@ exports.rule = (0, rule_template_js_1.createRegExpRule)(context => {
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
};
|
|
76
|
-
}, (0,
|
|
76
|
+
}, (0, generate_meta_js_1.generateMeta)(meta, {
|
|
77
77
|
messages: {
|
|
78
78
|
issue: 'Replace this character class by the character itself.',
|
|
79
79
|
},
|
package/cjs/S6418/config.js
CHANGED
package/cjs/S6418/rule.js
CHANGED
|
@@ -51,7 +51,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
56
|
+
const entropy_js_1 = require("../helpers/entropy.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const DEFAULT_SECRET_WORDS = 'api[_.-]?key,auth,credential,secret,token';
|
|
57
59
|
const DEFAULT_RANDOMNESS_SENSIBILITY = 5;
|
|
@@ -62,7 +64,7 @@ function message(name) {
|
|
|
62
64
|
let randomnessSensibility;
|
|
63
65
|
let secretWordRegexps;
|
|
64
66
|
exports.rule = {
|
|
65
|
-
meta: (0,
|
|
67
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta),
|
|
66
68
|
create(context) {
|
|
67
69
|
// get typed rule options with FromSchema helper
|
|
68
70
|
const secretWords = context.options[0]?.['secretWords'] ??
|
|
@@ -101,7 +103,7 @@ function handleAssignmentExpression(context, node) {
|
|
|
101
103
|
}
|
|
102
104
|
function extractDefaultOperatorIfNeeded(node) {
|
|
103
105
|
const defaultOperators = ['??', '||'];
|
|
104
|
-
if ((0,
|
|
106
|
+
if ((0, ast_js_1.isLogicalExpression)(node.right) &&
|
|
105
107
|
defaultOperators.includes(node.right.operator)) {
|
|
106
108
|
return node.right.right;
|
|
107
109
|
}
|
|
@@ -141,10 +143,10 @@ function handleVariableDeclarator(context, node) {
|
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
function findKeySuspect(node) {
|
|
144
|
-
if ((0,
|
|
146
|
+
if ((0, ast_js_1.isIdentifier)(node) && secretWordRegexps.some(pattern => pattern.test(node.name))) {
|
|
145
147
|
return node.name;
|
|
146
148
|
}
|
|
147
|
-
else if ((0,
|
|
149
|
+
else if ((0, ast_js_1.isStringLiteral)(node) &&
|
|
148
150
|
secretWordRegexps.some(pattern => pattern.test(node.value))) {
|
|
149
151
|
return node.value;
|
|
150
152
|
}
|
|
@@ -159,7 +161,7 @@ function findValueSuspect(node) {
|
|
|
159
161
|
if (!node) {
|
|
160
162
|
return undefined;
|
|
161
163
|
}
|
|
162
|
-
if ((0,
|
|
164
|
+
if ((0, ast_js_1.isStringLiteral)(node) &&
|
|
163
165
|
valuePassesPostValidation(node.value) &&
|
|
164
166
|
entropyShouldRaise(node.value)) {
|
|
165
167
|
return node;
|
|
@@ -183,22 +185,5 @@ function buildSecretWordRegexps(secretWords) {
|
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
187
|
function entropyShouldRaise(value) {
|
|
186
|
-
return
|
|
188
|
+
return (0, entropy_js_1.shannonEntropy)(value) > randomnessSensibility;
|
|
187
189
|
}
|
|
188
|
-
const ShannonEntropy = {
|
|
189
|
-
calculate: (str) => {
|
|
190
|
-
if (!str) {
|
|
191
|
-
return 0;
|
|
192
|
-
}
|
|
193
|
-
const lettersTotal = str.length;
|
|
194
|
-
const occurrences = {};
|
|
195
|
-
for (const letter of str) {
|
|
196
|
-
occurrences[letter] = (occurrences[letter] ?? 0) + 1;
|
|
197
|
-
}
|
|
198
|
-
const values = Object.values(occurrences);
|
|
199
|
-
return (values
|
|
200
|
-
.map(count => count / lettersTotal)
|
|
201
|
-
.map(frequency => -frequency * Math.log(frequency))
|
|
202
|
-
.reduce((acc, entropy) => acc + entropy, 0) / Math.log(2));
|
|
203
|
-
},
|
|
204
|
-
};
|
package/cjs/S6426/rule.js
CHANGED
|
@@ -51,10 +51,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
58
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
59
|
hasSuggestions: true,
|
|
59
60
|
messages: {
|
|
60
61
|
issue: 'Remove ".only()" from your test case.',
|
|
@@ -64,9 +65,9 @@ exports.rule = {
|
|
|
64
65
|
create(context) {
|
|
65
66
|
return {
|
|
66
67
|
CallExpression: (node) => {
|
|
67
|
-
if ((0,
|
|
68
|
+
if ((0, ast_js_1.isMethodCall)(node)) {
|
|
68
69
|
const { property, object } = node.callee;
|
|
69
|
-
if ((0,
|
|
70
|
+
if ((0, ast_js_1.isIdentifier)(property, 'only') && (0, ast_js_1.isIdentifier)(object, 'describe', 'it', 'test')) {
|
|
70
71
|
context.report({
|
|
71
72
|
messageId: 'issue',
|
|
72
73
|
node: property,
|
package/cjs/S6437/rule.js
CHANGED
|
@@ -51,7 +51,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const location_js_1 = require("../helpers/location.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const module_js_1 = require("../helpers/module.js");
|
|
57
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
58
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
59
|
// Dictionary with fully qualified names of functions and indices of their
|
|
57
60
|
// parameters to analyze for hardcoded credentials.
|
|
@@ -86,7 +89,7 @@ const secretObjectSignatures = {
|
|
|
86
89
|
'express-session': { argIndex: 0, propertyName: 'secret' },
|
|
87
90
|
};
|
|
88
91
|
exports.rule = {
|
|
89
|
-
meta: (0,
|
|
92
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
90
93
|
messages: {},
|
|
91
94
|
}),
|
|
92
95
|
create(context) {
|
|
@@ -107,13 +110,13 @@ exports.rule = {
|
|
|
107
110
|
if (expr.type === 'Identifier' && hardcodedVariables.has(expr.name)) {
|
|
108
111
|
const nodeName = hardcodedVariables.get(expr.name);
|
|
109
112
|
if (nodeName) {
|
|
110
|
-
return [(0,
|
|
113
|
+
return [(0, location_js_1.toSecondaryLocation)(nodeName, 'Hardcoded value assigned here')];
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
return [];
|
|
114
117
|
}
|
|
115
118
|
function reportIssue(callExpression, secretExpr) {
|
|
116
|
-
(0,
|
|
119
|
+
(0, location_js_1.report)(context, {
|
|
117
120
|
message: 'Revoke and change this password, as it is compromised.',
|
|
118
121
|
loc: callExpression.callee.loc,
|
|
119
122
|
}, getSecondaryLocations(secretExpr));
|
|
@@ -132,11 +135,11 @@ exports.rule = {
|
|
|
132
135
|
if (!arg) {
|
|
133
136
|
return;
|
|
134
137
|
}
|
|
135
|
-
const objectExpr = (0,
|
|
138
|
+
const objectExpr = (0, ast_js_1.getValueOfExpression)(context, arg, 'ObjectExpression');
|
|
136
139
|
if (!objectExpr) {
|
|
137
140
|
return;
|
|
138
141
|
}
|
|
139
|
-
const secretProperty = (0,
|
|
142
|
+
const secretProperty = (0, ast_js_1.getProperty)(objectExpr, propertyName, context);
|
|
140
143
|
if (!secretProperty) {
|
|
141
144
|
return;
|
|
142
145
|
}
|
|
@@ -162,7 +165,7 @@ exports.rule = {
|
|
|
162
165
|
}
|
|
163
166
|
},
|
|
164
167
|
CallExpression(node) {
|
|
165
|
-
const fqn = (0,
|
|
168
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, node);
|
|
166
169
|
if (!fqn) {
|
|
167
170
|
return;
|
|
168
171
|
}
|
package/cjs/S6439/rule.js
CHANGED
|
@@ -51,7 +51,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const type_js_1 = require("../helpers/type.js");
|
|
56
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const detectReactNativeSelector = [
|
|
57
59
|
':matches(',
|
|
@@ -62,7 +64,7 @@ const detectReactNativeSelector = [
|
|
|
62
64
|
')',
|
|
63
65
|
].join('');
|
|
64
66
|
exports.rule = {
|
|
65
|
-
meta: (0,
|
|
67
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
66
68
|
hasSuggestions: true,
|
|
67
69
|
messages: {
|
|
68
70
|
nonBooleanMightRender: 'Convert the conditional to a boolean to avoid leaked value',
|
|
@@ -70,7 +72,7 @@ exports.rule = {
|
|
|
70
72
|
},
|
|
71
73
|
}),
|
|
72
74
|
create(context) {
|
|
73
|
-
if (!(0,
|
|
75
|
+
if (!(0, parser_services_js_1.isRequiredParserServices)(context.sourceCode.parserServices)) {
|
|
74
76
|
return {};
|
|
75
77
|
}
|
|
76
78
|
let usesReactNative = false;
|
|
@@ -114,12 +116,12 @@ function report(node, context) {
|
|
|
114
116
|
});
|
|
115
117
|
}
|
|
116
118
|
function isStringOrNumber(node, context) {
|
|
117
|
-
const type = (0,
|
|
118
|
-
return (0,
|
|
119
|
+
const type = (0, type_js_1.getTypeFromTreeNode)(node, context.sourceCode.parserServices);
|
|
120
|
+
return (0, type_js_1.isStringType)(type) || (0, type_js_1.isBigIntType)(type) || (0, type_js_1.isNumberType)(type);
|
|
119
121
|
}
|
|
120
122
|
function isNumber(node, context) {
|
|
121
|
-
const type = (0,
|
|
122
|
-
return (0,
|
|
123
|
+
const type = (0, type_js_1.getTypeFromTreeNode)(node, context.sourceCode.parserServices);
|
|
124
|
+
return (0, type_js_1.isBigIntType)(type) || (0, type_js_1.isNumberType)(type);
|
|
123
125
|
}
|
|
124
126
|
function checkNonBoolean(context, isLeakingType, node) {
|
|
125
127
|
if (node.type === 'LogicalExpression') {
|
package/cjs/S6442/rule.js
CHANGED
|
@@ -51,25 +51,28 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const ancestor_js_1 = require("../helpers/ancestor.js");
|
|
55
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
56
|
+
const module_js_1 = require("../helpers/module.js");
|
|
57
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
58
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
59
|
const REACT_MODULE = 'react';
|
|
57
60
|
const REACT_PATTERN = /^[^a-z]/;
|
|
58
61
|
const HOOK_FUNCTION = 'useState';
|
|
59
62
|
exports.rule = {
|
|
60
|
-
meta: (0,
|
|
63
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
61
64
|
messages: {
|
|
62
65
|
noHookSetterInBody: 'Remove this state setter call, perhaps move it to an event handler or JSX attribute',
|
|
63
66
|
},
|
|
64
67
|
}),
|
|
65
68
|
create(context) {
|
|
66
69
|
function isHookCall(node) {
|
|
67
|
-
return ((0,
|
|
70
|
+
return ((0, module_js_1.getFullyQualifiedName)(context, node) === `${REACT_MODULE}.${HOOK_FUNCTION}` &&
|
|
68
71
|
node.arguments.length === 1);
|
|
69
72
|
}
|
|
70
73
|
function getReactComponentScope(node) {
|
|
71
74
|
const scope = context.sourceCode.getScope(node);
|
|
72
|
-
const isReact = (0,
|
|
75
|
+
const isReact = (0, ast_js_1.isFunctionNode)(scope.block) && matchesReactComponentName(scope.block, 1);
|
|
73
76
|
return isReact ? scope : null;
|
|
74
77
|
}
|
|
75
78
|
function isInsideFunctionScope(scope, node) {
|
|
@@ -107,7 +110,7 @@ exports.rule = {
|
|
|
107
110
|
}
|
|
108
111
|
const hookDeclarator = node;
|
|
109
112
|
if (isHookCall(hookDeclarator.init)) {
|
|
110
|
-
const variable = (0,
|
|
113
|
+
const variable = (0, ast_js_1.getVariableFromName)(context, hookDeclarator.id.elements[1].name, node);
|
|
111
114
|
if (variable != null) {
|
|
112
115
|
setters.push(variable);
|
|
113
116
|
}
|
|
@@ -121,7 +124,7 @@ exports.rule = {
|
|
|
121
124
|
return;
|
|
122
125
|
}
|
|
123
126
|
const maybeSetterCall = node;
|
|
124
|
-
const calleeVariable = (0,
|
|
127
|
+
const calleeVariable = (0, ast_js_1.getVariableFromName)(context, maybeSetterCall.callee.name, node);
|
|
125
128
|
if (calleeVariable && setters.includes(calleeVariable)) {
|
|
126
129
|
context.report({
|
|
127
130
|
messageId: 'noHookSetterInBody',
|
|
@@ -133,7 +136,7 @@ exports.rule = {
|
|
|
133
136
|
},
|
|
134
137
|
};
|
|
135
138
|
function isInsideConditional(node) {
|
|
136
|
-
return ((0,
|
|
139
|
+
return ((0, ancestor_js_1.findFirstMatchingLocalAncestor)(node, n => n.type === 'IfStatement') !==
|
|
137
140
|
undefined);
|
|
138
141
|
}
|
|
139
142
|
function hasParent(node) {
|
|
@@ -143,7 +146,7 @@ function matchesReactComponentName(node, max = 0) {
|
|
|
143
146
|
if (node == null) {
|
|
144
147
|
return false;
|
|
145
148
|
}
|
|
146
|
-
else if ((0,
|
|
149
|
+
else if ((0, ast_js_1.isIdentifier)(node)) {
|
|
147
150
|
return REACT_PATTERN.test(node.name);
|
|
148
151
|
}
|
|
149
152
|
else if (node.type === 'FunctionDeclaration') {
|
package/cjs/S6443/rule.js
CHANGED
|
@@ -51,7 +51,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const declarationSelector = [
|
|
57
59
|
':matches(',
|
|
@@ -71,7 +73,7 @@ const callSelector = [
|
|
|
71
73
|
'[arguments.0.type="Identifier"]',
|
|
72
74
|
].join('');
|
|
73
75
|
exports.rule = {
|
|
74
|
-
meta: (0,
|
|
76
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
75
77
|
messages: {
|
|
76
78
|
uselessSetState: 'Change the argument of this setter to not use its matching state variable',
|
|
77
79
|
},
|
|
@@ -84,14 +86,14 @@ exports.rule = {
|
|
|
84
86
|
const { elements } = node.id;
|
|
85
87
|
const setter = elements[1].name;
|
|
86
88
|
referencesBySetterName[setter] = {
|
|
87
|
-
setter: (0,
|
|
88
|
-
value: (0,
|
|
89
|
+
setter: (0, ast_js_1.getVariableFromName)(context, setter, node),
|
|
90
|
+
value: (0, ast_js_1.getVariableFromName)(context, elements[0].name, node),
|
|
89
91
|
};
|
|
90
92
|
}
|
|
91
93
|
},
|
|
92
94
|
[callSelector](node) {
|
|
93
|
-
const setter = (0,
|
|
94
|
-
const value = (0,
|
|
95
|
+
const setter = (0, ast_js_1.getVariableFromName)(context, node.callee.name, node);
|
|
96
|
+
const value = (0, ast_js_1.getVariableFromName)(context, node.arguments[0].name, node);
|
|
95
97
|
const key = setter?.name;
|
|
96
98
|
if (setter &&
|
|
97
99
|
value &&
|
|
@@ -108,7 +110,7 @@ exports.rule = {
|
|
|
108
110
|
},
|
|
109
111
|
};
|
|
110
112
|
function isReactCall(context, callExpr) {
|
|
111
|
-
const fqn = (0,
|
|
113
|
+
const fqn = (0, module_js_1.getFullyQualifiedName)(context, callExpr);
|
|
112
114
|
if (fqn) {
|
|
113
115
|
const [module] = fqn.split('.');
|
|
114
116
|
return module === 'react';
|
package/cjs/S6486/rule.js
CHANGED
|
@@ -51,10 +51,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
exports.rule = {
|
|
57
|
-
meta: (0,
|
|
58
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
58
59
|
messages: {
|
|
59
60
|
noGeneratedKeys: 'Do not use generated values for keys of React list components.',
|
|
60
61
|
},
|
|
@@ -134,11 +135,11 @@ function isGeneratedExpression(node) {
|
|
|
134
135
|
return isMathRandom(node) || isDateNow(node);
|
|
135
136
|
function isMathRandom(node) {
|
|
136
137
|
return (node.type === 'CallExpression' &&
|
|
137
|
-
(0,
|
|
138
|
+
(0, ast_js_1.isMemberExpression)(node.callee, 'Math', 'random'));
|
|
138
139
|
}
|
|
139
140
|
function isDateNow(node) {
|
|
140
141
|
return (node.type === 'CallExpression' &&
|
|
141
|
-
(0,
|
|
142
|
+
(0, ast_js_1.isMemberExpression)(node.callee, 'Date', 'now'));
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
function getCallExpressionsFromBinaryExpression(side) {
|
package/cjs/S6564/rule.js
CHANGED
|
@@ -51,7 +51,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const type_js_1 = require("../helpers/type.js");
|
|
55
56
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
57
|
const COMMON_NODE_TYPES = new Set([
|
|
57
58
|
'TSAnyKeyword',
|
|
@@ -67,7 +68,7 @@ const COMMON_NODE_TYPES = new Set([
|
|
|
67
68
|
'TSVoidKeyword',
|
|
68
69
|
]);
|
|
69
70
|
exports.rule = {
|
|
70
|
-
meta: (0,
|
|
71
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
71
72
|
messages: {
|
|
72
73
|
redundantTypeAlias: 'Remove this redundant type alias and replace its occurrences with "{{type}}".',
|
|
73
74
|
},
|
|
@@ -76,7 +77,7 @@ exports.rule = {
|
|
|
76
77
|
return {
|
|
77
78
|
TSTypeAliasDeclaration(node) {
|
|
78
79
|
const { id, typeAnnotation } = node;
|
|
79
|
-
if (COMMON_NODE_TYPES.has(typeAnnotation.type) || (0,
|
|
80
|
+
if (COMMON_NODE_TYPES.has(typeAnnotation.type) || (0, type_js_1.isTypeAlias)(typeAnnotation, context)) {
|
|
80
81
|
const sourceCode = context.sourceCode;
|
|
81
82
|
const tpe = sourceCode.getTokens(typeAnnotation)[0];
|
|
82
83
|
context.report({
|
package/cjs/S6594/rule.js
CHANGED
|
@@ -51,11 +51,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const ancestor_js_1 = require("../helpers/ancestor.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
57
|
+
const parser_services_js_1 = require("../helpers/parser-services.js");
|
|
58
|
+
const type_js_1 = require("../helpers/type.js");
|
|
55
59
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
60
|
const extract_js_1 = require("../helpers/regex/extract.js");
|
|
57
61
|
exports.rule = {
|
|
58
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, {
|
|
59
63
|
hasSuggestions: true,
|
|
60
64
|
messages: {
|
|
61
65
|
useExec: 'Use the "RegExp.exec()" method instead.',
|
|
@@ -64,13 +68,13 @@ exports.rule = {
|
|
|
64
68
|
}),
|
|
65
69
|
create(context) {
|
|
66
70
|
const services = context.sourceCode.parserServices;
|
|
67
|
-
if (!(0,
|
|
71
|
+
if (!(0, parser_services_js_1.isRequiredParserServices)(services)) {
|
|
68
72
|
return {};
|
|
69
73
|
}
|
|
70
74
|
return {
|
|
71
75
|
"CallExpression[arguments.length=1] > MemberExpression.callee[property.name='match'][computed=false]": (memberExpr) => {
|
|
72
76
|
const { object, property } = memberExpr;
|
|
73
|
-
if (!(0,
|
|
77
|
+
if (!(0, type_js_1.isString)(object, services)) {
|
|
74
78
|
return;
|
|
75
79
|
}
|
|
76
80
|
const callExpr = memberExpr.parent;
|
|
@@ -81,8 +85,8 @@ exports.rule = {
|
|
|
81
85
|
const variable = getLhsVariable(callExpr);
|
|
82
86
|
for (const ref of variable?.references ?? []) {
|
|
83
87
|
const id = ref.identifier;
|
|
84
|
-
const parent = (0,
|
|
85
|
-
if ((0,
|
|
88
|
+
const parent = (0, ancestor_js_1.getNodeParent)(id);
|
|
89
|
+
if ((0, ast_js_1.isMemberWithProperty)(parent, 'length')) {
|
|
86
90
|
return;
|
|
87
91
|
}
|
|
88
92
|
}
|
|
@@ -108,7 +112,7 @@ exports.rule = {
|
|
|
108
112
|
* like `x` in `const x = <node>` or `x` in `x = <node>`.
|
|
109
113
|
*/
|
|
110
114
|
function getLhsVariable(node) {
|
|
111
|
-
const parent = (0,
|
|
115
|
+
const parent = (0, ancestor_js_1.getNodeParent)(node);
|
|
112
116
|
let ident;
|
|
113
117
|
if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {
|
|
114
118
|
ident = parent.id;
|
|
@@ -117,7 +121,7 @@ exports.rule = {
|
|
|
117
121
|
ident = parent.left;
|
|
118
122
|
}
|
|
119
123
|
if (ident) {
|
|
120
|
-
return (0,
|
|
124
|
+
return (0, ast_js_1.getVariableFromName)(context, ident.name, node);
|
|
121
125
|
}
|
|
122
126
|
return null;
|
|
123
127
|
}
|
package/cjs/S6627/rule.js
CHANGED
|
@@ -51,19 +51,21 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.rule = void 0;
|
|
54
|
-
const
|
|
54
|
+
const generate_meta_js_1 = require("../helpers/generate-meta.js");
|
|
55
|
+
const module_js_1 = require("../helpers/module.js");
|
|
56
|
+
const ast_js_1 = require("../helpers/ast.js");
|
|
55
57
|
const meta = __importStar(require("./generated-meta.js"));
|
|
56
58
|
const messages = {
|
|
57
59
|
default: 'Do not use internal APIs of your dependencies',
|
|
58
60
|
};
|
|
59
61
|
exports.rule = {
|
|
60
|
-
meta: (0,
|
|
62
|
+
meta: (0, generate_meta_js_1.generateMeta)(meta, { messages }),
|
|
61
63
|
create(context) {
|
|
62
64
|
return {
|
|
63
65
|
CallExpression(node) {
|
|
64
|
-
if ((0,
|
|
66
|
+
if ((0, module_js_1.isRequire)(node)) {
|
|
65
67
|
const [arg] = node.arguments;
|
|
66
|
-
if ((0,
|
|
68
|
+
if ((0, ast_js_1.isStringLiteral)(arg) && arg.value.includes('node_modules')) {
|
|
67
69
|
context.report({
|
|
68
70
|
node,
|
|
69
71
|
messageId: 'default',
|