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

Gradually expanding libstd's keyword documentation #53931

Merged
merged 18 commits into from
Oct 25, 2018

Conversation

iirelu
Copy link
Contributor

@iirelu iirelu commented Sep 3, 2018

I'm working on adding new keywords to the documentation and refreshing the incomplete older ones, and I'm hoping that I can eventually add all the standalone-usable keywords after a bunch of incremental work. It would be cool to see the keywords section of std's docs be a definitive reference as to what each keyword means when you see it, and that's what I'm aiming towards with this work.

I'm far from a Rust expert so there will inevitably be things to fix in this, also I'm not sure if this should be a bunch of quickly-merged PRs or one gradually-updated PR that gets merged once it's done.

The whole keyword docs thing is pretty new in Rust's history and needs
some work before it's a shining gem. Here's hoping I can provide that.

I basically shoved in a bunch of the most important information from the
reference and the book, along with leaving links to both at the end. I
don't think keyword docs need to have complete detail, just all the
broad strokes, so if someone's confused about a usage of a keyword they
can look at the std documentation for that keyword.
It's pretty basic and could do with more details, but it's a good
starter until someone else improves it.
Turns out writing docs on keywords that are used in multiple different
places in entirely different contexts gets a little harder. I put a
footnote on `*const` syntax just to make sure you can find it if need
be, but it might need more detail.
@rust-highfive
Copy link
Collaborator

r? @cramertj

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Sep 3, 2018
/// [book]: https://doc.rust-lang.org/book/second-edition/ch05-01-defining-structs.html
/// [reference]: https://doc.rust-lang.org/reference/items/structs.html

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need for this line.

@QuietMisdreavus
Copy link
Member

cc #51451

r? @rust-lang/docs

/// Empty structs are instantiated with just their name and nothing else. `let thing =
/// EmptyStruct;`
///
///
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra empty line.

/// Tuple structs are instantiated in the same way as tuples themselves, except with the struct's
/// name as a prefix: `Foo(123, false, 0.1)`.
///
/// Empty structs are instantiated with just their name and nothing else. `let thing =
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weird wording and punctuation.

@GuillaumeGomez
Copy link
Member

I didn't read everything yet. Just thinking: is it useful/a good idea to add a few documentation in here which is already available in the book? I'm not against it, I think it's great, just wondering what others might think about it. cc @rust-lang/docs

Mostly addressing notes on ambiguous syntax and spurious newlines.
@rust-highfive

This comment has been minimized.

@QuietMisdreavus
Copy link
Member

That travis error looks like a bug in tidy. I thought it was supposed to ignore lines that looked like markdown links?

I think it might be used in some other things, but I'm not fluent enough
at sifting through the rust compiler's source code to find every use of
a specific keyword.

This leaves the question of how to document the `extern` keyword, what
with how much overlap it has with `crate`, but that's used with ABI
stuff so that should be fine.
@rust-highfive

This comment has been minimized.

@rust-highfive

This comment has been minimized.

@@ -8,25 +8,361 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[doc(keyword = "as")]
//
/// The type coercion keyword.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we call this "casting" instead of coercion -- see https://doc.rust-lang.org/book/second-edition/appendix-01-keywords.html.

/// assert_eq!(true as u8 + thing2 as u8, 100);
/// ```
///
/// In general, any coercion that can be performed via writing out type hints can also be done
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"via type hints" -> "by ascribing the type"

/// assert_eq!(true as u8 + thing2 as u8, 100);
/// ```
///
/// In general, any coercion that can be performed via writing out type hints can also be done
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coercion -> cast

///
/// In general, any coercion that can be performed via writing out type hints can also be done
/// using `as`, so instead of writing `let x: u32 = 123`, you can write `let x = 123 as u32` (Note:
/// `let x = 123u32` would be best in that situation). The same is not true in the other direction,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That let x = 123u32 would be best is probably disputed; I would prefer let x: u32 = 123; myself, or when we get type ascription, let x = 123: u32;.

However, explicit casting with as where implicit coercions apply should be discouraged here.

///
/// Constants must be explicitly typed, unlike with `let` you can't ignore its type and let the
/// compiler figure it out. Any constant value can be defined in a const, which in practice happens
/// to be most things that would be reasonable to have a constant. For example, you can't have a
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"which in practice happens to be most things that would be reasonable to have a constant".. this is either not true or too vague to be useful. There are many things which could be const in the future which currently aren't due to the lack of stable const fn (but this is coming soon..)

///
/// struct Empty;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty -> Unit

/// etc, starting at zero.
///
/// Empty structs, or unit-like structs, are most commonly used as markers, for example
/// [`PhantomData`]. Empty structs have a size of zero bytes, but unlike empty enums they can be
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PhantomData is very special here; so it's not a particularly good example.

