Skip to content

Commit da5f414

Browse files
committed
Auto merge of #55315 - pietroalbini:release-1.30.0, r=Mark-Simulacrum
Stable release 1.30 This PR also reverts the stabilization of `non_modrs_mods` and the 2018 edition. r? @Mark-Simulacrum cc @rust-lang/release
2 parents f33946f + 4a0c8d1 commit da5f414

File tree

15 files changed

+245
-67
lines changed

15 files changed

+245
-67
lines changed

RELEASES.md

Lines changed: 43 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,31 @@ Version 1.30.0 (2018-10-25)
44
Language
55
--------
66
- [Procedural macros are now available.][52081] These kinds of macros allow for
7-
more powerful code generation, there is a [new chapter available][proc-macros]
8-
in Rust Programming Language book that goes further in depth.
7+
more powerful code generation. There is a [new chapter available][proc-macros]
8+
in the Rust Programming Language book that goes further in depth.
99
- [You can now use keywords as identifiers using the raw identifiers
10-
syntax (`r#`).][53236] e.g. `let r#for = true;`
10+
syntax (`r#`),][53236] e.g. `let r#for = true;`
1111
- [Using anonymous parameters in traits is now deprecated with a warning and
1212
will be a hard error in the 2018 edition.][53272]
1313
- [You can now use `crate` in paths.][54404] This allows you to refer to the
14-
crate root in the path. e.g. `use crate::foo;` refers to `foo` in `src/lib.rs`.
15-
- [Using a external crate now no longer requires being prefixed with `::`.][54404]
16-
e.g. previously using a external crate in a module without a use statement
17-
required `let json = ::serde_json::from_str(foo);` can now be written
14+
crate root in the path, e.g. `use crate::foo;` refers to `foo` in `src/lib.rs`.
15+
- [Using a external crate no longer requires being prefixed with `::`.][54404]
16+
Previously, using a external crate in a module without a use statement
17+
required `let json = ::serde_json::from_str(foo);` but can now be written
1818
as `let json = serde_json::from_str(foo);`.
1919
- [You can now apply the `#[used]` attribute to static items to prevent the
20-
compiler from optimising them away even if they appear to be unused.][51363]
20+
compiler from optimising them away, even if they appear to be unused,][51363]
2121
e.g. `#[used] static FOO: u32 = 1;`
2222
- [You can now import and reexport macros from other crates with the `use`
2323
syntax.][50911] Macros exported with `#[macro_export]` are now placed into
2424
the root module of the crate. If your macro relies on calling other local
25-
macros it is recommended to export with the
26-
`#[macro_export(local_inner_macros)]` attribute so that users won't have to
27-
import those macros.
28-
- [`mod.rs` files are now optional.][54146] Previously if you had a `foo` module
29-
with a `bar` submodule, you would have `src/foo/mod.rs` and `src/foo/bar.rs`.
30-
Now you can have `src/foo.rs` and `src/foo/bar.rs` to achieve the same effect.
25+
macros, it is recommended to export with the
26+
`#[macro_export(local_inner_macros)]` attribute so users won't have to import
27+
those macros.
3128
- [You can now catch visibility keywords (e.g. `pub`, `pub(crate)`) in macros
3229
using the `vis` specifier.][53370]
33-
- [Non-macro attributes now allow all forms of literals not just
34-
strings.][53044] e.g. Previously you would write `#[attr("true")]` you can now
30+
- [Non-macro attributes now allow all forms of literals, not just
31+
strings.][53044] Previously, you would write `#[attr("true")]`, and you can now
3532
write `#[attr(true)]`.
3633
- [You can now specify a function to handle a panic in the Rust runtime with the
3734
`#[panic_handler]` attribute.][51366]
@@ -54,9 +51,9 @@ Stabilized APIs
5451
- [`Ipv6Addr::UNSPECIFIED`]
5552
- [`Iterator::find_map`]
5653

