Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rustdoc] stabilize cfg(doctest) #63803

Merged
merged 3 commits into from Oct 31, 2019
Merged

Conversation

@GuillaumeGomez
Copy link
Member

GuillaumeGomez commented Aug 22, 2019

Fixes #62210.

Since we removed rustdoc from providing cfg(test) on test runs, it's been replaced by cfg(doctest). It'd be nice to have it in not too far in the future.

@GuillaumeGomez GuillaumeGomez force-pushed the GuillaumeGomez:stabilize-doctest branch from 8946805 to 2e000c0 Aug 22, 2019
@GuillaumeGomez GuillaumeGomez changed the title stabilize cfg(doctest) [rustdoc] stabilize cfg(doctest) Aug 22, 2019
@rust-highfive

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Aug 22, 2019

The job x86_64-gnu-llvm-6.0 of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-08-22T09:30:48.5798182Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-08-22T09:30:48.6018608Z ##[command]git config gc.auto 0
2019-08-22T09:30:48.6095962Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-08-22T09:30:48.6145030Z ##[command]git config --get-all http.proxy
2019-08-22T09:30:48.6296509Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/63803/merge:refs/remotes/pull/63803/merge
2019-08-22T09:30:50.6930153Z remote:                                                                                         
---
2019-08-22T09:31:24.0770250Z do so (now or later) by using -b with the checkout command again. Example:
2019-08-22T09:31:24.0770518Z 
2019-08-22T09:31:24.0771003Z   git checkout -b <new-branch-name>
2019-08-22T09:31:24.0771256Z 
2019-08-22T09:31:24.0771495Z HEAD is now at 9096e1a21 Merge 2e000c03bb60d32e49cb3ece7a36d7194c74ee90 into 42dcd4b7c5fb7b61bc2f4c0842f66e5ad40057e4
2019-08-22T09:31:24.0931973Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-08-22T09:31:24.0935108Z ==============================================================================
2019-08-22T09:31:24.0935183Z Task         : Bash
2019-08-22T09:31:24.0935226Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-08-22T09:37:55.2917135Z     Finished release [optimized] target(s) in 1m 29s
2019-08-22T09:37:55.2992930Z tidy check
2019-08-22T09:37:56.2276996Z * 578 error codes
2019-08-22T09:37:56.2290719Z * highest error code: E0733
2019-08-22T09:37:56.5981484Z tidy error: Found 1 features without a gate test.
2019-08-22T09:37:56.5982197Z Expected a gate test for the feature 'cfg_doctest'.
2019-08-22T09:37:56.5982472Z Hint: create a failing test file named 'feature-gate-cfg_doctest.rs'
2019-08-22T09:37:56.5982715Z       in the 'ui' test suite, with its failures due to
2019-08-22T09:37:56.5982767Z       missing usage of `#![feature(cfg_doctest)]`.
2019-08-22T09:37:56.5982994Z Hint: If you already have such a test and don't want to rename it,
2019-08-22T09:37:56.5983222Z       you can also add a // gate-test-cfg_doctest line to the test file.
2019-08-22T09:37:57.2811687Z some tidy checks failed
2019-08-22T09:37:57.2812652Z 
2019-08-22T09:37:57.2812652Z 
2019-08-22T09:37:57.2813762Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/tidy" "/checkout/src" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "--no-vendor"
2019-08-22T09:37:57.2814237Z 
2019-08-22T09:37:57.2814275Z 
2019-08-22T09:37:57.2821073Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
2019-08-22T09:37:57.2821346Z Build completed unsuccessfully in 0:01:33
2019-08-22T09:37:57.2821346Z Build completed unsuccessfully in 0:01:33
2019-08-22T09:37:57.2873477Z == clock drift check ==
2019-08-22T09:37:57.2883640Z   local time: Thu Aug 22 09:37:57 UTC 2019
2019-08-22T09:37:57.3729628Z   network time: Thu, 22 Aug 2019 09:37:57 GMT
2019-08-22T09:37:57.3729920Z == end clock drift check ==
2019-08-22T09:37:58.7510558Z ##[error]Bash exited with code '1'.
2019-08-22T09:37:58.7558292Z ##[section]Starting: Checkout
2019-08-22T09:37:58.7560117Z ==============================================================================
2019-08-22T09:37:58.7560187Z Task         : Get sources
2019-08-22T09:37:58.7560232Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Aug 22, 2019

Does it make sense to open a PR before the discussion mentioned at #62210 (comment) has been had?

@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Aug 22, 2019

