@sun-asterisk/sunlint 1.3.1 → 1.3.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/CHANGELOG.md +47 -0
- package/CONTRIBUTING.md +210 -1691
- package/config/rule-analysis-strategies.js +17 -1
- package/config/rules/enhanced-rules-registry.json +369 -1135
- package/config/rules/rules-registry-generated.json +1 -1
- package/core/enhanced-rules-registry.js +2 -1
- package/core/semantic-engine.js +15 -3
- package/core/semantic-rule-base.js +4 -2
- package/engines/heuristic-engine.js +65 -4
- package/integrations/eslint/plugin/rules/common/c003-no-vague-abbreviations.js +59 -1
- package/integrations/eslint/plugin/rules/common/c006-function-name-verb-noun.js +26 -1
- package/integrations/eslint/plugin/rules/common/c030-use-custom-error-classes.js +54 -19
- package/origin-rules/common-en.md +11 -7
- package/package.json +1 -1
- package/rules/common/C002_no_duplicate_code/analyzer.js +334 -36
- package/rules/common/C003_no_vague_abbreviations/analyzer.js +220 -35
- package/rules/common/C006_function_naming/analyzer.js +29 -3
- package/rules/common/C010_limit_block_nesting/analyzer.js +181 -337
- package/rules/common/C010_limit_block_nesting/config.json +64 -0
- package/rules/common/C010_limit_block_nesting/regex-based-analyzer.js +379 -0
- package/rules/common/C010_limit_block_nesting/symbol-based-analyzer.js +231 -0
- package/rules/common/C013_no_dead_code/analyzer.js +75 -177
- package/rules/common/C013_no_dead_code/config.json +61 -0
- package/rules/common/C013_no_dead_code/regex-based-analyzer.js +345 -0
- package/rules/common/C013_no_dead_code/symbol-based-analyzer.js +640 -0
- package/rules/common/C014_dependency_injection/analyzer.js +48 -313
- package/rules/common/C014_dependency_injection/config.json +26 -0
- package/rules/common/C014_dependency_injection/symbol-based-analyzer.js +751 -0
- package/rules/common/C018_no_throw_generic_error/analyzer.js +232 -0
- package/rules/common/C018_no_throw_generic_error/config.json +50 -0
- package/rules/common/C018_no_throw_generic_error/regex-based-analyzer.js +387 -0
- package/rules/common/C018_no_throw_generic_error/symbol-based-analyzer.js +314 -0
- package/rules/common/C019_log_level_usage/analyzer.js +110 -317
- package/rules/common/C019_log_level_usage/pattern-analyzer.js +88 -0
- package/rules/common/C019_log_level_usage/system-log-analyzer.js +1267 -0
- package/rules/common/C023_no_duplicate_variable/analyzer.js +180 -0
- package/rules/common/C023_no_duplicate_variable/config.json +50 -0
- package/rules/common/C023_no_duplicate_variable/symbol-based-analyzer.js +158 -0
- package/rules/common/C024_no_scatter_hardcoded_constants/analyzer.js +180 -0
- package/rules/common/C024_no_scatter_hardcoded_constants/config.json +50 -0
- package/rules/common/C024_no_scatter_hardcoded_constants/symbol-based-analyzer.js +181 -0
- package/rules/common/C030_use_custom_error_classes/analyzer.js +200 -0
- package/rules/common/C035_error_logging_context/analyzer.js +3 -1
- package/rules/index.js +5 -1
- package/rules/security/S009_no_insecure_encryption/README.md +158 -0
- package/rules/security/S009_no_insecure_encryption/analyzer.js +319 -0
- package/rules/security/S009_no_insecure_encryption/config.json +55 -0
- package/rules/security/S010_no_insecure_encryption/README.md +224 -0
- package/rules/security/S010_no_insecure_encryption/analyzer.js +493 -0
- package/rules/security/S010_no_insecure_encryption/config.json +48 -0
- package/rules/security/S016_no_sensitive_querystring/STRATEGY.md +149 -0
- package/rules/security/S016_no_sensitive_querystring/analyzer.js +276 -0
- package/rules/security/S016_no_sensitive_querystring/config.json +127 -0
- package/rules/security/S016_no_sensitive_querystring/regex-based-analyzer.js +258 -0
- package/rules/security/S016_no_sensitive_querystring/symbol-based-analyzer.js +495 -0
- package/rules/security/S048_no_current_password_in_reset/README.md +222 -0
- package/rules/security/S048_no_current_password_in_reset/analyzer.js +366 -0
- package/rules/security/S048_no_current_password_in_reset/config.json +48 -0
- package/rules/security/S055_content_type_validation/README.md +176 -0
- package/rules/security/S055_content_type_validation/analyzer.js +312 -0
- package/rules/security/S055_content_type_validation/config.json +48 -0
- package/rules/utils/rule-helpers.js +140 -1
- package/scripts/consolidate-config.js +116 -0
- package/config/rules/S027-categories.json +0 -122
- package/config/rules/rules-registry.json +0 -777
- package/rules/common/C006_function_naming/smart-analyzer.js +0 -503
|
@@ -5,26 +5,14 @@
|
|
|
5
5
|
"description": "Each function should do one thing only",
|
|
6
6
|
"category": "design",
|
|
7
7
|
"severity": "warning",
|
|
8
|
-
"languages": [
|
|
9
|
-
"typescript",
|
|
10
|
-
"javascript",
|
|
11
|
-
"dart",
|
|
12
|
-
"kotlin"
|
|
13
|
-
],
|
|
8
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
14
9
|
"analyzer": "./rules/common/C005_single_responsibility/analyzer.js",
|
|
15
10
|
"config": "./rules/common/C005_single_responsibility/config.json",
|
|
16
11
|
"version": "1.0.0",
|
|
17
12
|
"status": "stable",
|
|
18
|
-
"tags": [
|
|
19
|
-
"design",
|
|
20
|
-
"responsibility",
|
|
21
|
-
"maintainability"
|
|
22
|
-
],
|
|
13
|
+
"tags": ["design", "responsibility", "maintainability"],
|
|
23
14
|
"engineMappings": {
|
|
24
|
-
"eslint": [
|
|
25
|
-
"max-statements-per-line",
|
|
26
|
-
"complexity"
|
|
27
|
-
]
|
|
15
|
+
"eslint": ["max-statements-per-line", "complexity"]
|
|
28
16
|
}
|
|
29
17
|
},
|
|
30
18
|
"C019": {
|
|
@@ -32,26 +20,20 @@
|
|
|
32
20
|
"description": "Không sử dụng log mức error cho lỗi không nghiêm trọng",
|
|
33
21
|
"category": "logging",
|
|
34
22
|
"severity": "warning",
|
|
35
|
-
"languages": [
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"kotlin",
|
|
39
|
-
"javascript"
|
|
40
|
-
],
|
|
41
|
-
"analyzer": "./rules/C019_log_level_usage/analyzer.js",
|
|
42
|
-
"config": "./rules/C019_log_level_usage/config.json",
|
|
23
|
+
"languages": ["typescript", "dart", "kotlin", "javascript"],
|
|
24
|
+
"analyzer": "./rules/common/C019_log_level_usage/analyzer.js",
|
|
25
|
+
"config": "./rules/common/C019_log_level_usage/config.json",
|
|
43
26
|
"version": "1.0.0",
|
|
44
27
|
"status": "stable",
|
|
45
|
-
"tags": [
|
|
46
|
-
"logging",
|
|
47
|
-
"error-handling",
|
|
48
|
-
"severity"
|
|
49
|
-
],
|
|
28
|
+
"tags": ["logging", "error-handling", "severity"],
|
|
50
29
|
"engineMappings": {
|
|
51
30
|
"eslint": [
|
|
52
31
|
"no-console",
|
|
53
32
|
"no-alert",
|
|
54
33
|
"no-debugger"
|
|
34
|
+
],
|
|
35
|
+
"heuristic": [
|
|
36
|
+
"rules/common/C019_log_level_usage/analyzer.js"
|
|
55
37
|
]
|
|
56
38
|
}
|
|
57
39
|
},
|
|
@@ -60,21 +42,12 @@
|
|
|
60
42
|
"description": "Tên hàm phải là động từ/verb-noun pattern",
|
|
61
43
|
"category": "naming",
|
|
62
44
|
"severity": "warning",
|
|
63
|
-
"languages": [
|
|
64
|
-
"typescript",
|
|
65
|
-
"dart",
|
|
66
|
-
"kotlin",
|
|
67
|
-
"javascript"
|
|
68
|
-
],
|
|
45
|
+
"languages": ["typescript", "dart", "kotlin", "javascript"],
|
|
69
46
|
"analyzer": "./rules/C006_function_naming/analyzer.js",
|
|
70
47
|
"config": "./rules/C006_function_naming/config.json",
|
|
71
48
|
"version": "1.0.0",
|
|
72
49
|
"status": "activated",
|
|
73
|
-
"tags": [
|
|
74
|
-
"naming",
|
|
75
|
-
"convention",
|
|
76
|
-
"readability"
|
|
77
|
-
],
|
|
50
|
+
"tags": ["naming", "convention", "readability"],
|
|
78
51
|
"engineMappings": {
|
|
79
52
|
"eslint": [
|
|
80
53
|
"func-names",
|
|
@@ -88,21 +61,12 @@
|
|
|
88
61
|
"description": "Avoid comments that just describe the code",
|
|
89
62
|
"category": "documentation",
|
|
90
63
|
"severity": "info",
|
|
91
|
-
"languages": [
|
|
92
|
-
"typescript",
|
|
93
|
-
"javascript",
|
|
94
|
-
"dart",
|
|
95
|
-
"kotlin"
|
|
96
|
-
],
|
|
64
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
97
65
|
"analyzer": "./rules/common/C007_meaningful_comments/analyzer.js",
|
|
98
66
|
"config": "./rules/common/C007_meaningful_comments/config.json",
|
|
99
67
|
"version": "1.0.0",
|
|
100
68
|
"status": "stable",
|
|
101
|
-
"tags": [
|
|
102
|
-
"documentation",
|
|
103
|
-
"comments",
|
|
104
|
-
"maintainability"
|
|
105
|
-
],
|
|
69
|
+
"tags": ["documentation", "comments", "maintainability"],
|
|
106
70
|
"engineMappings": {
|
|
107
71
|
"eslint": [
|
|
108
72
|
"spaced-comment",
|
|
@@ -116,31 +80,48 @@
|
|
|
116
80
|
"description": "Limit nested blocks (if/for/while/switch) to maximum 3 levels for readability",
|
|
117
81
|
"category": "complexity",
|
|
118
82
|
"severity": "warning",
|
|
119
|
-
"languages": [
|
|
120
|
-
"typescript",
|
|
121
|
-
"javascript",
|
|
122
|
-
"dart",
|
|
123
|
-
"kotlin"
|
|
124
|
-
],
|
|
83
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
125
84
|
"analyzer": "./rules/common/C010_limit_block_nesting/analyzer.js",
|
|
85
|
+
"config": "./rules/common/C010_limit_block_nesting/config.json",
|
|
86
|
+
"version": "1.0.0",
|
|
87
|
+
"status": "stable",
|
|
88
|
+
"tags": ["complexity", "readability", "nesting", "maintainability"],
|
|
89
|
+
"strategy": {
|
|
90
|
+
"preferred": "ast",
|
|
91
|
+
"fallbacks": ["ast", "regex"],
|
|
92
|
+
"accuracy": {
|
|
93
|
+
"ast": 95,
|
|
94
|
+
"regex": 75
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"C013": {
|
|
99
|
+
"name": "No Dead Code",
|
|
100
|
+
"description": "Detect and remove commented out code, unused variables/functions, and unreachable code",
|
|
101
|
+
"category": "maintainability",
|
|
102
|
+
"severity": "warning",
|
|
103
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
104
|
+
"analyzer": "./rules/common/C013_no_dead_code/analyzer.js",
|
|
105
|
+
"config": "./rules/common/C013_no_dead_code/config.json",
|
|
126
106
|
"version": "1.0.0",
|
|
127
107
|
"status": "stable",
|
|
128
108
|
"tags": [
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
109
|
+
"dead-code",
|
|
110
|
+
"commented-code",
|
|
111
|
+
"unreachable-code",
|
|
112
|
+
"cleanup",
|
|
132
113
|
"maintainability"
|
|
133
114
|
],
|
|
134
115
|
"strategy": {
|
|
135
116
|
"preferred": "ast",
|
|
136
|
-
"fallbacks": [
|
|
137
|
-
"ast",
|
|
138
|
-
"regex"
|
|
139
|
-
],
|
|
117
|
+
"fallbacks": ["ast", "regex"],
|
|
140
118
|
"accuracy": {
|
|
141
|
-
"ast":
|
|
142
|
-
"regex":
|
|
119
|
+
"ast": 90,
|
|
120
|
+
"regex": 70
|
|
143
121
|
}
|
|
122
|
+
},
|
|
123
|
+
"engineMappings": {
|
|
124
|
+
"eslint": ["no-unreachable", "no-unused-vars", "no-unused-expressions"]
|
|
144
125
|
}
|
|
145
126
|
},
|
|
146
127
|
"C012": {
|
|
@@ -148,21 +129,12 @@
|
|
|
148
129
|
"description": "Separate Command and Query operations (CQS principle)",
|
|
149
130
|
"category": "design",
|
|
150
131
|
"severity": "warning",
|
|
151
|
-
"languages": [
|
|
152
|
-
"typescript",
|
|
153
|
-
"javascript",
|
|
154
|
-
"dart",
|
|
155
|
-
"kotlin"
|
|
156
|
-
],
|
|
132
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
157
133
|
"analyzer": "./rules/common/C012_command_query_separation/analyzer.js",
|
|
158
134
|
"config": "./rules/common/C012_command_query_separation/config.json",
|
|
159
135
|
"version": "1.0.0",
|
|
160
136
|
"status": "stable",
|
|
161
|
-
"tags": [
|
|
162
|
-
"design",
|
|
163
|
-
"separation",
|
|
164
|
-
"maintainability"
|
|
165
|
-
],
|
|
137
|
+
"tags": ["design", "separation", "maintainability"],
|
|
166
138
|
"engineMappings": {
|
|
167
139
|
"eslint": [
|
|
168
140
|
"consistent-return",
|
|
@@ -176,26 +148,59 @@
|
|
|
176
148
|
"description": "Use domain language in class/function names",
|
|
177
149
|
"category": "naming",
|
|
178
150
|
"severity": "warning",
|
|
179
|
-
"languages": [
|
|
180
|
-
"typescript",
|
|
181
|
-
"javascript",
|
|
182
|
-
"dart",
|
|
183
|
-
"kotlin"
|
|
184
|
-
],
|
|
151
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
185
152
|
"analyzer": "./rules/common/C015_domain_language/analyzer.js",
|
|
186
153
|
"config": "./rules/common/C015_domain_language/config.json",
|
|
187
154
|
"version": "1.0.0",
|
|
188
155
|
"status": "stable",
|
|
189
|
-
"tags": [
|
|
190
|
-
"naming",
|
|
191
|
-
"domain",
|
|
192
|
-
"readability"
|
|
193
|
-
],
|
|
156
|
+
"tags": ["naming", "domain", "readability"],
|
|
194
157
|
"engineMappings": {
|
|
195
|
-
"eslint": [
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
158
|
+
"eslint": ["@typescript-eslint/naming-convention", "camelcase"]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"C018": {
|
|
162
|
+
"name": "Do not throw generic errors",
|
|
163
|
+
"description": "Always provide detailed messages and context.",
|
|
164
|
+
"category": "naming",
|
|
165
|
+
"severity": "warning",
|
|
166
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
167
|
+
"analyzer": "./rules/common/C018_no_throw_generic_error/analyzer.js",
|
|
168
|
+
"config": "./rules/common/C018_no_throw_generic_error/config.json",
|
|
169
|
+
"version": "1.0.0",
|
|
170
|
+
"status": "stable",
|
|
171
|
+
"tags": ["naming", "domain", "readability"],
|
|
172
|
+
"engineMappings": {
|
|
173
|
+
"eslint": ["@typescript-eslint/naming-convention", "camelcase"]
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"C023": {
|
|
177
|
+
"name": "Do not declare duplicate variable",
|
|
178
|
+
"description": "Do not declare duplicate variable names in the same scope",
|
|
179
|
+
"category": "naming",
|
|
180
|
+
"severity": "warning",
|
|
181
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
182
|
+
"analyzer": "./rules/common/C023_no_duplicate_variable/analyzer.js",
|
|
183
|
+
"config": "./rules/common/C023_no_duplicate_variable/config.json",
|
|
184
|
+
"version": "1.0.0",
|
|
185
|
+
"status": "stable",
|
|
186
|
+
"tags": ["naming", "domain", "readability"],
|
|
187
|
+
"engineMappings": {
|
|
188
|
+
"eslint": ["@typescript-eslint/naming-convention", "camelcase"]
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"C024": {
|
|
192
|
+
"name": "Do not scatter hardcoded constants throughout the logic",
|
|
193
|
+
"description": "The rule prevents scattering hardcoded constants throughout the logic. Instead, constants should be defined in a single place to improve maintainability and readability.",
|
|
194
|
+
"category": "naming",
|
|
195
|
+
"severity": "warning",
|
|
196
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
197
|
+
"analyzer": "./rules/common/C024_no_scatter_hardcoded_constants/analyzer.js",
|
|
198
|
+
"config": "./rules/common/C024_no_scatter_hardcoded_constants/config.json",
|
|
199
|
+
"version": "1.0.0",
|
|
200
|
+
"status": "stable",
|
|
201
|
+
"tags": ["naming", "domain", "readability"],
|
|
202
|
+
"engineMappings": {
|
|
203
|
+
"eslint": ["@typescript-eslint/naming-convention", "camelcase"]
|
|
199
204
|
}
|
|
200
205
|
},
|
|
201
206
|
"C029": {
|
|
@@ -203,43 +208,24 @@
|
|
|
203
208
|
"description": "Mọi catch block phải log nguyên nhân lỗi đầy đủ",
|
|
204
209
|
"category": "error-handling",
|
|
205
210
|
"severity": "error",
|
|
206
|
-
"languages": [
|
|
207
|
-
"typescript",
|
|
208
|
-
"dart",
|
|
209
|
-
"kotlin",
|
|
210
|
-
"javascript"
|
|
211
|
-
],
|
|
211
|
+
"languages": ["typescript", "dart", "kotlin", "javascript"],
|
|
212
212
|
"analyzer": "./rules/C029_catch_block_logging/analyzer.js",
|
|
213
213
|
"config": "./rules/C029_catch_block_logging/config.json",
|
|
214
214
|
"version": "1.0.0",
|
|
215
215
|
"status": "activated",
|
|
216
|
-
"tags": [
|
|
217
|
-
"error-handling",
|
|
218
|
-
"logging",
|
|
219
|
-
"debugging",
|
|
220
|
-
"monitoring"
|
|
221
|
-
]
|
|
216
|
+
"tags": ["error-handling", "logging", "debugging", "monitoring"]
|
|
222
217
|
},
|
|
223
218
|
"C031": {
|
|
224
219
|
"name": "Validation Logic Separation",
|
|
225
220
|
"description": "Logic kiểm tra dữ liệu (validate) phải nằm riêng biệt",
|
|
226
221
|
"category": "validation",
|
|
227
222
|
"severity": "error",
|
|
228
|
-
"languages": [
|
|
229
|
-
"typescript",
|
|
230
|
-
"dart",
|
|
231
|
-
"kotlin",
|
|
232
|
-
"javascript"
|
|
233
|
-
],
|
|
223
|
+
"languages": ["typescript", "dart", "kotlin", "javascript"],
|
|
234
224
|
"analyzer": "./rules/C031_validation_separation/analyzer.js",
|
|
235
225
|
"config": "./rules/C031_validation_separation/config.json",
|
|
236
226
|
"version": "1.0.0",
|
|
237
227
|
"status": "experimental",
|
|
238
|
-
"tags": [
|
|
239
|
-
"validation",
|
|
240
|
-
"separation",
|
|
241
|
-
"architecture"
|
|
242
|
-
],
|
|
228
|
+
"tags": ["validation", "separation", "architecture"],
|
|
243
229
|
"engineMappings": {
|
|
244
230
|
"eslint": [
|
|
245
231
|
"no-implicit-coercion",
|
|
@@ -253,21 +239,12 @@
|
|
|
253
239
|
"description": "Don't call external APIs in constructors or static blocks",
|
|
254
240
|
"category": "design",
|
|
255
241
|
"severity": "error",
|
|
256
|
-
"languages": [
|
|
257
|
-
"typescript",
|
|
258
|
-
"javascript",
|
|
259
|
-
"dart",
|
|
260
|
-
"kotlin"
|
|
261
|
-
],
|
|
242
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
262
243
|
"analyzer": "./rules/common/C032_no_constructor_api/analyzer.js",
|
|
263
244
|
"config": "./rules/common/C032_no_constructor_api/config.json",
|
|
264
245
|
"version": "1.0.0",
|
|
265
246
|
"status": "stable",
|
|
266
|
-
"tags": [
|
|
267
|
-
"design",
|
|
268
|
-
"constructor",
|
|
269
|
-
"initialization"
|
|
270
|
-
],
|
|
247
|
+
"tags": ["design", "constructor", "initialization"],
|
|
271
248
|
"engineMappings": {
|
|
272
249
|
"eslint": [
|
|
273
250
|
"no-new",
|
|
@@ -281,21 +258,12 @@
|
|
|
281
258
|
"description": "Separate processing logic and data queries in service layer",
|
|
282
259
|
"category": "architecture",
|
|
283
260
|
"severity": "warning",
|
|
284
|
-
"languages": [
|
|
285
|
-
"typescript",
|
|
286
|
-
"javascript",
|
|
287
|
-
"dart",
|
|
288
|
-
"kotlin"
|
|
289
|
-
],
|
|
261
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
290
262
|
"analyzer": "./rules/common/C033_separate_logic_data/analyzer.js",
|
|
291
263
|
"config": "./rules/common/C033_separate_logic_data/config.json",
|
|
292
264
|
"version": "1.0.0",
|
|
293
265
|
"status": "stable",
|
|
294
|
-
"tags": [
|
|
295
|
-
"architecture",
|
|
296
|
-
"separation",
|
|
297
|
-
"service"
|
|
298
|
-
],
|
|
266
|
+
"tags": ["architecture", "separation", "service"],
|
|
299
267
|
"engineMappings": {
|
|
300
268
|
"eslint": [
|
|
301
269
|
"prefer-const",
|
|
@@ -309,21 +277,12 @@
|
|
|
309
277
|
"description": "Limit direct access to global state in domain logic",
|
|
310
278
|
"category": "architecture",
|
|
311
279
|
"severity": "warning",
|
|
312
|
-
"languages": [
|
|
313
|
-
"typescript",
|
|
314
|
-
"javascript",
|
|
315
|
-
"dart",
|
|
316
|
-
"kotlin"
|
|
317
|
-
],
|
|
280
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
318
281
|
"analyzer": "./rules/common/C034_limit_global_state/analyzer.js",
|
|
319
282
|
"config": "./rules/common/C034_limit_global_state/config.json",
|
|
320
283
|
"version": "1.0.0",
|
|
321
284
|
"status": "stable",
|
|
322
|
-
"tags": [
|
|
323
|
-
"architecture",
|
|
324
|
-
"global-state",
|
|
325
|
-
"design"
|
|
326
|
-
],
|
|
285
|
+
"tags": ["architecture", "global-state", "design"],
|
|
327
286
|
"engineMappings": {
|
|
328
287
|
"eslint": [
|
|
329
288
|
"no-global-assign",
|
|
@@ -337,27 +296,14 @@
|
|
|
337
296
|
"description": "When handling errors, must log full information related - structured logging with context",
|
|
338
297
|
"category": "error-handling",
|
|
339
298
|
"severity": "warning",
|
|
340
|
-
"languages": [
|
|
341
|
-
"typescript",
|
|
342
|
-
"javascript",
|
|
343
|
-
"dart",
|
|
344
|
-
"kotlin"
|
|
345
|
-
],
|
|
299
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
346
300
|
"analyzer": "./rules/common/C035_error_logging_context/analyzer.js",
|
|
347
301
|
"config": "./rules/common/C035_error_logging_context/config.json",
|
|
348
302
|
"version": "1.0.0",
|
|
349
303
|
"status": "stable",
|
|
350
|
-
"tags": [
|
|
351
|
-
"logging",
|
|
352
|
-
"error-handling",
|
|
353
|
-
"observability",
|
|
354
|
-
"debugging"
|
|
355
|
-
],
|
|
304
|
+
"tags": ["logging", "error-handling", "observability", "debugging"],
|
|
356
305
|
"engineMappings": {
|
|
357
|
-
"eslint": [
|
|
358
|
-
"no-empty-catch",
|
|
359
|
-
"@typescript-eslint/no-unused-vars"
|
|
360
|
-
]
|
|
306
|
+
"eslint": ["no-empty-catch", "@typescript-eslint/no-unused-vars"]
|
|
361
307
|
}
|
|
362
308
|
},
|
|
363
309
|
"C037": {
|
|
@@ -365,21 +311,12 @@
|
|
|
365
311
|
"description": "API handlers should return standard response objects (not raw strings)",
|
|
366
312
|
"category": "api",
|
|
367
313
|
"severity": "warning",
|
|
368
|
-
"languages": [
|
|
369
|
-
"typescript",
|
|
370
|
-
"javascript",
|
|
371
|
-
"dart",
|
|
372
|
-
"kotlin"
|
|
373
|
-
],
|
|
314
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
374
315
|
"analyzer": "./rules/common/C037_standard_response/analyzer.js",
|
|
375
316
|
"config": "./rules/common/C037_standard_response/config.json",
|
|
376
317
|
"version": "1.0.0",
|
|
377
318
|
"status": "stable",
|
|
378
|
-
"tags": [
|
|
379
|
-
"api",
|
|
380
|
-
"response",
|
|
381
|
-
"standardization"
|
|
382
|
-
],
|
|
319
|
+
"tags": ["api", "response", "standardization"],
|
|
383
320
|
"engineMappings": {
|
|
384
321
|
"eslint": [
|
|
385
322
|
"consistent-return",
|
|
@@ -393,21 +330,12 @@
|
|
|
393
330
|
"description": "Avoid logic depending on file/module loading order",
|
|
394
331
|
"category": "architecture",
|
|
395
332
|
"severity": "warning",
|
|
396
|
-
"languages": [
|
|
397
|
-
"typescript",
|
|
398
|
-
"javascript",
|
|
399
|
-
"dart",
|
|
400
|
-
"kotlin"
|
|
401
|
-
],
|
|
333
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
402
334
|
"analyzer": "./rules/common/C038_no_loading_order/analyzer.js",
|
|
403
335
|
"config": "./rules/common/C038_no_loading_order/config.json",
|
|
404
336
|
"version": "1.0.0",
|
|
405
337
|
"status": "stable",
|
|
406
|
-
"tags": [
|
|
407
|
-
"architecture",
|
|
408
|
-
"loading",
|
|
409
|
-
"dependency"
|
|
410
|
-
],
|
|
338
|
+
"tags": ["architecture", "loading", "dependency"],
|
|
411
339
|
"engineMappings": {
|
|
412
340
|
"eslint": [
|
|
413
341
|
"import/no-dynamic-require",
|
|
@@ -421,21 +349,12 @@
|
|
|
421
349
|
"description": "Don't scatter validation logic across multiple classes",
|
|
422
350
|
"category": "validation",
|
|
423
351
|
"severity": "warning",
|
|
424
|
-
"languages": [
|
|
425
|
-
"typescript",
|
|
426
|
-
"javascript",
|
|
427
|
-
"dart",
|
|
428
|
-
"kotlin"
|
|
429
|
-
],
|
|
352
|
+
"languages": ["typescript", "javascript", "dart", "kotlin"],
|
|
430
353
|
"analyzer": "./rules/common/C040_centralized_validation/analyzer.js",
|
|
431
354
|
"config": "./rules/common/C040_centralized_validation/config.json",
|
|
432
355
|
"version": "1.0.0",
|
|
433
356
|
"status": "stable",
|
|
434
|
-
"tags": [
|
|
435
|
-
"validation",
|
|
436
|
-
"centralization",
|
|
437
|
-
"architecture"
|
|
438
|
-
],
|
|
357
|
+
"tags": ["validation", "centralization", "architecture"],
|
|
439
358
|
"engineMappings": {
|
|
440
359
|
"eslint": [
|
|
441
360
|
"no-duplicate-imports",
|
|
@@ -449,25 +368,14 @@
|
|
|
449
368
|
"description": "Do not use console.log or print in production code",
|
|
450
369
|
"category": "logging",
|
|
451
370
|
"severity": "warning",
|
|
452
|
-
"languages": [
|
|
453
|
-
"typescript",
|
|
454
|
-
"javascript",
|
|
455
|
-
"dart"
|
|
456
|
-
],
|
|
371
|
+
"languages": ["typescript", "javascript", "dart"],
|
|
457
372
|
"analyzer": "./rules/common/C043_no_console_or_print/analyzer.js",
|
|
458
373
|
"version": "1.0.0",
|
|
459
374
|
"status": "stable",
|
|
460
|
-
"tags": [
|
|
461
|
-
"logging",
|
|
462
|
-
"production",
|
|
463
|
-
"debugging",
|
|
464
|
-
"console"
|
|
465
|
-
],
|
|
375
|
+
"tags": ["logging", "production", "debugging", "console"],
|
|
466
376
|
"strategy": {
|
|
467
377
|
"preferred": "regex",
|
|
468
|
-
"fallbacks": [
|
|
469
|
-
"regex"
|
|
470
|
-
],
|
|
378
|
+
"fallbacks": ["regex"],
|
|
471
379
|
"accuracy": {
|
|
472
380
|
"regex": 90
|
|
473
381
|
}
|
|
@@ -478,25 +386,15 @@
|
|
|
478
386
|
"description": "Verify that if there is an error in access control, the system fails securely",
|
|
479
387
|
"category": "security",
|
|
480
388
|
"severity": "error",
|
|
481
|
-
"languages": [
|
|
482
|
-
"typescript",
|
|
483
|
-
"javascript"
|
|
484
|
-
],
|
|
389
|
+
"languages": ["typescript", "javascript"],
|
|
485
390
|
"analyzer": "eslint",
|
|
486
391
|
"eslintRule": "custom/typescript_s001",
|
|
487
392
|
"version": "1.0.0",
|
|
488
393
|
"status": "stable",
|
|
489
|
-
"tags": [
|
|
490
|
-
"security",
|
|
491
|
-
"access-control",
|
|
492
|
-
"fail-safe"
|
|
493
|
-
],
|
|
394
|
+
"tags": ["security", "access-control", "fail-safe"],
|
|
494
395
|
"strategy": {
|
|
495
396
|
"preferred": "regex",
|
|
496
|
-
"fallbacks": [
|
|
497
|
-
"regex",
|
|
498
|
-
"ast"
|
|
499
|
-
],
|
|
397
|
+
"fallbacks": ["regex", "ast"],
|
|
500
398
|
"accuracy": {
|
|
501
399
|
"regex": 85,
|
|
502
400
|
"ast": 90
|
|
@@ -508,71 +406,45 @@
|
|
|
508
406
|
"description": "Insecure Direct Object Reference prevention",
|
|
509
407
|
"category": "security",
|
|
510
408
|
"severity": "error",
|
|
511
|
-
"languages": [
|
|
512
|
-
"typescript",
|
|
513
|
-
"javascript"
|
|
514
|
-
],
|
|
409
|
+
"languages": ["typescript", "javascript"],
|
|
515
410
|
"analyzer": "eslint",
|
|
516
411
|
"eslintRule": "custom/typescript_s002",
|
|
517
412
|
"version": "1.0.0",
|
|
518
413
|
"status": "stable",
|
|
519
|
-
"tags": [
|
|
520
|
-
"security",
|
|
521
|
-
"idor",
|
|
522
|
-
"access-control"
|
|
523
|
-
]
|
|
414
|
+
"tags": ["security", "idor", "access-control"]
|
|
524
415
|
},
|
|
525
416
|
"S003": {
|
|
526
417
|
"name": "No Unvalidated Redirect",
|
|
527
418
|
"description": "Prevent unvalidated redirects and forwards",
|
|
528
419
|
"category": "security",
|
|
529
420
|
"severity": "error",
|
|
530
|
-
"languages": [
|
|
531
|
-
"typescript",
|
|
532
|
-
"javascript"
|
|
533
|
-
],
|
|
421
|
+
"languages": ["typescript", "javascript"],
|
|
534
422
|
"analyzer": "eslint",
|
|
535
423
|
"eslintRule": "custom/typescript_s003",
|
|
536
424
|
"version": "1.0.0",
|
|
537
425
|
"status": "stable",
|
|
538
|
-
"tags": [
|
|
539
|
-
"security",
|
|
540
|
-
"redirect",
|
|
541
|
-
"validation"
|
|
542
|
-
]
|
|
426
|
+
"tags": ["security", "redirect", "validation"]
|
|
543
427
|
},
|
|
544
428
|
"S005": {
|
|
545
429
|
"name": "No Origin Header Authentication",
|
|
546
430
|
"description": "Do not use Origin header for authentication/access control",
|
|
547
431
|
"category": "security",
|
|
548
432
|
"severity": "error",
|
|
549
|
-
"languages": [
|
|
550
|
-
"typescript",
|
|
551
|
-
"javascript"
|
|
552
|
-
],
|
|
433
|
+
"languages": ["typescript", "javascript"],
|
|
553
434
|
"analyzer": "./rules/security/S005_no_origin_auth/analyzer.js",
|
|
554
435
|
"version": "1.0.0",
|
|
555
436
|
"status": "stable",
|
|
556
|
-
"tags": [
|
|
557
|
-
"security",
|
|
558
|
-
"authentication",
|
|
559
|
-
"headers"
|
|
560
|
-
],
|
|
437
|
+
"tags": ["security", "authentication", "headers"],
|
|
561
438
|
"strategy": {
|
|
562
439
|
"preferred": "ast",
|
|
563
|
-
"fallbacks": [
|
|
564
|
-
"ast",
|
|
565
|
-
"regex"
|
|
566
|
-
],
|
|
440
|
+
"fallbacks": ["ast", "regex"],
|
|
567
441
|
"accuracy": {
|
|
568
442
|
"ast": 95,
|
|
569
443
|
"regex": 85
|
|
570
444
|
}
|
|
571
445
|
},
|
|
572
446
|
"engineMappings": {
|
|
573
|
-
"eslint": [
|
|
574
|
-
"custom/typescript_s005"
|
|
575
|
-
]
|
|
447
|
+
"eslint": ["custom/typescript_s005"]
|
|
576
448
|
}
|
|
577
449
|
},
|
|
578
450
|
"S006": {
|
|
@@ -580,19 +452,12 @@
|
|
|
580
452
|
"description": "Do not send recovery or activation codes in plaintext",
|
|
581
453
|
"category": "security",
|
|
582
454
|
"severity": "error",
|
|
583
|
-
"languages": [
|
|
584
|
-
"All languages"
|
|
585
|
-
],
|
|
455
|
+
"languages": ["All languages"],
|
|
586
456
|
"analyzer": "./rules/security/S006_no_plaintext_recovery_codes/analyzer.js",
|
|
587
457
|
"config": "./rules/security/S006_no_plaintext_recovery_codes/config.json",
|
|
588
458
|
"version": "1.0.0",
|
|
589
459
|
"status": "stable",
|
|
590
|
-
"tags": [
|
|
591
|
-
"security",
|
|
592
|
-
"owasp",
|
|
593
|
-
"cryptographic-failures",
|
|
594
|
-
"authentication"
|
|
595
|
-
],
|
|
460
|
+
"tags": ["security", "owasp", "cryptographic-failures", "authentication"],
|
|
596
461
|
"strategy": {
|
|
597
462
|
"preferred": "regex",
|
|
598
463
|
"fallback": "heuristic"
|
|
@@ -630,10 +495,7 @@
|
|
|
630
495
|
],
|
|
631
496
|
"strategy": {
|
|
632
497
|
"preferred": "heuristic",
|
|
633
|
-
"fallbacks": [
|
|
634
|
-
"heuristic",
|
|
635
|
-
"regex"
|
|
636
|
-
],
|
|
498
|
+
"fallbacks": ["heuristic", "regex"],
|
|
637
499
|
"accuracy": {
|
|
638
500
|
"heuristic": 90,
|
|
639
501
|
"regex": 75
|
|
@@ -648,158 +510,99 @@
|
|
|
648
510
|
"description": "Ensure cryptographic agility and algorithm flexibility",
|
|
649
511
|
"category": "security",
|
|
650
512
|
"severity": "error",
|
|
651
|
-
"languages": [
|
|
652
|
-
"typescript",
|
|
653
|
-
"javascript"
|
|
654
|
-
],
|
|
513
|
+
"languages": ["typescript", "javascript"],
|
|
655
514
|
"analyzer": "eslint",
|
|
656
515
|
"eslintRule": "custom/typescript_s008",
|
|
657
516
|
"version": "1.0.0",
|
|
658
517
|
"status": "stable",
|
|
659
|
-
"tags": [
|
|
660
|
-
"security",
|
|
661
|
-
"cryptography",
|
|
662
|
-
"agility"
|
|
663
|
-
]
|
|
518
|
+
"tags": ["security", "cryptography", "agility"]
|
|
664
519
|
},
|
|
665
520
|
"S009": {
|
|
666
521
|
"name": "No Insecure Crypto",
|
|
667
522
|
"description": "Prevent usage of insecure cryptographic methods",
|
|
668
523
|
"category": "security",
|
|
669
524
|
"severity": "error",
|
|
670
|
-
"languages": [
|
|
671
|
-
"typescript",
|
|
672
|
-
"javascript"
|
|
673
|
-
],
|
|
525
|
+
"languages": ["typescript", "javascript"],
|
|
674
526
|
"analyzer": "eslint",
|
|
675
527
|
"eslintRule": "custom/typescript_s009",
|
|
676
528
|
"version": "1.0.0",
|
|
677
529
|
"status": "stable",
|
|
678
|
-
"tags": [
|
|
679
|
-
"security",
|
|
680
|
-
"cryptography",
|
|
681
|
-
"insecure"
|
|
682
|
-
]
|
|
530
|
+
"tags": ["security", "cryptography", "insecure"]
|
|
683
531
|
},
|
|
684
532
|
"S010": {
|
|
685
533
|
"name": "No Insecure Random in Sensitive Context",
|
|
686
534
|
"description": "Prevent insecure random generator usage in sensitive contexts",
|
|
687
535
|
"category": "security",
|
|
688
536
|
"severity": "error",
|
|
689
|
-
"languages": [
|
|
690
|
-
"typescript",
|
|
691
|
-
"javascript"
|
|
692
|
-
],
|
|
537
|
+
"languages": ["typescript", "javascript"],
|
|
693
538
|
"analyzer": "eslint",
|
|
694
539
|
"eslintRule": "custom/typescript_s010",
|
|
695
540
|
"version": "1.0.0",
|
|
696
541
|
"status": "stable",
|
|
697
|
-
"tags": [
|
|
698
|
-
"security",
|
|
699
|
-
"random",
|
|
700
|
-
"sensitive"
|
|
701
|
-
]
|
|
542
|
+
"tags": ["security", "random", "sensitive"]
|
|
702
543
|
},
|
|
703
544
|
"S011": {
|
|
704
545
|
"name": "No Insecure UUID",
|
|
705
546
|
"description": "UUID must be version 4 and use CSPRNG",
|
|
706
547
|
"category": "security",
|
|
707
548
|
"severity": "error",
|
|
708
|
-
"languages": [
|
|
709
|
-
"typescript",
|
|
710
|
-
"javascript"
|
|
711
|
-
],
|
|
549
|
+
"languages": ["typescript", "javascript"],
|
|
712
550
|
"analyzer": "eslint",
|
|
713
551
|
"eslintRule": "custom/typescript_s011",
|
|
714
552
|
"version": "1.0.0",
|
|
715
553
|
"status": "stable",
|
|
716
|
-
"tags": [
|
|
717
|
-
"security",
|
|
718
|
-
"uuid",
|
|
719
|
-
"random"
|
|
720
|
-
]
|
|
554
|
+
"tags": ["security", "uuid", "random"]
|
|
721
555
|
},
|
|
722
556
|
"S012": {
|
|
723
557
|
"name": "No Hardcoded Secrets",
|
|
724
558
|
"description": "Prevent hardcoded secrets in source code",
|
|
725
559
|
"category": "security",
|
|
726
560
|
"severity": "error",
|
|
727
|
-
"languages": [
|
|
728
|
-
"typescript",
|
|
729
|
-
"javascript"
|
|
730
|
-
],
|
|
561
|
+
"languages": ["typescript", "javascript"],
|
|
731
562
|
"analyzer": "eslint",
|
|
732
563
|
"eslintRule": "custom/typescript_s012",
|
|
733
564
|
"version": "1.0.0",
|
|
734
565
|
"status": "stable",
|
|
735
|
-
"tags": [
|
|
736
|
-
"security",
|
|
737
|
-
"secrets",
|
|
738
|
-
"hardcoded"
|
|
739
|
-
]
|
|
566
|
+
"tags": ["security", "secrets", "hardcoded"]
|
|
740
567
|
},
|
|
741
568
|
"S013": {
|
|
742
569
|
"name": "Verify TLS Connection",
|
|
743
570
|
"description": "Verify that TLS connections are properly established and validated",
|
|
744
571
|
"category": "security",
|
|
745
572
|
"severity": "error",
|
|
746
|
-
"languages": [
|
|
747
|
-
"typescript",
|
|
748
|
-
"javascript"
|
|
749
|
-
],
|
|
573
|
+
"languages": ["typescript", "javascript"],
|
|
750
574
|
"analyzer": "eslint",
|
|
751
575
|
"eslintRule": "custom/typescript_s013",
|
|
752
576
|
"version": "1.0.0",
|
|
753
577
|
"status": "stable",
|
|
754
|
-
"tags": [
|
|
755
|
-
"security",
|
|
756
|
-
"tls",
|
|
757
|
-
"connection"
|
|
758
|
-
]
|
|
578
|
+
"tags": ["security", "tls", "connection"]
|
|
759
579
|
},
|
|
760
580
|
"S014": {
|
|
761
581
|
"name": "Insecure TLS Version",
|
|
762
582
|
"description": "Prevent usage of insecure TLS versions",
|
|
763
583
|
"category": "security",
|
|
764
584
|
"severity": "error",
|
|
765
|
-
"languages": [
|
|
766
|
-
"typescript",
|
|
767
|
-
"javascript"
|
|
768
|
-
],
|
|
585
|
+
"languages": ["typescript", "javascript"],
|
|
769
586
|
"analyzer": "eslint",
|
|
770
587
|
"eslintRule": "custom/typescript_s014",
|
|
771
588
|
"version": "1.0.0",
|
|
772
589
|
"status": "stable",
|
|
773
|
-
"tags": [
|
|
774
|
-
"security",
|
|
775
|
-
"tls",
|
|
776
|
-
"encryption"
|
|
777
|
-
]
|
|
590
|
+
"tags": ["security", "tls", "encryption"]
|
|
778
591
|
},
|
|
779
592
|
"S015": {
|
|
780
593
|
"name": "Insecure TLS Certificate",
|
|
781
594
|
"description": "Prevent usage of insecure TLS certificate configurations",
|
|
782
595
|
"category": "security",
|
|
783
596
|
"severity": "error",
|
|
784
|
-
"languages": [
|
|
785
|
-
"typescript",
|
|
786
|
-
"javascript"
|
|
787
|
-
],
|
|
597
|
+
"languages": ["typescript", "javascript"],
|
|
788
598
|
"analyzer": "eslint",
|
|
789
599
|
"eslintRule": "custom/typescript_s015",
|
|
790
600
|
"version": "1.0.0",
|
|
791
601
|
"status": "stable",
|
|
792
|
-
"tags": [
|
|
793
|
-
"security",
|
|
794
|
-
"tls",
|
|
795
|
-
"certificates"
|
|
796
|
-
],
|
|
602
|
+
"tags": ["security", "tls", "certificates"],
|
|
797
603
|
"strategy": {
|
|
798
604
|
"preferred": "ast",
|
|
799
|
-
"fallbacks": [
|
|
800
|
-
"ast",
|
|
801
|
-
"regex"
|
|
802
|
-
],
|
|
605
|
+
"fallbacks": ["ast", "regex"],
|
|
803
606
|
"accuracy": {
|
|
804
607
|
"ast": 95,
|
|
805
608
|
"regex": 80
|
|
@@ -811,139 +614,95 @@
|
|
|
811
614
|
"description": "Prevent sensitive data in URL query parameters",
|
|
812
615
|
"category": "security",
|
|
813
616
|
"severity": "error",
|
|
814
|
-
"languages": [
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
],
|
|
818
|
-
"analyzer": "eslint",
|
|
819
|
-
"eslintRule": "custom/typescript_s016",
|
|
617
|
+
"languages": ["typescript", "javascript"],
|
|
618
|
+
"analyzer": "./rules/security/S016_no_sensitive_querystring/analyzer.js",
|
|
619
|
+
"config": "./rules/security/S016_no_sensitive_querystring/config.json",
|
|
820
620
|
"version": "1.0.0",
|
|
821
621
|
"status": "stable",
|
|
822
|
-
"tags": [
|
|
823
|
-
|
|
824
|
-
"
|
|
825
|
-
"
|
|
826
|
-
|
|
622
|
+
"tags": ["security", "sensitive-data", "url"],
|
|
623
|
+
"strategy": {
|
|
624
|
+
"preferred": "ast",
|
|
625
|
+
"fallbacks": ["ast", "regex"],
|
|
626
|
+
"accuracy": {
|
|
627
|
+
"ast": 95,
|
|
628
|
+
"regex": 80
|
|
629
|
+
}
|
|
630
|
+
}
|
|
827
631
|
},
|
|
828
632
|
"S017": {
|
|
829
633
|
"name": "No SQL Injection",
|
|
830
634
|
"description": "Prevent SQL injection vulnerabilities",
|
|
831
635
|
"category": "security",
|
|
832
636
|
"severity": "error",
|
|
833
|
-
"languages": [
|
|
834
|
-
"typescript",
|
|
835
|
-
"javascript"
|
|
836
|
-
],
|
|
637
|
+
"languages": ["typescript", "javascript"],
|
|
837
638
|
"analyzer": "eslint",
|
|
838
639
|
"eslintRule": "custom/typescript_s017",
|
|
839
640
|
"version": "1.0.0",
|
|
840
641
|
"status": "stable",
|
|
841
|
-
"tags": [
|
|
842
|
-
"security",
|
|
843
|
-
"sql-injection",
|
|
844
|
-
"database"
|
|
845
|
-
]
|
|
642
|
+
"tags": ["security", "sql-injection", "database"]
|
|
846
643
|
},
|
|
847
644
|
"S018": {
|
|
848
645
|
"name": "Positive Input Validation",
|
|
849
646
|
"description": "Ensure positive input validation patterns",
|
|
850
647
|
"category": "security",
|
|
851
648
|
"severity": "error",
|
|
852
|
-
"languages": [
|
|
853
|
-
"typescript",
|
|
854
|
-
"javascript"
|
|
855
|
-
],
|
|
649
|
+
"languages": ["typescript", "javascript"],
|
|
856
650
|
"analyzer": "eslint",
|
|
857
651
|
"eslintRule": "custom/typescript_s018",
|
|
858
652
|
"version": "1.0.0",
|
|
859
653
|
"status": "stable",
|
|
860
|
-
"tags": [
|
|
861
|
-
"security",
|
|
862
|
-
"validation",
|
|
863
|
-
"input"
|
|
864
|
-
]
|
|
654
|
+
"tags": ["security", "validation", "input"]
|
|
865
655
|
},
|
|
866
656
|
"S019": {
|
|
867
657
|
"name": "No Raw User Input in Email",
|
|
868
658
|
"description": "Prevent raw user input in email content",
|
|
869
659
|
"category": "security",
|
|
870
660
|
"severity": "error",
|
|
871
|
-
"languages": [
|
|
872
|
-
"typescript",
|
|
873
|
-
"javascript"
|
|
874
|
-
],
|
|
661
|
+
"languages": ["typescript", "javascript"],
|
|
875
662
|
"analyzer": "eslint",
|
|
876
663
|
"eslintRule": "custom/typescript_s019",
|
|
877
664
|
"version": "1.0.0",
|
|
878
665
|
"status": "stable",
|
|
879
|
-
"tags": [
|
|
880
|
-
"security",
|
|
881
|
-
"email",
|
|
882
|
-
"injection"
|
|
883
|
-
]
|
|
666
|
+
"tags": ["security", "email", "injection"]
|
|
884
667
|
},
|
|
885
668
|
"S020": {
|
|
886
669
|
"name": "No Eval Dynamic Execution",
|
|
887
670
|
"description": "Prevent eval and dynamic code execution",
|
|
888
671
|
"category": "security",
|
|
889
672
|
"severity": "error",
|
|
890
|
-
"languages": [
|
|
891
|
-
"typescript",
|
|
892
|
-
"javascript"
|
|
893
|
-
],
|
|
673
|
+
"languages": ["typescript", "javascript"],
|
|
894
674
|
"analyzer": "eslint",
|
|
895
675
|
"eslintRule": "custom/typescript_s020",
|
|
896
676
|
"version": "1.0.0",
|
|
897
677
|
"status": "stable",
|
|
898
|
-
"tags": [
|
|
899
|
-
"security",
|
|
900
|
-
"eval",
|
|
901
|
-
"dynamic-execution"
|
|
902
|
-
]
|
|
678
|
+
"tags": ["security", "eval", "dynamic-execution"]
|
|
903
679
|
},
|
|
904
680
|
"S022": {
|
|
905
681
|
"name": "Output Encoding Required",
|
|
906
682
|
"description": "Require output encoding for user input",
|
|
907
683
|
"category": "security",
|
|
908
684
|
"severity": "error",
|
|
909
|
-
"languages": [
|
|
910
|
-
"typescript",
|
|
911
|
-
"javascript"
|
|
912
|
-
],
|
|
685
|
+
"languages": ["typescript", "javascript"],
|
|
913
686
|
"analyzer": "eslint",
|
|
914
687
|
"eslintRule": "custom/typescript_s022",
|
|
915
688
|
"version": "1.0.0",
|
|
916
689
|
"status": "stable",
|
|
917
|
-
"tags": [
|
|
918
|
-
"security",
|
|
919
|
-
"encoding",
|
|
920
|
-
"xss"
|
|
921
|
-
]
|
|
690
|
+
"tags": ["security", "encoding", "xss"]
|
|
922
691
|
},
|
|
923
692
|
"S023": {
|
|
924
693
|
"name": "No JSON Injection",
|
|
925
694
|
"description": "Prevent JSON injection vulnerabilities",
|
|
926
695
|
"category": "security",
|
|
927
696
|
"severity": "error",
|
|
928
|
-
"languages": [
|
|
929
|
-
"typescript",
|
|
930
|
-
"javascript"
|
|
931
|
-
],
|
|
697
|
+
"languages": ["typescript", "javascript"],
|
|
932
698
|
"analyzer": "eslint",
|
|
933
699
|
"eslintRule": "custom/typescript_s023",
|
|
934
700
|
"version": "1.0.0",
|
|
935
701
|
"status": "stable",
|
|
936
|
-
"tags": [
|
|
937
|
-
"security",
|
|
938
|
-
"json",
|
|
939
|
-
"injection"
|
|
940
|
-
],
|
|
702
|
+
"tags": ["security", "json", "injection"],
|
|
941
703
|
"strategy": {
|
|
942
704
|
"preferred": "ast",
|
|
943
|
-
"fallbacks": [
|
|
944
|
-
"ast",
|
|
945
|
-
"regex"
|
|
946
|
-
],
|
|
705
|
+
"fallbacks": ["ast", "regex"],
|
|
947
706
|
"accuracy": {
|
|
948
707
|
"ast": 95,
|
|
949
708
|
"regex": 60
|
|
@@ -955,494 +714,312 @@
|
|
|
955
714
|
"description": "Require server-side input validation",
|
|
956
715
|
"category": "security",
|
|
957
716
|
"severity": "error",
|
|
958
|
-
"languages": [
|
|
959
|
-
"typescript",
|
|
960
|
-
"javascript"
|
|
961
|
-
],
|
|
717
|
+
"languages": ["typescript", "javascript"],
|
|
962
718
|
"analyzer": "eslint",
|
|
963
719
|
"eslintRule": "custom/typescript_s025",
|
|
964
720
|
"version": "1.0.0",
|
|
965
721
|
"status": "stable",
|
|
966
|
-
"tags": [
|
|
967
|
-
"security",
|
|
968
|
-
"validation",
|
|
969
|
-
"server-side"
|
|
970
|
-
]
|
|
722
|
+
"tags": ["security", "validation", "server-side"]
|
|
971
723
|
},
|
|
972
724
|
"S026": {
|
|
973
725
|
"name": "JSON Schema Validation",
|
|
974
726
|
"description": "Require JSON schema validation",
|
|
975
727
|
"category": "security",
|
|
976
728
|
"severity": "warning",
|
|
977
|
-
"languages": [
|
|
978
|
-
"typescript",
|
|
979
|
-
"javascript"
|
|
980
|
-
],
|
|
729
|
+
"languages": ["typescript", "javascript"],
|
|
981
730
|
"analyzer": "eslint",
|
|
982
731
|
"eslintRule": "custom/typescript_s026",
|
|
983
732
|
"version": "1.0.0",
|
|
984
733
|
"status": "stable",
|
|
985
|
-
"tags": [
|
|
986
|
-
"security",
|
|
987
|
-
"validation",
|
|
988
|
-
"json-schema"
|
|
989
|
-
]
|
|
734
|
+
"tags": ["security", "validation", "json-schema"]
|
|
990
735
|
},
|
|
991
736
|
"S027": {
|
|
992
737
|
"name": "No Hardcoded Secrets Advanced",
|
|
993
738
|
"description": "Advanced detection of hardcoded secrets",
|
|
994
739
|
"category": "security",
|
|
995
740
|
"severity": "error",
|
|
996
|
-
"languages": [
|
|
997
|
-
"typescript",
|
|
998
|
-
"javascript"
|
|
999
|
-
],
|
|
741
|
+
"languages": ["typescript", "javascript"],
|
|
1000
742
|
"analyzer": "eslint",
|
|
1001
743
|
"eslintRule": "custom/typescript_s027",
|
|
1002
744
|
"version": "1.0.0",
|
|
1003
745
|
"status": "stable",
|
|
1004
|
-
"tags": [
|
|
1005
|
-
"security",
|
|
1006
|
-
"secrets",
|
|
1007
|
-
"hardcoded"
|
|
1008
|
-
]
|
|
746
|
+
"tags": ["security", "secrets", "hardcoded"]
|
|
1009
747
|
},
|
|
1010
748
|
"S029": {
|
|
1011
749
|
"name": "Require CSRF Protection",
|
|
1012
750
|
"description": "Require CSRF protection for state-changing operations",
|
|
1013
751
|
"category": "security",
|
|
1014
752
|
"severity": "error",
|
|
1015
|
-
"languages": [
|
|
1016
|
-
"typescript",
|
|
1017
|
-
"javascript"
|
|
1018
|
-
],
|
|
753
|
+
"languages": ["typescript", "javascript"],
|
|
1019
754
|
"analyzer": "eslint",
|
|
1020
755
|
"eslintRule": "custom/typescript_s029",
|
|
1021
756
|
"version": "1.0.0",
|
|
1022
757
|
"status": "stable",
|
|
1023
|
-
"tags": [
|
|
1024
|
-
"security",
|
|
1025
|
-
"csrf",
|
|
1026
|
-
"protection"
|
|
1027
|
-
]
|
|
758
|
+
"tags": ["security", "csrf", "protection"]
|
|
1028
759
|
},
|
|
1029
760
|
"S030": {
|
|
1030
761
|
"name": "No Directory Browsing",
|
|
1031
762
|
"description": "Prevent directory browsing vulnerabilities",
|
|
1032
763
|
"category": "security",
|
|
1033
764
|
"severity": "error",
|
|
1034
|
-
"languages": [
|
|
1035
|
-
"typescript",
|
|
1036
|
-
"javascript"
|
|
1037
|
-
],
|
|
765
|
+
"languages": ["typescript", "javascript"],
|
|
1038
766
|
"analyzer": "eslint",
|
|
1039
767
|
"eslintRule": "custom/typescript_s030",
|
|
1040
768
|
"version": "1.0.0",
|
|
1041
769
|
"status": "stable",
|
|
1042
|
-
"tags": [
|
|
1043
|
-
"security",
|
|
1044
|
-
"directory-browsing",
|
|
1045
|
-
"information-disclosure"
|
|
1046
|
-
]
|
|
770
|
+
"tags": ["security", "directory-browsing", "information-disclosure"]
|
|
1047
771
|
},
|
|
1048
772
|
"S033": {
|
|
1049
773
|
"name": "Require SameSite Cookie",
|
|
1050
774
|
"description": "Require SameSite attribute for cookies",
|
|
1051
775
|
"category": "security",
|
|
1052
776
|
"severity": "error",
|
|
1053
|
-
"languages": [
|
|
1054
|
-
"typescript",
|
|
1055
|
-
"javascript"
|
|
1056
|
-
],
|
|
777
|
+
"languages": ["typescript", "javascript"],
|
|
1057
778
|
"analyzer": "eslint",
|
|
1058
779
|
"eslintRule": "custom/typescript_s033",
|
|
1059
780
|
"version": "1.0.0",
|
|
1060
781
|
"status": "stable",
|
|
1061
|
-
"tags": [
|
|
1062
|
-
"security",
|
|
1063
|
-
"cookies",
|
|
1064
|
-
"samesite"
|
|
1065
|
-
]
|
|
782
|
+
"tags": ["security", "cookies", "samesite"]
|
|
1066
783
|
},
|
|
1067
784
|
"S034": {
|
|
1068
785
|
"name": "Require Host Cookie Prefix",
|
|
1069
786
|
"description": "Require __Host- prefix for secure cookies",
|
|
1070
787
|
"category": "security",
|
|
1071
788
|
"severity": "error",
|
|
1072
|
-
"languages": [
|
|
1073
|
-
"typescript",
|
|
1074
|
-
"javascript"
|
|
1075
|
-
],
|
|
789
|
+
"languages": ["typescript", "javascript"],
|
|
1076
790
|
"analyzer": "eslint",
|
|
1077
791
|
"eslintRule": "custom/typescript_s034",
|
|
1078
792
|
"version": "1.0.0",
|
|
1079
793
|
"status": "stable",
|
|
1080
|
-
"tags": [
|
|
1081
|
-
"security",
|
|
1082
|
-
"cookies",
|
|
1083
|
-
"host-prefix"
|
|
1084
|
-
]
|
|
794
|
+
"tags": ["security", "cookies", "host-prefix"]
|
|
1085
795
|
},
|
|
1086
796
|
"S035": {
|
|
1087
797
|
"name": "Cookie Specific Path",
|
|
1088
798
|
"description": "Require specific path for sensitive cookies",
|
|
1089
799
|
"category": "security",
|
|
1090
800
|
"severity": "error",
|
|
1091
|
-
"languages": [
|
|
1092
|
-
"typescript",
|
|
1093
|
-
"javascript"
|
|
1094
|
-
],
|
|
801
|
+
"languages": ["typescript", "javascript"],
|
|
1095
802
|
"analyzer": "eslint",
|
|
1096
803
|
"eslintRule": "custom/typescript_s035",
|
|
1097
804
|
"version": "1.0.0",
|
|
1098
805
|
"status": "stable",
|
|
1099
|
-
"tags": [
|
|
1100
|
-
"security",
|
|
1101
|
-
"cookies",
|
|
1102
|
-
"path"
|
|
1103
|
-
]
|
|
806
|
+
"tags": ["security", "cookies", "path"]
|
|
1104
807
|
},
|
|
1105
808
|
"S036": {
|
|
1106
809
|
"name": "No Unsafe File Include",
|
|
1107
810
|
"description": "Prevent unsafe file inclusion vulnerabilities",
|
|
1108
811
|
"category": "security",
|
|
1109
812
|
"severity": "error",
|
|
1110
|
-
"languages": [
|
|
1111
|
-
"typescript",
|
|
1112
|
-
"javascript"
|
|
1113
|
-
],
|
|
813
|
+
"languages": ["typescript", "javascript"],
|
|
1114
814
|
"analyzer": "eslint",
|
|
1115
815
|
"eslintRule": "custom/typescript_s036",
|
|
1116
816
|
"version": "1.0.0",
|
|
1117
817
|
"status": "stable",
|
|
1118
|
-
"tags": [
|
|
1119
|
-
"security",
|
|
1120
|
-
"file-inclusion",
|
|
1121
|
-
"path-traversal"
|
|
1122
|
-
]
|
|
818
|
+
"tags": ["security", "file-inclusion", "path-traversal"]
|
|
1123
819
|
},
|
|
1124
820
|
"S037": {
|
|
1125
821
|
"name": "Require Anti Cache Headers",
|
|
1126
822
|
"description": "Require anti-cache headers for sensitive content",
|
|
1127
823
|
"category": "security",
|
|
1128
824
|
"severity": "warning",
|
|
1129
|
-
"languages": [
|
|
1130
|
-
"typescript",
|
|
1131
|
-
"javascript"
|
|
1132
|
-
],
|
|
825
|
+
"languages": ["typescript", "javascript"],
|
|
1133
826
|
"analyzer": "eslint",
|
|
1134
827
|
"eslintRule": "custom/typescript_s037",
|
|
1135
828
|
"version": "1.0.0",
|
|
1136
829
|
"status": "stable",
|
|
1137
|
-
"tags": [
|
|
1138
|
-
"security",
|
|
1139
|
-
"caching",
|
|
1140
|
-
"headers"
|
|
1141
|
-
]
|
|
830
|
+
"tags": ["security", "caching", "headers"]
|
|
1142
831
|
},
|
|
1143
832
|
"S038": {
|
|
1144
833
|
"name": "No Version Disclosure",
|
|
1145
834
|
"description": "Prevent version information disclosure",
|
|
1146
835
|
"category": "security",
|
|
1147
836
|
"severity": "warning",
|
|
1148
|
-
"languages": [
|
|
1149
|
-
"typescript",
|
|
1150
|
-
"javascript"
|
|
1151
|
-
],
|
|
837
|
+
"languages": ["typescript", "javascript"],
|
|
1152
838
|
"analyzer": "eslint",
|
|
1153
839
|
"eslintRule": "custom/typescript_s038",
|
|
1154
840
|
"version": "1.0.0",
|
|
1155
841
|
"status": "stable",
|
|
1156
|
-
"tags": [
|
|
1157
|
-
"security",
|
|
1158
|
-
"information-disclosure",
|
|
1159
|
-
"version"
|
|
1160
|
-
]
|
|
842
|
+
"tags": ["security", "information-disclosure", "version"]
|
|
1161
843
|
},
|
|
1162
844
|
"S039": {
|
|
1163
845
|
"name": "No Session Token in URL",
|
|
1164
846
|
"description": "Prevent session tokens in URL parameters",
|
|
1165
847
|
"category": "security",
|
|
1166
848
|
"severity": "error",
|
|
1167
|
-
"languages": [
|
|
1168
|
-
"typescript",
|
|
1169
|
-
"javascript"
|
|
1170
|
-
],
|
|
849
|
+
"languages": ["typescript", "javascript"],
|
|
1171
850
|
"analyzer": "eslint",
|
|
1172
851
|
"eslintRule": "custom/typescript_s039",
|
|
1173
852
|
"version": "1.0.0",
|
|
1174
853
|
"status": "stable",
|
|
1175
|
-
"tags": [
|
|
1176
|
-
"security",
|
|
1177
|
-
"session",
|
|
1178
|
-
"url"
|
|
1179
|
-
]
|
|
854
|
+
"tags": ["security", "session", "url"]
|
|
1180
855
|
},
|
|
1181
856
|
"S041": {
|
|
1182
857
|
"name": "Require Session Invalidate on Logout",
|
|
1183
858
|
"description": "Require session invalidation on logout",
|
|
1184
859
|
"category": "security",
|
|
1185
860
|
"severity": "error",
|
|
1186
|
-
"languages": [
|
|
1187
|
-
"typescript",
|
|
1188
|
-
"javascript"
|
|
1189
|
-
],
|
|
861
|
+
"languages": ["typescript", "javascript"],
|
|
1190
862
|
"analyzer": "eslint",
|
|
1191
863
|
"eslintRule": "custom/typescript_s041",
|
|
1192
864
|
"version": "1.0.0",
|
|
1193
865
|
"status": "stable",
|
|
1194
|
-
"tags": [
|
|
1195
|
-
"security",
|
|
1196
|
-
"session",
|
|
1197
|
-
"logout"
|
|
1198
|
-
]
|
|
866
|
+
"tags": ["security", "session", "logout"]
|
|
1199
867
|
},
|
|
1200
868
|
"S042": {
|
|
1201
869
|
"name": "Require Periodic Reauthentication",
|
|
1202
870
|
"description": "Require periodic re-authentication for sensitive operations",
|
|
1203
871
|
"category": "security",
|
|
1204
872
|
"severity": "error",
|
|
1205
|
-
"languages": [
|
|
1206
|
-
"typescript",
|
|
1207
|
-
"javascript"
|
|
1208
|
-
],
|
|
873
|
+
"languages": ["typescript", "javascript"],
|
|
1209
874
|
"analyzer": "eslint",
|
|
1210
875
|
"eslintRule": "custom/typescript_s042",
|
|
1211
876
|
"version": "1.0.0",
|
|
1212
877
|
"status": "stable",
|
|
1213
|
-
"tags": [
|
|
1214
|
-
"security",
|
|
1215
|
-
"authentication",
|
|
1216
|
-
"periodic"
|
|
1217
|
-
]
|
|
878
|
+
"tags": ["security", "authentication", "periodic"]
|
|
1218
879
|
},
|
|
1219
880
|
"S043": {
|
|
1220
881
|
"name": "Terminate Sessions on Password Change",
|
|
1221
882
|
"description": "Terminate all sessions when password changes",
|
|
1222
883
|
"category": "security",
|
|
1223
884
|
"severity": "error",
|
|
1224
|
-
"languages": [
|
|
1225
|
-
"typescript",
|
|
1226
|
-
"javascript"
|
|
1227
|
-
],
|
|
885
|
+
"languages": ["typescript", "javascript"],
|
|
1228
886
|
"analyzer": "eslint",
|
|
1229
887
|
"eslintRule": "custom/typescript_s043",
|
|
1230
888
|
"version": "1.0.0",
|
|
1231
889
|
"status": "stable",
|
|
1232
|
-
"tags": [
|
|
1233
|
-
"security",
|
|
1234
|
-
"session",
|
|
1235
|
-
"password"
|
|
1236
|
-
]
|
|
890
|
+
"tags": ["security", "session", "password"]
|
|
1237
891
|
},
|
|
1238
892
|
"S044": {
|
|
1239
893
|
"name": "Require Full Session for Sensitive Operations",
|
|
1240
894
|
"description": "Require full session validation for sensitive operations",
|
|
1241
895
|
"category": "security",
|
|
1242
896
|
"severity": "error",
|
|
1243
|
-
"languages": [
|
|
1244
|
-
"typescript",
|
|
1245
|
-
"javascript"
|
|
1246
|
-
],
|
|
897
|
+
"languages": ["typescript", "javascript"],
|
|
1247
898
|
"analyzer": "eslint",
|
|
1248
899
|
"eslintRule": "custom/typescript_s044",
|
|
1249
900
|
"version": "1.0.0",
|
|
1250
901
|
"status": "stable",
|
|
1251
|
-
"tags": [
|
|
1252
|
-
"security",
|
|
1253
|
-
"session",
|
|
1254
|
-
"validation"
|
|
1255
|
-
]
|
|
902
|
+
"tags": ["security", "session", "validation"]
|
|
1256
903
|
},
|
|
1257
904
|
"S045": {
|
|
1258
905
|
"name": "Anti Automation Controls",
|
|
1259
906
|
"description": "Implement anti-automation controls",
|
|
1260
907
|
"category": "security",
|
|
1261
908
|
"severity": "warning",
|
|
1262
|
-
"languages": [
|
|
1263
|
-
"typescript",
|
|
1264
|
-
"javascript"
|
|
1265
|
-
],
|
|
909
|
+
"languages": ["typescript", "javascript"],
|
|
1266
910
|
"analyzer": "eslint",
|
|
1267
911
|
"eslintRule": "custom/typescript_s045",
|
|
1268
912
|
"version": "1.0.0",
|
|
1269
913
|
"status": "stable",
|
|
1270
|
-
"tags": [
|
|
1271
|
-
"security",
|
|
1272
|
-
"automation",
|
|
1273
|
-
"protection"
|
|
1274
|
-
]
|
|
914
|
+
"tags": ["security", "automation", "protection"]
|
|
1275
915
|
},
|
|
1276
916
|
"S046": {
|
|
1277
917
|
"name": "Secure Notification on Auth Change",
|
|
1278
918
|
"description": "Require secure notification on authentication changes",
|
|
1279
919
|
"category": "security",
|
|
1280
920
|
"severity": "warning",
|
|
1281
|
-
"languages": [
|
|
1282
|
-
"typescript",
|
|
1283
|
-
"javascript"
|
|
1284
|
-
],
|
|
921
|
+
"languages": ["typescript", "javascript"],
|
|
1285
922
|
"analyzer": "eslint",
|
|
1286
923
|
"eslintRule": "custom/typescript_s046",
|
|
1287
924
|
"version": "1.0.0",
|
|
1288
925
|
"status": "stable",
|
|
1289
|
-
"tags": [
|
|
1290
|
-
"security",
|
|
1291
|
-
"notification",
|
|
1292
|
-
"authentication"
|
|
1293
|
-
]
|
|
926
|
+
"tags": ["security", "notification", "authentication"]
|
|
1294
927
|
},
|
|
1295
928
|
"S047": {
|
|
1296
929
|
"name": "Secure Random Password Generation",
|
|
1297
930
|
"description": "Require secure and random initial password generation",
|
|
1298
931
|
"category": "security",
|
|
1299
932
|
"severity": "error",
|
|
1300
|
-
"languages": [
|
|
1301
|
-
"typescript",
|
|
1302
|
-
"javascript"
|
|
1303
|
-
],
|
|
933
|
+
"languages": ["typescript", "javascript"],
|
|
1304
934
|
"analyzer": "eslint",
|
|
1305
935
|
"eslintRule": "custom/typescript_s047",
|
|
1306
936
|
"version": "1.0.0",
|
|
1307
937
|
"status": "stable",
|
|
1308
|
-
"tags": [
|
|
1309
|
-
"security",
|
|
1310
|
-
"password",
|
|
1311
|
-
"random"
|
|
1312
|
-
]
|
|
938
|
+
"tags": ["security", "password", "random"]
|
|
1313
939
|
},
|
|
1314
940
|
"S048": {
|
|
1315
941
|
"name": "Password Credential Recovery",
|
|
1316
942
|
"description": "Secure password credential recovery process",
|
|
1317
943
|
"category": "security",
|
|
1318
944
|
"severity": "error",
|
|
1319
|
-
"languages": [
|
|
1320
|
-
"typescript",
|
|
1321
|
-
"javascript"
|
|
1322
|
-
],
|
|
945
|
+
"languages": ["typescript", "javascript"],
|
|
1323
946
|
"analyzer": "eslint",
|
|
1324
947
|
"eslintRule": "custom/typescript_s048",
|
|
1325
948
|
"version": "1.0.0",
|
|
1326
949
|
"status": "stable",
|
|
1327
|
-
"tags": [
|
|
1328
|
-
"security",
|
|
1329
|
-
"password",
|
|
1330
|
-
"recovery"
|
|
1331
|
-
]
|
|
950
|
+
"tags": ["security", "password", "recovery"]
|
|
1332
951
|
},
|
|
1333
952
|
"S050": {
|
|
1334
953
|
"name": "Session Token Weak Hash",
|
|
1335
954
|
"description": "Prevent weak hashing for session tokens",
|
|
1336
955
|
"category": "security",
|
|
1337
956
|
"severity": "error",
|
|
1338
|
-
"languages": [
|
|
1339
|
-
"typescript",
|
|
1340
|
-
"javascript"
|
|
1341
|
-
],
|
|
957
|
+
"languages": ["typescript", "javascript"],
|
|
1342
958
|
"analyzer": "eslint",
|
|
1343
959
|
"eslintRule": "custom/typescript_s050",
|
|
1344
960
|
"version": "1.0.0",
|
|
1345
961
|
"status": "stable",
|
|
1346
|
-
"tags": [
|
|
1347
|
-
"security",
|
|
1348
|
-
"session",
|
|
1349
|
-
"hashing"
|
|
1350
|
-
]
|
|
962
|
+
"tags": ["security", "session", "hashing"]
|
|
1351
963
|
},
|
|
1352
964
|
"S052": {
|
|
1353
965
|
"name": "Secure Random Authentication Code",
|
|
1354
966
|
"description": "Require secure random number generation for authentication codes",
|
|
1355
967
|
"category": "security",
|
|
1356
968
|
"severity": "error",
|
|
1357
|
-
"languages": [
|
|
1358
|
-
"typescript",
|
|
1359
|
-
"javascript"
|
|
1360
|
-
],
|
|
969
|
+
"languages": ["typescript", "javascript"],
|
|
1361
970
|
"analyzer": "eslint",
|
|
1362
971
|
"eslintRule": "custom/typescript_s052",
|
|
1363
972
|
"version": "1.0.0",
|
|
1364
973
|
"status": "stable",
|
|
1365
|
-
"tags": [
|
|
1366
|
-
"security",
|
|
1367
|
-
"random",
|
|
1368
|
-
"authentication"
|
|
1369
|
-
]
|
|
974
|
+
"tags": ["security", "random", "authentication"]
|
|
1370
975
|
},
|
|
1371
976
|
"S054": {
|
|
1372
977
|
"name": "Verification Default Account",
|
|
1373
978
|
"description": "Verify and secure default accounts",
|
|
1374
979
|
"category": "security",
|
|
1375
980
|
"severity": "error",
|
|
1376
|
-
"languages": [
|
|
1377
|
-
"typescript",
|
|
1378
|
-
"javascript"
|
|
1379
|
-
],
|
|
981
|
+
"languages": ["typescript", "javascript"],
|
|
1380
982
|
"analyzer": "eslint",
|
|
1381
983
|
"eslintRule": "custom/typescript_s054",
|
|
1382
984
|
"version": "1.0.0",
|
|
1383
985
|
"status": "stable",
|
|
1384
|
-
"tags": [
|
|
1385
|
-
"security",
|
|
1386
|
-
"accounts",
|
|
1387
|
-
"default"
|
|
1388
|
-
]
|
|
986
|
+
"tags": ["security", "accounts", "default"]
|
|
1389
987
|
},
|
|
1390
988
|
"S055": {
|
|
1391
989
|
"name": "REST Content-Type Verification",
|
|
1392
990
|
"description": "Verify incoming Content-Type in REST API endpoints",
|
|
1393
991
|
"category": "security",
|
|
1394
992
|
"severity": "error",
|
|
1395
|
-
"languages": [
|
|
1396
|
-
"typescript",
|
|
1397
|
-
"javascript"
|
|
1398
|
-
],
|
|
993
|
+
"languages": ["typescript", "javascript"],
|
|
1399
994
|
"analyzer": "eslint",
|
|
1400
995
|
"eslintRule": "custom/typescript_s055",
|
|
1401
996
|
"version": "1.0.0",
|
|
1402
997
|
"status": "stable",
|
|
1403
|
-
"tags": [
|
|
1404
|
-
"security",
|
|
1405
|
-
"rest",
|
|
1406
|
-
"content-type"
|
|
1407
|
-
]
|
|
998
|
+
"tags": ["security", "rest", "content-type"]
|
|
1408
999
|
},
|
|
1409
1000
|
"S057": {
|
|
1410
1001
|
"name": "UTC Logging",
|
|
1411
1002
|
"description": "Enforce UTC usage in time formatting and logging",
|
|
1412
1003
|
"category": "security",
|
|
1413
1004
|
"severity": "warning",
|
|
1414
|
-
"languages": [
|
|
1415
|
-
"typescript",
|
|
1416
|
-
"javascript"
|
|
1417
|
-
],
|
|
1005
|
+
"languages": ["typescript", "javascript"],
|
|
1418
1006
|
"analyzer": "eslint",
|
|
1419
1007
|
"eslintRule": "custom/typescript_s057",
|
|
1420
1008
|
"version": "1.0.0",
|
|
1421
1009
|
"status": "stable",
|
|
1422
|
-
"tags": [
|
|
1423
|
-
"security",
|
|
1424
|
-
"logging",
|
|
1425
|
-
"timezone"
|
|
1426
|
-
]
|
|
1010
|
+
"tags": ["security", "logging", "timezone"]
|
|
1427
1011
|
},
|
|
1428
1012
|
"S058": {
|
|
1429
1013
|
"name": "No SSRF",
|
|
1430
1014
|
"description": "Detect SSRF vulnerabilities via unvalidated user-controlled URLs",
|
|
1431
1015
|
"category": "security",
|
|
1432
1016
|
"severity": "error",
|
|
1433
|
-
"languages": [
|
|
1434
|
-
"typescript",
|
|
1435
|
-
"javascript"
|
|
1436
|
-
],
|
|
1017
|
+
"languages": ["typescript", "javascript"],
|
|
1437
1018
|
"analyzer": "eslint",
|
|
1438
1019
|
"eslintRule": "custom/typescript_s058",
|
|
1439
1020
|
"version": "1.0.0",
|
|
1440
1021
|
"status": "stable",
|
|
1441
|
-
"tags": [
|
|
1442
|
-
"security",
|
|
1443
|
-
"ssrf",
|
|
1444
|
-
"url-validation"
|
|
1445
|
-
]
|
|
1022
|
+
"tags": ["security", "ssrf", "url-validation"]
|
|
1446
1023
|
},
|
|
1447
1024
|
"C002": {
|
|
1448
1025
|
"id": "C002",
|
|
@@ -1450,25 +1027,16 @@
|
|
|
1450
1027
|
"description": "Auto-migrated rule C002 from ESLint mapping",
|
|
1451
1028
|
"category": "general",
|
|
1452
1029
|
"severity": "warning",
|
|
1453
|
-
"languages": [
|
|
1454
|
-
"typescript",
|
|
1455
|
-
"javascript"
|
|
1456
|
-
],
|
|
1030
|
+
"languages": ["typescript", "javascript"],
|
|
1457
1031
|
"version": "1.0.0",
|
|
1458
1032
|
"status": "migrated",
|
|
1459
|
-
"tags": [
|
|
1460
|
-
"migrated"
|
|
1461
|
-
],
|
|
1033
|
+
"tags": ["migrated"],
|
|
1462
1034
|
"engineMappings": {
|
|
1463
|
-
"eslint": [
|
|
1464
|
-
"custom/no-duplicate-code"
|
|
1465
|
-
]
|
|
1035
|
+
"eslint": ["custom/no-duplicate-code"]
|
|
1466
1036
|
},
|
|
1467
1037
|
"strategy": {
|
|
1468
1038
|
"preferred": "regex",
|
|
1469
|
-
"fallbacks": [
|
|
1470
|
-
"regex"
|
|
1471
|
-
],
|
|
1039
|
+
"fallbacks": ["regex"],
|
|
1472
1040
|
"accuracy": {}
|
|
1473
1041
|
}
|
|
1474
1042
|
},
|
|
@@ -1478,84 +1046,55 @@
|
|
|
1478
1046
|
"description": "Auto-migrated rule C003 from ESLint mapping",
|
|
1479
1047
|
"category": "general",
|
|
1480
1048
|
"severity": "warning",
|
|
1481
|
-
"languages": [
|
|
1482
|
-
"typescript",
|
|
1483
|
-
"javascript"
|
|
1484
|
-
],
|
|
1049
|
+
"languages": ["typescript", "javascript"],
|
|
1485
1050
|
"version": "1.0.0",
|
|
1486
1051
|
"status": "migrated",
|
|
1487
|
-
"tags": [
|
|
1488
|
-
"migrated"
|
|
1489
|
-
],
|
|
1052
|
+
"tags": ["migrated"],
|
|
1490
1053
|
"engineMappings": {
|
|
1491
|
-
"eslint": [
|
|
1492
|
-
"custom/no-vague-abbreviations"
|
|
1493
|
-
]
|
|
1054
|
+
"eslint": ["custom/no-vague-abbreviations"]
|
|
1494
1055
|
},
|
|
1495
1056
|
"strategy": {
|
|
1496
1057
|
"preferred": "regex",
|
|
1497
|
-
"fallbacks": [
|
|
1498
|
-
"regex"
|
|
1499
|
-
],
|
|
1500
|
-
"accuracy": {}
|
|
1501
|
-
}
|
|
1502
|
-
},
|
|
1503
|
-
"C013": {
|
|
1504
|
-
"id": "C013",
|
|
1505
|
-
"name": "Rule C013",
|
|
1506
|
-
"description": "Auto-migrated rule C013 from ESLint mapping",
|
|
1507
|
-
"category": "general",
|
|
1508
|
-
"severity": "warning",
|
|
1509
|
-
"languages": [
|
|
1510
|
-
"typescript",
|
|
1511
|
-
"javascript"
|
|
1512
|
-
],
|
|
1513
|
-
"version": "1.0.0",
|
|
1514
|
-
"status": "migrated",
|
|
1515
|
-
"tags": [
|
|
1516
|
-
"migrated"
|
|
1517
|
-
],
|
|
1518
|
-
"engineMappings": {
|
|
1519
|
-
"eslint": [
|
|
1520
|
-
"custom/no-dead-code"
|
|
1521
|
-
]
|
|
1522
|
-
},
|
|
1523
|
-
"strategy": {
|
|
1524
|
-
"preferred": "regex",
|
|
1525
|
-
"fallbacks": [
|
|
1526
|
-
"regex"
|
|
1527
|
-
],
|
|
1058
|
+
"fallbacks": ["regex"],
|
|
1528
1059
|
"accuracy": {}
|
|
1529
1060
|
}
|
|
1530
1061
|
},
|
|
1531
1062
|
"C014": {
|
|
1532
|
-
"
|
|
1533
|
-
"
|
|
1534
|
-
"
|
|
1535
|
-
"category": "general",
|
|
1063
|
+
"name": "Dependency Injection Pattern",
|
|
1064
|
+
"description": "Use Dependency Injection instead of direct instantiation in business logic. Increases testability and reduces coupling.",
|
|
1065
|
+
"category": "design",
|
|
1536
1066
|
"severity": "warning",
|
|
1537
|
-
"languages": [
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
],
|
|
1067
|
+
"languages": ["typescript", "javascript"],
|
|
1068
|
+
"analyzer": "./rules/common/C014_dependency_injection/analyzer.js",
|
|
1069
|
+
"config": "./rules/common/C014_dependency_injection/config.json",
|
|
1541
1070
|
"version": "1.0.0",
|
|
1542
|
-
"status": "
|
|
1071
|
+
"status": "stable",
|
|
1543
1072
|
"tags": [
|
|
1544
|
-
"
|
|
1073
|
+
"design",
|
|
1074
|
+
"dependency-injection",
|
|
1075
|
+
"testability",
|
|
1076
|
+
"coupling",
|
|
1077
|
+
"SOLID"
|
|
1545
1078
|
],
|
|
1079
|
+
"strategy": {
|
|
1080
|
+
"preferred": "ast",
|
|
1081
|
+
"fallbacks": [],
|
|
1082
|
+
"accuracy": {
|
|
1083
|
+
"ast": 95
|
|
1084
|
+
},
|
|
1085
|
+
"requirements": {
|
|
1086
|
+
"ast": {
|
|
1087
|
+
"semanticEngine": true,
|
|
1088
|
+
"description": "C014 requires symbol-based analysis for accurate dependency injection pattern detection"
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
},
|
|
1546
1092
|
"engineMappings": {
|
|
1547
1093
|
"eslint": [
|
|
1548
1094
|
"no-new",
|
|
1549
1095
|
"no-new-wrappers",
|
|
1550
1096
|
"@typescript-eslint/no-unnecessary-constructor"
|
|
1551
1097
|
]
|
|
1552
|
-
},
|
|
1553
|
-
"strategy": {
|
|
1554
|
-
"preferred": "regex",
|
|
1555
|
-
"fallbacks": [
|
|
1556
|
-
"regex"
|
|
1557
|
-
],
|
|
1558
|
-
"accuracy": {}
|
|
1559
1098
|
}
|
|
1560
1099
|
},
|
|
1561
1100
|
"C017": {
|
|
@@ -1564,27 +1103,16 @@
|
|
|
1564
1103
|
"description": "Auto-migrated rule C017 from ESLint mapping",
|
|
1565
1104
|
"category": "general",
|
|
1566
1105
|
"severity": "warning",
|
|
1567
|
-
"languages": [
|
|
1568
|
-
"typescript",
|
|
1569
|
-
"javascript"
|
|
1570
|
-
],
|
|
1106
|
+
"languages": ["typescript", "javascript"],
|
|
1571
1107
|
"version": "1.0.0",
|
|
1572
1108
|
"status": "migrated",
|
|
1573
|
-
"tags": [
|
|
1574
|
-
"migrated"
|
|
1575
|
-
],
|
|
1109
|
+
"tags": ["migrated"],
|
|
1576
1110
|
"engineMappings": {
|
|
1577
|
-
"eslint": [
|
|
1578
|
-
"custom/limit-constructor-logic"
|
|
1579
|
-
]
|
|
1111
|
+
"eslint": ["custom/limit-constructor-logic"]
|
|
1580
1112
|
},
|
|
1581
1113
|
"strategy": {
|
|
1582
1114
|
"preferred": "semantic",
|
|
1583
|
-
"fallbacks": [
|
|
1584
|
-
"semantic",
|
|
1585
|
-
"ast",
|
|
1586
|
-
"regex"
|
|
1587
|
-
],
|
|
1115
|
+
"fallbacks": ["semantic", "ast", "regex"],
|
|
1588
1116
|
"accuracy": {
|
|
1589
1117
|
"semantic": 95,
|
|
1590
1118
|
"ast": 85,
|
|
@@ -1592,87 +1120,22 @@
|
|
|
1592
1120
|
}
|
|
1593
1121
|
}
|
|
1594
1122
|
},
|
|
1595
|
-
"C018": {
|
|
1596
|
-
"id": "C018",
|
|
1597
|
-
"name": "Rule C018",
|
|
1598
|
-
"description": "Auto-migrated rule C018 from ESLint mapping",
|
|
1599
|
-
"category": "general",
|
|
1600
|
-
"severity": "warning",
|
|
1601
|
-
"languages": [
|
|
1602
|
-
"typescript",
|
|
1603
|
-
"javascript"
|
|
1604
|
-
],
|
|
1605
|
-
"version": "1.0.0",
|
|
1606
|
-
"status": "migrated",
|
|
1607
|
-
"tags": [
|
|
1608
|
-
"migrated"
|
|
1609
|
-
],
|
|
1610
|
-
"engineMappings": {
|
|
1611
|
-
"eslint": [
|
|
1612
|
-
"custom/no-generic-throw"
|
|
1613
|
-
]
|
|
1614
|
-
},
|
|
1615
|
-
"strategy": {
|
|
1616
|
-
"preferred": "regex",
|
|
1617
|
-
"fallbacks": [
|
|
1618
|
-
"regex"
|
|
1619
|
-
],
|
|
1620
|
-
"accuracy": {}
|
|
1621
|
-
}
|
|
1622
|
-
},
|
|
1623
|
-
"C023": {
|
|
1624
|
-
"id": "C023",
|
|
1625
|
-
"name": "Rule C023",
|
|
1626
|
-
"description": "Auto-migrated rule C023 from ESLint mapping",
|
|
1627
|
-
"category": "general",
|
|
1628
|
-
"severity": "warning",
|
|
1629
|
-
"languages": [
|
|
1630
|
-
"typescript",
|
|
1631
|
-
"javascript"
|
|
1632
|
-
],
|
|
1633
|
-
"version": "1.0.0",
|
|
1634
|
-
"status": "migrated",
|
|
1635
|
-
"tags": [
|
|
1636
|
-
"migrated"
|
|
1637
|
-
],
|
|
1638
|
-
"engineMappings": {
|
|
1639
|
-
"eslint": [
|
|
1640
|
-
"custom/no-duplicate-variable-name-in-scope"
|
|
1641
|
-
]
|
|
1642
|
-
},
|
|
1643
|
-
"strategy": {
|
|
1644
|
-
"preferred": "regex",
|
|
1645
|
-
"fallbacks": [
|
|
1646
|
-
"regex"
|
|
1647
|
-
],
|
|
1648
|
-
"accuracy": {}
|
|
1649
|
-
}
|
|
1650
|
-
},
|
|
1651
1123
|
"C030": {
|
|
1652
1124
|
"id": "C030",
|
|
1653
1125
|
"name": "Rule C030",
|
|
1654
1126
|
"description": "Auto-migrated rule C030 from ESLint mapping",
|
|
1655
1127
|
"category": "general",
|
|
1656
1128
|
"severity": "warning",
|
|
1657
|
-
"languages": [
|
|
1658
|
-
"typescript",
|
|
1659
|
-
"javascript"
|
|
1660
|
-
],
|
|
1129
|
+
"languages": ["typescript", "javascript"],
|
|
1661
1130
|
"version": "1.0.0",
|
|
1662
1131
|
"status": "migrated",
|
|
1663
|
-
"tags": [
|
|
1664
|
-
"migrated"
|
|
1665
|
-
],
|
|
1132
|
+
"tags": ["migrated"],
|
|
1666
1133
|
"engineMappings": {
|
|
1667
|
-
"eslint": [
|
|
1668
|
-
"custom/use-custom-error-classes"
|
|
1669
|
-
]
|
|
1134
|
+
"eslint": ["custom/use-custom-error-classes"]
|
|
1670
1135
|
},
|
|
1671
1136
|
"strategy": {
|
|
1672
1137
|
"preferred": "regex",
|
|
1673
|
-
"fallbacks": [
|
|
1674
|
-
"regex"
|
|
1675
|
-
],
|
|
1138
|
+
"fallbacks": ["regex"],
|
|
1676
1139
|
"accuracy": {}
|
|
1677
1140
|
}
|
|
1678
1141
|
},
|
|
@@ -1682,25 +1145,16 @@
|
|
|
1682
1145
|
"description": "Auto-migrated rule C041 from ESLint mapping",
|
|
1683
1146
|
"category": "general",
|
|
1684
1147
|
"severity": "warning",
|
|
1685
|
-
"languages": [
|
|
1686
|
-
"typescript",
|
|
1687
|
-
"javascript"
|
|
1688
|
-
],
|
|
1148
|
+
"languages": ["typescript", "javascript"],
|
|
1689
1149
|
"version": "1.0.0",
|
|
1690
1150
|
"status": "migrated",
|
|
1691
|
-
"tags": [
|
|
1692
|
-
"migrated"
|
|
1693
|
-
],
|
|
1151
|
+
"tags": ["migrated"],
|
|
1694
1152
|
"engineMappings": {
|
|
1695
|
-
"eslint": [
|
|
1696
|
-
"custom/no-config-inline"
|
|
1697
|
-
]
|
|
1153
|
+
"eslint": ["custom/no-config-inline"]
|
|
1698
1154
|
},
|
|
1699
1155
|
"strategy": {
|
|
1700
1156
|
"preferred": "regex",
|
|
1701
|
-
"fallbacks": [
|
|
1702
|
-
"regex"
|
|
1703
|
-
],
|
|
1157
|
+
"fallbacks": ["regex"],
|
|
1704
1158
|
"accuracy": {}
|
|
1705
1159
|
}
|
|
1706
1160
|
},
|
|
@@ -1710,25 +1164,16 @@
|
|
|
1710
1164
|
"description": "Auto-migrated rule C042 from ESLint mapping",
|
|
1711
1165
|
"category": "general",
|
|
1712
1166
|
"severity": "warning",
|
|
1713
|
-
"languages": [
|
|
1714
|
-
"typescript",
|
|
1715
|
-
"javascript"
|
|
1716
|
-
],
|
|
1167
|
+
"languages": ["typescript", "javascript"],
|
|
1717
1168
|
"version": "1.0.0",
|
|
1718
1169
|
"status": "migrated",
|
|
1719
|
-
"tags": [
|
|
1720
|
-
"migrated"
|
|
1721
|
-
],
|
|
1170
|
+
"tags": ["migrated"],
|
|
1722
1171
|
"engineMappings": {
|
|
1723
|
-
"eslint": [
|
|
1724
|
-
"custom/boolean-name-prefix"
|
|
1725
|
-
]
|
|
1172
|
+
"eslint": ["custom/boolean-name-prefix"]
|
|
1726
1173
|
},
|
|
1727
1174
|
"strategy": {
|
|
1728
1175
|
"preferred": "regex",
|
|
1729
|
-
"fallbacks": [
|
|
1730
|
-
"regex"
|
|
1731
|
-
],
|
|
1176
|
+
"fallbacks": ["regex"],
|
|
1732
1177
|
"accuracy": {}
|
|
1733
1178
|
}
|
|
1734
1179
|
},
|
|
@@ -1738,25 +1183,16 @@
|
|
|
1738
1183
|
"description": "Auto-migrated rule C047 from ESLint mapping",
|
|
1739
1184
|
"category": "general",
|
|
1740
1185
|
"severity": "warning",
|
|
1741
|
-
"languages": [
|
|
1742
|
-
"typescript",
|
|
1743
|
-
"javascript"
|
|
1744
|
-
],
|
|
1186
|
+
"languages": ["typescript", "javascript"],
|
|
1745
1187
|
"version": "1.0.0",
|
|
1746
1188
|
"status": "migrated",
|
|
1747
|
-
"tags": [
|
|
1748
|
-
"migrated"
|
|
1749
|
-
],
|
|
1189
|
+
"tags": ["migrated"],
|
|
1750
1190
|
"engineMappings": {
|
|
1751
|
-
"eslint": [
|
|
1752
|
-
"custom/no-duplicate-retry-logic"
|
|
1753
|
-
]
|
|
1191
|
+
"eslint": ["custom/no-duplicate-retry-logic"]
|
|
1754
1192
|
},
|
|
1755
1193
|
"strategy": {
|
|
1756
1194
|
"preferred": "regex",
|
|
1757
|
-
"fallbacks": [
|
|
1758
|
-
"regex"
|
|
1759
|
-
],
|
|
1195
|
+
"fallbacks": ["regex"],
|
|
1760
1196
|
"accuracy": {}
|
|
1761
1197
|
}
|
|
1762
1198
|
},
|
|
@@ -1766,30 +1202,17 @@
|
|
|
1766
1202
|
"description": "Each test should assert only one behavior",
|
|
1767
1203
|
"category": "testing",
|
|
1768
1204
|
"severity": "warning",
|
|
1769
|
-
"languages": [
|
|
1770
|
-
"typescript",
|
|
1771
|
-
"javascript"
|
|
1772
|
-
],
|
|
1205
|
+
"languages": ["typescript", "javascript"],
|
|
1773
1206
|
"version": "1.0.0",
|
|
1774
1207
|
"status": "stable",
|
|
1775
|
-
"tags": [
|
|
1776
|
-
"testing",
|
|
1777
|
-
"unit-test",
|
|
1778
|
-
"single-behavior"
|
|
1779
|
-
],
|
|
1208
|
+
"tags": ["testing", "unit-test", "single-behavior"],
|
|
1780
1209
|
"engineMappings": {
|
|
1781
|
-
"eslint": [
|
|
1782
|
-
|
|
1783
|
-
],
|
|
1784
|
-
"heuristic": [
|
|
1785
|
-
"rules/common/C072_single_test_behavior/analyzer.js"
|
|
1786
|
-
]
|
|
1210
|
+
"eslint": ["custom/c072-one-assert-per-test"],
|
|
1211
|
+
"heuristic": ["rules/common/C072_single_test_behavior/analyzer.js"]
|
|
1787
1212
|
},
|
|
1788
1213
|
"strategy": {
|
|
1789
1214
|
"preferred": "regex",
|
|
1790
|
-
"fallbacks": [
|
|
1791
|
-
"regex"
|
|
1792
|
-
],
|
|
1215
|
+
"fallbacks": ["regex"],
|
|
1793
1216
|
"accuracy": {}
|
|
1794
1217
|
}
|
|
1795
1218
|
},
|
|
@@ -1799,25 +1222,16 @@
|
|
|
1799
1222
|
"description": "Auto-migrated rule C075 from ESLint mapping",
|
|
1800
1223
|
"category": "general",
|
|
1801
1224
|
"severity": "warning",
|
|
1802
|
-
"languages": [
|
|
1803
|
-
"typescript",
|
|
1804
|
-
"javascript"
|
|
1805
|
-
],
|
|
1225
|
+
"languages": ["typescript", "javascript"],
|
|
1806
1226
|
"version": "1.0.0",
|
|
1807
1227
|
"status": "migrated",
|
|
1808
|
-
"tags": [
|
|
1809
|
-
"migrated"
|
|
1810
|
-
],
|
|
1228
|
+
"tags": ["migrated"],
|
|
1811
1229
|
"engineMappings": {
|
|
1812
|
-
"eslint": [
|
|
1813
|
-
"custom/explicit-function-return-types"
|
|
1814
|
-
]
|
|
1230
|
+
"eslint": ["custom/explicit-function-return-types"]
|
|
1815
1231
|
},
|
|
1816
1232
|
"strategy": {
|
|
1817
1233
|
"preferred": "regex",
|
|
1818
|
-
"fallbacks": [
|
|
1819
|
-
"regex"
|
|
1820
|
-
],
|
|
1234
|
+
"fallbacks": ["regex"],
|
|
1821
1235
|
"accuracy": {}
|
|
1822
1236
|
}
|
|
1823
1237
|
},
|
|
@@ -1827,17 +1241,10 @@
|
|
|
1827
1241
|
"description": "All public functions must declare explicit types for arguments",
|
|
1828
1242
|
"category": "type-safety",
|
|
1829
1243
|
"severity": "error",
|
|
1830
|
-
"languages": [
|
|
1831
|
-
"typescript",
|
|
1832
|
-
"javascript"
|
|
1833
|
-
],
|
|
1244
|
+
"languages": ["typescript", "javascript"],
|
|
1834
1245
|
"version": "1.0.0",
|
|
1835
1246
|
"status": "stable",
|
|
1836
|
-
"tags": [
|
|
1837
|
-
"type-safety",
|
|
1838
|
-
"public-api",
|
|
1839
|
-
"explicit-types"
|
|
1840
|
-
],
|
|
1247
|
+
"tags": ["type-safety", "public-api", "explicit-types"],
|
|
1841
1248
|
"engineMappings": {
|
|
1842
1249
|
"heuristic": [
|
|
1843
1250
|
"rules/common/C076_explicit_function_types/semantic-analyzer.js"
|
|
@@ -1845,9 +1252,7 @@
|
|
|
1845
1252
|
},
|
|
1846
1253
|
"strategy": {
|
|
1847
1254
|
"preferred": "symbol",
|
|
1848
|
-
"fallbacks": [
|
|
1849
|
-
"symbol"
|
|
1850
|
-
],
|
|
1255
|
+
"fallbacks": ["symbol"],
|
|
1851
1256
|
"accuracy": {}
|
|
1852
1257
|
}
|
|
1853
1258
|
},
|
|
@@ -1857,25 +1262,16 @@
|
|
|
1857
1262
|
"description": "Auto-migrated rule T002 from ESLint mapping",
|
|
1858
1263
|
"category": "typescript",
|
|
1859
1264
|
"severity": "warning",
|
|
1860
|
-
"languages": [
|
|
1861
|
-
"typescript",
|
|
1862
|
-
"javascript"
|
|
1863
|
-
],
|
|
1265
|
+
"languages": ["typescript", "javascript"],
|
|
1864
1266
|
"version": "1.0.0",
|
|
1865
1267
|
"status": "migrated",
|
|
1866
|
-
"tags": [
|
|
1867
|
-
"migrated"
|
|
1868
|
-
],
|
|
1268
|
+
"tags": ["migrated"],
|
|
1869
1269
|
"engineMappings": {
|
|
1870
|
-
"eslint": [
|
|
1871
|
-
"custom/interface-prefix-i"
|
|
1872
|
-
]
|
|
1270
|
+
"eslint": ["custom/interface-prefix-i"]
|
|
1873
1271
|
},
|
|
1874
1272
|
"strategy": {
|
|
1875
1273
|
"preferred": "regex",
|
|
1876
|
-
"fallbacks": [
|
|
1877
|
-
"regex"
|
|
1878
|
-
],
|
|
1274
|
+
"fallbacks": ["regex"],
|
|
1879
1275
|
"accuracy": {}
|
|
1880
1276
|
}
|
|
1881
1277
|
},
|
|
@@ -1885,25 +1281,16 @@
|
|
|
1885
1281
|
"description": "Auto-migrated rule T003 from ESLint mapping",
|
|
1886
1282
|
"category": "typescript",
|
|
1887
1283
|
"severity": "warning",
|
|
1888
|
-
"languages": [
|
|
1889
|
-
"typescript",
|
|
1890
|
-
"javascript"
|
|
1891
|
-
],
|
|
1284
|
+
"languages": ["typescript", "javascript"],
|
|
1892
1285
|
"version": "1.0.0",
|
|
1893
1286
|
"status": "migrated",
|
|
1894
|
-
"tags": [
|
|
1895
|
-
"migrated"
|
|
1896
|
-
],
|
|
1287
|
+
"tags": ["migrated"],
|
|
1897
1288
|
"engineMappings": {
|
|
1898
|
-
"eslint": [
|
|
1899
|
-
"custom/ts-ignore-reason"
|
|
1900
|
-
]
|
|
1289
|
+
"eslint": ["custom/ts-ignore-reason"]
|
|
1901
1290
|
},
|
|
1902
1291
|
"strategy": {
|
|
1903
1292
|
"preferred": "regex",
|
|
1904
|
-
"fallbacks": [
|
|
1905
|
-
"regex"
|
|
1906
|
-
],
|
|
1293
|
+
"fallbacks": ["regex"],
|
|
1907
1294
|
"accuracy": {}
|
|
1908
1295
|
}
|
|
1909
1296
|
},
|
|
@@ -1913,25 +1300,16 @@
|
|
|
1913
1300
|
"description": "Auto-migrated rule T004 from ESLint mapping",
|
|
1914
1301
|
"category": "typescript",
|
|
1915
1302
|
"severity": "warning",
|
|
1916
|
-
"languages": [
|
|
1917
|
-
"typescript",
|
|
1918
|
-
"javascript"
|
|
1919
|
-
],
|
|
1303
|
+
"languages": ["typescript", "javascript"],
|
|
1920
1304
|
"version": "1.0.0",
|
|
1921
1305
|
"status": "migrated",
|
|
1922
|
-
"tags": [
|
|
1923
|
-
"migrated"
|
|
1924
|
-
],
|
|
1306
|
+
"tags": ["migrated"],
|
|
1925
1307
|
"engineMappings": {
|
|
1926
|
-
"eslint": [
|
|
1927
|
-
"custom/no-empty-type"
|
|
1928
|
-
]
|
|
1308
|
+
"eslint": ["custom/no-empty-type"]
|
|
1929
1309
|
},
|
|
1930
1310
|
"strategy": {
|
|
1931
1311
|
"preferred": "regex",
|
|
1932
|
-
"fallbacks": [
|
|
1933
|
-
"regex"
|
|
1934
|
-
],
|
|
1312
|
+
"fallbacks": ["regex"],
|
|
1935
1313
|
"accuracy": {}
|
|
1936
1314
|
}
|
|
1937
1315
|
},
|
|
@@ -1941,25 +1319,16 @@
|
|
|
1941
1319
|
"description": "Auto-migrated rule T007 from ESLint mapping",
|
|
1942
1320
|
"category": "typescript",
|
|
1943
1321
|
"severity": "warning",
|
|
1944
|
-
"languages": [
|
|
1945
|
-
"typescript",
|
|
1946
|
-
"javascript"
|
|
1947
|
-
],
|
|
1322
|
+
"languages": ["typescript", "javascript"],
|
|
1948
1323
|
"version": "1.0.0",
|
|
1949
1324
|
"status": "migrated",
|
|
1950
|
-
"tags": [
|
|
1951
|
-
"migrated"
|
|
1952
|
-
],
|
|
1325
|
+
"tags": ["migrated"],
|
|
1953
1326
|
"engineMappings": {
|
|
1954
|
-
"eslint": [
|
|
1955
|
-
"custom/no-fn-in-constructor"
|
|
1956
|
-
]
|
|
1327
|
+
"eslint": ["custom/no-fn-in-constructor"]
|
|
1957
1328
|
},
|
|
1958
1329
|
"strategy": {
|
|
1959
1330
|
"preferred": "regex",
|
|
1960
|
-
"fallbacks": [
|
|
1961
|
-
"regex"
|
|
1962
|
-
],
|
|
1331
|
+
"fallbacks": ["regex"],
|
|
1963
1332
|
"accuracy": {}
|
|
1964
1333
|
}
|
|
1965
1334
|
},
|
|
@@ -1969,25 +1338,16 @@
|
|
|
1969
1338
|
"description": "Auto-migrated rule T010 from ESLint mapping",
|
|
1970
1339
|
"category": "typescript",
|
|
1971
1340
|
"severity": "warning",
|
|
1972
|
-
"languages": [
|
|
1973
|
-
"typescript",
|
|
1974
|
-
"javascript"
|
|
1975
|
-
],
|
|
1341
|
+
"languages": ["typescript", "javascript"],
|
|
1976
1342
|
"version": "1.0.0",
|
|
1977
1343
|
"status": "migrated",
|
|
1978
|
-
"tags": [
|
|
1979
|
-
"migrated"
|
|
1980
|
-
],
|
|
1344
|
+
"tags": ["migrated"],
|
|
1981
1345
|
"engineMappings": {
|
|
1982
|
-
"eslint": [
|
|
1983
|
-
"custom/no-nested-union-tuple"
|
|
1984
|
-
]
|
|
1346
|
+
"eslint": ["custom/no-nested-union-tuple"]
|
|
1985
1347
|
},
|
|
1986
1348
|
"strategy": {
|
|
1987
1349
|
"preferred": "regex",
|
|
1988
|
-
"fallbacks": [
|
|
1989
|
-
"regex"
|
|
1990
|
-
],
|
|
1350
|
+
"fallbacks": ["regex"],
|
|
1991
1351
|
"accuracy": {}
|
|
1992
1352
|
}
|
|
1993
1353
|
},
|
|
@@ -1997,25 +1357,16 @@
|
|
|
1997
1357
|
"description": "Auto-migrated rule T019 from ESLint mapping",
|
|
1998
1358
|
"category": "typescript",
|
|
1999
1359
|
"severity": "warning",
|
|
2000
|
-
"languages": [
|
|
2001
|
-
"typescript",
|
|
2002
|
-
"javascript"
|
|
2003
|
-
],
|
|
1360
|
+
"languages": ["typescript", "javascript"],
|
|
2004
1361
|
"version": "1.0.0",
|
|
2005
1362
|
"status": "migrated",
|
|
2006
|
-
"tags": [
|
|
2007
|
-
"migrated"
|
|
2008
|
-
],
|
|
1363
|
+
"tags": ["migrated"],
|
|
2009
1364
|
"engineMappings": {
|
|
2010
|
-
"eslint": [
|
|
2011
|
-
"custom/no-this-assign"
|
|
2012
|
-
]
|
|
1365
|
+
"eslint": ["custom/no-this-assign"]
|
|
2013
1366
|
},
|
|
2014
1367
|
"strategy": {
|
|
2015
1368
|
"preferred": "regex",
|
|
2016
|
-
"fallbacks": [
|
|
2017
|
-
"regex"
|
|
2018
|
-
],
|
|
1369
|
+
"fallbacks": ["regex"],
|
|
2019
1370
|
"accuracy": {}
|
|
2020
1371
|
}
|
|
2021
1372
|
},
|
|
@@ -2025,25 +1376,16 @@
|
|
|
2025
1376
|
"description": "Auto-migrated rule T020 from ESLint mapping",
|
|
2026
1377
|
"category": "typescript",
|
|
2027
1378
|
"severity": "warning",
|
|
2028
|
-
"languages": [
|
|
2029
|
-
"typescript",
|
|
2030
|
-
"javascript"
|
|
2031
|
-
],
|
|
1379
|
+
"languages": ["typescript", "javascript"],
|
|
2032
1380
|
"version": "1.0.0",
|
|
2033
1381
|
"status": "migrated",
|
|
2034
|
-
"tags": [
|
|
2035
|
-
"migrated"
|
|
2036
|
-
],
|
|
1382
|
+
"tags": ["migrated"],
|
|
2037
1383
|
"engineMappings": {
|
|
2038
|
-
"eslint": [
|
|
2039
|
-
"custom/no-default-multi-export"
|
|
2040
|
-
]
|
|
1384
|
+
"eslint": ["custom/no-default-multi-export"]
|
|
2041
1385
|
},
|
|
2042
1386
|
"strategy": {
|
|
2043
1387
|
"preferred": "regex",
|
|
2044
|
-
"fallbacks": [
|
|
2045
|
-
"regex"
|
|
2046
|
-
],
|
|
1388
|
+
"fallbacks": ["regex"],
|
|
2047
1389
|
"accuracy": {}
|
|
2048
1390
|
}
|
|
2049
1391
|
},
|
|
@@ -2053,25 +1395,16 @@
|
|
|
2053
1395
|
"description": "Auto-migrated rule T021 from ESLint mapping",
|
|
2054
1396
|
"category": "typescript",
|
|
2055
1397
|
"severity": "warning",
|
|
2056
|
-
"languages": [
|
|
2057
|
-
"typescript",
|
|
2058
|
-
"javascript"
|
|
2059
|
-
],
|
|
1398
|
+
"languages": ["typescript", "javascript"],
|
|
2060
1399
|
"version": "1.0.0",
|
|
2061
1400
|
"status": "migrated",
|
|
2062
|
-
"tags": [
|
|
2063
|
-
"migrated"
|
|
2064
|
-
],
|
|
1401
|
+
"tags": ["migrated"],
|
|
2065
1402
|
"engineMappings": {
|
|
2066
|
-
"eslint": [
|
|
2067
|
-
"custom/limit-nested-generics"
|
|
2068
|
-
]
|
|
1403
|
+
"eslint": ["custom/limit-nested-generics"]
|
|
2069
1404
|
},
|
|
2070
1405
|
"strategy": {
|
|
2071
1406
|
"preferred": "regex",
|
|
2072
|
-
"fallbacks": [
|
|
2073
|
-
"regex"
|
|
2074
|
-
],
|
|
1407
|
+
"fallbacks": ["regex"],
|
|
2075
1408
|
"accuracy": {}
|
|
2076
1409
|
}
|
|
2077
1410
|
},
|
|
@@ -2081,15 +1414,10 @@
|
|
|
2081
1414
|
"description": "Auto-migrated rule R001 from ESLint mapping",
|
|
2082
1415
|
"category": "react",
|
|
2083
1416
|
"severity": "warning",
|
|
2084
|
-
"languages": [
|
|
2085
|
-
"typescript",
|
|
2086
|
-
"javascript"
|
|
2087
|
-
],
|
|
1417
|
+
"languages": ["typescript", "javascript"],
|
|
2088
1418
|
"version": "1.0.0",
|
|
2089
1419
|
"status": "migrated",
|
|
2090
|
-
"tags": [
|
|
2091
|
-
"migrated"
|
|
2092
|
-
],
|
|
1420
|
+
"tags": ["migrated"],
|
|
2093
1421
|
"engineMappings": {
|
|
2094
1422
|
"eslint": [
|
|
2095
1423
|
"react/no-this-in-sfc",
|
|
@@ -2100,9 +1428,7 @@
|
|
|
2100
1428
|
},
|
|
2101
1429
|
"strategy": {
|
|
2102
1430
|
"preferred": "regex",
|
|
2103
|
-
"fallbacks": [
|
|
2104
|
-
"regex"
|
|
2105
|
-
],
|
|
1431
|
+
"fallbacks": ["regex"],
|
|
2106
1432
|
"accuracy": {}
|
|
2107
1433
|
}
|
|
2108
1434
|
},
|
|
@@ -2112,15 +1438,10 @@
|
|
|
2112
1438
|
"description": "Auto-migrated rule R002 from ESLint mapping",
|
|
2113
1439
|
"category": "react",
|
|
2114
1440
|
"severity": "warning",
|
|
2115
|
-
"languages": [
|
|
2116
|
-
"typescript",
|
|
2117
|
-
"javascript"
|
|
2118
|
-
],
|
|
1441
|
+
"languages": ["typescript", "javascript"],
|
|
2119
1442
|
"version": "1.0.0",
|
|
2120
1443
|
"status": "migrated",
|
|
2121
|
-
"tags": [
|
|
2122
|
-
"migrated"
|
|
2123
|
-
],
|
|
1444
|
+
"tags": ["migrated"],
|
|
2124
1445
|
"engineMappings": {
|
|
2125
1446
|
"eslint": [
|
|
2126
1447
|
"react-hooks/rules-of-hooks",
|
|
@@ -2131,9 +1452,7 @@
|
|
|
2131
1452
|
},
|
|
2132
1453
|
"strategy": {
|
|
2133
1454
|
"preferred": "regex",
|
|
2134
|
-
"fallbacks": [
|
|
2135
|
-
"regex"
|
|
2136
|
-
],
|
|
1455
|
+
"fallbacks": ["regex"],
|
|
2137
1456
|
"accuracy": {}
|
|
2138
1457
|
}
|
|
2139
1458
|
},
|
|
@@ -2143,15 +1462,10 @@
|
|
|
2143
1462
|
"description": "Auto-migrated rule R003 from ESLint mapping",
|
|
2144
1463
|
"category": "react",
|
|
2145
1464
|
"severity": "warning",
|
|
2146
|
-
"languages": [
|
|
2147
|
-
"typescript",
|
|
2148
|
-
"javascript"
|
|
2149
|
-
],
|
|
1465
|
+
"languages": ["typescript", "javascript"],
|
|
2150
1466
|
"version": "1.0.0",
|
|
2151
1467
|
"status": "migrated",
|
|
2152
|
-
"tags": [
|
|
2153
|
-
"migrated"
|
|
2154
|
-
],
|
|
1468
|
+
"tags": ["migrated"],
|
|
2155
1469
|
"engineMappings": {
|
|
2156
1470
|
"eslint": [
|
|
2157
1471
|
"react/no-direct-mutation-state",
|
|
@@ -2161,9 +1475,7 @@
|
|
|
2161
1475
|
},
|
|
2162
1476
|
"strategy": {
|
|
2163
1477
|
"preferred": "regex",
|
|
2164
|
-
"fallbacks": [
|
|
2165
|
-
"regex"
|
|
2166
|
-
],
|
|
1478
|
+
"fallbacks": ["regex"],
|
|
2167
1479
|
"accuracy": {}
|
|
2168
1480
|
}
|
|
2169
1481
|
},
|
|
@@ -2173,26 +1485,16 @@
|
|
|
2173
1485
|
"description": "Auto-migrated rule R004 from ESLint mapping",
|
|
2174
1486
|
"category": "react",
|
|
2175
1487
|
"severity": "warning",
|
|
2176
|
-
"languages": [
|
|
2177
|
-
"typescript",
|
|
2178
|
-
"javascript"
|
|
2179
|
-
],
|
|
1488
|
+
"languages": ["typescript", "javascript"],
|
|
2180
1489
|
"version": "1.0.0",
|
|
2181
1490
|
"status": "migrated",
|
|
2182
|
-
"tags": [
|
|
2183
|
-
"migrated"
|
|
2184
|
-
],
|
|
1491
|
+
"tags": ["migrated"],
|
|
2185
1492
|
"engineMappings": {
|
|
2186
|
-
"eslint": [
|
|
2187
|
-
"no-param-reassign",
|
|
2188
|
-
"react/forbid-foreign-prop-types"
|
|
2189
|
-
]
|
|
1493
|
+
"eslint": ["no-param-reassign", "react/forbid-foreign-prop-types"]
|
|
2190
1494
|
},
|
|
2191
1495
|
"strategy": {
|
|
2192
1496
|
"preferred": "regex",
|
|
2193
|
-
"fallbacks": [
|
|
2194
|
-
"regex"
|
|
2195
|
-
],
|
|
1497
|
+
"fallbacks": ["regex"],
|
|
2196
1498
|
"accuracy": {}
|
|
2197
1499
|
}
|
|
2198
1500
|
},
|
|
@@ -2202,25 +1504,16 @@
|
|
|
2202
1504
|
"description": "Auto-migrated rule R005 from ESLint mapping",
|
|
2203
1505
|
"category": "react",
|
|
2204
1506
|
"severity": "warning",
|
|
2205
|
-
"languages": [
|
|
2206
|
-
"typescript",
|
|
2207
|
-
"javascript"
|
|
2208
|
-
],
|
|
1507
|
+
"languages": ["typescript", "javascript"],
|
|
2209
1508
|
"version": "1.0.0",
|
|
2210
1509
|
"status": "migrated",
|
|
2211
|
-
"tags": [
|
|
2212
|
-
"migrated"
|
|
2213
|
-
],
|
|
1510
|
+
"tags": ["migrated"],
|
|
2214
1511
|
"engineMappings": {
|
|
2215
|
-
"eslint": [
|
|
2216
|
-
"react/jsx-no-bind"
|
|
2217
|
-
]
|
|
1512
|
+
"eslint": ["react/jsx-no-bind"]
|
|
2218
1513
|
},
|
|
2219
1514
|
"strategy": {
|
|
2220
1515
|
"preferred": "regex",
|
|
2221
|
-
"fallbacks": [
|
|
2222
|
-
"regex"
|
|
2223
|
-
],
|
|
1516
|
+
"fallbacks": ["regex"],
|
|
2224
1517
|
"accuracy": {}
|
|
2225
1518
|
}
|
|
2226
1519
|
},
|
|
@@ -2230,15 +1523,10 @@
|
|
|
2230
1523
|
"description": "Auto-migrated rule R006 from ESLint mapping",
|
|
2231
1524
|
"category": "react",
|
|
2232
1525
|
"severity": "warning",
|
|
2233
|
-
"languages": [
|
|
2234
|
-
"typescript",
|
|
2235
|
-
"javascript"
|
|
2236
|
-
],
|
|
1526
|
+
"languages": ["typescript", "javascript"],
|
|
2237
1527
|
"version": "1.0.0",
|
|
2238
1528
|
"status": "migrated",
|
|
2239
|
-
"tags": [
|
|
2240
|
-
"migrated"
|
|
2241
|
-
],
|
|
1529
|
+
"tags": ["migrated"],
|
|
2242
1530
|
"engineMappings": {
|
|
2243
1531
|
"eslint": [
|
|
2244
1532
|
"react/jsx-pascal-case",
|
|
@@ -2248,9 +1536,7 @@
|
|
|
2248
1536
|
},
|
|
2249
1537
|
"strategy": {
|
|
2250
1538
|
"preferred": "regex",
|
|
2251
|
-
"fallbacks": [
|
|
2252
|
-
"regex"
|
|
2253
|
-
],
|
|
1539
|
+
"fallbacks": ["regex"],
|
|
2254
1540
|
"accuracy": {}
|
|
2255
1541
|
}
|
|
2256
1542
|
},
|
|
@@ -2260,25 +1546,16 @@
|
|
|
2260
1546
|
"description": "Auto-migrated rule R007 from ESLint mapping",
|
|
2261
1547
|
"category": "react",
|
|
2262
1548
|
"severity": "warning",
|
|
2263
|
-
"languages": [
|
|
2264
|
-
"typescript",
|
|
2265
|
-
"javascript"
|
|
2266
|
-
],
|
|
1549
|
+
"languages": ["typescript", "javascript"],
|
|
2267
1550
|
"version": "1.0.0",
|
|
2268
1551
|
"status": "migrated",
|
|
2269
|
-
"tags": [
|
|
2270
|
-
"migrated"
|
|
2271
|
-
],
|
|
1552
|
+
"tags": ["migrated"],
|
|
2272
1553
|
"engineMappings": {
|
|
2273
|
-
"eslint": [
|
|
2274
|
-
"react-hooks/rules-of-hooks"
|
|
2275
|
-
]
|
|
1554
|
+
"eslint": ["react-hooks/rules-of-hooks"]
|
|
2276
1555
|
},
|
|
2277
1556
|
"strategy": {
|
|
2278
1557
|
"preferred": "regex",
|
|
2279
|
-
"fallbacks": [
|
|
2280
|
-
"regex"
|
|
2281
|
-
],
|
|
1558
|
+
"fallbacks": ["regex"],
|
|
2282
1559
|
"accuracy": {}
|
|
2283
1560
|
}
|
|
2284
1561
|
},
|
|
@@ -2288,25 +1565,16 @@
|
|
|
2288
1565
|
"description": "Auto-migrated rule R008 from ESLint mapping",
|
|
2289
1566
|
"category": "react",
|
|
2290
1567
|
"severity": "warning",
|
|
2291
|
-
"languages": [
|
|
2292
|
-
"typescript",
|
|
2293
|
-
"javascript"
|
|
2294
|
-
],
|
|
1568
|
+
"languages": ["typescript", "javascript"],
|
|
2295
1569
|
"version": "1.0.0",
|
|
2296
1570
|
"status": "migrated",
|
|
2297
|
-
"tags": [
|
|
2298
|
-
"migrated"
|
|
2299
|
-
],
|
|
1571
|
+
"tags": ["migrated"],
|
|
2300
1572
|
"engineMappings": {
|
|
2301
|
-
"eslint": [
|
|
2302
|
-
"react-hooks/rules-of-hooks"
|
|
2303
|
-
]
|
|
1573
|
+
"eslint": ["react-hooks/rules-of-hooks"]
|
|
2304
1574
|
},
|
|
2305
1575
|
"strategy": {
|
|
2306
1576
|
"preferred": "regex",
|
|
2307
|
-
"fallbacks": [
|
|
2308
|
-
"regex"
|
|
2309
|
-
],
|
|
1577
|
+
"fallbacks": ["regex"],
|
|
2310
1578
|
"accuracy": {}
|
|
2311
1579
|
}
|
|
2312
1580
|
},
|
|
@@ -2316,25 +1584,16 @@
|
|
|
2316
1584
|
"description": "Auto-migrated rule R009 from ESLint mapping",
|
|
2317
1585
|
"category": "react",
|
|
2318
1586
|
"severity": "warning",
|
|
2319
|
-
"languages": [
|
|
2320
|
-
"typescript",
|
|
2321
|
-
"javascript"
|
|
2322
|
-
],
|
|
1587
|
+
"languages": ["typescript", "javascript"],
|
|
2323
1588
|
"version": "1.0.0",
|
|
2324
1589
|
"status": "migrated",
|
|
2325
|
-
"tags": [
|
|
2326
|
-
"migrated"
|
|
2327
|
-
],
|
|
1590
|
+
"tags": ["migrated"],
|
|
2328
1591
|
"engineMappings": {
|
|
2329
|
-
"eslint": [
|
|
2330
|
-
"react-hooks/rules-of-hooks"
|
|
2331
|
-
]
|
|
1592
|
+
"eslint": ["react-hooks/rules-of-hooks"]
|
|
2332
1593
|
},
|
|
2333
1594
|
"strategy": {
|
|
2334
1595
|
"preferred": "regex",
|
|
2335
|
-
"fallbacks": [
|
|
2336
|
-
"regex"
|
|
2337
|
-
],
|
|
1596
|
+
"fallbacks": ["regex"],
|
|
2338
1597
|
"accuracy": {}
|
|
2339
1598
|
}
|
|
2340
1599
|
}
|
|
@@ -2436,46 +1695,31 @@
|
|
|
2436
1695
|
"logging": {
|
|
2437
1696
|
"name": "Logging Standards",
|
|
2438
1697
|
"description": "Rules related to logging practices",
|
|
2439
|
-
"rules": [
|
|
2440
|
-
"C019",
|
|
2441
|
-
"S057"
|
|
2442
|
-
],
|
|
1698
|
+
"rules": ["C019", "S057"],
|
|
2443
1699
|
"severity": "warning"
|
|
2444
1700
|
},
|
|
2445
1701
|
"naming": {
|
|
2446
1702
|
"name": "Naming Conventions",
|
|
2447
1703
|
"description": "Rules for consistent naming patterns",
|
|
2448
|
-
"rules": [
|
|
2449
|
-
"C006"
|
|
2450
|
-
],
|
|
1704
|
+
"rules": ["C006"],
|
|
2451
1705
|
"severity": "warning"
|
|
2452
1706
|
},
|
|
2453
1707
|
"design": {
|
|
2454
1708
|
"name": "Design Principles",
|
|
2455
1709
|
"description": "Rules for software design best practices",
|
|
2456
|
-
"rules": [
|
|
2457
|
-
"C006"
|
|
2458
|
-
],
|
|
1710
|
+
"rules": ["C006"],
|
|
2459
1711
|
"severity": "warning"
|
|
2460
1712
|
},
|
|
2461
1713
|
"validation": {
|
|
2462
1714
|
"name": "Data Validation",
|
|
2463
1715
|
"description": "Rules for proper data validation practices",
|
|
2464
|
-
"rules": [
|
|
2465
|
-
"C031",
|
|
2466
|
-
"S018",
|
|
2467
|
-
"S025",
|
|
2468
|
-
"S026"
|
|
2469
|
-
],
|
|
1716
|
+
"rules": ["C031", "S018", "S025", "S026"],
|
|
2470
1717
|
"severity": "error"
|
|
2471
1718
|
},
|
|
2472
1719
|
"architecture": {
|
|
2473
1720
|
"name": "Architecture Guidelines",
|
|
2474
1721
|
"description": "Rules for system architecture best practices",
|
|
2475
|
-
"rules": [
|
|
2476
|
-
"C014",
|
|
2477
|
-
"C033"
|
|
2478
|
-
],
|
|
1722
|
+
"rules": ["C014", "C033"],
|
|
2479
1723
|
"severity": "error"
|
|
2480
1724
|
}
|
|
2481
1725
|
},
|
|
@@ -2512,41 +1756,30 @@
|
|
|
2512
1756
|
},
|
|
2513
1757
|
"languages": {
|
|
2514
1758
|
"typescript": {
|
|
2515
|
-
"extensions": [
|
|
2516
|
-
".ts",
|
|
2517
|
-
".tsx"
|
|
2518
|
-
],
|
|
1759
|
+
"extensions": [".ts", ".tsx"],
|
|
2519
1760
|
"analyzer": "ast",
|
|
2520
1761
|
"parser": "@typescript-eslint/parser"
|
|
2521
1762
|
},
|
|
2522
1763
|
"javascript": {
|
|
2523
|
-
"extensions": [
|
|
2524
|
-
".js",
|
|
2525
|
-
".jsx"
|
|
2526
|
-
],
|
|
1764
|
+
"extensions": [".js", ".jsx"],
|
|
2527
1765
|
"analyzer": "ast",
|
|
2528
1766
|
"parser": "@typescript-eslint/parser"
|
|
2529
1767
|
},
|
|
2530
1768
|
"dart": {
|
|
2531
|
-
"extensions": [
|
|
2532
|
-
".dart"
|
|
2533
|
-
],
|
|
1769
|
+
"extensions": [".dart"],
|
|
2534
1770
|
"analyzer": "pattern",
|
|
2535
1771
|
"parser": "regex"
|
|
2536
1772
|
},
|
|
2537
1773
|
"kotlin": {
|
|
2538
|
-
"extensions": [
|
|
2539
|
-
".kt",
|
|
2540
|
-
".kts"
|
|
2541
|
-
],
|
|
1774
|
+
"extensions": [".kt", ".kts"],
|
|
2542
1775
|
"analyzer": "ast",
|
|
2543
1776
|
"parser": "kotlin-parser"
|
|
2544
1777
|
}
|
|
2545
1778
|
},
|
|
2546
1779
|
"metadata": {
|
|
2547
1780
|
"version": "1.1.6",
|
|
2548
|
-
"lastUpdated": "2025-
|
|
2549
|
-
"totalRules":
|
|
1781
|
+
"lastUpdated": "2025-08-19",
|
|
1782
|
+
"totalRules": 95,
|
|
2550
1783
|
"qualityRules": 33,
|
|
2551
1784
|
"securityRules": 47,
|
|
2552
1785
|
"stableRules": 43,
|
|
@@ -2559,6 +1792,7 @@
|
|
|
2559
1792
|
"ESLint 9.x integration",
|
|
2560
1793
|
"React rules integration",
|
|
2561
1794
|
"Memory leak fixes"
|
|
2562
|
-
]
|
|
1795
|
+
],
|
|
1796
|
+
"consolidatedFrom": "/Users/bach.ngoc.hoai/Docs/ee/coding-quality/extensions/sunlint/config/rules/rules-registry.json"
|
|
2563
1797
|
}
|
|
2564
|
-
}
|
|
1798
|
+
}
|