57-
The following methods are a replacement methods for `trim_left`, `trim_right`,
58-
`trim_left_matches`, and `trim_right_matches`. Which will be deprecated
59-
in 1.33.0.
54+
The following methods are replacement methods for `trim_left`, `trim_right`,
55+
`trim_left_matches`, and `trim_right_matches`, which will be deprecated
56+
in 1.33.0:
6057
- [`str::trim_end_matches`]
6158
- [`str::trim_end`]
6259
- [`str::trim_start_matches`]
@@ -76,12 +73,12 @@ Misc
7673
----
7774
- [`rustdoc` allows you to specify what edition to treat your code as with the
7875
`--edition` option.][54057]
79-
- [`rustdoc` now has the `--color` (Specify whether to output color) and
80-
`--error-format` (Specify error format e.g. `json`) options.][53003]
76+
- [`rustdoc` now has the `--color` (specify whether to output color) and
77+
`--error-format` (specify error format, e.g. `json`) options.][53003]
8178
- [We now distribute a `rust-gdbgui` script that invokes `gdbgui` with Rust
8279
debug symbols.][53774]
8380
- [Attributes from Rust tools such as `rustfmt` or `clippy` are now
84-
available.][53459] e.g. `#[rustfmt::skip]` will skip formatting the next item.
81+
available,][53459] e.g. `#[rustfmt::skip]` will skip formatting the next item.
8582

8683
[50911]: https://github.com/rust-lang/rust/pull/50911/
8784
[51363]: https://github.com/rust-lang/rust/pull/51363/
@@ -153,7 +150,7 @@ Compiler
153150

154151
Libraries
155152
---------
156-
- [`Once::call_once` now no longer requires `Once` to be `'static`.][52239]
153+
- [`Once::call_once` no longer requires `Once` to be `'static`.][52239]
157154
- [`BuildHasherDefault` now implements `PartialEq` and `Eq`.][52402]
158155
- [`Box<CStr>`, `Box<OsStr>`, and `Box<Path>` now implement `Clone`.][51912]
159156
- [Implemented `PartialEq<&str>` for `OsString` and `PartialEq<OsString>`
@@ -169,10 +166,10 @@ Stabilized APIs
169166

170167
Cargo
171168
-----
172-
- [Cargo can silently fix some bad lockfiles ][cargo/5831] You can use
173-
`--locked` to disable this behaviour.
169+
- [Cargo can silently fix some bad lockfiles.][cargo/5831] You can use
170+
`--locked` to disable this behavior.
174171
- [`cargo-install` will now allow you to cross compile an install
175-
using `--target`][cargo/5614]
172+
using `--target`.][cargo/5614]
176173
- [Added the `cargo-fix` subcommand to automatically move project code from
177174
2015 edition to 2018.][cargo/5723]
178175
- [`cargo doc` can now optionally document private types using the
@@ -184,15 +181,15 @@ Misc
184181
the specified level to that level.][52354] For example `--cap-lints warn`
185182
will demote `deny` and `forbid` lints to `warn`.
186183
- [`rustc` and `rustdoc` will now have the exit code of `1` if compilation
187-
fails, and `101` if there is a panic.][52197]
184+
fails and `101` if there is a panic.][52197]
188185
- [A preview of clippy has been made available through rustup.][51122]
189-
You can install the preview with `rustup component add clippy-preview`
186+
You can install the preview with `rustup component add clippy-preview`.
190187

