aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Fix missing unresolved macro diagnostic in function bodyBrandon2021-03-167-39/+75
|
* Merge #8039bors[bot]2021-03-153-14/+29
|\ | | | | | | | | | | | | | | | | 8039: Use SmallVec for Substs r=flodiebold a=flodiebold Doesn't help as much as I hoped, but it helps a bit and I also did some refactorings that were necessary anyway. Co-authored-by: Florian Diebold <[email protected]>
| * 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]>
| * Update crates/hir_def/src/nameres/collector.rsbrandondong2021-03-151-1/+1
| | | | | | Co-authored-by: Jonas Schievink <[email protected]>
| * Fix incorrect diagnositics for failing built in eager macrosBrandon2021-03-142-10/+68
| |
| * Fix spelling errorBrandon2021-03-141-1/+1
| |
* | Merge #8038bors[bot]2021-03-152-101/+117
|\ \ | | | | | | | | | | | | | | | | | | | | | 8038: Fix unification logic r=flodiebold a=flodiebold Co-authored-by: Florian Diebold <[email protected]>
| * | Fix unification logicFlorian Diebold2021-03-152-101/+117
| | |
* | | Merge #8028bors[bot]2021-03-156-44/+91
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 8028: Return multiple modules in `parent_module` feature r=matklad a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
| * | Support multiple parents in parentModule in vscode-clientLukas Wirth2021-03-151-9/+15
| | |
| * | Return multiple modules in `parent_module`Lukas Wirth2021-03-155-35/+76
| | |
* | | Merge #8037bors[bot]2021-03-154-0/+288
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8037: Assist is empty 7709 r=Veykril a=chetankhilosiya Updated the implementation to get the function from implementation Co-authored-by: Chetan Khilosiya <[email protected]>
| * | | 7709: Updated the implementation.Chetan Khilosiya2021-03-153-37/+73
| | | | | | | | | | | | | | | | | | | | The get function from impl method is updated. and now same method used to get len and is_empty function.
| * | | 7709: Added the assist to generate is_empty functionChetan Khilosiya2021-03-153-0/+252
| | | | | | | | | | | | | | | | | | | | the assist will be shown when the len function is implemented. is_empty internally uses len function.
* | | | Merge #8035bors[bot]2021-03-153-120/+120
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | 8035: unqualfied_path completions aren't responsible for variant pattern completions r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <[email protected]>
| * | | unqualfied_path completions aren't responsible for pattern completionsLukas Wirth2021-03-153-120/+120
| | | |
* | | | Merge #7992bors[bot]2021-03-152-1/+76
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7992: improved completion sorting for functions and methods r=JoshMcguigan a=JoshMcguigan This PR improves completion sorting for functions and methods. Related to #7935. ### Before The methods are being sorted by `coc` by closeness in file. ![pre-fn-relevance](https://user-images.githubusercontent.com/22216761/111018669-fe3d3f00-836e-11eb-9607-cc05af080a6a.png) ### After Notice `bbb()` on top (type + name match), followed by `ddd()` (type match). ![image](https://user-images.githubusercontent.com/22216761/111018680-0e551e80-836f-11eb-94b1-c88336ecbc6e.png) Co-authored-by: Josh Mcguigan <[email protected]>
| * | | | implement function completion scoringJosh Mcguigan2021-03-152-1/+76
| |/ / /
* | | | Merge #8033bors[bot]2021-03-154-8/+17
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8033: Add test for proc-macro meta info retrieval r=edwin0cheng a=edwin0cheng bors r+ Co-authored-by: Edwin Cheng <[email protected]>
| * | | | Add test for proc-macro meta info retrievalEdwin Cheng2021-03-154-8/+17
| |/ / /
* | | | Merge #8032bors[bot]2021-03-153-3/+3
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | 8032: Enable proc-macros by default r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | Enable proc-macros by defaultAleksey Kladov2021-03-153-3/+3
|/ / /
* | | Merge #8029bors[bot]2021-03-1510-12/+10
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8029: Enable thread-local coverage marks r=JoshMcguigan a=lnicola Co-authored-by: LaurenÈ›iu Nicola <[email protected]>
| * | | Drop non-working markLaurențiu Nicola2021-03-151-2/+0
| | | |
| * | | Enable thread-local coverage marksLaurențiu Nicola2021-03-159-10/+10
| | | |
* | | | Merge #8030bors[bot]2021-03-151-1/+2
|\ \ \ \ | |_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8030: Add diesel to the benchmark suite r=lnicola a=weiznich This commit adds diesel to the continuosly run benchmark suite. Diesel heavily relies internally on macro generated code. Additionally there are lots of complicated trait releations used as part of their API. Therefore this benchmark will be quite sensitive to: * Performance related changes in the macro expanding code * Performance related changes while resolving trait bounds CC #7950 cc @lnicola Co-authored-by: Georg Semmler <[email protected]>
| * | | Add diesel to the benchmark suiteGeorg Semmler2021-03-151-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds diesel to the continuosly run benchmark suite. Diesel heavily relies internally on macro generated code. Additionally there are lots of complicated trait releations used as part of their API. Therefore this benchmark will be quite sensitive to: * Performance related changes in the macro expanding code * Performance related changes while resolving trait bounds CC #7950
* | | | Merge #8020bors[bot]2021-03-154-64/+136
|\ \ \ \ | |_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8020: Power up goto_implementation r=matklad a=Veykril by allowing it to be invoked on references of names, now showing all (trait) implementations of the given type in all crates instead of just the defining crate as well as including support for builtin types ![image](https://user-images.githubusercontent.com/3757771/111144403-52bb0700-8587-11eb-9205-7a2a5b8b75a3.png) Example screenshot of `impl`s of Box in `log`, `alloc`, `std` and the current crate. Before you had to invoke it on the definition where it would only show the `impls` in `alloc`. Co-authored-by: Lukas Wirth <[email protected]>
| * | | goto_implementation: Look at the entire crate graph for trait implsLukas Wirth2021-03-151-8/+3
| | | |
| * | | Speedup trait impl search for goto_implementationLukas Wirth2021-03-152-3/+19
| | | |
| * | | Power up goto_implementationLukas Wirth2021-03-153-62/+123
| | | | | | | | | | | | | | | | | | | | by allowing it to be invoked on references of names, showing all (trait) implementations of the given type in all crates including builtin types
* | | | Merge #8027bors[bot]2021-03-151-12/+4
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8027: Completion context remove exact match method in favor of fields r=JoshMcguigan a=JoshMcguigan This is a minor cleanup PR following #8008. It removes the `expected_name_and_type` method on completion context in favor of using the fields. I thought this method was used in more places, or else it may have just made sense to make this change directly in #8008 :shrug: Co-authored-by: Josh Mcguigan <[email protected]>
| * | | | remove expected_name_and_type method on completion context in favor of using ↵Josh Mcguigan2021-03-151-12/+4
| | | | | | | | | | | | | | | | | | | | fields added in #8008
* | | | | Merge #8015bors[bot]2021-03-153-67/+108
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8015: Introduce Semantics::visit_file_defs r=matklad a=Veykril See https://github.com/rust-analyzer/rust-analyzer/issues/3538#issuecomment-798920601 Co-authored-by: Lukas Wirth <[email protected]>
| * | | | move Semantics::visit_file_defs to ide_db::helpersLukas Wirth2021-03-154-27/+33
| | | | |
| * | | | Introduce Semantics::visit_file_defsLukas Wirth2021-03-153-68/+103
| | | | |
* | | | | Merge #8008bors[bot]2021-03-152-26/+286
|\ \ \ \ \ | |_|_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8008: Completion context expected type r=matklad a=JoshMcguigan Currently there are two ways completions use to determine the expected type. There is the `expected_type` field on the `CompletionContext`, as well as the `expected_name_and_type` method on the `RenderContext`. These two things returned slightly different results, and their results were only valid if you had pre-checked some (undocumented) invariants. A simple combination of the two approaches doesn't work because they are both too willing to go far up the syntax tree to find something that fits what they are looking for. This PR makes the following changes: 1. Updates the algorithm that sets `expected_type` on `CompletionContext` 2. Adds `expected_name` field to `CompletionContext` 3. Re-writes the `expected_name_and_type` method to simply return the underlying fields from `CompletionContext` (I'd like to save actually removing this method for a follow up PR just to keep the scope of the changes down) 4. Adds unit tests for the `expected_type`/`expected_name` fields All the existing unit tests still pass (unmodified), but this new algorithm certainly has some gaps (although I believe all the `FIXME` introduced in this PR are also flaws in the current code). I wanted to stop here and get some feedback though - is this approach fundamentally sound? Co-authored-by: Josh Mcguigan <[email protected]>
| * | | | update algorithm for determining expected type of completionJosh Mcguigan2021-03-152-26/+286
| | | | |
* | | | | Merge #8018bors[bot]2021-03-1511-142/+155
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8018: Make Ty wrap TyKind in an Arc r=flodiebold a=flodiebold ... to further move towards Chalk. This is a bit of a slowdown (218ginstr vs 213ginstr for inference on RA), even though it allows us to unwrap the Substs in `TyKind::Ref` etc.. Co-authored-by: Florian Diebold <[email protected]>
| * | | | | Don't use Substs for Ref/Raw/Array/SliceFlorian Diebold2021-03-1410-116/+103
| | | | | |
| * | | | | Make Ty wrap TyKind in an ArcFlorian Diebold2021-03-148-27/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ... like it will be in Chalk. We still keep `interned_mut` and `into_inner` methods that will probably not exist with Chalk. This worsens performance slightly (5ginstr inference on RA), but doesn't include other simplifications we can do yet.
* | | | | | Merge #8026bors[bot]2021-03-155-45/+33
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8026: Simplify source maps for fields r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | | Simplify source maps for fieldsAleksey Kladov2021-03-155-45/+33
| | | | | |
* | | | | | Merge #8025bors[bot]2021-03-152-3/+33
|\| | | | | | |_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8025: Goto definition works for `S { a: }` case r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | Goto definition works for `S { a: }` caseAleksey Kladov2021-03-152-3/+33
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What happens here is that we lower `: ` to a missing expression, and then correctly record that the corresponding field expression resolves to a specific field. Where we fail is in the mapping of syntax to this missing expression. Doing it via `ast_field.expr()` fails, as that expression is `None`. Instead, we go in the opposite direcition and ask each lowered field about its source. This works, but has wrong complexity `O(N)` and, really, the implementation is just too complex. We need some better management of data here.
| | | |
| \ \ \
*-. \ \ \ Merge #8021 #8022bors[bot]2021-03-1514-40/+59
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8021: Enable searching for builtin types r=matklad a=Veykril Not too sure how useful this is for reference search overall, but for completeness sake it should be there ![image](https://user-images.githubusercontent.com/3757771/111132711-f69db600-8579-11eb-8c90-22fd6862d11f.png) Also enables document highlighting for them. 8022: some clippy::performance fixes r=matklad a=matthiaskrgr use vec![] instead of Vec::new() + push() avoid redundant clones use chars instead of &str for single char patterns in ends_with() and starts_with() allocate some Vecs with capacity to avoid unnecessary resizing Co-authored-by: Lukas Wirth <[email protected]> Co-authored-by: Matthias Krüger <[email protected]>
| | * | | | some clippy::performance fixesMatthias Krüger2021-03-159-19/+13
| | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | use vec![] instead of Vec::new() + push() avoid redundant clones use chars instead of &str for single char patterns in ends_with() and starts_with() allocate some Vecs with capacity to avoid unneccessary resizing
| * | | | Enable searching for builtin typesLukas Wirth2021-03-155-21/+46
| | | | |
* | | | | Merge #8023bors[bot]2021-03-155-13/+12
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8023: Move code to the appropriate layer r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>