aboutsummaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
| * Fix attribute index assignment in cfg_attr resolutionLukas Wirth2021-03-161-5/+7
| |
| * Replace trait object boxing with extra AttrsOwnerNodeLukas Wirth2021-03-162-20/+49
| |
| * Move doc-comment highlight injection from AST to HIRLukas Wirth2021-03-166-18/+63
| |
* | Merge #8063bors[bot]2021-03-1740-122/+97
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8063: couple clippy::complexity fixes r=matklad a=matthiaskrgr avoid redundant `.into()` calls to convert T into identical T (`let x: String = String::from("hello").into();`) use `if let Some(x)` instead of `.is_some()` + `.unwrap()` don't clone Copy types remove redundant wrapped ?s: `Some(Some(3)?)` can just be `Some(3)` use `.map(|x| y)` instead of `and_then(|x| Some(y)` on `Option`s Co-authored-by: Matthias Krüger <[email protected]>
| * | use simpler .map(|x| y) instead of .and_then(|x| Some(y)) for Options. ↵Matthias Krüger2021-03-172-24/+14
| | | | | | | | | | | | (clippy::bind_instead_of_map)
| * | remove uselessly wrapped ?s. (clippy::meedless_question_markMatthias Krüger2021-03-173-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | let x = Some(3); let y = Some(x?); can just be: let y = x
| * | don't clone types that are copy (clippy::clone_on_copy)Matthias Krüger2021-03-1712-28/+18
| | |
| * | use if let Some(x) instead of if x.is_some() and x.unwrap() ↵Matthias Krüger2021-03-171-6/+6
| | | | | | | | | | | | (clippy::unnecessary-unwrap)
| * | avoid converting types into themselves via .into() (clippy::useless-conversion)Matthias Krüger2021-03-1724-61/+56
| | | | | | | | | | | | example: let x: String = String::from("hello world").into();
* | | Merge #8048bors[bot]2021-03-178-47/+80
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8048: Fix missing unresolved macro diagnostic in function body r=edwin0cheng a=brandondong This was an issue I found while working on https://github.com/rust-analyzer/rust-analyzer/pull/7970. **Reproduction:** 1. Call a non-existent macro in a function body. ``` fn main() { foo!(); } ``` 2. No diagnostics are raised. An unresolved-macro-call diagnostic is expected. 3. If the macro call is instead outside of the function body, this works as expected. I believe this worked previously and regressed in https://github.com/rust-analyzer/rust-analyzer/pull/7805. **Behavior prior to https://github.com/rust-analyzer/rust-analyzer/pull/7805:** - The unresolved-macro-call diagnostic did not exist. Instead, a macro-error diagnostic would be raised with the text "could not resolve macro [path]". - This was implemented by adding an error to the error sink (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8L657). - The error was propagated through https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body.rs#L123 eventually reaching https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body/lower.rs#L569. **Behavior after:** - Instead of writing to the error sink, an UnresolvedMacro error is now returned (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8R631). - The parent caller throws away the error as its function signature is `Option<MacroCallId>` (https://github.com/rust-analyzer/rust-analyzer/pull/7805/files#diff-50a326c5ae465bd9b31ee4310186380aa06e4fa1f6b41dbc0aed5bcc656a3cb8R604). - We instead now reach the warn condition (https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body.rs#L124) and no diagnostics are created in https://github.com/rust-analyzer/rust-analyzer/blob/1a82af3527e476d52410ff4dfd2fb4c57466abcb/crates/hir_def/src/body/lower.rs#L575. **Fix:** - Make sure to propagate the UnresolvedMacro error. Report the error using the new unresolved-macro-call diagnostic. Co-authored-by: Brandon <[email protected]>
| * | Follow established ErrorEmitted patternBrandon2021-03-173-17/+14
| | |
| * | Fix missing unresolved macro diagnostic in function bodyBrandon2021-03-167-39/+75
| | |
* | | pit-of-successify tree editorAleksey Kladov2021-03-162-14/+17
| | |
* | | Auto-magical whitespaceAleksey Kladov2021-03-162-23/+58
| | |
* | | Move more boundsAleksey Kladov2021-03-162-36/+54
| | | | | | | | | | | | changelog: skip
* | | Rename Substs -> SubstitutionFlorian Diebold2021-03-1617-155/+167
| | |
* | | Merge #8055bors[bot]2021-03-162-16/+32
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 8055: Implement HirDisplay for some more types r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * | Implement HirDisplay for some more typesLukas Wirth2021-03-162-16/+32
| | |
* | | Merge #8053bors[bot]2021-03-163-145/+16
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8053: Remove ShortLabel r=Veykril a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
| * | | Remove ShortLabelLukas Wirth2021-03-163-145/+16
| |/ /
* | | Merge #8034bors[bot]2021-03-166-8/+94
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 8034: Implement Crate::transitive_reverse_dependencies r=matklad a=Veykril changelog internal Implement Crate::transitive_reverse_dependencies Co-authored-by: Lukas Wirth <[email protected]>
| * | Don't repeat work in transitive_reverse_dependenciesLukas Wirth2021-03-161-11/+10
| | |
| * | Add new_source_root meta to test fixturesLukas Wirth2021-03-163-7/+28
| | |
| * | Implement Crate::transitive_reverse_dependenciesLukas Wirth2021-03-154-5/+71
| | |
* | | Merge #8052bors[bot]2021-03-161-27/+21
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8052: minor style fixes per feedback on #8036 r=JoshMcguigan a=JoshMcguigan cc @matklad - this PR addresses your comments in #8036. changelog fixup #8036 Co-authored-by: Josh Mcguigan <[email protected]>
| * | | minor style fixes per feedback on #8036Josh Mcguigan2021-03-161-27/+21
| | | |
* | | | Merge #8051bors[bot]2021-03-161-3/+3
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8051: Fix more unused wariable warnings r=lnicola a=lnicola bors r+ changelog skip Co-authored-by: Laurențiu Nicola <[email protected]>
| * | | Fix more unused wariable warningsLaurențiu Nicola2021-03-161-3/+3
| | | |
* | | | Merge #7498bors[bot]2021-03-1640-171/+373
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7498: Clone for update r=matklad a=matklad rowan counterpart https://github.com/rust-analyzer/rowan/pull/93 #6857 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | Upgrade rowanAleksey Kladov2021-03-1640-171/+373
| | | | | | | | | | | | | | | | | | | | Notably, new rowan comes with support for mutable syntax trees.
| | | | |
| \ \ \ \
*-. \ \ \ \ Merge #7900 #8000bors[bot]2021-03-1621-212/+1058
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7900: show function params in completion detail r=matklad a=JoshMcguigan This resolves #7842 by updating the detail for function completions from `-> T` to `fn(T, U) -> V`. I added an expicit unit test for this, `ide_completion::render::fn_detail_includes_args_and_return_type`, which passes. Lots of other unit tests fail (~60 of them) due to this change, although I believe the failures are purely cosmetic (they were testing the exact format of this output). I'm happy to go update those tests, but before I do that I'd like to make sure this is in fact the format we want for the detail? edit - I realized `UPDATE_EXPECT=1 cargo test` automatically updates `expect!` tests. Big :+1: to whoever worked on that! So I'll go ahead and update all these tests soon. But I still would like to confirm `fn(T, U) -> V` is the desired content in the `detail` field. 8000: Use hir formatter for hover text r=matklad a=oxalica Fix #2765 , (should) fix #4665 Co-authored-by: Josh Mcguigan <[email protected]> Co-authored-by: oxalica <[email protected]>
| | * | | | Update testsoxalica2021-03-151-28/+57
| | | | | |
| | * | | | Pretty print root module of extern cratesoxalica2021-03-151-0/+4
| | | | | |
| | * | | | Clean usage of ShortLabeloxalica2021-03-152-7/+8
| | | | | |
| | * | | | Fix trait type parameteroxalica2021-03-151-1/+7
| | | | | |
| | * | | | Use hir formatter moreoxalica2021-03-158-53/+258
| | | | | |
| | * | | | Impl HirDisplay for function hover messageoxalica2021-03-155-14/+461
| | | | | |
| | * | | | Introduce FunctionQualifier for hir::FunctionDataoxalica2021-03-156-17/+45
| | | | | |
| | * | | | Collect HirDisplay impls to a single fileoxalica2021-03-152-20/+27
| | | | | |
| | * | | | Add test for hover of macro expanded functionoxalica2021-03-151-0/+38
| | | |/ / | | |/| |
| * | | | add params_display and ty_displayJosh Mcguigan2021-03-121-9/+17
| | | | |
| * | | | show function params in completion detailJosh Mcguigan2021-03-128-82/+155
| | | | |
| | | | |
| \ \ \ \
*-. \ \ \ \ Merge #8036 #8046bors[bot]2021-03-163-50/+172
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8036: completions: provide relevance bonus for enum types, and suggest ref matches for fn and enum r=matklad a=JoshMcguigan This PR makes several improvements to completions and completion sorting: 1. Provide exact match type relevance score bonus for enum variants 2. Suggest `&Foo` (ref_match) for enums if that is an exact type match 3. Suggest `&foo()` (ref_match) if `foo` returns a type which would be an exact match either with the reference or due to a `Deref` impl ### Before ![pre-ref-relevance-centralized](https://user-images.githubusercontent.com/22216761/111189377-3f05a580-8573-11eb-89be-58a45cb7f829.png) ### After ![post-ref-relevance-centralized](https://user-images.githubusercontent.com/22216761/111189395-45941d00-8573-11eb-871b-09186b35cbb9.png) ### Caveats I think generic types will require some kind of fancier logic when testing for `exact_type_match`, so for now `Option`/`Result`/etc unfortunately still don't have great completions. ### Implementation I implemented this in a way that I think makes it most likely for each completion type to be handled consistently. Just replace `CompletionItem::new` with `CompletionItem::new_with_type_info` and `exact_type_match`/`exact_name_match`/`ref_match` are all handled for you, in a way which is sure to be consistent across completion types. This approach does introduce some coupling/plumbing that didn't exist before. Notice for example `set_is_local` on the builder, because `set_relevance` was removed from the builder to enforce that the relevance was built "properly" with `CompletionItem::new_with_type_info`. But I think there are benefits to this approach, like `CompletionRelevance` should probably consider deprecation status, and we already tell the builder about that, so in the (likely near term) future we can just pass that information along to `CompletionRelevance` when the user calls `set_deprecated` rather than the user having to manually set it in two places. This basically just hides `CompletionRelevance` from the individual completions, so they only worry about the `CompletionItem` interface. At the moment this seems like a cleaner approach to me, but I'm open to feedback here. edit - I've reimplemented this in a simpler way, per feedback below. 8046: Prefer match to if let else r=matklad a=matklad bors r+ 🤖 Co-authored-by: Josh Mcguigan <[email protected]> Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | | | completions: centralize calculation of relevance and ref matchesJosh Mcguigan2021-03-163-50/+172
| | |_|_|_|/ | |/| | | |
* | | | | | Merge #8040bors[bot]2021-03-162-9/+31
|\ \ \ \ \ \ | |_|_|_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8040: 7709: Added the check for return type of len function. r=Veykril a=chetankhilosiya Co-authored-by: Chetan Khilosiya <[email protected]>
| * | | | | 7709: Import changes.Chetan Khilosiya2021-03-151-4/+2
| | | | | |
| * | | | | 7709: Added the check for return type of len function.Chetan Khilosiya2021-03-152-9/+33
| |/ / / /
* / / / / Fix macro expansion for statements w/o semicolonEdwin Cheng2021-03-168-62/+100
|/ / / /
* | | | Use SmallVec for SubstsFlorian Diebold2021-03-153-14/+29
| | | | | | | | | | | | | | | | | | | | Doesn't help as much as I hoped, but it helps a bit and I also did some refactorings that were necessary anyway.
* | | | Merge #7970bors[bot]2021-03-153-11/+69
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7970: Fix incorrect diagnostics for failing built in macros r=jonas-schievink a=brandondong **Reproduction:** 1. Use a built in macro in such a way that rust-analyzer fails to expand it. For example: **lib.rs** ``` include!("<valid file but without a .rs extension so it is not indexed by rust-analyzer>"); ``` 2. rust-analyzer highlights the macro call and says the macro itself cannot be resolved even though include! is in the standard library (unresolved-macro-call diagnostic). 3. No macro-error diagnostic is raised. **Root cause for incorrect unresolved-macro-call diagnostic:** 1. collector:collect_macro_call is able to resolve include! in legacy scope but the expansion fails. Therefore, it's pushed into unexpanded_macros to be retried with module scope. 2. include! fails at the resolution step in collector:resolve_macros now that it's using module scope. Therefore, it's retained in unexpanded_macros. 3. Finally, collector:finish tries resolving the remaining unexpanded macros but only with module scope. include! again fails at the resolution step so a diagnostic is created. **Root cause for missing macro-error diagnostic:** 1. In collector:resolve_macros, directive.legacy is None since eager expansion failed in collector:collect_macro_call. The macro_call_as_call_id fails to resolve since we're retrying in module scope. Therefore, collect_macro_expansion is not called for the macro and no macro-error diagnostic is generated. **Fix:** - In collector:collect_macro_call, do not add failing built-in macros to the unexpanded_macros list and immediately raise the macro-error diagnostic. This is in contrast to lazy macros which are resolved in collector::resolve_macros and later expanded in collect_macro_expansion where a macro-error diagnostic may be raised. Co-authored-by: Brandon <[email protected]> Co-authored-by: brandondong <[email protected]>