191188
Compatibility Notes
192189
-------------------
193190
- [`str::{slice_unchecked, slice_unchecked_mut}` are now deprecated.][51807]
194191
Use `str::get_unchecked(begin..end)` instead.
195-
- [`std::env::home_dir` is now deprecated for its unintuitive behaviour.][51656]
192+
- [`std::env::home_dir` is now deprecated for its unintuitive behavior.][51656]
196193
Consider using the `home_dir` function from
197194
https://crates.io/crates/dirs instead.
198195
- [`rustc` will no longer silently ignore invalid data in target spec.][52330]
@@ -432,7 +429,7 @@ Language
432429
be used as an identifier.
433430
- [The dyn syntax is now available.][49968] This syntax is equivalent to the
434431
bare `Trait` syntax, and should make it clearer when being used in tandem with
435-
`impl Trait`. Since it is equivalent to the following syntax:
432+
`impl Trait` because it is equivalent to the following syntax:
436433
`&Trait == &dyn Trait`, `&mut Trait == &mut dyn Trait`, and
437434
`Box<Trait> == Box<dyn Trait>`.
438435
- [Attributes on generic parameters such as types and lifetimes are
@@ -495,10 +492,10 @@ Cargo
495492
a different directory than `target` for placing compilation artifacts.
496493
- [Cargo will be adding automatic target inference for binaries, benchmarks,
497494
examples, and tests in the Rust 2018 edition.][cargo/5335] If your project specifies
498-
specific targets e.g. using `[[bin]]` and have other binaries in locations
495+
specific targets, e.g. using `[[bin]]`, and have other binaries in locations
499496
where cargo would infer a binary, Cargo will produce a warning. You can
500-
disable this feature ahead of time by setting any of the following `autobins`,
501-
`autobenches`, `autoexamples`, `autotests` to false.
497+
disable this feature ahead of time by setting any of the following to false:
498+
`autobins`, `autobenches`, `autoexamples`, `autotests`.
502499
- [Cargo will now cache compiler information.][cargo/5359] This can be disabled by
503500
setting `CARGO_CACHE_RUSTC_INFO=0` in your environment.
504501

@@ -514,8 +511,8 @@ Compatibility Notes
514511
work.][49896] e.g. `::core::prelude::v1::StrExt::is_empty("")` will not
515512
compile, `"".is_empty()` will still compile.
516513
- [`Debug` output on `atomic::{AtomicBool, AtomicIsize, AtomicPtr, AtomicUsize}`
517-
will only print the inner type.][48553] e.g.
518-
`print!("{:?}", AtomicBool::new(true))` will print `true`
514+
will only print the inner type.][48553] E.g.
515+
`print!("{:?}", AtomicBool::new(true))` will print `true`,
519516
not `AtomicBool(true)`.
520517
- [The maximum number for `repr(align(N))` is now 2²⁹.][50378] Previously you
521518
could enter higher numbers but they were not supported by LLVM. Up to 512MB
@@ -578,7 +575,7 @@ Version 1.26.2 (2018-06-05)
578575
Compatibility Notes
579576
-------------------
580577

581-
- [The borrow checker was fixed to avoid unsoundness when using match ergonomics][51117]
578+
- [The borrow checker was fixed to avoid unsoundness when using match ergonomics.][51117]
582579

583580
[51117]: https://github.com/rust-lang/rust/issues/51117
584581

@@ -589,18 +586,18 @@ Version 1.26.1 (2018-05-29)
589586
Tools
590587
-----
591588

592-
- [RLS now works on Windows][50646]
593-
- [Rustfmt stopped badly formatting text in some cases][rustfmt/2695]
589+
- [RLS now works on Windows.][50646]
590+
- [Rustfmt stopped badly formatting text in some cases.][rustfmt/2695]
594591

595592

596593
Compatibility Notes
597594
--------
598595

599596
- [`fn main() -> impl Trait` no longer works for non-Termination
600-
trait][50656]
597+
trait.][50656]
601598
This reverts an accidental stabilization.
602-
- [`NaN > NaN` no longer returns true in const-fn contexts][50812]
603-
- [Prohibit using turbofish for `impl Trait` in method arguments][50950]
599+
- [`NaN > NaN` no longer returns true in const-fn contexts.][50812]
600+
- [Prohibit using turbofish for `impl Trait` in method arguments.][50950]
604601

