Skip to content

Commit 5ff0856

Browse files
Simplify SaveHandler trait
This extracts the core visiting logic
1 parent 5b82289 commit 5ff0856

File tree

3 files changed

+26
-38
lines changed

3 files changed

+26
-38
lines changed

src/librustc_save_analysis/dump_visitor.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ macro_rules! access_from_vis {
7676
}
7777

7878
pub struct DumpVisitor<'l, 'tcx> {
79-
save_ctxt: SaveContext<'l, 'tcx>,
79+
pub save_ctxt: SaveContext<'l, 'tcx>,
8080
tcx: TyCtxt<'tcx>,
8181
dumper: Dumper,
8282

@@ -106,8 +106,8 @@ impl<'l, 'tcx> DumpVisitor<'l, 'tcx> {
106106
}
107107
}
108108

109-
pub fn into_analysis(self) -> rls_data::Analysis {
110-
self.dumper.into_analysis()
109+
pub fn analysis(&self) -> &rls_data::Analysis {
110+
self.dumper.analysis()
111111
}
112112

113113
fn nest_tables<F>(&mut self, item_id: NodeId, f: F)

src/librustc_save_analysis/dumper.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ impl Dumper {
2222
}
2323
}
2424

25-
pub fn into_analysis(self) -> Analysis {
26-
self.result
25+
pub fn analysis(&self) -> &Analysis {
26+
&self.result
2727
}
2828
}
2929

src/librustc_save_analysis/lib.rs

+21-33
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use dump_visitor::DumpVisitor;
4343
use span_utils::SpanUtils;
4444

4545
use rls_data::{Def, DefKind, ExternalCrateData, GlobalCrateId, MacroRef, Ref, RefKind, Relation,
46-
RelationKind, SpanData, Impl, ImplKind};
46+
RelationKind, SpanData, Impl, ImplKind, Analysis};
4747
use rls_data::config::Config;
4848

4949
use log::{debug, error, info};
@@ -1000,12 +1000,10 @@ impl<'l> Visitor<'l> for PathCollector<'l> {
10001000

10011001
/// Defines what to do with the results of saving the analysis.
10021002
pub trait SaveHandler {
1003-
fn save<'l, 'tcx>(
1003+
fn save(
10041004
&mut self,
1005-
save_ctxt: SaveContext<'l, 'tcx>,
1006-
krate: &ast::Crate,
1007-
cratename: &str,
1008-
input: &'l Input,
1005+
save_ctxt: &SaveContext<'_, '_>,
1006+
analysis: &Analysis,
10091007
);
10101008
}
10111009

@@ -1065,23 +1063,15 @@ impl<'a> DumpHandler<'a> {
10651063
}
10661064
}
10671065

1068-
impl<'a> SaveHandler for DumpHandler<'a> {
1069-
fn save<'l, 'tcx>(
1066+
impl SaveHandler for DumpHandler<'_> {
1067+
fn save(
10701068
&mut self,
1071-
save_ctxt: SaveContext<'l, 'tcx>,
1072-
krate: &ast::Crate,
1073-
cratename: &str,
1074-
input: &'l Input,
1069+
save_ctxt: &SaveContext<'_, '_>,
1070+
analysis: &Analysis,
10751071
) {
10761072
let sess = &save_ctxt.tcx.sess;
10771073
let (output, file_name) = self.output_file(&save_ctxt);
1078-
let mut visitor = DumpVisitor::new(save_ctxt);
1079-
1080-
visitor.dump_crate_info(cratename, krate);
1081-
visitor.dump_compilation_options(input, cratename);
1082-
visit::walk_crate(&mut visitor, krate);
1083-
1084-
if let Err(e) = serde_json::to_writer(output, &visitor.into_analysis()) {
1074+
if let Err(e) = serde_json::to_writer(output, &analysis) {
10851075
error!("Can't serialize save-analysis: {:?}", e);
10861076
}
10871077

@@ -1097,21 +1087,13 @@ pub struct CallbackHandler<'b> {
10971087
pub callback: &'b mut dyn FnMut(&rls_data::Analysis),
10981088
}
10991089

1100-
impl<'b> SaveHandler for CallbackHandler<'b> {
1101-
fn save<'l, 'tcx>(
1090+
impl SaveHandler for CallbackHandler<'_> {
1091+
fn save(
11021092
&mut self,
1103-
save_ctxt: SaveContext<'l, 'tcx>,
1104-
krate: &ast::Crate,
1105-
cratename: &str,
1106-
input: &'l Input,
1093+
_: &SaveContext<'_, '_>,
1094+
analysis: &Analysis,
11071095
) {
1108-
let mut visitor = DumpVisitor::new(save_ctxt);
1109-
1110-
visitor.dump_crate_info(cratename, krate);
1111-
visitor.dump_compilation_options(input, cratename);
1112-
visit::walk_crate(&mut visitor, krate);
1113-
1114-
(self.callback)(&visitor.into_analysis())
1096+
(self.callback)(analysis)
11151097
}
11161098
}
11171099

@@ -1142,7 +1124,13 @@ pub fn process_crate<'l, 'tcx, H: SaveHandler>(
11421124
impl_counter: Cell::new(0),
11431125
};
11441126

1145-
handler.save(save_ctxt, krate, cratename, input)
1127+
let mut visitor = DumpVisitor::new(save_ctxt);
1128+
1129+
visitor.dump_crate_info(cratename, krate);
1130+
visitor.dump_compilation_options(input, cratename);
1131+
visit::walk_crate(&mut visitor, krate);
1132+
1133+
handler.save(&visitor.save_ctxt, &visitor.analysis())
11461134
})
11471135
}
11481136

0 commit comments

Comments
 (0)