@RalfJung We already validated to stabilize cfg(test) in rustdoc before removing it because of issues. Therefore, we also said that the new feature should be cfg(doctest). From this point, I guess we already had the discussion?

@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Aug 22, 2019

Oh and I fixed the failure, just waiting for github to update the display I guess...

@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Aug 22, 2019

@GuillaumeGomez do you have pointers to that discussion?

@GuillaumeGomez GuillaumeGomez force-pushed the GuillaumeGomez:stabilize-doctest branch from 9472a47 to 0f91e98 Aug 22, 2019
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Aug 22, 2019

Isn't the issue description enough? And the fact that we stabilized the cfg(test) too?

src/libsyntax/feature_gate.rs Outdated Show resolved Hide resolved
@bors

This comment has been minimized.

Copy link
Contributor

bors commented Aug 24, 2019

☔️ The latest upstream changes (presumably #63824) made this pull request unmergeable. Please resolve the merge conflicts.

@Kixiron

This comment has been minimized.

Copy link

Kixiron commented Aug 26, 2019

Ping from triage. @GuillaumeGomez any progress?

@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Aug 27, 2019

Need to fix conflict (again) but beside that I'm waiting for someone to approve.

@Dylan-DPC Dylan-DPC removed the S-blocked label Aug 29, 2019
@GuillaumeGomez GuillaumeGomez force-pushed the GuillaumeGomez:stabilize-doctest branch from b859350 to 116185e Sep 3, 2019
collecting doctests, so you can utilize doctest functionality without forcing the test to appear in
docs, or to find an arbitrary private item to include it on.

If you add `#![feature(cfg_doctest)]` to your crate, Rustdoc will set `cfg(doctest)` when collecting

This comment has been minimized.

Copy link
@Mark-Simulacrum

Mark-Simulacrum Sep 4, 2019

Member

Since we're stabilizing this, I think the note here about features should be removed, right?


If you add `#![feature(cfg_doctest)]` to your crate, Rustdoc will set `cfg(doctest)` when collecting
doctests. Note that they will still link against only the public items of your crate; if you need to
test private items, unit tests are still the way to go.

This comment has been minimized.

Copy link
@Mark-Simulacrum

Mark-Simulacrum Sep 4, 2019

Member

Maybe something like "either make items conditionally public via cfg(doctest) or write a unit test"?

collecting doctests, so you can utilize doctest functionality without forcing the test to appear in
docs, or to find an arbitrary private item to include it on.

If you add `#![feature(cfg_doctest)]` to your crate, Rustdoc will set `cfg(doctest)` when collecting

This comment has been minimized.

Copy link
@Mark-Simulacrum

Mark-Simulacrum Sep 4, 2019

Member

I would avoid the "collecting" language I think -- maybe "when compiling a crate for use in doctests, rustdoc will set cfg(doctest).

/// let x = my_crate::MyStruct(-5);
/// ```
#[cfg(doctest)]
pub struct MyStructOnlyTakesUsize;

This comment has been minimized.

Copy link
@Mark-Simulacrum

Mark-Simulacrum Sep 4, 2019

Member

It would be good to add a note somewhere that this struct isn't actually exposed in anyway, i.e., it won't be in documentation or in the public API of this crate.

@Mark-Simulacrum

This comment has been minimized.

Copy link
Member

Mark-Simulacrum commented Sep 4, 2019

@GuillaumeGomez Let's also initiate FCP (should be @rfcbot fcp merge), since this is a stabilization.

I think modulo FCP this PR is good to go from a stabilization/documentation standpoint; I would like to think some more about it but I can do that async with FCP and such.

@GuillaumeGomez GuillaumeGomez force-pushed the GuillaumeGomez:stabilize-doctest branch from 116185e to 1174308 Sep 4, 2019
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Sep 4, 2019

I made the suggested changes. Thanks for reviewing!

@GuillaumeGomez Let's also initiate FCP (should be @rfcbot fcp merge), since this is a stabilization.

I think modulo FCP this PR is good to go from a stabilization/documentation standpoint; I would like to think some more about it but I can do that async with FCP and such.

Completely fine by me. Let's go for it!

@rfcbot fcp merge

@GuillaumeGomez GuillaumeGomez force-pushed the GuillaumeGomez:stabilize-doctest branch from d575cdc to 1595fde Oct 29, 2019
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Oct 29, 2019

Rebased.

@rfcbot

This comment has been minimized.

Copy link

rfcbot commented Oct 31, 2019

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

The RFC will be merged soon.

@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Oct 31, 2019

@bors: r=ollie27,QuietMisdreavus,Mark-Simulacrum

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Oct 31, 2019

📌 Commit 1595fde has been approved by ollie27,QuietMisdreavus,Mark-Simulacrum

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Oct 31, 2019

⌛️ Testing commit 1595fde with merge 92df638...

bors added a commit that referenced this pull request Oct 31, 2019
…ietMisdreavus,Mark-Simulacrum

[rustdoc] stabilize cfg(doctest)

Fixes #62210.

Since we removed rustdoc from providing cfg(test) on test runs, it's been replaced by cfg(doctest). It'd be nice to have it in not too far in the future.
@bors

This comment has been minimized.

Copy link
Contributor

bors commented Oct 31, 2019

☀️ Test successful - checks-azure
Approved by: ollie27,QuietMisdreavus,Mark-Simulacrum
Pushing 92df638 to master...

@bors bors added the merged-by-bors label Oct 31, 2019
@bors bors merged commit 1595fde into rust-lang:master Oct 31, 2019
5 checks passed
5 checks passed
homu Test successful
Details
pr Build #20191029.28 succeeded
Details
pr (Linux mingw-check) Linux mingw-check succeeded
Details
pr (Linux x86_64-gnu-llvm-6.0) Linux x86_64-gnu-llvm-6.0 succeeded
Details
pr (LinuxTools) LinuxTools succeeded
Details
@GuillaumeGomez GuillaumeGomez deleted the GuillaumeGomez:stabilize-doctest branch Oct 31, 2019
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Oct 31, 2019

FINALLY!

@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Nov 3, 2019

After this PR landed, we are seeing compile failures from feature(cfg_doctest) in Gilnaa/memoffset#30. Shouldn't that just be a warning or so?

@RalfJung

This comment has been minimized.

Copy link
Member

RalfJung commented Nov 3, 2019

Never mind, that was just an outdated rustc.

@ollie27 ollie27 added the relnotes label Nov 25, 2019
@ollie27 ollie27 added this to the 1.40 milestone Nov 25, 2019
@ctsrc

This comment has been minimized.

Copy link

ctsrc commented Dec 11, 2019

Am I misunderstanding how this is supposed to work?

I thought it would enable me to use things in doc tests that were otherwise not included. But when I define a pub function for example and mark it with #[cfg(doctest)] because I want it to be available only to the doc tests and then run it in the doc test, it is not found.

I am using cargo 1.41.0-nightly (626f0f40e 2019-12-03).

I create a new library package with cargo init --lib hello as an example, and I put the following in src/lib.rs:

//! Hello
//!
//! ```
//! use crate::hello::hello;
//! hello();
//! ```

#[cfg(doctest)]
pub fn hello ()
{
  println!("hello");
}

When I run cargo test, I get the following output:

    Finished test [unoptimized + debuginfo] target(s) in 0.01s
     Running target/debug/deps/hello-c5693732db1d4581

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests hello

running 1 test
test src/lib.rs -  (line 3) ... FAILED

failures:

---- src/lib.rs -  (line 3) stdout ----
error[E0432]: unresolved import `crate::hello::hello`
 --> src/lib.rs:4:5
  |
4 | use crate::hello::hello;
  |     ^^^^^^^^^^^^^^^^^^^ no `hello` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
Couldn't compile the test.

failures:
    src/lib.rs -  (line 3)

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--doc'
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Dec 11, 2019

Shouldn't it be use crate::hello;?

@ctsrc

This comment has been minimized.

Copy link

ctsrc commented Dec 13, 2019

@GuillaumeGomez Any which way has the same result.

First, create empty lib crate.

cargo init --lib foo

With use crate::foo::bar:

//! Hello
//!
//! ```
//! use crate::foo::bar;
//! bar();
//! ```

#[cfg(doctest)]
pub fn bar ()
{
  println!("hello");
}
   Compiling foo v0.1.0 (/home/user/tmp/foo)
    Finished test [unoptimized + debuginfo] target(s) in 0.01s
     Running target/debug/deps/foo-d4d7a4ec5556181e

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests foo

running 1 test
test src/lib.rs -  (line 3) ... FAILED

failures:

---- src/lib.rs -  (line 3) stdout ----
error[E0432]: unresolved import `crate::foo::bar`
 --> src/lib.rs:4:5
  |
4 | use crate::foo::bar;
  |     ^^^^^^^^^^^^^^^ no `bar` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
Couldn't compile the test.

failures:
    src/lib.rs -  (line 3)

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--doc'

With use foo::bar:

//! Hello
//!
//! ```
//! use foo::bar;
//! bar();
//! ```

#[cfg(doctest)]
pub fn bar ()
{
  println!("hello");
}
   Compiling foo v0.1.0 (/home/user/tmp/foo)
    Finished test [unoptimized + debuginfo] target(s) in 0.24s
     Running target/debug/deps/foo-d4d7a4ec5556181e

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests foo

running 1 test
test src/lib.rs -  (line 3) ... FAILED

failures:

---- src/lib.rs -  (line 3) stdout ----
error[E0432]: unresolved import `foo::bar`
 --> src/lib.rs:4:5
  |
4 | use foo::bar;
  |     ^^^^^^^^ no `bar` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
Couldn't compile the test.

failures:
    src/lib.rs -  (line 3)

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--doc'
//! Hello
//!
//! ```
//! use crate::bar;
//! bar();
//! ```

#[cfg(doctest)]
pub fn bar ()
{
  println!("hello");
}

With use crate::bar:

   Compiling foo v0.1.0 (/home/user/tmp/foo)
    Finished test [unoptimized + debuginfo] target(s) in 0.23s
     Running target/debug/deps/foo-d4d7a4ec5556181e

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests foo

running 1 test
test src/lib.rs -  (line 3) ... FAILED

failures:

---- src/lib.rs -  (line 3) stdout ----
error[E0432]: unresolved import `crate::bar`
 --> src/lib.rs:4:5
  |
3 | use crate::bar;
  |     ^^^^^^^^^^ no `bar` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
Couldn't compile the test.

failures:
    src/lib.rs -  (line 3)

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out

error: test failed, to rerun pass '--doc'
@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Dec 13, 2019

This isn't normal indeed. Checking what's going on.

@GuillaumeGomez

This comment has been minimized.

Copy link
Member Author

GuillaumeGomez commented Dec 14, 2019

I created #67295 to keep track of this issue. I'm currently focused on next gtk-rs release but once done, I'll check this one and fix it.

@ctsrc

This comment has been minimized.

Copy link

ctsrc commented Dec 15, 2019

I created #67295 to keep track of this issue. I'm currently focused on next gtk-rs release but once done, I'll check this one and fix it.

Excellent, thank you :)

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 6, 2020
Version 1.40.0 (2019-12-19)
===========================

