aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix ConstParam HasSource impl and implement TryToNav not NavNick Spain2021-01-022-8/+8
|
* Remove old_source now we've fully migratedNick Spain2021-01-021-68/+0
| | | | Fixes #6913
* Handle case where detail doesn't exist without giving up on completionNick Spain2021-01-021-1/+1
| | | Co-authored-by: Aleksey Kladov <[email protected]>
* Remove source_old from adding const and function implsNick Spain2021-01-021-23/+26
|
* Make the result of Const, FunctionRender and TypeAliasRender constructors ↵Nick Spain2021-01-025-20/+17
| | | | | | optional They use source() which now returns an Option so they need to too.
* Move impls of ToNav that use source() to TryToNavNick Spain2021-01-025-69/+64
|
* Handle missing source in target_data_for_defNick Spain2021-01-021-13/+12
|
* Handle missing source in filter_assoc_itemsNick Spain2021-01-021-7/+8
|
* Go back to use of source_old() in offset_target_and_file_id as it's not as ↵Nick Spain2021-01-021-1/+2
| | | | simple as I thought
* Fix type error with .and_thenNick Spain2021-01-021-15/+14
|
* Handle not finding range in Definition::search_scopeNick Spain2021-01-021-12/+36
| | | | | | The `LifetimeParam` and `Local` variants use `source()` to find their range. Now that `source()` returns an `Option` we need to handle the `None` case.
* source_old -> source for cases that can be handled by simple bubblingNick Spain2021-01-025-13/+10
|
* Only log path and syntax range when processing function if source existsNick Spain2021-01-021-6/+6
|
* HasSource::source_old -> HasSource::source for places where proc-macros were ↵Nick Spain2021-01-024-42/+11
| | | | | | | | | | | | special cased In #6901 some special case handling for proc-macros was introduced to prevent panicing as they have no AST. Now the new HasSource::source method is used that returns an option. Generally this was a pretty trivial change, the only thing of much interest is that `hir::MacroDef` now implements `TryToNav` not `ToNav` as this allows us to handle `HasSource::source` now returning an option.
* Mark HasSource::source_old as deprecated but allow at all call sitesNick Spain2021-01-0215-4/+35
|
* Implement new HasSource::source for all implementors of HasSourceNick Spain2021-01-021-0/+66
|
* HasSource::source -> HasSource::source_oldNick Spain2021-01-0215-55/+55
| | | | To start migrating HasSource::source to return an Option.
* Merge #7132bors[bot]2021-01-021-9/+1
|\ | | | | | | | | | | | | | | 7132: Stop using beta toolchain in xtask dist r=lnicola a=lnicola bors r+ Co-authored-by: Laurențiu Nicola <[email protected]>
| * Stop using beta toolchain in xtask distLaurențiu Nicola2021-01-021-9/+1
|/
* Merge #7125bors[bot]2021-01-012-1/+29
|\ | | | | | | | | | | | | | | 7125: Don't emit arg count diagnostics for method calls with unknown receiver r=flodiebold a=flodiebold Fixes #7098. Co-authored-by: Florian Diebold <[email protected]>
| * Don't emit arg count diagnostics for method calls with unknown receiverFlorian Diebold2021-01-012-1/+29
|/ | | | Fixes #7098.
* Merge #7123bors[bot]2021-01-016-8/+32
|\ | | | | | | | | | | | | | | | | | | | | | | 7123: Add support for Rust 2021. r=lnicola a=m-ou-se This adds `2021` in all places where rust-analyzer already knew about `2015` and `2018`. The only edition-specific behaviour I could find in the source code was gated on a direct comparison with `Edition2015`, so `Edition2021` should (correctly) behave the same as `Edition2018`: https://github.com/rust-analyzer/rust-analyzer/blob/56a7bf7ede12f6bec194265ea4a95911c9e469bd/crates/hir_def/src/nameres/path_resolution.rs#L132 Co-authored-by: Mara Bos <[email protected]>
| * Formatting.Mara Bos2021-01-012-4/+22
| |
| * Add support for Rust 2021.Mara Bos2021-01-016-6/+12
|/
* Merge #7121bors[bot]2021-01-011-7/+43
|\ | | | | | | | | | | | | | | 7121: Show lifetimes and labels on hover r=Veykril a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
| * Show lifetimes and labels on hoverLukas Wirth2021-01-011-7/+43
|/
* Merge #7080bors[bot]2021-01-0128-41/+238
|\ | | | | | | | | | | | | | | 7080: Implement ConstParams for HIR r=Veykril a=Veykril r? @flodiebold Co-authored-by: Lukas Wirth <[email protected]>
| * Add ConstParams to the ide layerLukas Wirth2021-01-0113-5/+66
| |
| * Add ConstParams to the HIRLukas Wirth2021-01-0116-37/+173
| |
* | Merge #7116bors[bot]2021-01-012-4/+11
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7116: Fix deep syntax tree bug generated by proc-macro r=jonas-schievink a=edwin0cheng This PR fixed a bug from `semver-parser` and `pest_derive` crates which generate a very deep syntax tree such that serde reject to de-serialize. To fix this bug, we disabled recursion limit in `serde` (by calling [`Deserializer::disable_recursion_limit`](https://docs.rs/serde_json/1.0.61/serde_json/struct.Deserializer.html#method.disable_recursion_limit)) I have a feeling that we still need some way to protect against bad proc-macro generating huge syntax node, but I have no idea right now. r? @jonas-schievink Fixes #7103 Co-authored-by: Edwin Cheng <[email protected]>
| * | Remove serde_stacker which depends on ccEdwin Cheng2021-01-013-36/+1
| | |
| * | Fix deep syntax tree bug generated by proc-macroEdwin Cheng2021-01-014-4/+46
| | |
* | | Merge #7117bors[bot]2021-01-011-2/+2
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7117: Use stable instead of beta on macos-11 release runner r=lnicola a=lnicola Because beta was promoted to stable yesterday. bors r+ Co-authored-by: Laurențiu Nicola <[email protected]>
| * | | Use stable instead of beta on macos-11 release runnerLaurențiu Nicola2021-01-011-2/+2
|/ / /
* | | Merge #7102bors[bot]2021-01-011-2/+66
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7102: Fix completion of Default struct update syntax r=Veykril a=nick96 Previously the inserted text was always `..Default::default()` which ends up as `...Default::default()` if `.` was typed. Now checks if the current token is `.` and inserts `.Default::default()` if it is, so `..Default::default()` is correctly completed. I think there's probably a better way to implement this context aware completion because I've seen it in other parts of rust-analyzer as a user but I'm not sure how to do it. Fixes #6969 Co-authored-by: Nick Spain <[email protected]>
| * | | Strip completion prefix of what has already been typedNick Spain2021-01-011-5/+4
| | | | | | | | | | | | | | | | | | | | Per Veykril's suggestion, this removes the need to repeat the completion text twice. It also handles the completion in a more general case.
| * | | Add a test for correct completion of ..Default::default()Nick Spain2021-01-011-1/+61
| | | |
| * | | Fix completion of Default struct update syntaxNick Spain2020-12-311-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously the inserted text was always `..Default::default()` which ends up as `...Default::default()` if `.` was typed. Now checks if the current token is `.` and inserts `.Default::default()` if it is, so `..Default::default()` is correctly completed. Fixes #6969
* | | | Merge #7112bors[bot]2020-12-311-1/+1
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7112: deny_clippy test works with cfg_attr r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | deny_clippy test works with cfg_attrAleksey Kladov2020-12-311-1/+1
|/ / / /
* | | | Merge #7071bors[bot]2020-12-311-0/+5
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7071: Pass --all-targets to "cargo check" when discovering external resources r=matklad a=WasabiFan There is a repro case and background in the linked issue. In short, the goal of this MR is to allow rust-analyzer to discover proc-macros which come from your tests (including, most importantly, dev-dependencies). By default, `cargo check` implies the equivalent of `--lib --bins`, meaning it'll check your libraries and binaries -- but not tests! This means proc-macros (or, I guess, build scripts as well) weren't discovered by rust-analyzer if they came from tests. One solution would be to manually add `--lib --bins --tests` (i.e., just augment the effective options to include tests). However, in this MR, I threw in `--all-targets`, which [according to the docs](https://doc.rust-lang.org/cargo/commands/cargo-check.html#target-selection) implies `--benches --examples` too. I have absolutely no idea what repercussions that will have on rust-analyzer for other projects, nor do I know if it's a problem that build scripts will now be discovered for tests/examples/benches. But I am not aware of a reason you _wouldn't_ want to discover these things in your examples too. I think the main drawback of this change is that it will likely slow down the `cargo check`. At a minimum, it'll now be checking your tests _and_ their dependencies. The `cargo check` docs also say that including `--tests` as I have here may cause your lib crate to be built _twice_, once for the normal target and again for unit tests. My reading of that caveat suggests that "building twice" means it's built once for the tests _inside_ your lib, with a test profile, and again for any consumers of your lib, now using a normal release profile or similar. This doesn't seem surprising. Very minor caveat: `--tests` will not include tests within a binary if it has `test = false` set in `Cargo.toml`. (I discovered this manually by trial-and-error, but hey, it actually says that in the docs!) This is likely not an issue, but _does_ mean that if you are -- for whatever reason -- disabling tests like that and then manually specifying `cargo test --package <...> --bin <...>` to run them, rust-analyzer will remain unaware of proc-macros in your tests. I have confirmed this fixes the original issue in my sandbox example linked in #7034 and in my own project in which I originally discovered this. I've left it configured as my default RA language server and will report back if I notice any unexpected side-effects. Fixes #7034 Co-authored-by: Kaelin Laundry <[email protected]>
| * | | | Pass --all-targets to "cargo check"Kaelin Laundry2020-12-291-0/+5
| | |_|/ | |/| |
* | | | Merge #7106bors[bot]2020-12-316-23/+82
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7106: Split textDocument/formatting TextEdit with diff r=matklad a=Jesse-Bakker #7044 Co-authored-by: Jesse Bakker <[email protected]>
| * | | | Split textDocument/formatting TextEdit with diffJesse Bakker2020-12-316-23/+82
| | | | |
* | | | | Merge #7107bors[bot]2020-12-311-1/+17
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7107: add working dir to cargo metadata fail messages r=matklad a=lf- Context: I was having an error in my workspace config that I couldn't figure out without this added output. In particular, I have a Code workspace with a docs folder and one of my top level crates [which each have their own custom target], which was picking up the Cargo workspace level Cargo.toml incorrectly [which in my project should not ever be used for the editor], and ultimately had to override it with `linkedProjects`. Here's a sample of the changed output: ``` [INFO rust_analyzer::main_loop] handle_event(Workspaces([Err(Failed to read Cargo metadata from Cargo.toml file /home/jade/dev/mu/Cargo.toml, cargo 1.50.0-nightly (75d5d8cff 2020-12-22) Caused by: 0: Failed to run `cargo metadata --manifest-path /home/jade/dev/mu/Cargo.toml` in `/home/jade/dev/mu` 1: Error during execution of `cargo metadata`: error: target path "../../riscv64imac-mu-shoo-elf.json" is not a valid file Caused by: No such file or directory (os error 2) ), Err(Failed to read Cargo metadata from Cargo.toml file /home/jade/dev/mu/shoo/Cargo.toml, cargo 1.50.0-nightly (75d5d8cff 2020-12-22) Caused by: 0: Failed to run `cargo metadata --manifest-path /home/jade/dev/mu/shoo/Cargo.toml` in `/home/jade/dev/mu/shoo` 1: Error during execution of `cargo metadata`: error: target path "../../riscv64imac-mu-shoo-elf.json" is not a valid file Caused by: No such file or directory (os error 2) )])) ``` Co-authored-by: lf- <[email protected]>
| * | | | | add working dir to cargo metadata fail messageslf-2020-12-311-1/+17
|/ / / / /
* | | | | Merge #7055bors[bot]2020-12-311-4/+7
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7055: Install rustfmt if needed during formatting request r=matklad a=kinnison In order to fix #6052 and to fix #4249 this PR installs `rustfmt` using `rustup` if `rustfmt --help` fails. In theory we ought to memoise the attempts (both the `--help` and the installation) so that we don't keep retrying something which will fail (e.g. if nightly is missing rustfmt), but this is a first-pass for opinions. In order to make it possible to notify the user of what happened, I added a facility for `GlobalStateSnapshot` to send *messages* to the client indicating what happened. There may be a cleaner way to do this as well but I wasn't sure exactly what might be best given this is my first time in this codebase. It may be worth, longer term, working with `rustup` to provide a way to detect a missing component binary since `rustup` returns `1` if `rustfmt` is not installed, which is not ideal. Co-authored-by: Daniel Silverstone <[email protected]>
| * | | | | handle_formatting: Notice if rustfmt is missing and reportDaniel Silverstone2020-12-311-4/+7
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In an attempt to fix #6052 and #4249 this attempts to detect if rustfmt is a rustup proxy which isn't installed, and reports the error message to the user for them to fix. In theory this ought to be memoised but for now it'll do as-is. Future work might be to ask the user if they would like us to trigger the installation (if possible). Signed-off-by: Daniel Silverstone <[email protected]>
* | | | | Merge #7105bors[bot]2020-12-311-1/+2
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7105: Fix `==` in in format causes mismatched-arg-count r=edwin0cheng a=edwin0cheng Fixes #7085 Co-authored-by: Edwin Cheng <[email protected]>
| * | | | | Fix `==` in in format causes mismatched-arg-countEdwin Cheng2020-12-311-1/+2
| | |_|_|/ | |/| | |