Commit graph

9483 commits

Author SHA1 Message Date
Laurențiu Nicola
58dde891f8 Avoid lossy OsString conversions 2020-04-25 12:19:23 +03:00
bors[bot]
27a7718880
Merge #4128
4128: Include correct item path for variant completions r=matklad a=jonas-schievink

The test would previously suggest `E::V`, which is not enough to name the variant as the enum is in a module. Now it correctly suggests the full path `m::E::V`.

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2020-04-24 21:11:19 +00:00
bors[bot]
57b3dda980
Merge #4129
4129: Don't print cargo version to stdout, breaking everything r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 21:03:46 +00:00
Aleksey Kladov
aa669c5ba5 Don't print cargo version to stdout, breaking everything 2020-04-24 23:02:10 +02:00
Jonas Schievink
e131763fb8 Include correct item path for variant completions 2020-04-24 22:18:59 +02:00
bors[bot]
51a0058d4c
Merge #3998 #4006
3998: Make add_function generate functions in other modules via qualified path r=matklad a=TimoFreiberg

Additional feature for #3639 

- [x] Add tests for paths with more segments
- [x] Make generating the function in another file work
- [x] Add `pub` or `pub(crate)` to the generated function if it's generated in a different module
- [x] Make the assist jump to the edited file
- [x] Enable file support in the `check_assist` helper

4006: Syntax highlighting for format strings r=matklad a=ltentrup

I have an implementation for syntax highlighting for format string modifiers `{}`.
The first commit refactors the changes in #3826 into a separate struct.
The second commit implements the highlighting: first we check in a macro call whether the macro is a format macro from `std`. In this case, we remember the format string node. If we encounter this node during syntax highlighting, we check for the format modifiers `{}` using regular expressions.

There are a few places which I am not quite sure:
- Is the way I extract the macro names correct?
- Is the `HighlightTag::Attribute` suitable for highlighting the `{}`?

Let me know what you think, any feedback is welcome!

Co-authored-by: Timo Freiberg <timo.freiberg@gmail.com>
Co-authored-by: Leander Tentrup <leander.tentrup@gmail.com>
Co-authored-by: Leander Tentrup <ltentrup@users.noreply.github.com>
2020-04-24 20:10:54 +00:00
bors[bot]
e55b1833ff
Merge #4127
4127: More helpful error message if toolchain is not in PATH r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 20:03:33 +00:00
Aleksey Kladov
6c400b3e33 More helpful error message if toolchain is not in PATH 2020-04-24 22:01:32 +02:00
bors[bot]
bdd22eb8bd
Merge #4126
4126: Don't omit methods with self from path completion r=matklad a=jonas-schievink