Language
--------
- [You can now use tuple `struct`s and tuple `enum` variant's constructors in
  `const` contexts.][65188] e.g.

  ```rust
  pub struct Point(i32, i32);

  const ORIGIN: Point = {
      let constructor = Point;

      constructor(0, 0)
  };
  ```

- [You can now mark `struct`s, `enum`s, and `enum` variants with the `#[non_exhaustive]` attribute to
  indicate that there may be variants or fields added in the future.][64639]
  For example this requires adding a wild-card branch (`_ => {}`) to any match
  statements on a non-exhaustive `enum`. [(RFC 2008)]
- [You can now use function-like procedural macros in `extern` blocks and in
  type positions.][63931] e.g. `type Generated = macro!();`
- [Function-like and attribute procedural macros can now emit
  `macro_rules!` items, so you can now have your macros generate macros.][64035]
- [The `meta` pattern matcher in `macro_rules!` now correctly matches the modern
  attribute syntax.][63674] For example `(#[$m:meta])` now matches `#[attr]`,
  `#[attr{tokens}]`, `#[attr[tokens]]`, and `#[attr(tokens)]`.

Compiler
--------
- [Added tier 3 support\* for the
  `thumbv7neon-unknown-linux-musleabihf` target.][66103]
- [Added tier 3 support for the
  `aarch64-unknown-none-softfloat` target.][64589]
