@@ -107,8 +107,7 @@ def _is_graph_mode(args: ParsedArgs) -> bool:
107107def _format_cycles (g : GraphArgs , pg : Any ) -> str :
108108 from .diffctx .graph_analytics import detect_cycles
109109
110- edge_filter = set (g .edge_types ) if g .edge_types else {"semantic" }
111- cycles = detect_cycles (pg , level = g .level , edge_types = edge_filter )
110+ cycles = detect_cycles (pg , level = g .level , edge_types = {"semantic" })
112111 if not cycles :
113112 return "No dependency cycles detected."
114113 lines = [f"{ len (cycles )} dependency cycle(s) detected:\n " ]
@@ -121,8 +120,7 @@ def _format_cycles(g: GraphArgs, pg: Any) -> str:
121120def _format_hotspots (g : GraphArgs , pg : Any ) -> str :
122121 from .diffctx .graph_analytics import hotspots
123122
124- edge_filter = set (g .edge_types ) if g .edge_types else set (_ARCHITECTURAL_EDGE_TYPES )
125- hot = hotspots (pg , top = 10 , edge_types = edge_filter )
123+ hot = hotspots (pg , top = 10 , edge_types = set (_ARCHITECTURAL_EDGE_TYPES ))
126124 lines = [f"Top { len (hot )} hotspots:" ]
127125 for rank , (name , score , details ) in enumerate (hot , 1 ):
128126 lines .append (f" { rank } . { name } score={ score } out_degree={ details ['out_degree' ]} churn={ details ['churn' ]} " )
@@ -132,8 +130,7 @@ def _format_hotspots(g: GraphArgs, pg: Any) -> str:
132130def _format_metrics (g : GraphArgs , pg : Any ) -> str :
133131 from .diffctx .graph_analytics import coupling_metrics
134132
135- edge_filter = set (g .edge_types ) if g .edge_types else set (_ARCHITECTURAL_EDGE_TYPES )
136- metrics = coupling_metrics (pg , level = g .level , edge_types = edge_filter )
133+ metrics = coupling_metrics (pg , level = g .level , edge_types = set (_ARCHITECTURAL_EDGE_TYPES ))
137134 lines = [f"Module metrics ({ g .level } level):" ]
138135 for m in metrics :
139136 flags = ""
@@ -148,52 +145,6 @@ def _format_metrics(g: GraphArgs, pg: Any) -> str:
148145 return "\n " .join (lines )
149146
150147
151- def _format_impact (g : GraphArgs , pg : Any ) -> str :
152- from pathlib import Path
153-
154- from .diffctx .ppr import personalized_pagerank
155- from .diffctx .project_graph import _relative_path
156-
157- assert g .impact is not None
158- seed_path = Path (g .impact ).resolve ()
159- seed_fids = {fid for fid in pg .fragments if fid .path .resolve () == seed_path }
160- if not seed_fids :
161- logger .error ("File '%s' not found in project graph" , g .impact )
162- sys .exit (1 )
163- scores = personalized_pagerank (
164- pg .graph , seeds = set (seed_fids ), alpha = 0.5 , seed_weights = {fid : 1.0 / len (seed_fids ) for fid in seed_fids }
165- )
166- ranked = sorted (scores .items (), key = lambda x : - x [1 ])
167- lines = [f"Impact subgraph for { g .impact } :" ]
168- seen_files : set [str ] = set ()
169- for fid , score in ranked [:30 ]:
170- rel = _relative_path (fid .path , pg .root_dir )
171- if rel not in seen_files :
172- seen_files .add (rel )
173- lines .append (f" { rel } relevance={ score :.4f} " )
174- return "\n " .join (lines )
175-
176-
177- def _format_blast_radius (g : GraphArgs , pg : Any ) -> str :
178- from pathlib import Path
179-
180- from .diffctx .graph_analytics import blast_radius
181-
182- assert g .blast_radius is not None
183- seed_path = Path (g .blast_radius ).resolve ()
184- result = blast_radius (pg , seed_files = [seed_path ])
185- lines = [f"Blast radius for { g .blast_radius } :" ]
186- for key , entries in result .items ():
187- if key == "summary" :
188- lines .append (f"\n Summary: { ', ' .join (e [0 ] for e in entries )} " )
189- else :
190- depth_num = key .replace ("depth_" , "" )
191- lines .append (f"\n Depth { depth_num } : { len (entries )} file(s)" )
192- for name , count in entries :
193- lines .append (f" { name } ({ count } fragment(s))" )
194- return "\n " .join (lines )
195-
196-
197148def _graph_to_string (pg : Any , fmt : str , level : str = "directory" ) -> str :
198149 from .diffctx .graph_analytics import quotient_graph , to_mermaid
199150 from .diffctx .graph_export import graph_to_graphml_string , graph_to_json_string
@@ -227,13 +178,8 @@ def _handle_graph_mode(args: ParsedArgs) -> str:
227178 parts .append (_format_cycles (g , pg ))
228179 parts .append (_format_hotspots (g , pg ))
229180 parts .append (_format_metrics (g , pg ))
230- if g .impact :
231- parts .append (_format_impact (g , pg ))
232- if g .blast_radius :
233- parts .append (_format_blast_radius (g , pg ))
234181
235- has_analysis_flag = any ([g .summary , g .impact , g .blast_radius ])
236- if not has_analysis_flag :
182+ if not g .summary :
237183 parts .append (_graph_to_string (pg , g .format , level = g .level ))
238184
239185 return "\n " .join (parts ) + "\n " if parts else ""
0 commit comments