Commit Graph

7450 Commits

Author SHA1 Message Date
Matthew Jasper
504e2a46bd Update tests for or-patterns 2020-02-09 22:06:28 +00:00
Matthew Jasper
8c8d0bb34f Add or- and parenthesized-patterns 2020-02-09 22:06:15 +00:00
bors[bot]
1b9b13b4b4
Merge #3068
3068: Do not import anything if first segment of the qualified path resolves r=matklad a=SomeoneToIgnore

Part of initial https://github.com/rust-analyzer/rust-analyzer/pull/3061, closing 2nd issue mentioned in the last comment there.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-09 15:32:39 +00:00
Kirill Bulatov
d39d401612 Fix rebase leftovers 2020-02-09 17:25:51 +02:00
Kirill Bulatov
48abcaaabe Do not import anything if first segment of FQN resolves 2020-02-09 17:22:59 +02:00
bors[bot]
360890fcec
Merge #3053
3053: Feature: downloading lsp server from GitHub r=matklad a=Veetaha

This is currently very WIP, I may need to change this and that, add "download language server command", logging stuff (for future bug reports), etc., but it already works.
Also didn't test this on windows yet and mac (don't have the latter)

The quirks:
* Downloaded binary doesn't have executable permissions by default, that's why we ~~`chmod 111`~~ (**[UPD]** `chmod 755` as per @lnicola [suggestion](https://github.com/rust-analyzer/rust-analyzer/pull/3053#discussion_r376694456)) for it.
* To remove installed binary run `rm /${HOME}/.config/Code/User/globalStorage/matklad.rust-analyzer/ra_lsp_server-linux`, ~~note that `-f` flag is necessary, because of `111` permissions (I think this should be changed)~~ (**[UPD]** --force is no longer needed due to 755 permissions).

I also tried to keep things simple and not to use too many dependencies, all the ones added have 0 dependencies, (`ts-not-nil` is my personal npm package, that imitates `unwrap()` in TypeScript)

**[UPD]** I reduced throttle latency of progress indicator to 200ms for smoother UX


// TODO:
- [x] ~~Add `Rust Analyzer: Download latest language server` vscode command.~~ **[UPD]**: having reviewed the code and estimated available options I concluded that this feature requires too many code changes, I'd like to extract this into a separate PR after we merge this one.
- [x] Add some logging for future debugging
- [x] ~~Gracefully handle the case when language server is not available (e.g. no internet connection, user explicitly rejected the download, etc.)~~ **[UPD]** Decided to postpone better implementation of graceful degradation logic as per [conversation](https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Deployment.20and.20installation/near/187758550).

Demo (**[UPD]** this is a bit outdated, but still mainly reflects the feature):
![ra-github-release-download-mvp](https://user-images.githubusercontent.com/36276403/74077961-4f248a80-4a2d-11ea-962f-27c650fd6c4c.gif)

Related issue: #2988 #3007 

Co-authored-by: Veetaha <gerzoh1@gmail.com>
Co-authored-by: Veetaha <veetaha2@gmail.com>
2020-02-09 15:21:12 +00:00
bors[bot]
0db5525c44 Merge #3070
3070: Set auto-import target r=matklad a=matklad

closes #3067

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-09 15:14:30 +00:00
Aleksey Kladov
fe141a8c10 Set auto-import target
closes #3067
2020-02-09 16:14:07 +01:00
Veetaha
dfb81a8cd4 docs: fix spelling untill -> until
Co-Authored-By: Jonas Platte <jplatte@users.noreply.github.com>
2020-02-09 17:04:33 +02:00
bors[bot]
a836247de4 Merge #3069
3069: Simplify Assists interface r=matklad a=matklad

Instead of building a physical tree structure, just tag related
assists with the same group

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-09 15:04:20 +00:00
Aleksey Kladov
9769c5140c Simplify Assists interface
Instead of building a physical tree structure, just "tag" related
assists with the same group
2020-02-09 16:03:54 +01:00
Veetaha
be244ab2fb docs: minor fixes in wordings and punctuation 2020-02-09 15:54:54 +02:00
Veetaha
6a367886ec vscode: updated docs on prebuilt binaries 2020-02-09 15:51:28 +02:00
Aleksey Kladov
fb99831cb0 Slightly simpler API for groups 2020-02-09 14:30:27 +01:00
Veetaha
7cba77ed4e vscode: added logging when donloading binaries 2020-02-09 15:01:00 +02:00
bors[bot]
aa5f80aed1
Merge #3066
3066: Some README fixes/cleanups r=matklad a=flodiebold

Make capitalization more consistent and fix some typos.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-09 12:41:36 +00:00
Florian Diebold
9bb699b28d Some README fixes/cleanups
Make capitalization more consistent and fix some typos.
2020-02-09 13:35:54 +01:00
Veetaha
f3240e22c6 vscode: move throtting of download progress to call site 2020-02-09 14:18:05 +02:00
Veetaha
a63659badb vscode: replaced unwrapNotNil() with ! as per @matklad 2020-02-09 13:59:27 +02:00
Veetaha
7a09274e52 vscode: refactor inverted ternaries to if statements as per @matklad 2020-02-09 13:45:06 +02:00
Veetaha
34241b9af9 vscode: remove noise data fields declarations as per @matklad 2020-02-09 13:39:54 +02:00
Veetaha
3159e87c49 vscode: refactor levels of code nesting and string literals quotes 2020-02-09 13:36:36 +02:00
bors[bot]
01836a0f35
Merge #3050
3050: Refactor type parameters, implement argument position impl trait r=matklad a=flodiebold

I wanted to implement APIT by lowering to type parameters because we need to do that anyway for correctness and don't need Chalk support for it; this grew into some more wide-ranging refactoring of how type parameters are handled 😅 

 - use Ty::Bound instead of Ty::Param to represent polymorphism, and explicitly
   count binders. This gets us closer to Chalk's way of doing things, and means
   that we now only use Param as a placeholder for an unknown type, e.g. within
   a generic function. I.e. we're never using Param in a situation where we want
   to substitute it, and the method to do that is gone; `subst` now always works
   on bound variables. (This changes how the types of generic functions print; 
   previously, you'd get something like `fn identity<i32>(T) -> T`, but now we
   display the substituted signature `fn identity<i32>(i32) -> i32`, which I think 
   makes more sense.)
 - once we do this, it's more natural to represent `Param` by a globally unique
   ID; the use of indices was mostly to make substituting easier. This also
   means we fix the bug where `Param` loses its name when going through Chalk.
 - I would actually like to rename `Param` to `Placeholder` to better reflect its use and
   get closer to Chalk, but I'll leave that to a follow-up.
 - introduce a context for type lowering, to allow lowering `impl Trait` to
   different things depending on where we are. And since we have that, we can
   also lower type parameters directly to variables instead of placeholders.
   Also, we'll be able to use this later to collect diagnostics.
 - implement argument position impl trait by lowering it to type parameters.
   I've realized that this is necessary to correctly implement it; e.g. consider
   `fn foo(impl Display) -> impl Something`. It's observable that the return
   type of e.g. `foo(1u32)` unifies with itself, but doesn't unify with e.g.
   `foo(1i32)`; so the return type needs to be parameterized by the argument
   type.

   
This fixes a few bugs as well:
 - type parameters 'losing' their name when they go through Chalk, as mentioned
   above (i.e. getting `[missing name]` somewhere)
 - impl trait not being considered as implementing the super traits (very
   noticeable for the `db` in RA)
 - the fact that argument impl trait was only turned into variables when the
   function got called caused type mismatches when the function was used as a
   value (fixes a few type mismatches in RA)

The one thing I'm not so happy with here is how we're lowering `impl Trait` types to variables; since `TypeRef`s don't have an identity currently, we just count how many of them we have seen while going through the function signature. That's quite fragile though, since we have to do it while desugaring generics and while lowering the type signature, and in the exact same order in both cases. We could consider either giving only `TypeRef::ImplTrait` a local id, or maybe just giving all `TypeRef`s an identity after all (we talked about this before)...

Follow-up tasks:
 - handle return position impl trait; we basically need to create a variable and some trait obligations for that variable
 - rename `Param` to `Placeholder`

Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-09 11:35:08 +00:00
Veetaha
a3e3fba7bf
vscode: fix chmod to octal literal
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-09 12:54:51 +02:00
bors[bot]
961a69b88f
Merge #3065
3065: Remove ImportResolver-related stubs r=matklad a=SomeoneToIgnore

A follow-up for https://github.com/rust-analyzer/rust-analyzer/pull/3063/, removes the FIXME added during the https://github.com/rust-analyzer/rust-analyzer/pull/2982#issuecomment-581130028 changes.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-09 10:47:15 +00:00
Kirill Bulatov
7de7c8a7ef Remove ImportResolver-related stubs 2020-02-09 12:34:41 +02:00
bors[bot]
4fd53e3e22
Merge #3063
3063: Remove hard-coded auto-import during completion r=matklad a=matklad

We now have a real auto-import system, so we can do a proper thing.

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-09 09:09:06 +00:00
Aleksey Kladov
409f8e1fb0 Remove hard-coded auto-import during completion
We now have a real auto-import system, so we can do a proper thing.
2020-02-09 10:04:47 +01:00
bors[bot]
27964cc9e7
Merge #3052
3052: Rename add import assist r=matklad a=SomeoneToIgnore

Based on the https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/2.20assists.20with.20the.20same.20action.20name/near/187655643 and the related discussion.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-09 08:51:56 +00:00
Veetaha
d08ae7e82f vscode: minor names and message contents changes 2020-02-09 00:58:53 +02:00
Veetaha
fd6a98ef6e vscode: rename raLspServer variable to langServer 2020-02-09 00:42:51 +02:00
Veetaha
8f291c0089 vscode: refactor comment 2020-02-09 00:28:32 +02:00
Veetaha
539daf4454 vscode: refactor platform artifact name query to switch statement, move BinarySource union variants into a namespace 2020-02-09 00:27:04 +02:00
Veetaha
bdd88c2fad vscode: reduce throttle latency of downloadFile() progress callback for smoother UX 2020-02-08 21:25:03 +02:00
Veetaha
9791b6a8de vscode: add name to the second unused argument of withProgress() callback 2020-02-08 21:24:29 +02:00
Veetaha
4e85254444 vscode: add docs to installation module interfaces and sanity check to donloadFile() 2020-02-08 21:03:27 +02:00
Veetaha
6ef912f925 vscode: converted fetchLatestArtifactMetadata params to positional, added docs 2020-02-08 20:18:33 +02:00
Veetaha
f7ef72db64 vscode: changed chmod value to 755 as per @lnicola 2020-02-08 20:07:00 +02:00
bors[bot]
3e1d97790b
Merge #3054
3054: Move emacs support to emacs-lsp r=flodiebold a=flodiebold

emacs-lsp has integrated most of the support code (https://github.com/emacs-lsp/lsp-mode/pull/1395 will remove the last differences, as far as I can tell), so remove rust-analyzer.el here and update the documentation.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-08 15:18:55 +00:00
Florian Diebold
134cc70097 Docs cleanups 2020-02-08 16:15:58 +01:00
Florian Diebold
c27ec69087 Remove rust-analyzer.el
The support has been moved to emacs-lsp.
2020-02-08 16:03:21 +01:00
Veetaha
5d88c1db38 vscode: amended config to use binary from globalStoragePath, added ui for downloading 2020-02-08 04:34:11 +02:00
Veetaha
3e0e4e90ae added fetchLatestArtifactMetadata() and downloadFile() functions 2020-02-08 04:34:11 +02:00
Veetaha
1bdb78a89f vscode: add FIXME about language client shared resource protection 2020-02-08 04:34:11 +02:00
Kirill Bulatov
740a26b7d2 Rename add import assist 2020-02-07 23:53:08 +02:00
Florian Diebold
eefe02ce6e Add two more tests 2020-02-07 18:28:11 +01:00
Florian Diebold
9d6061f3bb Fix some TODOs 2020-02-07 18:28:11 +01:00
Florian Diebold
6b9d05d193 Fix add_new assist (kind of) 2020-02-07 18:28:11 +01:00
Florian Diebold
b0bb8622ee Don't print implicit type args from impl Trait 2020-02-07 18:28:11 +01:00
Florian Diebold
6c70619b01 Deal better with implicit type parameters and argument lists 2020-02-07 18:28:10 +01:00