Commit graph

15956 commits

Author SHA1 Message Date
Lukas Wirth 729a9eb5d0 Fix find_path using the wrong module for visibility calculations 2022-09-22 17:56:58 +02:00
Lukas Wirth 9bf386f4c0 Fix default enum representation not being isize 2022-09-20 17:50:13 +02:00
Lukas Wirth 2119c1f351 Fix using incorrect type for variants in DefWithBody::body_type 2022-09-20 17:29:35 +02:00
Lukas Wirth b25f0ba15b Properly set the enum variant body expected type 2022-09-20 17:15:48 +02:00
Lukas Wirth 9f233cd5d2 Parse more repr options 2022-09-20 17:12:27 +02:00
Lukas Wirth 6d0d051628 Simplify 2022-09-20 17:12:10 +02:00
bors 817a6a8609 Auto merge of #12966 - OleStrohm:master, r=Veykril
feat: Display the value of enum variant on hover

fixes #12955

This PR adds const eval support for enums, as well as showing their value on hover, just as consts currently have.

I developed these two things at the same time, but I've realized now that they are separate. However since the hover is just a 10 line change (not including tests), I figured I may as well put them in the same PR. Though if you want them split up into "enum const eval support"  and "show enum variant value on hover", I think that's reasonable too.

Since this adds const eval support for enums this also allows consts that reference enums to have their values computed now too.

The const evaluation itself is quite rudimentary, it doesn't keep track of the actual type of the enum, but it turns out that Rust doesn't actually either, and `E::A as u8` is valid regardless of the `repr` on `E`.

It also doesn't really care about what expression the enum variant contains, it could for example be a string, despite that not being allowed, but I guess it's up to the `cargo check` diagnostics to inform of such issues anyway?
2022-09-20 14:01:16 +00:00
bors 09600a3a5b Auto merge of #13268 - Veykril:simplify, r=Veykril
Simplify
2022-09-20 12:35:18 +00:00
Lukas Wirth 027bfd68ba Fix operator highlighting tags applying too broadly 2022-09-20 14:33:44 +02:00
Lukas Wirth 7e8eac3fd7 Simplify 2022-09-20 14:33:18 +02:00
Ryo Yoshida 9845e37f58
Ensure at least one trait bound in TyKind::DynTy 2022-09-20 04:37:34 +09:00
OleStrohm f87ad8df05 Added FIXME for the repr type of the enum 2022-09-19 19:26:35 +01:00
DidiBear cdc362e6cc
docs(inlay-hints): remove reference to Toggle inlay hints 2022-09-19 12:00:58 -04:00
bors 4f2c86e86e Auto merge of #13260 - Veykril:simplify, r=Veykril
Simplify
2022-09-19 15:32:45 +00:00
Lukas Wirth a6c067c06d Simplify 2022-09-19 17:31:08 +02:00
bors bc6d574662 Auto merge of #13259 - Veykril:cargo-config-simplify, r=Veykril
Simplify feature representation in CargoConfig
2022-09-19 14:53:06 +00:00
Lukas Wirth d9f5709609 Simplify feature representation in CargoConfig 2022-09-19 16:52:44 +02:00
Laurențiu Nicola e54f61dbdb Try to fix crash introduced in #13147 2022-09-19 12:45:38 +03:00
bors 39eaf7864c Auto merge of #13253 - Veykril:simplify, r=Veykril
Simplify
2022-09-18 17:52:21 +00:00
Lukas Wirth 0d9f97166b Simplify 2022-09-18 19:44:38 +02:00
bors 11bf2e7ffb Auto merge of #13058 - dpaoliello:extraenv, r=Veykril
Add a new configuration settings to set env vars when running cargo, rustc, etc. commands: cargo.extraEnv and checkOnSave.extraEnv

It can be extremely useful to be able to set environment variables when rust-analyzer is running various cargo or rustc commands (such as `cargo check`, `cargo --print cfg` or `cargo metadata`): users may want to set custom `RUSTFLAGS`, change `PATH` to use a custom toolchain or set a different `CARGO_HOME`.

There is the existing `server.extraEnv` setting that allows env vars to be set when the rust-analyzer server is launched, but using this as the recommended mechanism to also configure cargo/rust has some drawbacks:
- It convolutes configuring the rust-analyzer server with configuring cargo/rustc (one may want to change the `PATH` for cargo/rustc without affecting the rust-analyzer server).
- The name `server.extraEnv` doesn't indicate that cargo/rustc will be affected but renaming it to `cargo.extraEnv` doesn't indicate that the rust-analyzer server would be affected.
- To make the setting useful, it needs to be dynamically reloaded without requiring that the entire extension is reloaded. It might be possible to do this, but it would require the client communicating to the server what the overwritten env vars were at first launch, which isn't easy to do.

This change adds two new configuration settings: `cargo.extraEnv` and `checkOnSave.extraEnv` that can be used to change the environment for the rust-analyzer server after launch (thus affecting any process that rust-analyzer invokes) and the `cargo check` command respectively. `cargo.extraEnv` supports dynamic changes by keeping track of the pre-change values of environment variables, thus it can undo changes made previously before applying the new configuration (and then requesting a workspace reload).
2022-09-18 17:43:46 +00:00
bors 932e63b5d4 Auto merge of #13239 - mdx97:mathew/fix-add-reference-for-macros, r=Veykril
Fix add reference action on macros.

Before we were using the range of the corresponding expression node in the macro expanded file, which is obviously incorrect as we are setting the text in the original source.

For some reason, the test I added is failing and I haven't found a way to fix it. Does anyone know why `check_fix` wouldn't work with macros? Getting this error:

