Commit Graph

23160 Commits

Author SHA1 Message Date
Chayim Refael Friedman
e295f0c29c Insert whitespaces into static & const bodies if they are expanded from macro on hover
Macro expansion erases whitespace information, and so we end with invalid Rust code.
2022-09-04 14:33:15 +00:00
bors
8ddb8b7e8e Auto merge of #13183 - Veykril:break-break, r=Veykril
Fix nested break expressions, expecting unknown types
2022-09-03 15:33:21 +00:00
Lukas Wirth
020f6895e5 Fix nested break expressions, expecting unknown types 2022-09-03 17:32:21 +02:00
ice1000
364d9c4910 Fmt 2022-09-02 21:18:36 +00:00
ice1000
68eabf1bf1 Fix test 2022-09-02 21:18:36 +00:00
ice1000
a695e900f6 Create trait Removable, replace ted APIs with builder APIs 2022-09-02 21:18:36 +00:00
ice1000
37e20decad Address comments 2022-09-02 21:18:36 +00:00
ice1000
277df02ff5 This should work, but I got mysterious errors 2022-09-02 21:18:36 +00:00
ice1000
79e5c366cd Extract shared logic 2022-09-02 21:18:36 +00:00
ice1000
fcc61337a8 Remove alias definition naively 2022-09-02 21:18:36 +00:00
bors
afa374e58e Auto merge of #13175 - Veykril:resolver, r=Veykril
Clarify the state of (extern) preludes for block def maps
2022-09-02 17:38:26 +00:00
Lukas Wirth
894aa0ed0d Clarify the state of (extern) preludes for block def maps 2022-09-02 17:43:20 +02:00
bors
f27f98d4bb Auto merge of #13174 - Veykril:resolver, r=Veykril
Lift out the module scope into a field in the Resolver

A Resolver *always* has a module scope at the end of its scope stack,
instead of encoding this as an invariant we can just lift this scope
out into a field, allowing us to skip going through the scope vec
indirection entirely.
2022-09-02 15:03:29 +00:00
Lukas Wirth
8828049b23 Lift out the module scope into a field in the Resolver
A Resolver *always* has a module scope at the end of its scope stack,
instead of encoding this as an invariant we can just lift this scope
out into a field, allowing us to skip going through the scope vec
indirection entirely.
2022-09-02 17:02:12 +02:00
bors
2bb6635a85 Auto merge of #13173 - Veykril:synthetic, r=Veykril
Don't store SyntheticSyntax in the reverse maps in BodySourceMap

They are ZSTs which we can just create on missing access instead.
2022-09-02 13:17:16 +00:00
Lukas Wirth
fe0a106256 Don't store SyntheticSyntax in the reverse maps in BodySourceMap
They are ZSTs which we can just create on missing access instead.
2022-09-02 15:08:48 +02:00
bors
4f8153e4a5 Auto merge of #13167 - iDawer:exhaustive_patterns, r=Veykril
feat: Implement `feature(exhaustive_patterns)` from unstable Rust

Closes #12753

Recognize Rust's unstable `#![feature(exhaustive_patterns)]` (RFC 1872). Allow omitting visibly uninhabited variants from `match` expressions when the feature is on.

This adjusts match checking to the current implementation of the postponed RFC 1872 in rustc.
2022-09-02 12:32:36 +00:00
iDawer
ffd79c2887 Add docs 2022-09-02 17:01:51 +05:00
iDawer
8ae58b9fe4 Record enabled unstable features into DefMap 2022-09-02 16:31:15 +05:00
bors
412d614cf1 Auto merge of #13171 - matklad:open-failure, r=lnicola
internal: ignore failures when publishing to ovsx

This has been failing for a while

https://github.com/rust-lang/rust-analyzer/runs/8147683225?check_suite_focus=true#step:24:19
2022-09-02 10:53:49 +00:00
Aleksey Kladov
61ad33da42 internal: ignore failures when publishing to ovsx
This has been failing for a while

