Add `unwrap_or_else_default` lint
---
*Please write a short comment explaining your change (or "none" for internal only changes)*
changelog: Add a new [`unwrap_or_else_default`] style lint. This will catch `unwrap_or_else(Default::default)` on Result and Option and suggest `unwrap_or_default()` instead.
No effect inclusive range
I noticed during last PR that range expression is `ExprKind::Struct` while inclusive range is `ExprKind::Call` which was why it was not handled. This PR adds check for this case.
changelog: [`no_effect]` Report inclusive range in no_effect lint
set the executable bit on pre-commit.sh
`x.py setup` hardlinks this file into .git/hooks. Prior to this commit,
that led to the following warning emitted by `git commit`:
hint: The '.git/hooks/pre-commit' hook was ignored because it's not set as executable.
Making the checked-in script executable fixes this issue, as the
hardlinked copy uses the same flags.
It looks like the file was originally executable, but that bit was
unset in commit b908905b3defa075d08661dc5916219a870b4856 of
https://github.com/rust-lang/rust/pull/85305. It's possible that was
unintentional.
Update books
## nomicon
2 commits in f51734eb5566c826b471977747ea3d7d6915bbe9..0c7e5bd1428e7838252bb57b7f0fbfda4ec82f02
2021-07-23 18:24:35 +0900 to 2021-08-04 10:18:22 -0700
- Document lifetime elision for fn types, Fn*, impl (rust-lang/nomicon#298)
- Remove unnecessary `extern crate`s (rust-lang/nomicon#297)
## reference
3 commits in 3b7be075af5d6e402a18efff672a8a265b4596fd..4884fe45c14f8b22121760fb117181bb4da8dfe0
2021-07-26 13:20:11 -0700 to 2021-07-28 21:31:28 -0700
- Mention "function item type to `fn pointer`" coercion (rust-lang/reference#1079)
- example for bindings after at (rust-lang/reference#1027)
- array-expr.md: fix typo; 'polish' sentence (rust-lang/reference#1080)
## book
10 commits in a07036f864b37896b31eb996cd7aedb489f69a1f..7e49659102f0977d9142190e1ba23345c0f00eb1
2021-07-26 20:19:46 -0400 to 2021-08-03 21:41:35 -0400
- Make explicit that enum variant construction is a function
- Clarify why None means we have to annotate the type
- Make the convert quotes script able to do one chapter
- Snapshot of chapter 5
- (rust-lang/book#2811)
- (rust-lang/book#2809)
- Ugh quote script, that's not right
- Introduce the dbg macro. Connects to rust-lang/book#1658
- Add an example of declaring and instantiating unit-like structs. Fixesrust-lang/book#2442.
- Remove authors field from all the manifests (rust-lang/book#2805)
## rustc-dev-guide
5 commits in 09343d6f921d2a07c66f8c41ec3d65bf1fa52556..c4644b427cbdaafc7a87be0ccdf5d8aaa07ac35f
2021-07-26 00:37:28 +0200 to 2021-08-10 20:41:44 +0900
- Remove a dead link in `new-target.md` + other nits (rust-lang/rustc-dev-guide#1186)
- Add description of -opt-bisect-limit LLVM option (rust-lang/rustc-dev-guide#1182)
- Fixed team responsible for stabilization (rust-lang/rustc-dev-guide#1181)
- Add S-Inactive PRs as another source of things contributors could work on (rust-lang/rustc-dev-guide#1177)
- git.md: Fix No-Merge Policy link
## embedded-book
1 commits in 09986cd352404eb4659db44613b27cac9aa652fc..4f9fcaa30d11ba52b641e6fd5206536d65838af9
2021-07-18 19:26:46 +0000 to 2021-08-06 17:43:12 +0000
- Fix typo in 'Memory Mapped Registers' (rust-embedded/book#298)
Reduce verbosity of tracing output of RUSTC_LOG
The current output is really hard to read, I find, for things like trait selection. I nearly always end up removing these calls locally.
r? ```@oli-obk``` since you originally authored this
Implement Extend<(A, B)> for (Extend<A>, Extend<B>)
I oriented myself at the implementation of `Iterator::unzip` and also rewrote the impl in terms of `(A, B)::extend` after that.
Since (A, B) now also implements Extend we could also mention in the documentation of unzip that it can do "nested unzipping" (you could unzip `Iterator<Item=(A, (B, C))>` into `(Vec<A>, (Vec<B>, Vec<C>))` for example) but I'm not sure of that so I'm asking here 🙂
(P.S. I saw a couple of people asking if there is an unzip3 but there isn't. So this could be a way to get equivalent functionality)
Plugin interface cleanup
The first commit performs two uncontroversial cleanups. The second commit removes `#[plugin_registrar]` and instead requires you to export a `__rustc_plugin_registrar` function, this will require a change to servo's script_plugins (cc `@jdm)`
`x.py setup` hardlinks this file into .git/hooks. Prior to this commit,
that led to the following warning emitted by `git commit`:
hint: The '.git/hooks/pre-commit' hook was ignored because it's not set as executable.
Making the checked-in script executable fixes this issue, as the
hardlinked copy uses the same flags.
It looks like the file was originally executable, but that bit was
unset in commit b908905b3defa075d08661dc5916219a870b4856 of
https://github.com/rust-lang/rust/pull/85305. It's possible that was
unintentional.
`never_loop`: suggest using an `if let` instead of a `for` loop
changelog: suggest using an `if let` statement instead of a `for` loop that [`never_loop`]s
Fixes#7537, r? `@camsteffen.`
* On suggestions that include deletions, use a diff inspired output format
* When suggesting addition, use `+` as underline
* Color highlight modified span
From what I can tell, the goal of the tests is to ensure that the error
formatting is correct. I think this is still being tested as intended
after this change.
Various refactorings of the TAIT infrastructure
Before this PR we used to store the opaque type knowledge outside the `InferCtxt`, so it got recomputed on every opaque type instantiation.
I also removed a feature gate check that makes no sense in the planned lazy TAIT resolution scheme
Each commit passes all tests, so this PR is best reviewed commit by commit.
r? `@spastorino`
LLVM codegen: Don't emit zero-sized padding for fields
Currently padding is emitted before fields of a struct and at the end of the struct regardless of the ABI. Even if no padding is required zero-sized padding fields are emitted. This is not useful and - more importantly - it make it impossible to generate the exact vector types that LLVM expects for certain ARM SIMD intrinsics. This change should unblock the implementation of many ARM intrinsics using the `unadjusted` ABI, see https://github.com/rust-lang/stdarch/issues/1143#issuecomment-827404092.
This is a proof of concept only because the field lookup now takes O(number of fields) time compared to O(1) before since it recalculates the mapping at every lookup. I would like to find out how big the performance impact actually is before implementing caching or restricting this behavior to the `unadjusted` ABI.
cc `@SparrowLii` `@bjorn3`
([Discussion on internals](https://internals.rust-lang.org/t/feature-request-add-a-way-in-rustc-for-generating-struct-type-llvm-ir-without-paddings/15007))