///
/// Empty structs, or unit-like structs, are most commonly used as markers, for example
/// [`PhantomData`]. Empty structs have a size of zero bytes, but unlike empty enums they can be
/// instantiated, making them similar to the unit type `()`. Unit-like structs are useful when you
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similar -> isomorphic

///
/// # Instantiation
///
/// Structs can be instantiated in a manner of different ways, each of which can be mixed and
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"in a manner of different ways" -> "in different ways"

src/libstd/keyword_docs.rs Show resolved Hide resolved
@iirelu
Copy link
Contributor Author

iirelu commented Sep 14, 2018

Thank you to @Centril for the valuable critique provided. At this rate, the rest of the major keywords should be finished in under a month, and I'll keep working away at it until then.

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-5.0 of your PR failed on Travis (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.

[00:04:55] travis_fold:start:tidy
travis_time:start:tidy
tidy check
[00:04:55] tidy error: /checkout/src/libstd/keyword_docs.rs:93: line longer than 100 chars
[00:04:55] tidy error: /checkout/src/libstd/keyword_docs.rs:224: line longer than 100 chars
[00:04:55] tidy error: /checkout/src/libstd/keyword_docs.rs:367: line longer than 100 chars
[00:04:55] tidy error: /checkout/src/libstd/keyword_docs.rs:445: line longer than 100 chars
[00:04:57] some tidy checks failed
[00:04:57] 
[00:04:57] 
[00:04:57] 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" "--quiet"
[00:04:57] 
[00:04:57] 
[00:04:57] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
[00:04:57] Build completed unsuccessfully in 0:00:53
[00:04:57] Build completed unsuccessfully in 0:00:53
[00:04:57] Makefile:79: recipe for target 'tidy' failed
[00:04:57] make: *** [tidy] Error 1

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0ee4a0f8
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:024d9a66:start=1536929333507887144,finish=1536929333513345716,duration=5458572
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:013f7f59
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'); if [ -f "$EXE" ]; then printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE"; gdb -q -c "$CORE" "$EXE" -iex 'set auto-load off' -iex 'dir src/' -iex 'set sysroot .' -ex bt -ex q; echo travis_fold":"end:crashlog; fi; done || true
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:25d04586
travis_time:start:25d04586
$ cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
cat: ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers: No such file or directory
travis_fold:end:after_failure.5
travis_fold:start:after_failure.6
travis_time:start:0a8dba22
$ dmesg | grep -i kill

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)

@@ -10,7 +10,7 @@

#[doc(keyword = "as")]
//
/// The type coercion keyword.
/// The keyword for casting types.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would reword this slightly to: "The keyword for casting a value to a type."

@@ -130,8 +134,8 @@ mod crate_keyword { }
///
/// Enums in Rust are similar to those of other compiled languages like C, but have important
/// differences that make them considerably more powerful. What Rust calls enums are more commonly
/// known as Algebraic Data Types if you're coming from a functional programming background, but
/// the important part is that data can go with the enum variants.
/// known as Algebraic Data Types if you're coming from a functional programming background. The
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Continuing on... I would simply make "Algebraic Data Types" a link pointing to https://en.wikipedia.org/wiki/Algebraic_data_type. E.g. Algebraic Data Types.

While most people can find that by using google, effective documentation should provide such material directly instead of having the user go through indirections. The wiki page also has useful links that can give users more in-depth explanations in perhaps more familiar syntax.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Oct 20, 2018
@Manishearth
Copy link
Member

for some reason homu missed this PR

@bors
Copy link
Contributor

bors commented Oct 21, 2018

⌛ Testing commit 619dfeb with merge 83873ed9c9f7a97d14b43dafe8e6a79e463c3188...

@bors
Copy link
Contributor

bors commented Oct 22, 2018

