Skip to content

Commit 04c661b

Browse files
committed
pre-expansion gate crate_visibility_modifier
1 parent c17a1fd commit 04c661b

File tree

5 files changed

+17
-9
lines changed

5 files changed

+17
-9
lines changed

src/libsyntax/feature_gate/check.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -652,14 +652,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
652652
}
653653
visit::walk_impl_item(self, ii)
654654
}
655-
656-
fn visit_vis(&mut self, vis: &'a ast::Visibility) {
657-
if let ast::VisibilityKind::Crate(ast::CrateSugar::JustCrate) = vis.node {
658-
gate_feature_post!(&self, crate_visibility_modifier, vis.span,
659-
"`crate` visibility modifier is experimental");
660-
}
661-
visit::walk_vis(self, vis)
662-
}
663655
}
664656

665657
pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute],
@@ -847,6 +839,7 @@ pub fn check_crate(krate: &ast::Crate,
847839
gate_all!(const_extern_fn, "`const extern fn` definitions are unstable");
848840
gate_all!(trait_alias, "trait aliases are experimental");
849841
gate_all!(associated_type_bounds, "associated type bounds are unstable");
842+
gate_all!(crate_visibility_modifier, "`crate` visibility modifier is experimental");
850843

851844
visit::walk_crate(&mut visitor, krate);
852845
}

src/libsyntax/parse/parser.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,7 @@ impl<'a> Parser<'a> {
11221122
self.expected_tokens.push(TokenType::Keyword(kw::Crate));
11231123
if self.is_crate_vis() {
11241124
self.bump(); // `crate`
1125+
self.sess.gated_spans.crate_visibility_modifier.borrow_mut().push(self.prev_span);
11251126
return Ok(respan(self.prev_span, VisibilityKind::Crate(CrateSugar::JustCrate)));
11261127
}
11271128

src/libsyntax/sess.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ crate struct GatedSpans {
3434
pub trait_alias: Lock<Vec<Span>>,
3535
/// Spans collected for gating `associated_type_bounds`, e.g. `Iterator<Item: Ord>`.
3636
pub associated_type_bounds: Lock<Vec<Span>>,
37+
/// Spans collected for gating `crate_visibility_modifier`, e.g. `crate fn`.
38+
pub crate_visibility_modifier: Lock<Vec<Span>>,
3739
}
3840

3941
/// Info about a parsing session.

src/test/ui/feature-gates/feature-gate-crate_visibility_modifier.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@ crate struct Bender { //~ ERROR `crate` visibility modifier is experimental
55
water: bool,
66
}
77

8+
macro_rules! accept_vis { ($v:vis) => {} }
9+
accept_vis!(crate); //~ ERROR `crate` visibility modifier is experimental
10+
811
fn main() {}

src/test/ui/feature-gates/feature-gate-crate_visibility_modifier.stderr

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ LL | crate struct Bender {
77
= note: for more information, see https://github.com/rust-lang/rust/issues/53120
88
= help: add `#![feature(crate_visibility_modifier)]` to the crate attributes to enable
99

10-
error: aborting due to previous error
10+
error[E0658]: `crate` visibility modifier is experimental
11+
--> $DIR/feature-gate-crate_visibility_modifier.rs:9:13
12+
|
13+
LL | accept_vis!(crate);
14+
| ^^^^^
15+
|
16+
= note: for more information, see https://github.com/rust-lang/rust/issues/53120
17+
= help: add `#![feature(crate_visibility_modifier)]` to the crate attributes to enable
18+
19+
error: aborting due to 2 previous errors
1120

1221
For more information about this error, try `rustc --explain E0658`.

0 commit comments

Comments
 (0)