11from pathlib import Path
22from detectors .find_secrets import detect_ast_secrets
3-
3+ import json
44
55def check_path (input_path ):
66 """
@@ -64,8 +64,6 @@ def scan(files):
6464 print ("No Python files found." )
6565 return []
6666
67- print (f"Scanning { len (files )} Python files..." )
68-
6967 files = sorted (files ) # Ensure deterministic output order
7068 findings = []
7169
@@ -76,13 +74,32 @@ def scan(files):
7674 content = f .read ()
7775
7876 ast_results = detect_ast_secrets (content )
79- for line_number , var_name , severity , value in ast_results :
80- findings .append ((line_number , file , var_name , severity , value ))
77+ for line_number , rule_name , severity , value in ast_results :
78+ findings .append ((line_number , file , rule_name , severity , value ))
8179
8280 return findings
8381
84-
85- def output (results ):
82+ def filter_results (results , chosen_severity ):
83+ filtered_findings = []
84+ for line_number , file , rule_name , severity , value in results :
85+ if severity == chosen_severity or chosen_severity is None :
86+ filtered_findings .append ((line_number , file , rule_name , severity , value ))
87+ return filtered_findings
88+
89+ def output_json (filtered_findings ):
90+ json_results = []
91+ for line_number , file , rule_name , severity , value in filtered_findings :
92+ finding = {
93+ "line" : line_number ,
94+ "file" : str (file ),
95+ "rule" : rule_name ,
96+ "severity" : severity ,
97+ "value" : value ,
98+ }
99+ json_results .append (finding )
100+ print (json .dumps (json_results , indent = 2 ))
101+
102+ def output (filtered_findings , use_json , files ):
86103 """
87104 Display scan results in a structured CLI format.
88105
@@ -96,16 +113,22 @@ def output(results):
96113 Returns:
97114 None
98115 """
99- if not results :
116+ if use_json :
117+ output_json (filtered_findings )
118+ return
119+
120+ print (f"Scanning { len (files )} Python files..." )
121+
122+ if not filtered_findings :
100123 print ("\n No vulnerabilities found." )
101124 else :
102125 print ("\n --- Findings ---\n " )
103126
104- for line_number , file , rule_name , severity , match in results :
127+ for line_number , file , rule_name , severity , value in filtered_findings :
105128 print (
106129 f"[{ severity } ] "
107130 f"{ file } :{ line_number } "
108- f"{ rule_name } → { match } "
131+ f"{ rule_name } → { value } "
109132 )
110133
111- print (f"\n Total findings: { len (results )} " )
134+ print (f"\n Total findings: { len (filtered_findings )} " )
0 commit comments