It's sometimes useful to create a reference to these items (eg. for use as a function pointer). Perhaps these should be given lower score though, if that's possible?

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2020-04-24 19:57:24 +00:00
Jonas Schievink
7b9553a703 Don't omit methods with self from path completion 2020-04-24 21:46:18 +02:00
bors[bot]
5d97667f8d
Merge #4105
4105: Adds attribute completions (#3941) r=matklad a=jrvidal

I've hacked together some basic completions for a few builtin attributes.

* I have no idea what `CompletionItemKind` we should set for them.
* There's plenty of fancy stuff we could do by detecting the item the attribute is being added to. Nothing of that here.
* Maybe we could complete as soon as you type `#` or `#!`?

I'm not sure what info exactly we can dump on `CompletionContext` and what we should query during the completion calculation itself. I've assumed adding an `is_attribute` field is OK, since it allows to discard the completion quickly if it doesn't apply. Later we inspect the AST to find out whether it is an inner attribute or not.

Co-authored-by: Roberto Vidal <vidal.roberto.j@gmail.com>
2020-04-24 16:05:16 +00:00
Roberto Vidal
0dab5d5879 Adds attribute completions (#3941) 2020-04-24 17:54:52 +02:00
kjeremy
0619c67ac6 Support returning non-hierarchical symbols
If `hierarchicalDocumentSymbolSupport` is not true in the client capabilites
then it does not support the `DocumentSymbol[]` return type from the
`textDocument/documentSymbol` request and we must fall back to `SymbolInformation[]`.

This is one of the few requests that use the client capabilities to
differentiate between return types and could cause problems for clients.

See https://github.com/microsoft/language-server-protocol/pull/538#issuecomment-442510767 for more context.

Found while looking at #144
2020-04-24 10:11:57 -04:00
kjeremy
ae1f77e5e9 Add hierarchical symbols client capability 2020-04-24 10:08:45 -04:00
bors[bot]
edd6f91cab
Merge #4121
4121: Better label for macros completion r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 11:29:44 +00:00
Aleksey Kladov
62e08fa53d Better label for macros completion 2020-04-24 13:25:37 +02:00
bors[bot]
44e6c2cb54
Merge #4101
4101: Panic proc macro srv if read request failed r=matklad a=edwin0cheng

This PR fixed a bug when the rust-analyzer is killed suddenly, the `rust-analyzer proc-macro` will become stale.

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-04-24 01:28:53 +00:00
Edwin Cheng
a83d1743a5 Refactor a bit 2020-04-24 09:27:37 +08:00
bors[bot]
ffba39aca0
Merge #4118
4118: ⬆️ crates (to bust the caches) r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 00:58:44 +00:00
Aleksey Kladov
aa9a9d7ac5 ⬆️ crates (to bust the caches) 2020-04-24 02:58:21 +02:00
bors[bot]
7410cfad21
Merge #4117
4117: Honor snippet capability r=matklad a=matklad

closes #2518



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 00:45:34 +00:00
Aleksey Kladov
440cd05edb Honor snippet capability
closes #2518
2020-04-24 02:41:07 +02:00
bors[bot]
3a0a7081f4
Merge #4116
4116: Make sure that adding a snippet requires corresponding capability r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-24 00:27:38 +00:00
Aleksey Kladov
5fd5de4061 Make sure that adding a snippet requires corresponding capability 2020-04-24 02:26:38 +02:00
Aleksey Kladov
b3050bded1 Introduce internal snippet cap 2020-04-24 02:06:12 +02:00
Aleksey Kladov
bd3b239390 Move CompletionConfig to a separate module 2020-04-24 02:01:23 +02:00
bors[bot]
601f89f2cb
Merge #4114
4114: Refactor completion sorting r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-23 23:54:21 +00:00
Aleksey Kladov
88d243c742 Don't set sortText
I might be reading this wrong, but it looks like we are setting it to
essentially arbitrary string at the moment, as there are no defined
order on the items in the *set* of completions.
2020-04-24 01:53:37 +02:00
Aleksey Kladov
647683b9bb Add test marks 2020-04-24 01:48:32 +02:00
Aleksey Kladov
09a4b78775 Introduce ActiveParameter 2020-04-24 01:46:00 +02:00
Aleksey Kladov
4b8e9d5483 Move tests to where they belong 2020-04-24 01:26:27 +02:00
Aleksey Kladov
174952e89b Refactor 2020-04-24 01:24:08 +02:00
Aleksey Kladov
953b5f23cc Restore CompletionItem immutability 2020-04-24 01:17:33 +02:00
Aleksey Kladov
6654b9aff3 More functional 2020-04-24 01:08:27 +02:00
Aleksey Kladov
75cb1c1806 Move 2020-04-24 00:11:33 +02:00
bors[bot]
5eb51c1e60
Merge #4106
4106: Fix wrong substitution code r=matklad a=flodiebold

We need to shift in when we're substituting inside a binder.

This should fix #4053 (it doesn't fix the occasional overflow that also occurs on the Diesel codebase though).

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-04-23 21:58:52 +00:00
Florian Diebold
0c01b4eb6a Fix wrong substitution code
We need to shift in when we're substituting inside a binder.

This should fix #4053 (it doesn't fix the occasional overflow that also occurs
on the Diesel codebase though).
2020-04-23 23:53:08 +02:00
bors[bot]
e833e03783
Merge #3954
3954: Improve autocompletion by looking on the type and name r=matklad a=bnjjj

This tweet (https://twitter.com/tjholowaychuk/status/1248918374731714560) gaves me the idea to implement that in rust-analyzer.

Basically for this first example I made some examples when we are in a function call definition. I look on the parameter list to prioritize autocompletions for the same types and if it's the same type + the same name then it's displayed first in the completion list.

So here is a draft, first step to open a discussion and know what you think about the implementation. It works (cf tests) but maybe I can make a better implementation at some places. Be careful the code needs some refactoring to be better and concise.

PS: It was lot of fun writing this haha

Co-authored-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
2020-04-23 21:48:45 +00:00
bors[bot]
01f1f10fec
Merge #4111 #4112
4111: Record definitions in `extern` blocks r=jonas-schievink a=jonas-schievink

Enables completion of extern functions and statics.

Closes https://github.com/rust-analyzer/rust-analyzer/issues/3711

4112: Add Launch configuration for release build r=matklad a=jonas-schievink

The debug build takes very long until I can test anything useful, with the release build it's much quicker. Add another Run configuration for it.

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2020-04-23 21:37:06 +00:00
Jonas Schievink
5cc9546ca0 Record definitions in extern blocks 2020-04-23 23:36:23 +02:00
Jonas Schievink
80a42a0628 Add Launch configuration for release build 2020-04-23 23:29:40 +02:00
bors[bot]
4f0cb81a2e
Merge #4110
4110: minor r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-23 21:18:41 +00:00
Aleksey Kladov
dd59237e0c minor 2020-04-23 23:18:18 +02:00
bors[bot]
189ac4abbf
Merge #4108
4108: Fully get rid of SyntaxNodePtr::range r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-23 19:24:20 +00:00
Aleksey Kladov
27dd0086ea Fully get rid of SyntaxNodePtr::range 2020-04-23 21:23:36 +02:00
bors[bot]
d283f87f6d
Merge #4107
4107: Disable onEnter command by default r=matklad a=matklad

We are transitioning from experimental to production-ready stance, so
it makes sense to disable potentially disruptive features by default.



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-23 19:06:50 +00:00
Aleksey Kladov
919015ce8a Disable onEnter command by default
We are transitioning from experimental to production-ready stance, so
it makes sense to disable potentially disruptive features by default.
2020-04-23 21:01:17 +02:00
Edwin Cheng
1627b55028 Bubble up error 2020-04-24 01:38:58 +08:00
bors[bot]
29bc218fba
Merge #4102
4102: Cleanup proc_macro config r=matklad a=matklad

In general, there should be no reason to call `.to_string_lossy`.
If you want to display the path, use `.display()`.
If you want to pass the path to an OS API (like std::process::Command)
than use `PathBuf` or `OsString`.



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-04-23 16:56:05 +00:00
Aleksey Kladov
ca6d7bfe61 Cleanup proc_macro config
In general, there should be no reason to call `.to_string_lossy`.
If you want to display the path, use `.display()`.
If you want to pass the path to an OS API (like std::process::Command)
than use `PathBuf` or `OsString`.
2020-04-23 18:55:26 +02:00