Commit graph

1038 commits

Author SHA1 Message Date
dfireBird
4ca597a4a8
implement basic inferring of lifetimes 2024-08-16 16:40:32 +05:30
bors
fdd5294afb Auto merge of #17903 - tmandry:graceful-exit, r=Veykril
Allow flycheck process to exit gracefully

Assuming it isn't cancelled. Closes #17902.

The only place CommandHandle::join() is used is when the flycheck command
finishes, so this commit changes the behavior of the method itself.

The only reason I can see for the existing behavior is if the command is somehow holding onto a build lock longer than it should, this would force it to be released. But it would be a pretty heavy-handed way to solve that issue. I'm not aware of this occurring in practice.
2024-08-16 07:35:16 +00:00
bors
95f5e4b626 Auto merge of #17908 - ChayimFriedman2:usages-word-boundaries, r=Veykril
Test for word boundary in `FindUsages`

This speeds up short identifiers search significantly, while unlikely to have an effect on long identifiers (the analysis takes much longer than some character comparison).

Tested by finding all references to `eq()` (from `PartialEq`) in the rust-analyzer repo. Total time went down from 100s to 10s (a 10x reduction!).

Feel free to close this if you consider this a non-issue, as most short identifiers are local.
2024-08-16 07:20:23 +00:00
bors
b68992a510 Auto merge of #17907 - ChayimFriedman2:no-once_cell, r=Veykril
internal: Replace once_cell with std's recently stabilized OnceCell/Lock and LazyCell/Lock

This doesn't get rid of the once_cell dependency, unfortunately, since we have dependencies that use it, but it's a nice to do cleanup. And when our deps will eventually get rid of once_cell we will get rid of it for free.
2024-08-16 07:05:59 +00:00
Chayim Refael Friedman
0cbf6a7a76 Test for word boundary in FindUsages
This speeds up short identifiers search significantly, while unlikely to have an effect on long identifiers (the analysis takes much longer than some character comparison).

Tested by finding all references to `eq()` (from `PartialEq`) in the rust-analyzer repo. Total time went down from 100s to 10s (a 10x reduction!).
2024-08-16 10:02:36 +03:00
Chayim Refael Friedman
642a0f84ca Replace once_cell with std's recently stabilized OnceCell/Lock and LazyCell/Lock
This doesn't get rid of the once_cell dependency, unfortunately, since we have dependencies that use it, but it's a nice to do cleanup. And when our deps will eventually get rid of once_cell we will get rid of it for free.
2024-08-16 09:53:37 +03:00
Tyler Mandry
23c8dcd3cb Allow flycheck process to exit gracefully
Assuming it isn't cancelled. Closes #17902.

The only place CommandHandle::join is used is when the flycheck command
finishes, so this commit changes the behavior of the method itself.
2024-08-15 15:18:15 -07:00
Lukas Wirth
a783e30c93 internal: Properly check the edition for edition dependent syntax kinds 2024-08-15 15:57:47 +02:00
bors
e20180d0d3 Auto merge of #17893 - ShoyuVanilla:issue-17871, r=flodiebold
fix: Panic while hovering associated function with type annotation on generic param that not inherited from its container type

Fixes #17871

We call `generic_args_sans_defaults` here;

64a140527b/crates/hir-ty/src/display.rs (L1021-L1034)

but the following substitution inside that function panic in #17871;

64a140527b/crates/hir-ty/src/display.rs (L1468)

it's because the `Binders.binder` inside `default_parameters` has a same length with the generics of the function we are hovering on, but the generics of it is split into two, `fn_params` and `parent_params`.
Because of this, it may panic if the function has one or more default parameters and both `fn_params` and `parent_params` are non-empty, like the case in the title of this PR.

So, we must call `generic_args_sans_default` first and then split it into `fn_params` and `parent_params`
2024-08-15 07:05:47 +00:00
Shoyu Vanilla
b0183f81f4 fix: Panic while displaying associated function with a type annotation 2024-08-15 09:37:49 +09:00
bors
89cd5856d9 Auto merge of #17882 - ShoyuVanilla:issue-17866, r=lnicola
fix: Panic while canonicalizing erroneous projection type

Fixes #17866

The root cause of #17866 is quite horrifyng 😨

```rust
trait T {
    type A;
}

type Foo = <S as T>::A; // note that S isn't defined

fn main() {
    Foo {}
}
```

While inferencing alias type `Foo = <S as T>::A`;

78c2bdce86/crates/hir-ty/src/infer.rs (L1388-L1398)

the error type `S` in it is substituted by inference var in L1396 above as below;

78c2bdce86/crates/hir-ty/src/infer/unify.rs (L866-L869)