https://github.com/rust-lang/rust-analyzer/runs/8147683225?check_suite_focus=true#step:24:19
2022-09-02 11:48:58 +01:00
bors
93c52e41ec Auto merge of #13160 - ChayimFriedman2:parse-parenthesized-type-path-with-coloncolon, r=jonas-schievink
fix: Parse TypePathFn with preceding `::`

e.g. `impl Fn::() -> ()`.

Fixes #13157. This was the problem, not that the path was not at the end.

I could unify the parsing of `::` of TypePathFn with that of generic arg list, but some code relies on the `::` of generic arg list to be inside it.
2022-09-01 21:00:14 +00:00
bors
f23114c854 Auto merge of #13161 - ChayimFriedman2:pi-is-zero, r=jonas-schievink
fix: Lower float literals with underscores

Fixes #13155 (the problem was the `PI` is defined with `_f64` suffix). `PI` is still truncated, though, because `f64` cannot represent the value with full precision.
2022-09-01 20:51:22 +00:00
bors
c4445e415a Auto merge of #13165 - Veykril:breakables, r=Veykril
Properly handle break resolution inside non-breakable expressions

We now diagnose invalid `continue` expressions and properly handle things like `async` blocks which prevent labels from resolving further. Cleaned this up since `label_break_value` is on the way to stabilization in rust (🎉 finally) and we weren't handling breaks for blocks properly yet.
2022-09-01 13:07:26 +00:00
Lukas Wirth
c6b7f45308 Don't run rust-2021-compatibility lints, our crates are already on 2021 2022-09-01 15:04:55 +02:00
Lukas Wirth
8110119fef Properly handle break resolution inside non-breakable expressions 2022-09-01 14:54:47 +02:00
Lukas Wirth
1e66a5a8ce Diagnose incorrect continue expressions 2022-09-01 14:41:38 +02:00
Lukas Wirth
d6fc4a9ea6 Simplify breakables handling 2022-09-01 14:41:37 +02:00
Chayim Refael Friedman
2eec4ed69d Lower float literals with underscores 2022-09-01 00:11:32 +00:00
Chayim Refael Friedman
d786a40e73 Parse TypePathFn with preceding ::
e.g. `impl Fn::() -> ()`.
2022-08-31 23:19:09 +00:00
bors
643c3a54de Auto merge of #13134 - Veykril:proc-highlight, r=Veykril
Highlight namerefs by syntax until proc-macros have been loaded

Usually when loading up a project, once loading is done we start answering highlight requests while proc-macros haven't always been loaded yet, so we start out with showing a lot of unresolved name-refs. After this PR, we'll use syntax based highlighting for those unresolved namerefs until the proc-macros have been loaded.
2022-08-31 19:42:53 +00:00
iDawer
1fa9d5e07b Correct visibility check 2022-08-31 21:41:24 +05:00
Jonas Schievink
241807dbf9 Allow multi-part inlay hint labels with location links 2022-08-31 18:34:10 +02:00
bors
ab068f120b Auto merge of #13156 - Veykril:macro-stmts, r=Veykril
Remove hir::Expr::MacroStmts

This hir expression isn't needed and only existed as it was simpler to
deal with at first as it gave us a direct mapping for the ast version of
the same construct. This PR removes it, properly handling the statements
that are introduced by macro call expressions.
2022-08-31 16:09:17 +00:00
Lukas Wirth
ee02a4721b Remove unnecessary allocations 2022-08-31 18:05:52 +02:00
iDawer
1a580a3396 Implement unstable RFC 1872 exhaustive_patterns 2022-08-31 20:17:54 +05:00
Lukas Wirth
192a79c235 Remove hir::Expr::MacroStmts
This hir expression isn't needed and only existed as it was simpler to
deal with at first as it gave us a direct mapping for the ast version of
the same construct. This PR removes it, properly handling the statements
that are introduced by macro call expressions.
2022-08-31 16:58:11 +02:00
bors
7f38581372 Auto merge of #13120 - Austaras:master, r=jonas-schievink
turn `unwrap_or` into `unwrap_or_else` and vice versa