```text
thread 'handlers::type_mismatch::tests::test_add_reference_to_macro_call' panicked at 'no diagnostics', crates/ide-diagnostics/src/handlers/type_mismatch.rs:317:9
```

closes #13219
2022-09-17 11:23:05 +00:00
Mathew Horner a65ca20210 Fix tests by using primitive rather than String. 2022-09-16 16:56:19 -05:00
bors b6e3f41c2a Auto merge of #13243 - Veykril:search-memchr, r=Veykril
Use memmem when searching for usages in ide-db

We already have this dependency, so there is no reason not to use it as it is generally faster than std in our use case.
2022-09-16 14:28:12 +00:00
Lukas Wirth b73fa0be9c Use memmem when searching for usages in ide-db 2022-09-16 16:26:54 +02:00
bors 870bfc7e3b Auto merge of #13242 - Veykril:completion-alias, r=Veykril
Complete variants and assoc items in path pattern through type aliases
2022-09-16 14:12:26 +00:00
Lukas Wirth ad17ba12d1 Complete variants and assoc items in path pattern through type aliases 2022-09-16 16:11:58 +02:00
Mathew Horner e7abf34c19 Fix add reference action on macros. 2022-09-15 20:25:29 -05:00
Lukas Wirth a9f103e2fa Fix prelude injection 2022-09-15 12:12:22 +02:00
Jonas Platte c4a87ee0ce
mbe: Remove unneeded unwrap 2022-09-14 23:49:08 +02:00
Jonas Platte d6f0fd04ee
mbe: Remove unnecessary reference to usize 2022-09-14 23:42:11 +02:00
Jonas Platte 54305545a5
mbe: Remove Vec reference in container 2022-09-14 23:35:12 +02:00
Jonas Platte b6aed7914d
mbe: Remove double reference in container 2022-09-14 23:30:44 +02:00
Jonas Platte f7f6d2870f
mbe: Use extend instead of push in loop 2022-09-14 23:26:24 +02:00
Jonas Platte 5e2f9e322f
mbe: Return Bindings from build_inner 2022-09-14 23:22:38 +02:00
Daniel Paoliello c407cc554e Add cargo.extraEnv setting 2022-09-13 11:29:14 -07:00
bors dbb8fedf8b Auto merge of #13221 - mdx97:mdx97/annotations-above-whole-item, r=Veykril
Allow configuration of annotation location.

I've added the ability to configure where lens annotations render relevant to the item they describe. Previously, these would render directly above the line the item is declared on. Now, there is the ability to render these annotations above the entire item (including doc comments, and attributes).

The names of the config options are up for debate, I did what seemed best to me but if anyone has better ideas let me know.

This is my first contribution so if I've missed anything please let me know.

Here's a preview of what the new option looks like:

<img width="577" alt="Screen Shot 2022-09-11 at 10 39 51 PM" src="https://user-images.githubusercontent.com/33100798/189570298-b4fcbf9c-ee49-4b79-aae6-1037ae4f26af.png">

closes https://github.com/rust-lang/rust-analyzer/issues/13218
2022-09-13 15:09:53 +00:00
bors ba15f75c39 Auto merge of #13225 - lowr:fix/hir-proj-normalization, r=Veykril
fixup: remove unnecessary `Option`

Fixup for #13223, two things:

- `normalize_projection_query()` (and consequently `HirDatabase::normalize_projection()`) never returns `None` (well, it used to when I first wrote it...), so just return `Ty` instead of `Option<Ty>`
- When chalk cannot normalize projection uniquely, `normalize_trait_assoc_type()` used to return `None` before #13223, but not anymore because of the first point. I restored the behavior so its callers work as before.
2022-09-13 14:52:58 +00:00
bors 125d43cb2c Auto merge of #13227 - Veykril:core-pref, r=Veykril
Restructure `find_path` into a separate functions for modules and non-module items

Follow up to https://github.com/rust-lang/rust-analyzer/pull/13212
Also renames `prefer_core` imports config to `prefer_no_std` and changes the behavior of no_std path searching by preferring `core` paths `over` alloc

This PR turned into a slight rewrite, so it unfortunately does a few more things that I initially planned to (including a bug fix for enum variant paths)
2022-09-13 13:16:57 +00:00
Lukas Wirth a8ecaa1979 Restructure find_path into a separate functions for modules and non-module items
Also renames `prefer_core` imports config to `prefer_no_std` and changes the behavior of no_std path searching by preferring `core` paths `over` alloc
2022-09-13 15:15:27 +02:00
Lukas Wirth cadb01c315 Move reference imports filtering into to_proto layer 2022-09-13 14:58:50 +02:00
Mathew Horner f57c15f3e9 Address comments and fix build. 2022-09-12 16:34:13 -05:00
OleStrohm 3931e55aee Fixed lints 2022-09-12 21:27:19 +01:00
OleStrohm 177ec82a41 Rebased 2022-09-12 21:02:30 +01:00
OleStrohm 5313bd1984 Cleaned up code based on feedback 2022-09-12 20:20:45 +01:00
OleStrohm 301b8894ea Added more consteval tests and fixed consteval result 2022-09-12 20:20:45 +01:00
OleStrohm ad0a6bf1a3 Added consteval tests 2022-09-12 20:20:43 +01:00
OleStrohm 2f84b6e2e5 Almost there 2022-09-12 20:20:22 +01:00
OleStrohm b63234e20b Cleaned up code 2022-09-12 20:19:49 +01:00
OleStrohm e28046c673 Removed unnecessary TODO 2022-09-12 20:19:19 +01:00