- [Added tier 3 support for the `mips64-unknown-linux-muslabi64`, and
  `mips64el-unknown-linux-muslabi64` targets.][65843]

\* Refer to Rust's [platform support page][forge-platform-support] for more
  information on Rust's tiered platform support.

Libraries
---------
- [The `is_power_of_two` method on unsigned numeric types is now a `const` function.][65092]

Stabilized APIs
---------------
- [`BTreeMap::get_key_value`]
- [`HashMap::get_key_value`]
- [`Option::as_deref_mut`]
- [`Option::as_deref`]
- [`Option::flatten`]
- [`UdpSocket::peer_addr`]
- [`f32::to_be_bytes`]
- [`f32::to_le_bytes`]
- [`f32::to_ne_bytes`]
- [`f64::to_be_bytes`]
- [`f64::to_le_bytes`]
- [`f64::to_ne_bytes`]
- [`f32::from_be_bytes`]
- [`f32::from_le_bytes`]
- [`f32::from_ne_bytes`]
- [`f64::from_be_bytes`]
- [`f64::from_le_bytes`]
- [`f64::from_ne_bytes`]
- [`mem::take`]
- [`slice::repeat`]
- [`todo!`]

Cargo
-----
- [Cargo will now always display warnings, rather than only on
  fresh builds.][cargo/7450]