605602
[50646]: https://github.com/rust-lang/rust/issues/50646
606603
[50656]: https://github.com/rust-lang/rust/pull/50656
@@ -616,18 +613,18 @@ Language
616613
- [Closures now implement `Copy` and/or `Clone` if all captured variables
617614
implement either or both traits.][49299]
618615
- [The inclusive range syntax e.g. `for x in 0..=10` is now stable.][47813]
619-
- [The `'_` lifetime is now stable. The underscore lifetime can be used anywhere where a
616+
- [The `'_` lifetime is now stable. The underscore lifetime can be used anywhere a
620617
lifetime can be elided.][49458]
621618
- [`impl Trait` is now stable allowing you to have abstract types in returns
622-
or in function parameters.][49255] e.g. `fn foo() -> impl Iterator<Item=u8>` or
619+
or in function parameters.][49255] E.g. `fn foo() -> impl Iterator<Item=u8>` or
623620
`fn open(path: impl AsRef<Path>)`.
624621
- [Pattern matching will now automatically apply dereferences.][49394]
625622
- [128-bit integers in the form of `u128` and `i128` are now stable.][49101]
626623
- [`main` can now return `Result<(), E: Debug>`][49162] in addition to `()`.
627624
- [A lot of operations are now available in a const context.][46882] E.g. You
628625
can now index into constant arrays, reference and dereference into constants,
629-
and use Tuple struct constructors.
630-
- [Fixed entry slice patterns are now stable.][48516] e.g.
626+
and use tuple struct constructors.
627+
- [Fixed entry slice patterns are now stable.][48516] E.g.
631628
```rust
632629
let points = [1, 2, 3, 4];
633630
match points {
@@ -1052,7 +1049,7 @@ Language
10521049
Compiler
10531050
--------
10541051
- [Enabled `TrapUnreachable` in LLVM which should mitigate the impact of
1055-
undefined behaviour.][45920]
1052+
undefined behavior.][45920]
10561053
- [rustc now suggests renaming import if names clash.][45660]
10571054
- [Display errors/warnings correctly when there are zero-width or
10581055
wide characters.][45711]

src/ci/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fi
5151
#
5252
# FIXME: need a scheme for changing this `nightly` value to `beta` and `stable`
5353
# either automatically or manually.
54-
export RUST_RELEASE_CHANNEL=beta
54+
export RUST_RELEASE_CHANNEL=stable
5555
if [ "$DEPLOY$DEPLOY_ALT" != "" ]; then
5656
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --release-channel=$RUST_RELEASE_CHANNEL"
5757
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-static-stdcpp"

src/doc/rustdoc/src/command-line-arguments.md

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -345,17 +345,3 @@ $ rustdoc src/lib.rs --sysroot /path/to/sysroot
345345

346346
Similar to `rustc --sysroot`, this lets you change the sysroot `rustdoc` uses
347347
when compiling your code.
348-
349-
### `--edition`: control the edition of docs and doctests
350-
351-
Using this flag looks like this:
352-
353-
```bash
354-
$ rustdoc src/lib.rs --edition 2018
355-
$ rustdoc --test src/lib.rs --edition 2018
356-
```
357-
358-
This flag allows rustdoc to treat your rust code as the given edition. It will compile doctests with
359-
the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015`
360-
(the first edition).
361-

src/doc/rustdoc/src/unstable-features.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,19 @@ details.
346346

347347
[issue-display-warnings]: https://github.com/rust-lang/rust/issues/41574
348348