closes #12983
2022-08-31 13:55:29 +00:00
bors
79a578ae84 Auto merge of #13005 - pocket7878:convert-two-arm-bool-match-to-matches-macro, r=jonas-schievink
feature: Assist to turn match into matches! invocation

Resolves #12510

This PR adds an assist, which convert 2-arm match that evaluates to a boolean into the equivalent matches! invocation.
2022-08-31 13:47:40 +00:00
bors
cf05b7db4d Auto merge of #13051 - DropDemBits:attrs-and-comments-on-enum-variant, r=jonas-schievink
fix: Only move comments when extracting a struct from an enum variant

Motivating example:

```rs
#[derive(Debug, thiserror::Error)]
enum Error {
    /// Some explanation for this error
    #[error("message")]
    $0Woops {
        code: u32
    }
}
```
now becomes
```rs
/// Some explanation for this error
#[derive(Debug, thiserror::Error)]
struct Woops{
    code: u32
}

#[derive(Debug, thiserror::Error)]
enum Error {
    #[error("message")]
    Woops(Woops)
}
```
(the `thiserror::Error` derive being copied and the struct formatting aren't ideal, though those are issues for another day)
2022-08-31 13:34:43 +00:00
Pocket7878
7464b6dbc4 feature: Check if first_arm bool and second_arm bool is inverted or not. 2022-08-31 18:47:45 +09:00
Masato Sogame
5a1b45dcc1 feature: Simplfy branch check logics
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2022-08-31 18:47:45 +09:00
Pocket7878
a5d2463b1d fix: Simplify logics to allow two-arm enum match. 2022-08-31 18:47:45 +09:00
Pocket7878
4661a60aa9 Add convert_two_arm_bool_match_to_matches_macro ide-assists 2022-08-31 18:47:44 +09:00
austaras
43e8d9644f change title 2022-08-31 17:31:23 +08:00
bors
d9e22079c4 Auto merge of #12963 - DesmondWillowbrook:clippy-matches-sourcegen, r=Veykril
clippy: make generated code nice to read

Feel free to close if this is too minor.

(For context, I _have_ read the clippy policy in `dev/style.md`)
2022-08-31 08:37:14 +00:00
bors
56d888689b Auto merge of #12793 - lowr:fix/12739, r=Veykril
fix: sort and deduplicate auto traits in trait object types

Fixes #12739

Chalk solver doesn't sort and deduplicate auto traits in trait object types, so we need to handle them ourselves in the lowering phase, just like [`rustc`](880416180b/compiler/rustc_typeck/src/astconv/mod.rs (L1487-L1488)) and [`chalk-integration`](https://github.com/rust-lang/chalk/blob/master/chalk-integration/src/lowering.rs#L575) do.

Quoting from [the Chalk book](https://rust-lang.github.io/chalk/book/types/rust_types.html#dyn-types):

> Note that -- for this purpose -- ordering of bounds is significant. That means that if you create a `dyn Foo + Send` and a `dyn Send + Foo`, chalk would consider them distinct types. The assumption is that bounds are ordered in some canonical fashion somewhere else.

Also, trait object types with more than one non-auto traits were previously allowed, but are now disallowed with this patch.
2022-08-31 08:28:12 +00:00
bors
b6138965cd Auto merge of #13149 - lowr:fix/unescape-raw-ident-module-path, r=Veykril
fix: unescape all occurrences of module name in module resolution

Fixes #13141
2022-08-31 08:15:31 +00:00
bors
ef27641f56 Auto merge of #13154 - Veykril:ty-mac-expander, r=Veykril
Drop the expander borrow in all control flow paths

The change in https://github.com/rust-lang/rust-analyzer/pull/13123
actually re-uses the RefMut borrow instead of dropping it so we need to
drop it manually where required.

Fixes https://github.com/rust-lang/rust-analyzer/issues/13153
2022-08-31 08:07:26 +00:00
Lukas Wirth
5c0e25237c Drop the expander borrow in all control flow paths
The change in https://github.com/rust-lang/rust-analyzer/pull/13123
actually re-uses the RefMut borrow instead of dropping it so we need to
drop it manually where required.
2022-08-31 10:04:01 +02:00