This new inference var's index is `1`, as the type inferecing procedure here previously inserted another inference var into same `InferenceTable`.

But after that, the projection type made from the above then passed to the following function;

78c2bdce86/crates/hir-ty/src/traits.rs (L88-L96)

here, a whole new `InferenceTable` is made, without any inference var and in the L94, this table calls;

78c2bdce86/crates/hir-ty/src/infer/unify.rs (L364-L370)

And while registering `AliasEq` `obligation`, this obligation contains inference var `?1` made from the previous table, but this table has only one inference var `?0` made at L365.
So, the chalk panics when we try to canonicalize that obligation to register it, because the obligation contains an inference var `?1` that the canonicalizing table doesn't have.

Currently, we are calling `InferenceTable::new()` to do some normalizing, unifying or coercing things to some targets that might contain inference var that the new table doesn't have.
I think that this is quite dangerous footgun because the inference var is just an index that does not contain the information which table does it made from, so sometimes this "foreign" index might cause panic like this case, or point at the wrong variable.

This PR mitigates such behaviour simply by inserting sufficient number of inference vars to new table to avoid such problem.
This strategy doesn't harm current r-a's intention because the inference vars that passed into new tables are just "unresolved" variables in current r-a, so this is just making sure that such "unresolved" variables exist in the new table
2024-08-14 15:12:03 +00:00
Shoyu Vanilla
81b68b2078 fix: Panic while canonicalizing erroneous projection type 2024-08-14 23:17:48 +09:00
bors
e2f2e7322a Auto merge of #17891 - lnicola:binop-bad-lang-items, r=flodiebold
internal: Be more resilient to bad language item definitions in binop inference

Fixes #16287
Fixes #16286

There's one more in `write_fn_trait_method_resolution`, but I'm not sure if it won't cause further problems in `infer_closures`.
2024-08-14 12:06:50 +00:00
Laurențiu Nicola
4a14155efa Be more resilient to bad language item definitions in binop inference 2024-08-14 14:38:39 +03:00
bors
54ecca078f Auto merge of #17885 - Wilfred:op_queue_docs, r=lnicola
minor: Add a doc comment for OpQueue

Add an explanatory sentence and some sample code to help readers understand why this struct exists.
2024-08-14 05:13:44 +00:00
Wilfred Hughes
5e058db682 docs: Add a doc comment for OpQueue
Add an explanatory sentence and some sample code to help
readers understand why this struct exists.
2024-08-13 16:51:54 -07:00
Laurențiu Nicola
28af7e0958 Merge from rust-lang/rust 2024-08-13 17:58:52 +03:00
Laurențiu Nicola
ddb8551e03 Preparing for merge from rust-lang/rust 2024-08-13 17:56:37 +03:00
Shoyu Vanilla
4ea0db907c Bump rustc_pattern_analysis 2024-08-13 23:15:37 +09:00
Shoyu Vanilla
6911d9f066 Temporarily remove non-working test case 2024-08-13 23:10:55 +09:00
Shoyu Vanilla
20971602d5 feat: `min-exhaustive-patterns 2024-08-13 23:10:55 +09:00
bors
acc2c5d67a Auto merge of #17876 - Veykril:semantics-include-simplify, r=Veykril
internal: Remove unreachable logic for include token mapping

Turns out https://github.com/rust-lang/rust-analyzer/pull/17863 made this obsolete 🎉
2024-08-13 07:48:55 +00:00
Lukas Wirth
705a89e72f Remove unreachable logic for include token mapping 2024-08-13 09:44:13 +02:00
bors
84ac708b45 Auto merge of #17867 - ShoyuVanilla:issue-17854, r=Veykril
fix: Trailing excess comma in "Convert to named struct" assist

Fixes #17854
2024-08-13 06:24:19 +00:00
Shoyu Vanilla
81561ff168 fix: Trailing excess comma in "Convert to named struct" assist 2024-08-12 23:36:28 +09:00
Shoyu Vanilla
3bb7f35ec4 fix: Missing non-exhaustive let diagnostics inside async or unsafe block 2024-08-12 23:19:03 +09:00
bors
e66f3db9fa Auto merge of #17864 - Veykril:lsif, r=Veykril
fix: Build and run build scripts in lsif command
2024-08-12 12:34:31 +00:00
Lukas Wirth
1b983e33c6 Build and run build scripts in lsif command 2024-08-12 14:33:11 +02:00
bors
ff63552892 Auto merge of #17863 - Veykril:include-diags, r=Veykril
fix: Resolve included files to their calling modules in IDE layer

Fixes https://github.com/rust-lang/rust-analyzer/issues/17390 at the expense of reporting duplicate diagnostics for modules that have includes in them when both the calling and called file are included.
2024-08-12 11:48:32 +00:00
Lukas Wirth
1ebd727255 Resolve included files to their calling modules in IDE layer 2024-08-12 13:45:33 +02:00
bors
bdc0b7859f Auto merge of #17861 - Veykril:bump-lock, r=Veykril
minor: Bump lockfile
2024-08-12 11:05:08 +00:00
Lukas Wirth
9431039e8a Allow new license combination 2024-08-12 12:51:47 +02:00
Laurențiu Nicola
696ecea575 Only keep lib/ in publish-libs 2024-08-12 13:45:38 +03:00
bors
5e753ffe25 Auto merge of #17850 - Veykril:rust-analyzer-crate, r=Veykril
internal: Reply to requests with defaults when vfs is still loading

There is no reason for us to hit the database with queries when we certainly haven't reached a stable state yet. Instead we just reply with default request results until we are in a state where we can do meaningful work. This should save us from wasting resources while starting up at worst, and at best save us from creating query and interning entries that are non-meaningful which ultimately just end up wasting memory.
2024-08-12 10:21:06 +00:00
bors
563dc1cd33 Auto merge of #17860 - Veykril:publish-libs, r=Veykril
fix: Fix publish libs workflow
2024-08-12 10:06:38 +00:00
Lukas Wirth
234d383f5f internal: Reply to requests with defaults when vfs is still loading 2024-08-12 12:05:15 +02:00
Lukas Wirth
407944764a fix: Fix publish libs workflow 2024-08-12 11:52:04 +02:00
Lukas Wirth
69f613892a minor: Bump lockfile 2024-08-12 11:51:43 +02:00
bors
7c53ff2da4 Auto merge of #17843 - mo8it:flycheck, r=Veykril
internal: Performance optimizations

- Use `Command::arg` directly
- Avoid the overhead of the `select!` macro when possible
- Use `select_biased!`
2024-08-12 09:27:47 +00:00
bors
c2d1555788 Auto merge of #17842 - mo8it:crossbeam-channel, r=Veykril
internal: Optimize the usage of channel senders

Used `Sender` directly instead of a boxed closure. There is no need to use the boxed closure. This also allows the caller to decide to do something other than `unwrap` (not a fan of it BTW).
2024-08-12 09:13:37 +00:00
bors
757b0a5ace Auto merge of #17859 - Veykril:rustc_deprecated_safe_2024, r=Veykril
fix: Correctly support `#[rustc_deprecated_safe_2024]`

