diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-10-26 01:39:47 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-12-01 14:38:47 +0300 |
| commit | 549bd45e9eb13e501416e17887b65ad4189ebe6b (patch) | |
| tree | 15de266b8c52d7b39700d344996438d3433dc66b /src/libsyntax | |
| parent | d3ed34824c31f303b98855fee6fc9213dff1f295 (diff) | |
| download | rust-549bd45e9eb13e501416e17887b65ad4189ebe6b.tar.gz rust-549bd45e9eb13e501416e17887b65ad4189ebe6b.zip | |
resolve: Support aliasing local crate root in extern prelude
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 2402de5a816..d0c4d1c7dce 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -492,6 +492,9 @@ declare_features! ( // `reason = ` in lint attributes and `expect` lint attribute (active, lint_reasons, "1.31.0", Some(54503), None), + + // `extern crate self as foo;` puts local crate root into extern prelude under name `foo`. + (active, extern_crate_self, "1.31.0", Some(54658), None), ); declare_features! ( diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index f13bb7df0b4..33715f206de 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -6783,7 +6783,11 @@ impl<'a> Parser<'a> { let error_msg = "crate name using dashes are not valid in `extern crate` statements"; let suggestion_msg = "if the original crate name uses dashes you need to use underscores \ in the code"; - let mut ident = self.parse_ident()?; + let mut ident = if self.token.is_keyword(keywords::SelfValue) { + self.parse_path_segment_ident() + } else { + self.parse_ident() + }?; let mut idents = vec![]; let mut replacement = vec![]; let mut fixed_crate_name = false; |
