diff options
| author | bors <bors@rust-lang.org> | 2017-12-13 08:32:25 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-12-13 08:32:25 +0000 |
| commit | 61100840e5c978a99b0489e8eaa922da06c05f65 (patch) | |
| tree | 627a0afe984f4fb82327f6b99b158ad1115bd843 /src/librustc_metadata/decoder.rs | |
| parent | dcf3db47c7382d0540a81f01bd0915f5c7a6e411 (diff) | |
| parent | 1b9d0584a044cf63259601498cfd2a70ab213284 (diff) | |
| download | rust-61100840e5c978a99b0489e8eaa922da06c05f65.tar.gz rust-61100840e5c978a99b0489e8eaa922da06c05f65.zip | |
Auto merge of #46419 - jseyfried:all_imports_in_metadata, r=nrc
Record all imports (`use`, `extern crate`) in the crate metadata This PR adds non-`pub` `use` and `extern crate` imports in the crate metadata since hygienic macros invoked in other crates may use them. We already include all other non-`pub` items in the crate metadata. This improves import suggestions in some cases. Fixes #42337. r? @nrc
Diffstat (limited to 'src/librustc_metadata/decoder.rs')
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 3be99e97223..49a017535ff 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -639,7 +639,13 @@ impl<'a, 'tcx> CrateMetadata { ext.kind() ); let ident = Ident::with_empty_ctxt(name); - callback(def::Export { ident: ident, def: def, span: DUMMY_SP }); + callback(def::Export { + ident: ident, + def: def, + vis: ty::Visibility::Public, + span: DUMMY_SP, + is_import: false, + }); } } return @@ -676,7 +682,9 @@ impl<'a, 'tcx> CrateMetadata { callback(def::Export { def, ident: Ident::from_str(&self.item_name(child_index)), + vis: self.get_visibility(child_index), span: self.entry(child_index).span.decode((self, sess)), + is_import: false, }); } } @@ -693,7 +701,9 @@ impl<'a, 'tcx> CrateMetadata { if let (Some(def), Some(name)) = (self.get_def(child_index), def_key.disambiguated_data.data.get_opt_name()) { let ident = Ident::from_str(&name); - callback(def::Export { def: def, ident: ident, span: span }); + let vis = self.get_visibility(child_index); + let is_import = false; + callback(def::Export { def, ident, vis, span, is_import }); // For non-reexport structs and variants add their constructors to children. // Reexport lists automatically contain constructors when necessary. match def { @@ -701,7 +711,11 @@ impl<'a, 'tcx> CrateMetadata { if let Some(ctor_def_id) = self.get_struct_ctor_def_id(child_index) { let ctor_kind = self.get_ctor_kind(child_index); let ctor_def = Def::StructCtor(ctor_def_id, ctor_kind); - callback(def::Export { def: ctor_def, ident: ident, span: span }); + callback(def::Export { + def: ctor_def, + vis: self.get_visibility(ctor_def_id.index), + ident, span, is_import, + }); } } Def::Variant(def_id) => { @@ -709,7 +723,8 @@ impl<'a, 'tcx> CrateMetadata { // value namespace, they are reserved for possible future use. let ctor_kind = self.get_ctor_kind(child_index); let ctor_def = Def::VariantCtor(def_id, ctor_kind); - callback(def::Export { def: ctor_def, ident: ident, span: span }); + let vis = self.get_visibility(child_index); + callback(def::Export { def: ctor_def, ident, vis, span, is_import }); } _ => {} } |
