From 5ff08569541b94d3ba8d645fb7fc5c1c75c6cda1 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Fri, 26 Jul 2019 20:15:31 -0400 Subject: [PATCH] Simplify SaveHandler trait This extracts the core visiting logic --- src/librustc_save_analysis/dump_visitor.rs | 6 +-- src/librustc_save_analysis/dumper.rs | 4 +- src/librustc_save_analysis/lib.rs | 54 +++++++++------------- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index 9dfc48c1288..6fce7ca1f33 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -76,7 +76,7 @@ macro_rules! access_from_vis { } pub struct DumpVisitor<'l, 'tcx> { - save_ctxt: SaveContext<'l, 'tcx>, + pub save_ctxt: SaveContext<'l, 'tcx>, tcx: TyCtxt<'tcx>, dumper: Dumper, @@ -106,8 +106,8 @@ pub fn new( } } - pub fn into_analysis(self) -> rls_data::Analysis { - self.dumper.into_analysis() + pub fn analysis(&self) -> &rls_data::Analysis { + self.dumper.analysis() } fn nest_tables(&mut self, item_id: NodeId, f: F) diff --git a/src/librustc_save_analysis/dumper.rs b/src/librustc_save_analysis/dumper.rs index a0051c30c97..b80778c8fec 100644 --- a/src/librustc_save_analysis/dumper.rs +++ b/src/librustc_save_analysis/dumper.rs @@ -22,8 +22,8 @@ pub fn new(config: Config) -> Dumper { } } - pub fn into_analysis(self) -> Analysis { - self.result + pub fn analysis(&self) -> &Analysis { + &self.result } } diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index af69c79cae5..5e66b11bfe3 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -43,7 +43,7 @@ use span_utils::SpanUtils; use rls_data::{Def, DefKind, ExternalCrateData, GlobalCrateId, MacroRef, Ref, RefKind, Relation, - RelationKind, SpanData, Impl, ImplKind}; + RelationKind, SpanData, Impl, ImplKind, Analysis}; use rls_data::config::Config; use log::{debug, error, info}; @@ -1000,12 +1000,10 @@ fn visit_pat(&mut self, p: &'l ast::Pat) { /// Defines what to do with the results of saving the analysis. pub trait SaveHandler { - fn save<'l, 'tcx>( + fn save( &mut self, - save_ctxt: SaveContext<'l, 'tcx>, - krate: &ast::Crate, - cratename: &str, - input: &'l Input, + save_ctxt: &SaveContext<'_, '_>, + analysis: &Analysis, ); } @@ -1065,23 +1063,15 @@ fn output_file(&self, ctx: &SaveContext<'_, '_>) -> (BufWriter, PathBuf) { } } -impl<'a> SaveHandler for DumpHandler<'a> { - fn save<'l, 'tcx>( +impl SaveHandler for DumpHandler<'_> { + fn save( &mut self, - save_ctxt: SaveContext<'l, 'tcx>, - krate: &ast::Crate, - cratename: &str, - input: &'l Input, + save_ctxt: &SaveContext<'_, '_>, + analysis: &Analysis, ) { let sess = &save_ctxt.tcx.sess; let (output, file_name) = self.output_file(&save_ctxt); - let mut visitor = DumpVisitor::new(save_ctxt); - - visitor.dump_crate_info(cratename, krate); - visitor.dump_compilation_options(input, cratename); - visit::walk_crate(&mut visitor, krate); - - if let Err(e) = serde_json::to_writer(output, &visitor.into_analysis()) { + if let Err(e) = serde_json::to_writer(output, &analysis) { error!("Can't serialize save-analysis: {:?}", e); } @@ -1097,21 +1087,13 @@ pub struct CallbackHandler<'b> { pub callback: &'b mut dyn FnMut(&rls_data::Analysis), } -impl<'b> SaveHandler for CallbackHandler<'b> { - fn save<'l, 'tcx>( +impl SaveHandler for CallbackHandler<'_> { + fn save( &mut self, - save_ctxt: SaveContext<'l, 'tcx>, - krate: &ast::Crate, - cratename: &str, - input: &'l Input, + _: &SaveContext<'_, '_>, + analysis: &Analysis, ) { - let mut visitor = DumpVisitor::new(save_ctxt); - - visitor.dump_crate_info(cratename, krate); - visitor.dump_compilation_options(input, cratename); - visit::walk_crate(&mut visitor, krate); - - (self.callback)(&visitor.into_analysis()) + (self.callback)(analysis) } } @@ -1142,7 +1124,13 @@ pub fn process_crate<'l, 'tcx, H: SaveHandler>( impl_counter: Cell::new(0), }; - handler.save(save_ctxt, krate, cratename, input) + let mut visitor = DumpVisitor::new(save_ctxt); + + visitor.dump_crate_info(cratename, krate); + visitor.dump_compilation_options(input, cratename); + visit::walk_crate(&mut visitor, krate); + + handler.save(&visitor.save_ctxt, &visitor.analysis()) }) } -- 2.44.0