349+
### `--edition`: control the edition of docs and doctests
350+
351+
Using this flag looks like this:
352+
353+
```bash
354+
$ rustdoc src/lib.rs -Z unstable-options --edition 2018
355+
$ rustdoc --test src/lib.rs -Z unstable-options --edition 2018
356+
```
357+
358+
This flag allows rustdoc to treat your rust code as the given edition. It will compile doctests with
359+
the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015`
360+
(the first edition).
361+
349362
### `--extern-html-root-url`: control how rustdoc links to non-local crates
350363

351364
Using this flag looks like this:

src/librustdoc/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ fn opts() -> Vec<RustcOptGroup> {
286286
\"light-suffix.css\"",
287287
"PATH")
288288
}),
289-
stable("edition", |o| {
289+
unstable("edition", |o| {
290290
o.optopt("", "edition",
291291
"edition to use when compiling rust code (default: 2015)",
292292
"EDITION")

src/libsyntax/feature_gate.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use visit::{self, FnKind, Visitor};
3737
use parse::ParseSess;
3838
use symbol::{keywords, Symbol};
3939

40-
use std::{env};
40+
use std::{env, path};
4141

4242
macro_rules! set {
4343
// The const_fn feature also enables the min_const_fn feature, because `min_const_fn` allows
@@ -403,6 +403,9 @@ declare_features! (
403403
// `extern` in paths
404404
(active, extern_in_paths, "1.23.0", Some(44660), None),
405405

406+
// `foo.rs` as an alternative to `foo/mod.rs`
407+
(active, non_modrs_mods, "1.24.0", Some(44660), Some(Edition::Edition2018)),
408+
406409
// Use `?` as the Kleene "at most one" operator
407410
(active, macro_at_most_once_rep, "1.25.0", Some(48075), None),
408411

@@ -651,8 +654,6 @@ declare_features! (
651654
(accepted, repr_transparent, "1.28.0", Some(43036), None),
652655
// Defining procedural macros in `proc-macro` crates
653656
(accepted, proc_macro, "1.29.0", Some(38356), None),
654-
// `foo.rs` as an alternative to `foo/mod.rs`
655-
(accepted, non_modrs_mods, "1.30.0", Some(44660), None),
656657
// Allows use of the :vis macro fragment specifier
657658
(accepted, macro_vis_matcher, "1.30.0", Some(41022), None),
658659
// Allows importing and reexporting macros with `use`,
@@ -1500,6 +1501,31 @@ impl<'a> PostExpansionVisitor<'a> {
15001501
}
15011502
}
15021503

1504+
impl<'a> PostExpansionVisitor<'a> {
1505+
fn whole_crate_feature_gates(&mut self, _krate: &ast::Crate) {
1506+
for &(ident, span) in &*self.context.parse_sess.non_modrs_mods.borrow() {
1507+
if !span.allows_unstable() {
1508+
let cx = &self.context;
1509+
let level = GateStrength::Hard;
1510+
let has_feature = cx.features.non_modrs_mods;
1511+
let name = "non_modrs_mods";
1512+
debug!("gate_feature(feature = {:?}, span = {:?}); has? {}",
1513+
name, span, has_feature);
1514+
1515+
if !has_feature && !span.allows_unstable() {
1516+
leveled_feature_err(
1517+
cx.parse_sess, name, span, GateIssue::Language,
1518+
"mod statements in non-mod.rs files are unstable", level
1519+
)
1520+
.help(&format!("on stable builds, rename this file to {}{}mod.rs",
1521+
ident, path::MAIN_SEPARATOR))
1522+
.emit();
1523+
}
1524+
}
1525+
}
1526+
}
1527+
}
1528+
15031529
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
15041530
fn visit_attribute(&mut self, attr: &ast::Attribute) {
15051531
if !attr.span.allows_unstable() {
@@ -2066,6 +2092,7 @@ pub fn check_crate(krate: &ast::Crate,
20662092
};
20672093

20682094
let visitor = &mut PostExpansionVisitor { context: &ctx };
2095+
visitor.whole_crate_feature_gates(krate);
20692096
visit::walk_crate(visitor, krate);
20702097
}
20712098

src/libsyntax_pos/edition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl Edition {
6565
pub fn is_stable(&self) -> bool {
6666
match *self {
6767
Edition::Edition2015 => true,
68-
Edition::Edition2018 => true,
68+
Edition::Edition2018 => false,
6969
}
7070
}
7171
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// error-pattern: mod statements in non-mod.rs files are unstable
12+
13+
mod mod_file_not_owning_aux1;
14+
15+
fn main() {}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
error[E0658]: mod statements in non-mod.rs files are unstable (see issue #44660)
2+
--> $DIR/mod_file_not_owning_aux1.rs:14:17
3+
|
4+
LL | () => { mod mod_file_not_owning_aux2; }
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^
6+
LL | }
7+
LL | m!();
8+
| ----- in this macro invocation
9+
|
10+
= help: add #![feature(non_modrs_mods)] to the crate attributes to enable
11+
= help: on stable builds, rename this file to mod_file_not_owning_aux1/mod.rs
12+
13+
error: aborting due to previous error
14+
15+
For more information about this error, try `rustc --explain E0658`.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// error-pattern: mod statements in non-mod.rs files are unstable
12+
13+
// This is not a directory owner since the file name is not "mod.rs".
14+
#[path = "mod_file_not_owning_aux1.rs"]
15+
mod foo;

0 commit comments

Comments
 (0)