aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge #7128bors[bot]2021-01-035-18/+86
|\ | | | | | | | | | | | | | | 7128: Implement HasAttrs for GenericParam r=matklad a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
| * Implement HasAttrs for Type-, Const- and LifetimeParamLukas Wirth2021-01-021-9/+10
| |
| * Impl HasAttrs for GenericParamLukas Wirth2021-01-015-11/+78
| |
* | Merge #7135bors[bot]2021-01-024-12/+11
|\ \ | | | | | | | | | | | | | | | | | | | | | 7135: Fix warnings on nightly r=lnicola a=cynecx Co-authored-by: cynecx <[email protected]>
| * | Use fully qualified `Itertools::intersperse` call to silence nightly ↵cynecx2021-01-021-8/+7
| | | | | | | | | | | | warnings about a potential name collision due to recent libstd api additions
| * | Fix warnings on rust-nightlycynecx2021-01-023-4/+4
|/ /
* | Merge #7133bors[bot]2021-01-027-52/+176
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7133: Proper handling $crate and local_inner_macros r=jonas-schievink a=edwin0cheng This PR introduces `HygineFrames` to store the macro definition/call site hierarchy in hyginee and when resolving `local_inner_macros` and `$crate`, we use the token to look up the corresponding frame and return the correct value. See also: https://rustc-dev-guide.rust-lang.org/macro-expansion.html#hygiene-and-hierarchies fixe #6890 and #6788 r? @jonas-schievink Co-authored-by: Edwin Cheng <[email protected]>
| * | Use arena instead of vecEdwin Cheng2021-01-021-22/+16
| | |
| * | Introduce HygieneFrames for proper token hygineeEdwin Cheng2021-01-027-52/+182
| | |
* | | Merge #7130bors[bot]2021-01-023-0/+356
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7130: Add extract_assignment assist r=Jesse-Bakker a=Jesse-Bakker Add extract-assignment assist (#7006). Assist is for now only implemented on if/match-statements where the assigment is the last statement in every block, as for other cases, one would have to check whether the assignment has effects on the rest of the block and extract a temporary variable for it in the block. Co-authored-by: Jesse Bakker <[email protected]>
| * | | Add support for MatchExpr to extract_assigment assistJesse Bakker2021-01-021-7/+94
| | | |
| * | | Add extract-assignment assistJesse Bakker2021-01-023-0/+269
| | | |
* | | | Merge #7134bors[bot]2021-01-022-1/+19
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7134: Fix infer error of macro invocation in array expr r=edwin0cheng a=edwin0cheng Fixed following infer error: ```rust macro_rules! bar { () => {0u32} } fn test() { let a = [bar!()]; // a : [unknown] } ``` bors r+ Co-authored-by: Edwin Cheng <[email protected]>
| * | | | Fix infer error of macro invocation in array exprEdwin Cheng2021-01-022-1/+19
| | |/ / | |/| |
* | | | 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
| | |_|_|/ | |/| | |
* | | | | Merge #7104bors[bot]2020-12-313-3/+5
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7104: Remove some unneeded string allocations r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Remove some unneeded string allocationsLukas Wirth2020-12-313-3/+5
|/ / / /
* | | | Merge #7101bors[bot]2020-12-311-7/+36
|\ \ \ \ | |_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7101: Fix spacing bug in proc-macro TokenStream::to_string r=edwin0cheng a=edwin0cheng bors r+ fixes #7100 Co-authored-by: Edwin Cheng <[email protected]>