33use rustc_ast:: Attribute ;
44use rustc_data_structures:: sync:: Lrc ;
55use rustc_expand:: base:: resolve_path;
6+ use rustc_middle:: {
7+ query:: { LocalCrate , Providers } ,
8+ ty:: TyCtxt ,
9+ } ;
610use rustc_session:: Session ;
711use rustc_span:: { sym, DebuggerVisualizerFile , DebuggerVisualizerType } ;
812
@@ -12,7 +16,7 @@ impl DebuggerVisualizerCollector<'_> {
1216 fn check_for_debugger_visualizer ( & mut self , attr : & Attribute ) {
1317 if attr. has_name ( sym:: debugger_visualizer) {
1418 let Some ( hints) = attr. meta_item_list ( ) else {
15- self . sess . emit_err ( DebugVisualizerInvalid { span : attr. span } ) ;
19+ self . sess . emit_err ( DebugVisualizerInvalid { span : attr. span } ) ;
1620 return ;
1721 } ;
1822
@@ -82,12 +86,18 @@ impl<'ast> rustc_ast::visit::Visitor<'ast> for DebuggerVisualizerCollector<'_> {
8286}
8387
8488/// Traverses and collects the debugger visualizers for a specific crate.
85- pub fn collect ( sess : & Session , krate : & rustc_ast:: ast:: Crate ) -> Vec < DebuggerVisualizerFile > {
86- // Initialize the collector.
87- let mut visitor = DebuggerVisualizerCollector { sess, visualizers : Vec :: new ( ) } ;
89+ fn debugger_visualizers ( tcx : TyCtxt < ' _ > , _: LocalCrate ) -> Vec < DebuggerVisualizerFile > {
90+ let resolver_and_krate = tcx. resolver_for_lowering ( ( ) ) . borrow ( ) ;
91+ let krate = & * resolver_and_krate. 1 ;
92+
93+ let mut visitor = DebuggerVisualizerCollector { sess : tcx. sess , visualizers : Vec :: new ( ) } ;
8894 rustc_ast:: visit:: Visitor :: visit_crate ( & mut visitor, krate) ;
8995
9096 // Sort the visualizers so we always get a deterministic query result.
9197 visitor. visualizers . sort_unstable ( ) ;
9298 visitor. visualizers
9399}
100+
101+ pub fn provide ( providers : & mut Providers ) {
102+ providers. debugger_visualizers = debugger_visualizers;
103+ }
0 commit comments