1
Fork 0

Turn debugger_visualizers from feed- into regular query.

This commit is contained in:
Michael Woerister 2023-05-16 18:50:05 +02:00
parent 7f01893900
commit a7d48800f9
6 changed files with 29 additions and 13 deletions

View file

@ -3,6 +3,10 @@
use rustc_ast::Attribute;
use rustc_data_structures::sync::Lrc;
use rustc_expand::base::resolve_path;
use rustc_middle::{
query::{LocalCrate, Providers},
ty::TyCtxt,
};
use rustc_session::Session;
use rustc_span::{sym, DebuggerVisualizerFile, DebuggerVisualizerType};
@ -12,7 +16,7 @@ impl DebuggerVisualizerCollector<'_> {
fn check_for_debugger_visualizer(&mut self, attr: &Attribute) {
if attr.has_name(sym::debugger_visualizer) {
let Some(hints) = attr.meta_item_list() else {
self.sess.emit_err(DebugVisualizerInvalid { span: attr.span });
self.sess.emit_err(DebugVisualizerInvalid { span: attr.span });
return;
};
@ -82,12 +86,18 @@ impl<'ast> rustc_ast::visit::Visitor<'ast> for DebuggerVisualizerCollector<'_> {
}
/// Traverses and collects the debugger visualizers for a specific crate.
pub fn collect(sess: &Session, krate: &rustc_ast::ast::Crate) -> Vec<DebuggerVisualizerFile> {
// Initialize the collector.
let mut visitor = DebuggerVisualizerCollector { sess, visualizers: Vec::new() };
fn debugger_visualizers(tcx: TyCtxt<'_>, _: LocalCrate) -> Vec<DebuggerVisualizerFile> {
let resolver_and_krate = tcx.resolver_for_lowering(()).borrow();
let krate = &*resolver_and_krate.1;
let mut visitor = DebuggerVisualizerCollector { sess: tcx.sess, visualizers: Vec::new() };
rustc_ast::visit::Visitor::visit_crate(&mut visitor, krate);
// Sort the visualizers so we always get a deterministic query result.
visitor.visualizers.sort_unstable();
visitor.visualizers
}
pub fn provide(providers: &mut Providers) {
providers.debugger_visualizers = debugger_visualizers;
}

View file

@ -27,7 +27,7 @@ use rustc_middle::query::Providers;
mod check_attr;
mod check_const;
pub mod dead;
pub mod debugger_visualizer;
mod debugger_visualizer;
mod diagnostic_items;
pub mod entry;
mod errors;
@ -50,6 +50,7 @@ pub fn provide(providers: &mut Providers) {
check_attr::provide(providers);
check_const::provide(providers);
dead::provide(providers);
debugger_visualizer::provide(providers);
diagnostic_items::provide(providers);
entry::provide(providers);
lang_items::provide(providers);