@@ -186,6 +186,7 @@ def _print_repo_summary_table(package_rows, severity_filter=None):
186186 )
187187
188188 table .add_column ("Package" , justify = "left" , style = "cyan" , no_wrap = True )
189+ table .add_column ("Identifier" , justify = "left" , style = "dim" , no_wrap = True )
189190 for display_name , sev_key in severity_keys .items ():
190191 color = SEVERITY_COLORS .get (sev_key , "white" )
191192 table .add_column (display_name , justify = "center" , header_style = f"bold { color } " )
@@ -194,8 +195,8 @@ def _print_repo_summary_table(package_rows, severity_filter=None):
194195 grand_total = 0
195196 num_sev_cols = len (severity_keys )
196197
197- for label , counts , status in package_rows :
198- cells = [label ]
198+ for slug_perm , label , counts , status in package_rows :
199+ cells = [label , slug_perm ]
199200 if status == "no_scan" :
200201 cells .append ("[dim italic]Security scan not supported[/dim italic]" )
201202 cells .extend (["" ] * (num_sev_cols - 1 ))
@@ -297,11 +298,14 @@ def _collect_repo_scan_data(opts, owner, repo, slugs, severity_filter, fixable):
297298 progress .advance (task )
298299
299300 # Sort: vulnerable first (by total desc), then safe, then no_scan
301+ # When filters are active, only return packages with matching vulnerabilities
302+ filters_active = severity_filter or fixable is not None
300303 vulnerable = [r for r in rows if r [3 ] == "vulnerable" ]
301304 vulnerable .sort (key = lambda r : sum (r [2 ].values ()), reverse = True )
305+ if filters_active :
306+ return vulnerable
302307 safe = [r for r in rows if r [3 ] == "no_issues_found" ]
303308 no_scan = [r for r in rows if r [3 ] == "no_scan" ]
304-
305309 return vulnerable + safe + no_scan
306310
307311
@@ -397,12 +401,29 @@ def vulnerabilities(
397401 )
398402
399403 if not repo_summary_rows :
400- click .secho (
401- f"No scan data could be retrieved for any packages "
402- f"in '{ owner } /{ repo } '." ,
403- fg = "yellow" ,
404- err = use_stderr ,
405- )
404+ if severity_filter or fixable is not None :
405+ filter_desc = severity_filter .upper () if severity_filter else None
406+ if fixable is True :
407+ filter_desc = (
408+ f"{ filter_desc } , fixable" if filter_desc else "fixable"
409+ )
410+ elif fixable is False :
411+ filter_desc = (
412+ f"{ filter_desc } , non-fixable" if filter_desc else "non-fixable"
413+ )
414+ click .secho (
415+ f"No packages found matching filter(s) [{ filter_desc } ] "
416+ f"in '{ owner } /{ repo } '." ,
417+ fg = "yellow" ,
418+ err = use_stderr ,
419+ )
420+ else :
421+ click .secho (
422+ f"No scan data could be retrieved for any packages "
423+ f"in '{ owner } /{ repo } '." ,
424+ fg = "yellow" ,
425+ err = use_stderr ,
426+ )
406427 return
407428
408429 json_output = {
@@ -424,7 +445,10 @@ def vulnerabilities(
424445
425446 # Table only needs label, counts, and status
426447 _print_repo_summary_table (
427- [(label , counts , status ) for _ , label , counts , status in repo_summary_rows ],
448+ [
449+ (slug_perm , label , counts , status )
450+ for slug_perm , label , counts , status in repo_summary_rows
451+ ],
428452 severity_filter ,
429453 )
430454 return
0 commit comments