💔 Test failed - status-appveyor

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-5.0 of your PR failed on Travis (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.
[01:29:06] test time.rs - time::SystemTime::now (line 288) ... ok
[01:29:06] 
[01:29:06] failures:
[01:29:06] 
[01:29:06] ---- keyword_docs.rs - extern_keyword (line 211) stdout ----
[01:29:06] error: lint `private_no_mangle_fns` has been removed: `no longer an warning, #[no_mangle] functions always exported`
[01:29:06]  --> keyword_docs.rs:211:10
[01:29:06]   |
[01:29:06] 3 | #![allow(private_no_mangle_fns)]
[01:29:06]   |
[01:29:06] note: lint level defined here
[01:29:06]  --> keyword_docs.rs:209:9
[01:29:06]   |
[01:29:06]   |
[01:29:06] 1 | #![deny(warnings)]
[01:29:06]   |         ^^^^^^^^
[01:29:06]   = note: #[deny(renamed_and_removed_lints)] implied by #[deny(warnings)]
[01:29:06] 
[01:29:06] thread 'keyword_docs.rs - extern_keyword (line 211)' panicked at 'couldn't compile the test', librustdoc/test.rs:332:13
[01:29:06] 
[01:29:06] 
[01:29:06] failures:
[01:29:06]     keyword_docs.rs - extern_keyword (line 211)
[01:29:06]     keyword_docs.rs - extern_keyword (line 211)
[01:29:06] 
[01:29:06] test result: FAILED. 953 passed; 1 failed; 26 ignored; 0 measured; 0 filtered out
[01:29:06] 
[01:29:06] error: test failed, to rerun pass '--doc'
[01:29:06] 
[01:29:06] 
[01:29:06] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "test" "--target" "x86_64-unknown-linux-gnu" "-j" "4" "--release" "--locked" "--color" "always" "--features" "panic-unwind jemalloc backtrace" "--manifest-path" "/checkout/src/libstd/Cargo.toml" "-p" "std" "--"
[01:29:06] 
[01:29:06] 
[01:29:06] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[01:29:06] Build completed unsuccessfully in 0:40:44
[01:29:06] Build completed unsuccessfully in 0:40:44
[01:29:06] make: *** [check] Error 1
[01:29:06] Makefile:58: recipe for target 'check' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0a388ad5
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:05444562:start=1540170229801572432,finish=1540170229806755622,duration=5183190
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:0c6cb61c
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'); if [ -f "$EXE" ]; then printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE"; gdb --batch -q -c "$CORE" "$EXE" -iex 'set auto-load off' -iex 'dir src/' -iex 'set sysroot .' -ex bt -ex q; echo travis_fold":"end:crashlog; fi; done || true
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:0138440a
travis_time:start:0138440a
$ cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
cat: ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers: No such file or directory
travis_fold:end:after_failure.5
travis_fold:start:after_failure.6
travis_time:start:0f10f617
$ dmesg | grep -i kill

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)

1 similar comment
@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-5.0 of your PR failed on Travis (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.
[01:29:06] test time.rs - time::SystemTime::now (line 288) ... ok
[01:29:06] 
[01:29:06] failures:
[01:29:06] 
[01:29:06] ---- keyword_docs.rs - extern_keyword (line 211) stdout ----
[01:29:06] error: lint `private_no_mangle_fns` has been removed: `no longer an warning, #[no_mangle] functions always exported`
[01:29:06]  --> keyword_docs.rs:211:10
[01:29:06]   |
[01:29:06] 3 | #![allow(private_no_mangle_fns)]
[01:29:06]   |
[01:29:06] note: lint level defined here
[01:29:06]  --> keyword_docs.rs:209:9
[01:29:06]   |
[01:29:06]   |
[01:29:06] 1 | #![deny(warnings)]
[01:29:06]   |         ^^^^^^^^
[01:29:06]   = note: #[deny(renamed_and_removed_lints)] implied by #[deny(warnings)]
[01:29:06] 
[01:29:06] thread 'keyword_docs.rs - extern_keyword (line 211)' panicked at 'couldn't compile the test', librustdoc/test.rs:332:13
[01:29:06] 
[01:29:06] 
[01:29:06] failures:
[01:29:06]     keyword_docs.rs - extern_keyword (line 211)
[01:29:06]     keyword_docs.rs - extern_keyword (line 211)
[01:29:06] 
[01:29:06] test result: FAILED. 953 passed; 1 failed; 26 ignored; 0 measured; 0 filtered out
[01:29:06] 
[01:29:06] error: test failed, to rerun pass '--doc'
[01:29:06] 
[01:29:06] 
[01:29:06] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "test" "--target" "x86_64-unknown-linux-gnu" "-j" "4" "--release" "--locked" "--color" "always" "--features" "panic-unwind jemalloc backtrace" "--manifest-path" "/checkout/src/libstd/Cargo.toml" "-p" "std" "--"
[01:29:06] 
[01:29:06] 
[01:29:06] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[01:29:06] Build completed unsuccessfully in 0:40:44
[01:29:06] Build completed unsuccessfully in 0:40:44
[01:29:06] make: *** [check] Error 1
[01:29:06] Makefile:58: recipe for target 'check' failed

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:0a388ad5
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
---
travis_time:end:05444562:start=1540170229801572432,finish=1540170229806755622,duration=5183190
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:0c6cb61c
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'); if [ -f "$EXE" ]; then printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE"; gdb --batch -q -c "$CORE" "$EXE" -iex 'set auto-load off' -iex 'dir src/' -iex 'set sysroot .' -ex bt -ex q; echo travis_fold":"end:crashlog; fi; done || true
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:0138440a
travis_time:start:0138440a
$ cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
cat: ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers: No such file or directory
travis_fold:end:after_failure.5
travis_fold:start:after_failure.6
travis_time:start:0f10f617
$ dmesg | grep -i kill

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)

