]> git.lizzy.rs Git - rust.git/commitdiff
Simplify SaveHandler trait
authorMark Rousskov <mark.simulacrum@gmail.com>
Sat, 27 Jul 2019 00:15:31 +0000 (20:15 -0400)
committerMark Rousskov <mark.simulacrum@gmail.com>
Sat, 27 Jul 2019 23:27:51 +0000 (19:27 -0400)
This extracts the core visiting logic

src/librustc_save_analysis/dump_visitor.rs
src/librustc_save_analysis/dumper.rs
src/librustc_save_analysis/lib.rs

index 9dfc48c1288c10c702515f9b8774406d864f585d..6fce7ca1f33fbcc8a77d075197b9211ff1c54f71 100644 (file)
@@ -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<F>(&mut self, item_id: NodeId, f: F)
index a0051c30c9775c02c2a9cd350a07e319a9506c36..b80778c8fec7ec5f37c5e71f16add9508ca2dfed 100644 (file)
@@ -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
     }
 }
 
index af69c79cae563ee470d763d08c5db9e605bdf407..5e66b11bfe30dc6686064c9db2864c8d9a6b2c0e 100644 (file)
@@ -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<File>, 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())
     })
 }