aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge #7700bors[bot]2021-02-161-10/+3270
|\ | | | | | | | | | | | | | | 7700: Use npm 7.x package-lock.json r=lnicola a=kjeremy Supposedly backwards compatible Co-authored-by: kjeremy <[email protected]>
| * Use npm 7.x package-lock.jsonkjeremy2021-02-161-10/+3270
|/
* Merge #7690bors[bot]2021-02-166-41/+50
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7690: Extract `fn load_workspace(…)` from `fn load_cargo(…)` r=matklad a=regexident Unfortunately in https://github.com/rust-analyzer/rust-analyzer/pull/7595 I forgot to `pub use` (rather than just `use`) the newly introduced `LoadCargoConfig`. So this PR fixes this now. It also: - splits up `fn load_cargo` into a "workspace loading" and a "project loading" phase - adds a `progress: &dyn Fn(String)` to allow third-parties to provide CLI progress updates, too The motivation behind both of these is the fact that rust-analyzer currently does not support caching. As such any third-party making use of `ra_ap_…` needs to providing a caching layer itself. Unlike for rust-analyzer itself however a common use-pattern of third-parties is to analyze a specific target (`--lib`/`--bin <BIN>`/…) from a specific package (`--package`). The targets/packages of a crate can be obtained via `ProjectWorkspace::load(…)`, which currently is performed inside of `fn load_cargo`, effectively making the returned `ProjectWorkspace` inaccessible to the outer caller. With this information one can then provide early error handling via CLI (in case of ambiguities or invalid arguments, etc), instead of `fn load_cargo` failing with a possibly obscure error message. It also allows for annotating the persisted caches with its specific associated package/target selector and short-circuit quickly if a matching cache is found on disk, significantly cutting load times. Before: ```rust pub struct LoadCargoConfig { pub cargo_config: &CargoConfig, pub load_out_dirs_from_check: bool, pub with_proc_macro: bool, } pub fn load_cargo( root: &Path, config: &LoadCargoConfig ) -> Result<(AnalysisHost, vfs::Vfs)> { // ... } ``` After: ```rust pub fn load_workspace( root: &Path, config: &CargoConfig, progress: &dyn Fn(String), ) -> Result<ProjectWorkspace> { // ... } pub struct LoadCargoConfig { pub load_out_dirs_from_check: bool, pub with_proc_macro: bool, } pub fn load_cargo( ws: ProjectWorkspace, config: &LoadCargoConfig, progress: &dyn Fn(String), ) -> Result<(AnalysisHost, vfs::Vfs)> { // ... } ``` Co-authored-by: Vincent Esche <[email protected]>
| * Split `pub fn cargo_load` into `pub fn load_workspace_at` and `pub fn ↵Vincent Esche2021-02-166-41/+50
| | | | | | | | load_workspace`
* | Merge #7697bors[bot]2021-02-162-4/+1
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 7697: Use `cfg(target_arch)` instead of a Cargo feature r=jonas-schievink a=jonas-schievink Not that WASM works right now anyways... bors r+ Co-authored-by: Jonas Schievink <[email protected]>
| * | Use `cfg(target_arch)` instead of a Cargo featureJonas Schievink2021-02-162-4/+1
|/ / | | | | | | Not that WASM works right now anyways...
* | Merge #7657bors[bot]2021-02-1616-146/+221
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7657: utf8 r=matklad a=matklad - Prepare for utf-8 offsets - reduce code duplication in tests - Make utf8 default, implement utf16 in terms of it - Make it easy to add additional context for offset conversion - Implement utf8 offsets closes #7453 Co-authored-by: Aleksey Kladov <[email protected]>
| * | document offsetsAleksey Kladov2021-02-161-1/+7
| | |
| * | Fix bitrotted module nameAleksey Kladov2021-02-168-8/+10
| | |
| * | Enable offset-encoding capabilityAleksey Kladov2021-02-165-7/+24
| | |
| * | Implement utf8 offsetsAleksey Kladov2021-02-165-15/+45
| | |
| * | Make it easy to add additional context for offset conversionAleksey Kladov2021-02-166-113/+111
| | |
| * | Make utf8 default, implement utf16 in terms of itAleksey Kladov2021-02-166-10/+27
| | |
| * | reduce code duplication in testsAleksey Kladov2021-02-161-14/+19
| | |
| * | Prepare for utf-8 offsetsAleksey Kladov2021-02-167-30/+30
| |/
* | Merge #7696bors[bot]2021-02-168-12/+14
|\ \ | |/ |/| | | | | | | | | | | 7696: Fix a few clippy::perf warnings r=kjeremy a=kjeremy Co-authored-by: kjeremy <[email protected]>
| * Fix a few clippy::perf warningskjeremy2021-02-168-12/+14
|/
* Merge #7695bors[bot]2021-02-162-3/+3
|\ | | | | | | | | | | | | | | 7695: Bump lsp-types r=matklad a=kjeremy Nothing to see here... Co-authored-by: kjeremy <[email protected]>
| * Bump lsp-typeskjeremy2021-02-162-3/+3
| |
* | Merge #7687bors[bot]2021-02-165-0/+116
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 7687: Specialization for async traits r=matklad a=arnaudgolfouse Fixes #7669. Adapting the parser seemed to be all that was needed, but I am not very experienced with the codebase. Is this enough ? Co-authored-by: Arnaud <[email protected]>
| * | Specialization for async traitsArnaud2021-02-155-0/+116
| |/
* | Merge #7620bors[bot]2021-02-166-247/+1525
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7620: Support control flow in `extract_function` assist r=matklad a=cpud36 Support `return`ing from outer function, `break`ing and `continue`ing outer loops when extracting function. # Example Transforms ```rust fn foo() -> i32 { let items = [1,2,3]; let mut sum = 0; for &item in items { <|>if item == 42 { break; }<|> sum += item; } sum } ``` Into ```rust fn foo() -> i32 { let items = [1,2,3]; let mut sum = 0; for &item in items { if fun_name(item) { break; } sum += item; } sum } fn fun_name(item: i32) -> bool { if item == 42 { return true; } false } ``` ![add_explicit_type_infer_type](https://user-images.githubusercontent.com/4218373/107544222-0fadf280-6bdb-11eb-9625-ed6194ba92c0.gif) # Features Supported variants - break and function does not return => uses `bool` and plain if - break and function does return => uses `Option<T>` and matches on it - break with value and function does not return => uses `Option<T>` and if let - break with value and function does return => uses `Result<T, U>` and matches on t - same for `return` and `continue`(but we can't continue with value) Assist does handle nested loops and nested items(like functions, modules, impls) Try `expr?` operator is allowed together with `return Err(_)` and `return None`. `return expr` is not allowed. # Not supported ## Mixing `return` with `break` or `continue` If we have e.g. a `return` and a `break` in the selected code, it is unclear what the produced code should look like. We can try `Result<T, Option<U>>` or something like that, but it isn't idiomatic, nor it is established. Otherwise, implementation is relatively simple. ## `break` with label Not sure how to handle different labels for multiple `break`s. [edit] implemented try `expr?` Co-authored-by: Vladyslav Katasonov <[email protected]>
| * expose hir::Type::type_paramtersVladyslav Katasonov2021-02-132-24/+17
| | | | | | | | Used to get E parameter from `Result<T, E>`
| * allow try expr? with return None in extracted functionVladyslav Katasonov2021-02-131-4/+42
| |
| * allow try expr? when extacting functionVladyslav Katasonov2021-02-132-30/+350
| |
| * handle return, break and continue when extracting functionVladyslav Katasonov2021-02-135-134/+1083
| |
| * migrate body span to {parent,text_range}Vladyslav Katasonov2021-02-131-134/+112
| | | | | | | | This simplifies api as we are not duplicating code from syntax crate
* | Merge #7685bors[bot]2021-02-151-16/+10
|\ \ | | | | | | | | | | | | | | | | | | | | | 7685: cargo update r=kjeremy a=kjeremy Removes redundant redox_syscall Co-authored-by: kjeremy <[email protected]>
| * | cargo updatekjeremy2021-02-151-16/+10
|/ /
* | Merge #7684bors[bot]2021-02-151-20/+20
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7684: Actually fix runnable order r=lnicola a=ivan770 Changes ![image](https://user-images.githubusercontent.com/14003886/107956771-51a6b200-6fa8-11eb-91aa-f4190d6a8ccd.png) to ![image](https://user-images.githubusercontent.com/14003886/107956926-903c6c80-6fa8-11eb-8fb9-8bf7bb1879ac.png) Sorry for missing this one in original PR. This was an issue before https://github.com/rust-analyzer/rust-analyzer/pull/7596/commits/ee049b256a7718fb346a7172a34f0fc324b3269b, and I fixed it, yet *somehow* order got reversed (to a logical one) Co-authored-by: ivan770 <[email protected]>
| * | Actually fix runnable orderivan7702021-02-151-20/+20
|/ /
* | Merge #7661bors[bot]2021-02-147-33/+28
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 7661: Start LSP 3.17 support r=kjeremy a=kjeremy Companion to https://github.com/gluon-lang/lsp-types/pull/199 which <strike>has not been merged yet</strike> has been merged. This doesn't opt into any 3.17 functionality yet. Co-authored-by: Jeremy Kolb <[email protected]>
| * | Start LSP 3.17 supportJeremy Kolb2021-02-147-33/+28
| | |
* | | Merge #7678bors[bot]2021-02-141-1/+1
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 7678: Simplify find_crlf r=matklad a=michalmuskala This is both simpler to read and compiles to better code: https://rust.godbolt.org/z/MxKodv Co-authored-by: Michał Muskała <[email protected]>
| * | Simplify find_crlfMichał Muskała2021-02-141-1/+1
|/ / | | | | | | | | This is both simpler to read and compiles to better code: https://rust.godbolt.org/z/MxKodv
* | Merge #7676bors[bot]2021-02-142-81/+96
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 7676: Make it clear which client-side commands we use r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | Make it clear which client-side commands we useAleksey Kladov2021-02-142-81/+96
| | |
* | | Merge #7656bors[bot]2021-02-142-103/+172
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7656: Implement constructor usage search for almost all items r=matklad a=Veykril This PR moves the filering for enum constructors to the HIR, with this unprefixed variants as well as when the enum has been renamed via use will then still show up properly. We now walk the ast of the `NameRef` up until we find a `PathExpr`(which also handles `CallExpr` for tuple-type structs and variants already) or a `RecordExpr`. For enum search we then take the `path` out of that expression and do a resolution on it to compare it with the definition enum. With this PR we now support searching for all constructor literals, Unit-, Tuple- and Record-Structs, Unit-, Tuple- and Record-Variants as well as Unions. There is one shortcoming due to how the search is triggered. Unit Variants constructors can't be searched as we have no position for it to kick off the search(since a comma doesn't have to exist for the last variant). Closes #2549 though it doesn't implement it as outlined in the issue since the reference kind was removed recently, though I believe the approach taken here is better personally. Co-authored-by: Lukas Wirth <[email protected]>
| * | Only use HIR when searching for enum constructors, otherwise fall back to ASTLukas Wirth2021-02-131-48/+34
| | |
| * | Implement constructor usage search for almost all itemsLukas Wirth2021-02-122-108/+191
| | | | | | | | | | | | | | | | | | | | | For all struct kinds, unions and enums, as well as for record- and tuple-variants but not for unit-variants, as these have no trailing character we can anchor the search to. Functionality wise it is implemented though.
| | |
| \ \
*-. \ \ Merge #7643 #7663bors[bot]2021-02-148-23/+70
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7643: Automatically detect the rustc-src directory (fixes #3517) r=matklad a=bnjbvr If the configured rustcSource was not set, then try to automatically detect a source for the sysroot rustc directory. I wasn't sure how to do it in the case of the project.json file, though. 7663: Tolerate spaces in nix binary patching r=matklad a=CertainLach If path to original file contains space (I.e on code insiders, where default data directory is ~/Code - Insiders/), then there is syntax error evaluating src arg. Instead pass path as str, and coerce to path back in nix expression Co-authored-by: Benjamin Bouvier <[email protected]> Co-authored-by: Yaroslav Bolyukin <[email protected]>
| | * | | fix: tolerate spaces in nix binary patchingYaroslav Bolyukin2021-02-131-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If path to original file contains space (I.e on code insiders, where default data directory is ~/Code - Insiders/), then there is syntax error evaluating src arg. Instead pass path as str, and coerce to path back in nix expression Signed-off-by: Yaroslav Bolyukin <[email protected]>
| * | | | Allow automatically detect the rustc-src directory (fixes #3517).Benjamin Bouvier2021-02-137-20/+67
| | | | | | | | | | | | | | | | | | | | | | | | | If the configured rustcSource is set to "discover", try to automatically detect a source from the sysroot rustc directory.
* | | | | Merge #7668bors[bot]2021-02-142-51/+133
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7668: Finalize rename infra rewrite r=matklad a=Veykril This should be the final PR in regards to rewriting rename stuff, #4290. It addresses 3 things: - Currently renaming import aliases causes some undesired behavior(see #5198) which is why this PR causes us to just return an error if an attempt at renaming an alias is made for the time being. Though this only prevents it from happening when the alias import is renamed, so its not too helpful. - Fixes #6898 - If we are inside a macro file simply rename the input name node as there isn't really a way to do any of the fancy shorthand renames and similar things as for that we would have to exactly know what the macro generates and what not. Co-authored-by: Lukas Wirth <[email protected]>
| * | | | | Don't rename field record patterns directlyLukas Wirth2021-02-132-39/+73
| | | | | |
| * | | | | Fallback to renaming input NameRef node for macros when inside macroLukas Wirth2021-02-131-16/+53
| | | | | |
| * | | | | Prevent aliases from being renamed for nowLukas Wirth2021-02-131-13/+24
| | |_|_|/ | |/| | |
* | | | | Merge #7667bors[bot]2021-02-132-7/+49
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7667: strip type parameter defaults when generating impl generics r=Veykril a=jDomantas Fixes #5666 Co-authored-by: Domantas Jadenkus <[email protected]>
| * | | | | strip type parameter defaults when generating impl genericsDomantas Jadenkus2021-02-132-7/+49
|/ / / / /
* | | | | Merge #7664bors[bot]2021-02-134-98/+55
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7664: refactor impl generation in assists r=Veykril a=jDomantas Follow-up to #7659: all impl generation in assists (at least what I found) is now done through `utils::{generate_impl_text, generate_trait_impl_text}`. Co-authored-by: Domantas Jadenkus <[email protected]>