- [Feature flags (except `--all-features`) passed to a virtual workspace will
  now produce an error.][cargo/7507] Previously these flags were ignored.
- [You can now publish `dev-dependencies` without including
  a `version`.][cargo/7333]

Misc
----
- [You can now specify the `#[cfg(doctest)]` attribute to include an item only
  when running documentation tests with `rustdoc`.][63803]

Compatibility Notes
-------------------
- [As previously announced, any previous NLL warnings in the 2015 edition are
  now hard errors.][64221]
- [The `include!` macro will now warn if it failed to include the
  entire file.][64284] The `include!` macro unintentionally only includes the
  first _expression_ in a file, and this can be unintuitive. This will become
  either a hard error in a future release, or the behavior may be fixed to include all expressions as expected.
- [Using `#[inline]` on function prototypes and consts now emits a warning under
  `unused_attribute` lint.][65294] Using `#[inline]` anywhere else inside traits
  or `extern` blocks now correctly emits a hard error.

[65294]: rust-lang/rust#65294
[66103]: rust-lang/rust#66103
[65843]: rust-lang/rust#65843
[65188]: rust-lang/rust#65188
[65092]: rust-lang/rust#65092
[64589]: rust-lang/rust#64589
[64639]: rust-lang/rust#64639
[64221]: rust-lang/rust#64221
[64284]: rust-lang/rust#64284
[63931]: rust-lang/rust#63931
[64035]: rust-lang/rust#64035
[63674]: rust-lang/rust#63674
[63803]: rust-lang/rust#63803
[cargo/7450]: rust-lang/cargo#7450
[cargo/7507]: rust-lang/cargo#7507
[cargo/7525]: rust-lang/cargo#7525
[cargo/7333]: rust-lang/cargo#7333
[(rfc 2008)]: https://rust-lang.github.io/rfcs/2008-non-exhaustive.html
[`f32::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_be_bytes
[`f32::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_le_bytes
[`f32::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_ne_bytes
[`f64::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_be_bytes
[`f64::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_le_bytes
[`f64::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_ne_bytes
[`f32::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_be_bytes
[`f32::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_le_bytes
[`f32::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_ne_bytes
[`f64::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_be_bytes
[`f64::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_le_bytes
[`f64::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_ne_bytes
[`option::flatten`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.flatten
[`option::as_deref`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref
[`option::as_deref_mut`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref_mut
[`hashmap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.get_key_value
[`btreemap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.get_key_value
[`slice::repeat`]: https://doc.rust-lang.org/std/primitive.slice.html#method.repeat
[`mem::take`]: https://doc.rust-lang.org/std/mem/fn.take.html
[`udpsocket::peer_addr`]: https://doc.rust-lang.org/std/net/struct.UdpSocket.html#method.peer_addr
[`todo!`]: https://doc.rust-lang.org/std/macro.todo.html
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 14, 2020
Version 1.40.0 (2019-12-19)
===========================

Language
--------
- [You can now use tuple `struct`s and tuple `enum` variant's constructors in
  `const` contexts.][65188] e.g.

  ```rust
  pub struct Point(i32, i32);

  const ORIGIN: Point = {
      let constructor = Point;

      constructor(0, 0)
  };
  ```

- [You can now mark `struct`s, `enum`s, and `enum` variants with the `#[non_exhaustive]` attribute to
  indicate that there may be variants or fields added in the future.][64639]
  For example this requires adding a wild-card branch (`_ => {}`) to any match
  statements on a non-exhaustive `enum`. [(RFC 2008)]
- [You can now use function-like procedural macros in `extern` blocks and in
  type positions.][63931] e.g. `type Generated = macro!();`
- [Function-like and attribute procedural macros can now emit
  `macro_rules!` items, so you can now have your macros generate macros.][64035]
- [The `meta` pattern matcher in `macro_rules!` now correctly matches the modern
  attribute syntax.][63674] For example `(#[$m:meta])` now matches `#[attr]`,
  `#[attr{tokens}]`, `#[attr[tokens]]`, and `#[attr(tokens)]`.

Compiler
--------
- [Added tier 3 support\* for the
  `thumbv7neon-unknown-linux-musleabihf` target.][66103]
- [Added tier 3 support for the
  `aarch64-unknown-none-softfloat` target.][64589]
- [Added tier 3 support for the `mips64-unknown-linux-muslabi64`, and
  `mips64el-unknown-linux-muslabi64` targets.][65843]

\* Refer to Rust's [platform support page][forge-platform-support] for more
  information on Rust's tiered platform support.

Libraries
---------
- [The `is_power_of_two` method on unsigned numeric types is now a `const` function.][65092]

Stabilized APIs
---------------
- [`BTreeMap::get_key_value`]
- [`HashMap::get_key_value`]
- [`Option::as_deref_mut`]
- [`Option::as_deref`]
- [`Option::flatten`]
- [`UdpSocket::peer_addr`]
- [`f32::to_be_bytes`]
- [`f32::to_le_bytes`]
- [`f32::to_ne_bytes`]
- [`f64::to_be_bytes`]
- [`f64::to_le_bytes`]
- [`f64::to_ne_bytes`]
- [`f32::from_be_bytes`]
- [`f32::from_le_bytes`]
- [`f32::from_ne_bytes`]
- [`f64::from_be_bytes`]
- [`f64::from_le_bytes`]
- [`f64::from_ne_bytes`]
- [`mem::take`]
- [`slice::repeat`]
- [`todo!`]

Cargo
-----
- [Cargo will now always display warnings, rather than only on
  fresh builds.][cargo/7450]
- [Feature flags (except `--all-features`) passed to a virtual workspace will
  now produce an error.][cargo/7507] Previously these flags were ignored.
- [You can now publish `dev-dependencies` without including
  a `version`.][cargo/7333]

Misc
----
- [You can now specify the `#[cfg(doctest)]` attribute to include an item only
  when running documentation tests with `rustdoc`.][63803]

Compatibility Notes
-------------------
- [As previously announced, any previous NLL warnings in the 2015 edition are
  now hard errors.][64221]
- [The `include!` macro will now warn if it failed to include the
  entire file.][64284] The `include!` macro unintentionally only includes the
  first _expression_ in a file, and this can be unintuitive. This will become
  either a hard error in a future release, or the behavior may be fixed to include all expressions as expected.
- [Using `#[inline]` on function prototypes and consts now emits a warning under
  `unused_attribute` lint.][65294] Using `#[inline]` anywhere else inside traits
  or `extern` blocks now correctly emits a hard error.

[65294]: rust-lang/rust#65294
[66103]: rust-lang/rust#66103
[65843]: rust-lang/rust#65843
[65188]: rust-lang/rust#65188
[65092]: rust-lang/rust#65092
[64589]: rust-lang/rust#64589
[64639]: rust-lang/rust#64639
[64221]: rust-lang/rust#64221
[64284]: rust-lang/rust#64284
[63931]: rust-lang/rust#63931
[64035]: rust-lang/rust#64035
[63674]: rust-lang/rust#63674
[63803]: rust-lang/rust#63803
[cargo/7450]: rust-lang/cargo#7450
[cargo/7507]: rust-lang/cargo#7507
[cargo/7525]: rust-lang/cargo#7525
[cargo/7333]: rust-lang/cargo#7333
[(rfc 2008)]: https://rust-lang.github.io/rfcs/2008-non-exhaustive.html
[`f32::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_be_bytes
[`f32::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_le_bytes
[`f32::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_ne_bytes
[`f64::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_be_bytes
[`f64::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_le_bytes
[`f64::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_ne_bytes
[`f32::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_be_bytes
[`f32::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_le_bytes
[`f32::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_ne_bytes
[`f64::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_be_bytes
[`f64::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_le_bytes
[`f64::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_ne_bytes
[`option::flatten`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.flatten
[`option::as_deref`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref
[`option::as_deref_mut`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref_mut
[`hashmap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.get_key_value
[`btreemap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.get_key_value
[`slice::repeat`]: https://doc.rust-lang.org/std/primitive.slice.html#method.repeat
[`mem::take`]: https://doc.rust-lang.org/std/mem/fn.take.html
[`udpsocket::peer_addr`]: https://doc.rust-lang.org/std/net/struct.UdpSocket.html#method.peer_addr
[`todo!`]: https://doc.rust-lang.org/std/macro.todo.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.