@codacy/tools-bandit-1 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -48,6 +48,7 @@ var patterns_default = [
48
48
  severityLevel: "High",
49
49
  title: "Avoid Use of Assert Statements",
50
50
  enabled: false,
51
+ languages: ["Python"],
51
52
  parameters: []
52
53
  },
53
54
  {
@@ -56,6 +57,7 @@ var patterns_default = [
56
57
  severityLevel: "Warning",
57
58
  title: "Avoid use of exec",
58
59
  enabled: true,
60
+ languages: ["Python"],
59
61
  parameters: []
60
62
  },
61
63
  {
@@ -64,6 +66,7 @@ var patterns_default = [
64
66
  severityLevel: "High",
65
67
  title: "Detect Setting Permissive File Permissions",
66
68
  enabled: true,
69
+ languages: ["Python"],
67
70
  parameters: []
68
71
  },
69
72
  {
@@ -72,6 +75,7 @@ var patterns_default = [
72
75
  severityLevel: "Warning",
73
76
  title: "Avoid binding to all network interfaces",
74
77
  enabled: true,
78
+ languages: ["Python"],
75
79
  parameters: []
76
80
  },
77
81
  {
@@ -80,6 +84,7 @@ var patterns_default = [
80
84
  severityLevel: "High",
81
85
  title: "Detect Hardcoded Password Strings",
82
86
  enabled: true,
87
+ languages: ["Python"],
83
88
  parameters: []
84
89
  },
85
90
  {
@@ -88,6 +93,7 @@ var patterns_default = [
88
93
  severityLevel: "High",
89
94
  title: "Detect Hardcoded Password Function Arguments",
90
95
  enabled: false,
96
+ languages: ["Python"],
91
97
  parameters: []
92
98
  },
93
99
  {
@@ -96,6 +102,7 @@ var patterns_default = [
96
102
  severityLevel: "High",
97
103
  title: "Avoid Hardcoded Password Argument Defaults",
98
104
  enabled: true,
105
+ languages: ["Python"],
99
106
  parameters: []
100
107
  },
101
108
  {
@@ -104,6 +111,7 @@ var patterns_default = [
104
111
  severityLevel: "Warning",
105
112
  title: "Avoid Hardcoded Temporary Directory Usage",
106
113
  enabled: true,
114
+ languages: ["Python"],
107
115
  parameters: []
108
116
  },
109
117
  {
@@ -112,6 +120,7 @@ var patterns_default = [
112
120
  severityLevel: "Warning",
113
121
  title: "Detect Password Based Config Options Not Marked Secret",
114
122
  enabled: true,
123
+ languages: ["Python"],
115
124
  parameters: []
116
125
  },
117
126
  {
@@ -120,6 +129,7 @@ var patterns_default = [
120
129
  severityLevel: "Warning",
121
130
  title: "Avoid pass in except block",
122
131
  enabled: true,
132
+ languages: ["Python"],
123
133
  parameters: []
124
134
  },
125
135
  {
@@ -128,6 +138,7 @@ var patterns_default = [
128
138
  severityLevel: "Warning",
129
139
  title: "Detect use of rootwrap running as root",
130
140
  enabled: true,
141
+ languages: ["Python"],
131
142
  parameters: []
132
143
  },
133
144
  {
@@ -136,6 +147,7 @@ var patterns_default = [
136
147
  severityLevel: "High",
137
148
  title: "Avoid continue in except block",
138
149
  enabled: true,
150
+ languages: ["Python"],
139
151
  parameters: []
140
152
  },
141
153
  {
@@ -144,6 +156,7 @@ var patterns_default = [
144
156
  severityLevel: "Warning",
145
157
  title: "Enforce timeout parameter in requests calls",
146
158
  enabled: true,
159
+ languages: ["Python"],
147
160
  parameters: []
148
161
  },
149
162
  {
@@ -152,6 +165,7 @@ var patterns_default = [
152
165
  severityLevel: "High",
153
166
  title: "Avoid Running Flask App with Debug Mode Enabled",
154
167
  enabled: true,
168
+ languages: ["Python"],
155
169
  parameters: []
156
170
  },
157
171
  {
@@ -160,6 +174,7 @@ var patterns_default = [
160
174
  severityLevel: "High",
161
175
  title: "Avoid Using tarfile.extractall Without Safe Member Validation",
162
176
  enabled: true,
177
+ languages: ["Python"],
163
178
  parameters: []
164
179
  },
165
180
  {
@@ -168,6 +183,7 @@ var patterns_default = [
168
183
  severityLevel: "Warning",
169
184
  title: "Avoid Unsafe Use of Pickle for Deserialization",
170
185
  enabled: true,
186
+ languages: ["Python"],
171
187
  parameters: []
172
188
  },
173
189
  {
@@ -176,6 +192,7 @@ var patterns_default = [
176
192
  severityLevel: "Warning",
177
193
  title: "Avoid Deserialization with the marshal Module",
178
194
  enabled: true,
195
+ languages: ["Python"],
179
196
  parameters: []
180
197
  },
181
198
  {
@@ -184,6 +201,7 @@ var patterns_default = [
184
201
  severityLevel: "Warning",
185
202
  title: "Avoid Use of Insecure Hash Functions (MD2, MD4, MD5, SHA1)",
186
203
  enabled: true,
204
+ languages: ["Python"],
187
205
  parameters: []
188
206
  },
189
207
  {
@@ -192,6 +210,7 @@ var patterns_default = [
192
210
  severityLevel: "High",
193
211
  title: "Avoid Use of Insecure Cipher or Cipher Mode",
194
212
  enabled: true,
213
+ languages: ["Python"],
195
214
  parameters: []
196
215
  },
197
216
  {
@@ -200,6 +219,7 @@ var patterns_default = [
200
219
  severityLevel: "Warning",
201
220
  title: "Avoid Use of Insecure Ciphers and Cipher Modes",
202
221
  enabled: true,
222
+ languages: ["Python"],
203
223
  parameters: []
204
224
  },
205
225
  {
@@ -208,6 +228,7 @@ var patterns_default = [
208
228
  severityLevel: "Warning",
209
229
  title: "Avoid Use of Insecure and Deprecated Function mktemp",
210
230
  enabled: true,
231
+ languages: ["Python"],
211
232
  parameters: []
212
233
  },
213
234
  {
@@ -216,6 +237,7 @@ var patterns_default = [
216
237
  severityLevel: "Warning",
217
238
  title: "Avoid use of eval function",
218
239
  enabled: true,
240
+ languages: ["Python"],
219
241
  parameters: []
220
242
  },
221
243
  {
@@ -224,6 +246,7 @@ var patterns_default = [
224
246
  severityLevel: "Warning",
225
247
  title: "Avoid use of mark_safe()",
226
248
  enabled: true,
249
+ languages: ["Python"],
227
250
  parameters: []
228
251
  },
229
252
  {
@@ -232,6 +255,7 @@ var patterns_default = [
232
255
  severityLevel: "Warning",
233
256
  title: "Avoid Use of HTTPSConnection on Older Python Versions",
234
257
  enabled: true,
258
+ languages: ["Python"],
235
259
  parameters: []
236
260
  },
237
261
  {
@@ -240,6 +264,7 @@ var patterns_default = [
240
264
  severityLevel: "Warning",
241
265
  title: "Audit urllib urlopen for permitted schemes",
242
266
  enabled: true,
267
+ languages: ["Python"],
243
268
  parameters: []
244
269
  },
245
270
  {
@@ -248,6 +273,7 @@ var patterns_default = [
248
273
  severityLevel: "Warning",
249
274
  title: "Avoid Using Standard Pseudo-Random Generators for Security Purposes",
250
275
  enabled: true,
276
+ languages: ["Python"],
251
277
  parameters: []
252
278
  },
253
279
  {
@@ -256,6 +282,7 @@ var patterns_default = [
256
282
  severityLevel: "High",
257
283
  title: "Avoid Using Telnet-related Functions",
258
284
  enabled: true,
285
+ languages: ["Python"],
259
286
  parameters: []
260
287
  },
261
288
  {
@@ -264,6 +291,7 @@ var patterns_default = [
264
291
  severityLevel: "Warning",
265
292
  title: "Avoid Using Unsafe XML Parsing Methods",
266
293
  enabled: true,
294
+ languages: ["Python"],
267
295
  parameters: []
268
296
  },
269
297
  {
@@ -272,6 +300,7 @@ var patterns_default = [
272
300
  severityLevel: "Warning",
273
301
  title: "Avoid Using Vulnerable XML Parsing Methods",
274
302
  enabled: true,
303
+ languages: ["Python"],
275
304
  parameters: []
276
305
  },
277
306
  {
@@ -280,6 +309,7 @@ var patterns_default = [
280
309
  severityLevel: "Warning",
281
310
  title: "Avoid Using xml.sax.expatreader.create_parser for Parsing Untrusted XML",
282
311
  enabled: true,
312
+ languages: ["Python"],
283
313
  parameters: []
284
314
  },
285
315
  {
@@ -288,6 +318,7 @@ var patterns_default = [
288
318
  severityLevel: "Warning",
289
319
  title: "Avoid parsing untrusted XML data with vulnerable XML methods",
290
320
  enabled: true,
321
+ languages: ["Python"],
291
322
  parameters: []
292
323
  },
293
324
  {
@@ -296,6 +327,7 @@ var patterns_default = [
296
327
  severityLevel: "Warning",
297
328
  title: "Avoid Using xml.sax Methods to Parse Untrusted XML",
298
329
  enabled: true,
330
+ languages: ["Python"],
299
331
  parameters: []
300
332
  },
301
333
  {
@@ -304,6 +336,7 @@ var patterns_default = [
304
336
  severityLevel: "Warning",
305
337
  title: "Avoid Unsafe XML Parsing with xml.dom.minidom",
306
338
  enabled: true,
339
+ languages: ["Python"],
307
340
  parameters: []
308
341
  },
309
342
  {
@@ -312,6 +345,7 @@ var patterns_default = [
312
345
  severityLevel: "Warning",
313
346
  title: "Avoid Parsing Untrusted XML with xml.dom.pulldom Methods",
314
347
  enabled: true,
348
+ languages: ["Python"],
315
349
  parameters: []
316
350
  },
317
351
  {
@@ -320,6 +354,7 @@ var patterns_default = [
320
354
  severityLevel: "Warning",
321
355
  title: "Avoid Using Vulnerable lxml.etree XML Parsing Methods",
322
356
  enabled: true,
357
+ languages: ["Python"],
323
358
  parameters: []
324
359
  },
325
360
  {
@@ -328,6 +363,7 @@ var patterns_default = [
328
363
  severityLevel: "High",
329
364
  title: "Avoid Using FTP-Related Functions",
330
365
  enabled: true,
366
+ languages: ["Python"],
331
367
  parameters: []
332
368
  },
333
369
  {
@@ -336,6 +372,7 @@ var patterns_default = [
336
372
  severityLevel: "High",
337
373
  title: "Avoid using input() in Python 2",
338
374
  enabled: false,
375
+ languages: ["Python"],
339
376
  parameters: []
340
377
  },
341
378
  {
@@ -344,6 +381,7 @@ var patterns_default = [
344
381
  severityLevel: "Warning",
345
382
  title: "Avoid Using Unverified SSL Context",
346
383
  enabled: false,
384
+ languages: ["Python"],
347
385
  parameters: []
348
386
  },
349
387
  {
@@ -352,6 +390,7 @@ var patterns_default = [
352
390
  severityLevel: "High",
353
391
  title: "Avoid Use of Insecure Hash Functions in hashlib",
354
392
  enabled: false,
393
+ languages: ["Python"],
355
394
  parameters: []
356
395
  },
357
396
  {
@@ -360,6 +399,7 @@ var patterns_default = [
360
399
  severityLevel: "Warning",
361
400
  title: "Avoid use of os.tempnam() and os.tmpnam()",
362
401
  enabled: false,
402
+ languages: ["Python"],
363
403
  parameters: []
364
404
  },
365
405
  {
@@ -368,6 +408,7 @@ var patterns_default = [
368
408
  severityLevel: "High",
369
409
  title: "Avoid Importing Telnetlib Module",
370
410
  enabled: true,
411
+ languages: ["Python"],
371
412
  parameters: []
372
413
  },
373
414
  {
@@ -376,6 +417,7 @@ var patterns_default = [
376
417
  severityLevel: "High",
377
418
  title: "Avoid Importing ftplib Module",
378
419
  enabled: true,
420
+ languages: ["Python"],
379
421
  parameters: []
380
422
  },
381
423
  {
@@ -384,6 +426,7 @@ var patterns_default = [
384
426
  severityLevel: "Warning",
385
427
  title: "Consider Security Implications of Importing pickle and Related Modules",
386
428
  enabled: true,
429
+ languages: ["Python"],
387
430
  parameters: []
388
431
  },
389
432
  {
@@ -392,6 +435,7 @@ var patterns_default = [
392
435
  severityLevel: "Info",
393
436
  title: "Consider security implications of importing subprocess module",
394
437
  enabled: true,
438
+ languages: ["Python"],
395
439
  parameters: []
396
440
  },
397
441
  {
@@ -400,6 +444,7 @@ var patterns_default = [
400
444
  severityLevel: "Warning",
401
445
  title: "Avoid Using Vulnerable xml.etree Imports for Parsing Untrusted XML",
402
446
  enabled: true,
447
+ languages: ["Python"],
403
448
  parameters: []
404
449
  },
405
450
  {
@@ -408,6 +453,7 @@ var patterns_default = [
408
453
  severityLevel: "Warning",
409
454
  title: "Avoid Using Vulnerable XML Parsing Methods",
410
455
  enabled: true,
456
+ languages: ["Python"],
411
457
  parameters: []
412
458
  },
413
459
  {
@@ -416,6 +462,7 @@ var patterns_default = [
416
462
  severityLevel: "Warning",
417
463
  title: "Avoid Using Vulnerable XML Parsing Methods",
418
464
  enabled: true,
465
+ languages: ["Python"],
419
466
  parameters: []
420
467
  },
421
468
  {
@@ -424,6 +471,7 @@ var patterns_default = [
424
471
  severityLevel: "Warning",
425
472
  title: "Avoid importing xml.dom.minidom for untrusted XML parsing",
426
473
  enabled: true,
474
+ languages: ["Python"],
427
475
  parameters: []
428
476
  },
429
477
  {
@@ -432,6 +480,7 @@ var patterns_default = [
432
480
  severityLevel: "Warning",
433
481
  title: "Avoid importing xml.dom.pulldom for untrusted XML parsing",
434
482
  enabled: true,
483
+ languages: ["Python"],
435
484
  parameters: []
436
485
  },
437
486
  {
@@ -440,6 +489,7 @@ var patterns_default = [
440
489
  severityLevel: "Warning",
441
490
  title: "Avoid Using Vulnerable XML Parsing Libraries (lxml)",
442
491
  enabled: true,
492
+ languages: ["Python"],
443
493
  parameters: []
444
494
  },
445
495
  {
@@ -448,6 +498,7 @@ var patterns_default = [
448
498
  severityLevel: "High",
449
499
  title: "Avoid Importing xmlrpclib",
450
500
  enabled: true,
501
+ languages: ["Python"],
451
502
  parameters: []
452
503
  },
453
504
  {
@@ -456,6 +507,7 @@ var patterns_default = [
456
507
  severityLevel: "High",
457
508
  title: "Avoid importing CGI handlers vulnerable to httpoxy",
458
509
  enabled: false,
510
+ languages: ["Python"],
459
511
  parameters: []
460
512
  },
461
513
  {
@@ -464,6 +516,7 @@ var patterns_default = [
464
516
  severityLevel: "High",
465
517
  title: "Avoid Importing PyCrypto Library",
466
518
  enabled: false,
519
+ languages: ["Python"],
467
520
  parameters: []
468
521
  },
469
522
  {
@@ -472,6 +525,7 @@ var patterns_default = [
472
525
  severityLevel: "High",
473
526
  title: "Avoid Importing PyCryptodome Modules",
474
527
  enabled: false,
528
+ languages: ["Python"],
475
529
  parameters: []
476
530
  },
477
531
  {
@@ -480,6 +534,7 @@ var patterns_default = [
480
534
  severityLevel: "High",
481
535
  title: "Avoid disabling SSL certificate validation in requests",
482
536
  enabled: true,
537
+ languages: ["Python"],
483
538
  parameters: []
484
539
  },
485
540
  {
@@ -488,6 +543,7 @@ var patterns_default = [
488
543
  severityLevel: "High",
489
544
  title: "Avoid Use of SSL/TLS with Bad Versions",
490
545
  enabled: true,
546
+ languages: ["Python"],
491
547
  parameters: []
492
548
  },
493
549
  {
@@ -496,6 +552,7 @@ var patterns_default = [
496
552
  severityLevel: "Warning",
497
553
  title: "Detect SSL Usage with Insecure Default Protocol Versions",
498
554
  enabled: true,
555
+ languages: ["Python"],
499
556
  parameters: []
500
557
  },
501
558
  {
@@ -504,6 +561,7 @@ var patterns_default = [
504
561
  severityLevel: "Warning",
505
562
  title: "Detect SSL/TLS Usage with No Version Specified",
506
563
  enabled: true,
564
+ languages: ["Python"],
507
565
  parameters: []
508
566
  },
509
567
  {
@@ -512,6 +570,7 @@ var patterns_default = [
512
570
  severityLevel: "High",
513
571
  title: "Detect Use of Weak Cryptographic Keys",
514
572
  enabled: true,
573
+ languages: ["Python"],
515
574
  parameters: []
516
575
  },
517
576
  {
@@ -520,6 +579,7 @@ var patterns_default = [
520
579
  severityLevel: "Warning",
521
580
  title: "Avoid Unsafe Use of yaml.load",
522
581
  enabled: true,
582
+ languages: ["Python"],
523
583
  parameters: []
524
584
  },
525
585
  {
@@ -528,6 +588,7 @@ var patterns_default = [
528
588
  severityLevel: "High",
529
589
  title: "Avoid Disabling SSH Host Key Verification",
530
590
  enabled: false,
591
+ languages: ["Python"],
531
592
  parameters: []
532
593
  },
533
594
  {
@@ -536,6 +597,7 @@ var patterns_default = [
536
597
  severityLevel: "Warning",
537
598
  title: "Avoid using insecure SNMP versions",
538
599
  enabled: false,
600
+ languages: ["Python"],
539
601
  parameters: []
540
602
  },
541
603
  {
@@ -544,6 +606,7 @@ var patterns_default = [
544
606
  severityLevel: "Warning",
545
607
  title: "Avoid Weak SNMP Cryptography",
546
608
  enabled: false,
609
+ languages: ["Python"],
547
610
  parameters: []
548
611
  },
549
612
  {
@@ -552,6 +615,7 @@ var patterns_default = [
552
615
  severityLevel: "Warning",
553
616
  title: "Detect Shell Injection Vulnerabilities in Paramiko exec_command",
554
617
  enabled: true,
618
+ languages: ["Python"],
555
619
  parameters: []
556
620
  },
557
621
  {
@@ -560,6 +624,7 @@ var patterns_default = [
560
624
  severityLevel: "High",
561
625
  title: "Avoid subprocess.Popen with shell=True",
562
626
  enabled: true,
627
+ languages: ["Python"],
563
628
  parameters: []
564
629
  },
565
630
  {
@@ -568,6 +633,7 @@ var patterns_default = [
568
633
  severityLevel: "Warning",
569
634
  title: "Check subprocess usage without shell=True",
570
635
  enabled: true,
636
+ languages: ["Python"],
571
637
  parameters: []
572
638
  },
573
639
  {
@@ -576,6 +642,7 @@ var patterns_default = [
576
642
  severityLevel: "Warning",
577
643
  title: "Detect function calls with shell=True parameter",
578
644
  enabled: true,
645
+ languages: ["Python"],
579
646
  parameters: []
580
647
  },
581
648
  {
@@ -584,6 +651,7 @@ var patterns_default = [
584
651
  severityLevel: "Warning",
585
652
  title: "Avoid starting a process with a shell",
586
653
  enabled: false,
654
+ languages: ["Python"],
587
655
  parameters: []
588
656
  },
589
657
  {
@@ -592,6 +660,7 @@ var patterns_default = [
592
660
  severityLevel: "Info",
593
661
  title: "Detect Starting a Process Without a Shell",
594
662
  enabled: true,
663
+ languages: ["Python"],
595
664
  parameters: []
596
665
  },
597
666
  {
@@ -600,6 +669,7 @@ var patterns_default = [
600
669
  severityLevel: "Warning",
601
670
  title: "Avoid starting a process with a partial executable path",
602
671
  enabled: false,
672
+ languages: ["Python"],
603
673
  parameters: []
604
674
  },
605
675
  {
@@ -608,6 +678,7 @@ var patterns_default = [
608
678
  severityLevel: "Warning",
609
679
  title: "Detect Hardcoded SQL Expressions to Prevent SQL Injection",
610
680
  enabled: true,
681
+ languages: ["Python"],
611
682
  parameters: []
612
683
  },
613
684
  {
@@ -616,6 +687,7 @@ var patterns_default = [
616
687
  severityLevel: "High",
617
688
  title: "Detect Wildcard Injection in Linux Command Emulation",
618
689
  enabled: true,
690
+ languages: ["Python"],
619
691
  parameters: []
620
692
  },
621
693
  {
@@ -624,6 +696,7 @@ var patterns_default = [
624
696
  severityLevel: "Warning",
625
697
  title: "Avoid Potential SQL Injection in Django extra() Function",
626
698
  enabled: false,
699
+ languages: ["Python"],
627
700
  parameters: []
628
701
  },
629
702
  {
@@ -632,6 +705,7 @@ var patterns_default = [
632
705
  severityLevel: "Warning",
633
706
  title: "Avoid Use of RawSQL Function in Django",
634
707
  enabled: false,
708
+ languages: ["Python"],
635
709
  parameters: []
636
710
  },
637
711
  {
@@ -640,6 +714,7 @@ var patterns_default = [
640
714
  severityLevel: "Warning",
641
715
  title: "Avoid insecure use of logging.config.listen",
642
716
  enabled: false,
717
+ languages: ["Python"],
643
718
  parameters: []
644
719
  },
645
720
  {
@@ -648,6 +723,7 @@ var patterns_default = [
648
723
  severityLevel: "High",
649
724
  title: "Avoid disabling autoescaping in Jinja2 templates",
650
725
  enabled: true,
726
+ languages: ["Python"],
651
727
  parameters: []
652
728
  },
653
729
  {
@@ -656,6 +732,7 @@ var patterns_default = [
656
732
  severityLevel: "Warning",
657
733
  title: "Detect Use of Mako Templates",
658
734
  enabled: true,
735
+ languages: ["Python"],
659
736
  parameters: []
660
737
  },
661
738
  {
@@ -664,10 +741,23 @@ var patterns_default = [
664
741
  severityLevel: "Warning",
665
742
  title: "Avoid Potential XSS with django mark_safe Function",
666
743
  enabled: false,
744
+ languages: ["Python"],
667
745
  parameters: []
668
746
  }
669
747
  ];
670
748
 
749
+ // src/metadata.ts
750
+ var descriptor = {
751
+ id: "Bandit",
752
+ displayName: "Bandit",
753
+ preferredVersion: "1.8.3",
754
+ languages: ["Python"],
755
+ filePatterns: ["**/*.py"],
756
+ supportedOS: ["linux", "darwin"],
757
+ supportedArch: ["x64", "arm64"],
758
+ supportedRunners: ["local", "container"]
759
+ };
760
+
671
761
  // src/adapter.ts
672
762
  var TOOL_ID = "Bandit";
673
763
  var ADAPTER_ID = "bandit-1";
@@ -695,37 +785,6 @@ function mapConfidence(confidence) {
695
785
  return 1;
696
786
  }
697
787
  }
698
- function getLineContent(lines, lineNumber) {
699
- return lines[lineNumber - 1] ?? "";
700
- }
701
- async function readFileLines(filePath) {
702
- try {
703
- const content = await import_promises.default.readFile(filePath, "utf-8");
704
- return content.split("\n");
705
- } catch {
706
- return [];
707
- }
708
- }
709
- function buildResult(startedAt, completedAt, issues, errors, filesAnalyzed) {
710
- const durationMs = completedAt.getTime() - startedAt.getTime();
711
- return {
712
- metadata: {
713
- startedAt: startedAt.toISOString(),
714
- completedAt: completedAt.toISOString(),
715
- durationMs
716
- },
717
- issues,
718
- errors,
719
- summary: {
720
- toolId: TOOL_ID,
721
- status: errors.some((e) => e.level === "error") ? "partial" : "success",
722
- issueCount: issues.length,
723
- errorCount: errors.length,
724
- durationMs,
725
- filesAnalyzed
726
- }
727
- };
728
- }
729
788
  var CONFIG_FILE_CANDIDATES = [".bandit", "bandit.yml", "pyproject.toml"];
730
789
  async function resolveBinaryPath(ctx) {
731
790
  const venvDir = (0, import_tooling.getVenvDir)(ctx.globalDir, ADAPTER_ID);
@@ -745,16 +804,9 @@ function buildMessage(result) {
745
804
  return base;
746
805
  }
747
806
  var adapter = {
748
- id: TOOL_ID,
749
- displayName: "Bandit",
750
- preferredVersion: "1.8.3",
807
+ ...descriptor,
751
808
  compatibleVersions: ">=1.7.0",
752
809
  website: "https://bandit.readthedocs.io/",
753
- languages: ["Python"],
754
- filePatterns: ["**/*.py"],
755
- supportedOS: ["linux", "darwin"],
756
- supportedArch: ["x64", "arm64"],
757
- supportedRunners: ["local", "container"],
758
810
  prerequisites: [
759
811
  {
760
812
  name: "Python",
@@ -935,7 +987,7 @@ var adapter = {
935
987
  const issues = [];
936
988
  const errors = [];
937
989
  if (ctx.targetFiles.length === 0) {
938
- return buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, 0);
990
+ return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, 0);
939
991
  }
940
992
  const binary = await resolveBinaryPath(ctx);
941
993
  const absoluteFiles = ctx.targetFiles.map((f) => import_path.default.resolve(ctx.repositoryRoot, f));
@@ -948,11 +1000,6 @@ var adapter = {
948
1000
  } else {
949
1001
  args.push("-c", configPath);
950
1002
  }
951
- } else if (codacyConfig.patterns.length === 0) {
952
- ctx.logger.info("Skipping analysis: no local config and no patterns enabled", {
953
- toolId: TOOL_ID
954
- });
955
- return buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
956
1003
  }
957
1004
  args.push(...absoluteFiles);
958
1005
  try {
@@ -968,10 +1015,10 @@ var adapter = {
968
1015
  message: `bandit exited with code ${exitCode}${stderr ? `: ${stderr.trim()}` : ""}`,
969
1016
  level: "error"
970
1017
  });
971
- return buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1018
+ return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
972
1019
  }
973
1020
  if (!stdout.trim()) {
974
- return buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1021
+ return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
975
1022
  }
976
1023
  let banditOutput;
977
1024
  try {
@@ -984,7 +1031,7 @@ var adapter = {
984
1031
  message: `Failed to parse bandit JSON output: ${err instanceof Error ? err.message : String(err)}`,
985
1032
  level: "error"
986
1033
  });
987
- return buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1034
+ return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
988
1035
  }
989
1036
  if (banditOutput.errors && banditOutput.errors.length > 0) {
990
1037
  for (const banditError of banditOutput.errors) {
@@ -1006,7 +1053,7 @@ var adapter = {
1006
1053
  }
1007
1054
  for (const [filePath, fileResults] of resultsByFile) {
1008
1055
  const absolutePath = import_path.default.isAbsolute(filePath) ? filePath : import_path.default.resolve(ctx.repositoryRoot, filePath);
1009
- const lines = await readFileLines(absolutePath);
1056
+ const lines = await (0, import_tooling.readFileLines)(absolutePath);
1010
1057
  const relPath = import_path.default.relative(ctx.repositoryRoot, absolutePath);
1011
1058
  for (const result2 of fileResults) {
1012
1059
  const patternId = (0, import_tooling.buildPatternId)(TOOL_ID, result2.test_id);
@@ -1026,7 +1073,7 @@ var adapter = {
1026
1073
  endColumn: result2.end_col_offset ? result2.end_col_offset + 1 : void 0,
1027
1074
  // 0-based → 1-based
1028
1075
  message: buildMessage(result2),
1029
- lineContent: getLineContent(lines, result2.line_number),
1076
+ lineContent: (0, import_tooling.getLineContent)(lines, result2.line_number),
1030
1077
  multilineContent: (0, import_tooling.getMultilineContent)(lines, result2.line_number, endLine),
1031
1078
  category: meta.category,
1032
1079
  severity: meta.severity,
@@ -1054,7 +1101,14 @@ var adapter = {
1054
1101
  level: "error"
1055
1102
  });
1056
1103
  }
1057
- const result = buildResult(startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
1104
+ const result = (0, import_tooling.buildResult)(
1105
+ TOOL_ID,
1106
+ startedAt,
1107
+ /* @__PURE__ */ new Date(),
1108
+ issues,
1109
+ errors,
1110
+ ctx.targetFiles.length
1111
+ );
1058
1112
  ctx.logger.info("Analysis complete", {
1059
1113
  toolId: TOOL_ID,
1060
1114
  issueCount: result.summary.issueCount,
@@ -0,0 +1,13 @@
1
+ import { AdapterDescriptor } from '@codacy/tooling';
2
+
3
+ /**
4
+ * Lightweight adapter descriptor for lazy loading.
5
+ *
6
+ * This module contains only plain-data metadata fields and has zero heavy
7
+ * imports (no patterns.json, no runtime utilities). The CLI imports this
8
+ * at startup for adapter registration without loading the full adapter module.
9
+ */
10
+
11
+ declare const descriptor: AdapterDescriptor;
12
+
13
+ export { descriptor };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/metadata.ts
21
+ var metadata_exports = {};
22
+ __export(metadata_exports, {
23
+ descriptor: () => descriptor
24
+ });
25
+ module.exports = __toCommonJS(metadata_exports);
26
+ var descriptor = {
27
+ id: "Bandit",
28
+ displayName: "Bandit",
29
+ preferredVersion: "1.8.3",
30
+ languages: ["Python"],
31
+ filePatterns: ["**/*.py"],
32
+ supportedOS: ["linux", "darwin"],
33
+ supportedArch: ["x64", "arm64"],
34
+ supportedRunners: ["local", "container"]
35
+ };
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ descriptor
39
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codacy/tools-bandit-1",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Bandit adapter — CLI-mode Python security linter",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "dist"
9
9
  ],
10
10
  "dependencies": {
11
- "@codacy/tooling": "0.4.0"
11
+ "@codacy/tooling": "0.6.0"
12
12
  },
13
13
  "license": "MIT",
14
14
  "author": "Codacy <support@codacy.com> (https://www.codacy.com)",
@@ -21,8 +21,18 @@
21
21
  "engines": {
22
22
  "node": ">=20.0.0"
23
23
  },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.js"
28
+ },
29
+ "./metadata": {
30
+ "types": "./dist/metadata.d.ts",
31
+ "default": "./dist/metadata.js"
32
+ }
33
+ },
24
34
  "scripts": {
25
- "build": "tsup src/index.ts --format cjs --dts --clean",
35
+ "build": "tsup src/index.ts src/metadata.ts --format cjs --dts --clean",
26
36
  "test": "vitest run",
27
37
  "lint": "eslint src/",
28
38
  "clean": "rm -rf dist",