Skip to content

Commit abab763

Browse files
committed
Auto merge of #46540 - euclio:import-parents, r=nrc
save-analysis: add parents to imports This PR populates the `parent` field added to `Import` in `rls-data` 0.14. I'm not quite sure if I handled nested imports' parents correctly: this is a new feature to me. r? @nrc cc rust-dev-tools/rls-analysis#123
2 parents 77efd68 + b82d280 commit abab763

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

src/Cargo.lock

+11-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/librustc_save_analysis/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ rustc_data_structures = { path = "../librustc_data_structures" }
1515
rustc_typeck = { path = "../librustc_typeck" }
1616
syntax = { path = "../libsyntax" }
1717
syntax_pos = { path = "../libsyntax_pos" }
18-
rls-data = "0.13"
18+
rls-data = "0.14"
1919
rls-span = "0.4"
2020
# FIXME(#40527) should move rustc serialize out of tree
2121
rustc-serialize = "0.3"

src/librustc_save_analysis/dump_visitor.rs

+22-3
Original file line numberDiff line numberDiff line change
@@ -1231,13 +1231,26 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
12311231
}
12321232
}
12331233

1234+
/// Dumps imports in a use tree recursively.
1235+
///
1236+
/// A use tree is an import that may contain nested braces (RFC 2128). The `use_tree` parameter
1237+
/// is the current use tree under scrutiny, while `id` and `prefix` are its corresponding node
1238+
/// id and path. `root_item` is the topmost use tree in the hierarchy.
1239+
///
1240+
/// If `use_tree` is a simple or glob import, it is dumped into the analysis data. Otherwise,
1241+
/// each child use tree is dumped recursively.
12341242
fn process_use_tree(&mut self,
12351243
use_tree: &'l ast::UseTree,
12361244
id: NodeId,
1237-
parent_item: &'l ast::Item,
1245+
root_item: &'l ast::Item,
12381246
prefix: &ast::Path) {
12391247
let path = &use_tree.prefix;
1240-
let access = access_from!(self.save_ctxt, parent_item);
1248+
let access = access_from!(self.save_ctxt, root_item);
1249+
1250+
// The parent def id of a given use tree is always the enclosing item.
1251+
let parent = self.save_ctxt.tcx.hir.opt_local_def_id(id)
1252+
.and_then(|id| self.save_ctxt.tcx.parent_def_id(id))
1253+
.map(::id_from_def_id);
12411254

12421255
match use_tree.kind {
12431256
ast::UseTreeKind::Simple(ident) => {
@@ -1276,6 +1289,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
12761289
span,
12771290
name: ident.to_string(),
12781291
value: String::new(),
1292+
parent,
12791293
});
12801294
}
12811295
self.write_sub_paths_truncated(&path);
@@ -1311,6 +1325,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
13111325
span,
13121326
name: "*".to_owned(),
13131327
value: names.join(", "),
1328+
parent,
13141329
});
13151330
}
13161331
self.write_sub_paths(&path);
@@ -1325,7 +1340,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> {
13251340
span: path.span,
13261341
};
13271342
for &(ref tree, id) in nested_items {
1328-
self.process_use_tree(tree, id, parent_item, &prefix);
1343+
self.process_use_tree(tree, id, root_item, &prefix);
13291344
}
13301345
}
13311346
}
@@ -1389,6 +1404,9 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
13891404
if !self.span.filter_generated(alias_span, item.span) {
13901405
let span =
13911406
self.span_from_span(alias_span.expect("No span found for extern crate"));
1407+
let parent = self.save_ctxt.tcx.hir.opt_local_def_id(item.id)
1408+
.and_then(|id| self.save_ctxt.tcx.parent_def_id(id))
1409+
.map(::id_from_def_id);
13921410
self.dumper.import(
13931411
&Access {
13941412
public: false,
@@ -1400,6 +1418,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc
14001418
span,
14011419
name: item.ident.to_string(),
14021420
value: String::new(),
1421+
parent,
14031422
},
14041423
);
14051424
}

0 commit comments

Comments
 (0)