@kennytm kennytm added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Oct 23, 2018
@iirelu
Copy link
Contributor Author

iirelu commented Oct 23, 2018

Ugh, I don't know how to fix the new errors. Can someone help me out?

/// The mirror use case of FFI is also done via the `extern` keyword:
///
/// ```rust
/// # #![allow(private_no_mangle_fns)]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try and remove this line; this is what the error references I think.

This was added in the fortnight this PR spent stale. I'm hoping this
one-liner fixes it.
@Gankra
Copy link
Contributor

Gankra commented Oct 24, 2018

@bors r=steveklabnik

@bors
Copy link
Contributor

bors commented Oct 24, 2018

@gankro: 🔑 Insufficient privileges: Not in reviewers

@Centril
Copy link
Contributor

Centril commented Oct 24, 2018

@bors r=steveklabnik

@bors
Copy link
Contributor

bors commented Oct 24, 2018

@Centril: 🔑 Insufficient privileges: Not in reviewers

@Centril
Copy link
Contributor

Centril commented Oct 24, 2018

Sigh; I need to get r+ perms... :)

@QuietMisdreavus
Copy link
Member

@bors r=steveklabnik

@bors
Copy link
Contributor

bors commented Oct 24, 2018

📌 Commit 320ec81 has been approved by steveklabnik

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Oct 24, 2018
kennytm added a commit to kennytm/rust that referenced this pull request Oct 25, 2018
Gradually expanding libstd's keyword documentation

I'm working on adding new keywords to the documentation and refreshing the incomplete older ones, and I'm hoping that I can eventually add all the standalone-usable keywords after a bunch of incremental work. It would be cool to see the keywords section of std's docs be a definitive reference as to what each keyword means when you see it, and that's what I'm aiming towards with this work.

I'm far from a Rust expert so there will inevitably be things to fix in this, also I'm not sure if this should be a bunch of quickly-merged PRs or one gradually-updated PR that gets merged once it's done.
pietroalbini added a commit to pietroalbini/rust that referenced this pull request Oct 25, 2018
Gradually expanding libstd's keyword documentation

I'm working on adding new keywords to the documentation and refreshing the incomplete older ones, and I'm hoping that I can eventually add all the standalone-usable keywords after a bunch of incremental work. It would be cool to see the keywords section of std's docs be a definitive reference as to what each keyword means when you see it, and that's what I'm aiming towards with this work.

I'm far from a Rust expert so there will inevitably be things to fix in this, also I'm not sure if this should be a bunch of quickly-merged PRs or one gradually-updated PR that gets merged once it's done.
bors added a commit that referenced this pull request Oct 25, 2018
Rollup of 22 pull requests

Successful merges:

 - #53507 (Add doc for impl From for Waker)
 - #53931 (Gradually expanding libstd's keyword documentation)
 - #54965 (update tcp stream documentation)
 - #54977 (Accept `Option<Box<$t:ty>>` in macro argument)
 - #55138 (in which unused-parens suggestions heed what the user actually wrote)
 - #55173 (Suggest appropriate syntax on missing lifetime specifier in return type)
 - #55200 (Documents `From` implementations for `Stdio`)
 - #55245 (submodules: update clippy from 5afdf8b to b1d0343)
 - #55247 (Clarified code example in char primitive doc)
 - #55251 (Fix a typo in the documentation of RangeInclusive)
 - #55253 (only issue "variant of the expected type" suggestion for enums)
 - #55254 (Correct trailing ellipsis in name_from_pat)
 - #55269 (fix typos in various places)
 - #55282 (Remove redundant clone)
 - #55285 (Do some copy editing on the release notes)
 - #55291 (Update stdsimd submodule)
 - #55296 (Set RUST_BACKTRACE=0 for rustdoc-ui/failed-doctest-output.rs)
 - #55306 (Regression test for #54478.)
 - #55328 (Fix doc for new copysign functions)
 - #55340 (Operands no longer appear in places)
 - #55345 (Remove is_null)
 - #55348 (Update RELEASES.md after destabilization of non_modrs_mods)

Failed merges:

r? @ghost
@bors bors merged commit 320ec81 into rust-lang:master Oct 25, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet