Skip to content

Commit

Permalink
Simplify SaveHandler trait
Browse files Browse the repository at this point in the history
This extracts the core visiting logic
  • Loading branch information
Mark-Simulacrum committed Jul 27, 2019
1 parent 5b82289 commit 5ff0856
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 38 deletions.
6 changes: 3 additions & 3 deletions src/librustc_save_analysis/dump_visitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand Down Expand Up @@ -106,8 +106,8 @@ impl<'l, 'tcx> DumpVisitor<'l, 'tcx> {
}
}

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)
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_save_analysis/dumper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ impl Dumper {
}
}

pub fn into_analysis(self) -> Analysis {
self.result
pub fn analysis(&self) -> &Analysis {
&self.result
}
}

Expand Down
54 changes: 21 additions & 33 deletions src/librustc_save_analysis/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use dump_visitor::DumpVisitor;
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};
Expand Down Expand Up @@ -1000,12 +1000,10 @@ impl<'l> Visitor<'l> for PathCollector<'l> {

/// 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,
);
}

Expand Down Expand Up @@ -1065,23 +1063,15 @@ impl<'a> DumpHandler<'a> {
}
}

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);
}

Expand All @@ -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)
}
}

Expand Down Expand Up @@ -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())
})
}

Expand Down

0 comments on commit 5ff0856

Please sign in to comment.