Fixes https://github.com/rust-lang/rust-analyzer/issues/17852
2024-08-12 08:59:08 +00:00
Lukas Wirth
3355c788f1 fix: Correctly support #[rustc_deprecated_safe_2024] 2024-08-12 10:56:59 +02:00
mo8it
f7c4716dbf Use the send method 2024-08-12 10:55:04 +02:00
mo8it
285285d3fd Add more track_caller 2024-08-12 10:54:46 +02:00
mo8it
7586ba6bfb Add track_caller 2024-08-12 10:44:00 +02:00
mo8it
94bd4da3f1 Revert "Remove unneeded send method"
This reverts commit 567bde603cfeedb5cfc44e441578c5416bfc4f35.
2024-08-12 10:42:35 +02:00
bors
12a3d0112c Auto merge of #17833 - edevil:fix_expansion_limit, r=Veykril
Reuse recursion limit as expansion limit

A configurable recursion limit was introduced by looking at the recursion_limit crate attribute. Instead of relying on a global constant we will reuse this value for expansion limit as well.

Addresses: https://github.com/rust-lang/rust-analyzer/issues/8640#issuecomment-2271740272
2024-08-12 08:22:55 +00:00
bors
3ef56c2bb8 Auto merge of #17845 - ShoyuVanilla:tait, r=Veykril
feat: Implement TAIT and fix ATPIT a bit

Closes #16296 (Commented on the issue)

In #16852, I implemented ATPIT, but as I didn't discern ATPIT and other non-assoc TAIT, I guess that it has been working for some TAITs.

As the definining usage of TAIT requires it should be appear in the Def body's type(const blocks' type annotations or functions' signatures), this can be done in simlilar way with ATPIT

And this PR also corrects some defining-usage resolution for ATPIT
2024-08-12 08:08:40 +00:00
mo8it
97a6fc65f1 Fix deadlock 2024-08-11 14:58:50 +02:00
bors
ec03068320 Auto merge of #17844 - Veykril:find-path-std-fix, r=Veykril
fix: Fix find_path not respecting non-std preference config correctly

Fixes https://github.com/rust-lang/rust-analyzer/issues/17840
2024-08-10 15:47:18 +00:00