Commit graph

5642 commits

Author SHA1 Message Date
Yoshua Wuyts
b4970b0fe9 Add suggestion for failed path resolution
This adds https://github.com/rust-analyzer/rust-analyzer/issues/3245 as an inline help text for when path resolution fails.
2020-02-23 15:51:32 +01:00
Kirill Bulatov
b2a7b29bb9 Style fixes 2020-02-23 13:02:00 +03:00
Kirill Bulatov
c200dba167 Add basic parameter name hints heuristics 2020-02-23 12:49:53 +03:00
Kirill Bulatov
ca4557ac52 Fix the tests 2020-02-23 01:44:15 +03:00
Kirill Bulatov
6670868d09 Show more parameter name hints 2020-02-23 01:44:15 +03:00
Kirill Bulatov
4ca22f3a88 Simplify inlay hints processing 2020-02-23 01:44:15 +03:00
Aleksey Kladov
fda118f4e9 Simplify 2020-02-22 16:59:31 +01:00
bors[bot]
46dbe4dc80
Merge #3272
3272: ra_db: removed a couple of explicit lifetimes r=matklad a=Veetaha



Co-authored-by: Veetaha <gerzoh1@gmail.com>
2020-02-22 15:07:36 +00:00
Veetaha
4255bc70e8 ra_db: removed a couple of explicit lifetimes 2020-02-22 17:00:39 +02:00
bors[bot]
2cbe8a4c4b
Merge #3263
3263: Implement unsizing coercions using Chalk r=matklad a=flodiebold

These are coercions like `&[T; n] -> &[T]`, which are handled by the `Unsize` and `CoerceUnsized` traits. The impls for `Unsize` are all built in to the compiler and require special handling, so we need to provide them to Chalk.

This adds the following `Unsize` impls:
 - `Unsize<[T]> for [T; _]`
 - `Unsize<dyn Trait> for T where T: Trait`
 - `Unsize<dyn SuperTrait> for dyn SubTrait`

Hence we are still missing the 'unsizing the last field of a generic struct' case.

Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-22 12:31:30 +00:00
Veetaha
59dc797eb3
Fix dat comment 2020-02-22 14:16:13 +02:00
Florian Diebold
5a6e770f99 Shorten some code 2020-02-22 13:15:54 +01:00
Florian Diebold
3e106c77ff Rework find_super_trait_path to protect against cycles 2020-02-22 13:14:39 +01:00
bors[bot]
f9acb4333f
Merge #3260
3260: Refactor how builtins are resolved r=matklad a=flodiebold

This fixes autocompletion suggesting e.g. `self::usize`. (I thought we had a bug for that, but I didn't find it.)

Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-02-22 11:25:09 +00:00
Veetaha
5f15e3aeb0
ra_mbe: Remove explicit type annotation 2020-02-22 13:14:46 +02:00
Veetaha
28bdb65407 ra_mbe: added test for malformed token in macro invokation
There was a panic where lexer returned None on malformed tokens.
But now we just ignore tokenization errors in mbe.
2020-02-22 13:10:54 +02:00
Veetaha
93a19bda17 ra_mbe: convert_literal now works with malformed tokens 2020-02-22 13:10:54 +02:00
Florian Diebold
c200025794 Fix shift_bound_vars
It should only shift free vars (maybe the name isn't the best...)
2020-02-22 11:09:21 +01:00
Florian Diebold
463df6720c Fix wrong handling of bare dyn Trait exposed by canonicalizer fix
The self type in the `dyn Trait` trait ref should always be ^0, but we didn't
put that in there in the bare case.
2020-02-22 11:09:21 +01:00
Florian Diebold
2d5ab63247 Add &dyn Trait -> &dyn SuperTrait coercion, and fix &T -> &dyn Trait 2020-02-22 11:09:21 +01:00
Florian Diebold
f126808b2e Fix handling of binders in canonicalization
I'm looking forward to getting rid of this in favor of Chalk's implementation.
2020-02-22 11:09:21 +01:00
Florian Diebold
0dfbbaf03b Implement dyn Trait unsizing as well 2020-02-22 11:09:21 +01:00
Florian Diebold
de39d221a1 Implement unsize coercion using proper trait solving 2020-02-22 11:09:21 +01:00
bors[bot]
baf832d6d9
Merge #3262
3262: Fix handling of const patterns r=matklad a=flodiebold

E.g. in `match x { None => ... }`, `None` is a path pattern (resolving to the
option variant), not a binding. To determine this, we need to try to resolve the
name during lowering. This isn't too hard since we already need to resolve names
for macro expansion anyway (though maybe a bit hacky).

Fixes #1618.

Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-02-22 00:27:09 +00:00
adamrk
fe8ce4c41d remove unneeded collect 2020-02-21 23:51:30 +01:00
Adam Bratschi-Kaye
7be1044104 use Vec::extend instead of Vec::push in loop
Co-Authored-By: Laurențiu Nicola <lnicola@users.noreply.github.com>
2020-02-21 23:51:30 +01:00
adamrk
8b3f449b5f rename module references 2020-02-21 23:51:30 +01:00
Florian Diebold
f1f45f9191 Fix handling of const patterns
E.g. in `match x { None => ... }`, `None` is a path pattern (resolving to the
option variant), not a binding. To determine this, we need to try to resolve the
name during lowering. This isn't too hard since we already need to resolve names
for macro expansion anyway (though maybe a bit hacky).

Fixes #1618.
2020-02-21 17:01:19 +01:00
Florian Diebold
31af774254 Refactor how builtins are resolved
This fixes autocompletion suggesting e.g. self::usize.
2020-02-21 15:39:51 +01:00
Florian Diebold
e50201345e Normalize associated types in types coming from Chalk
Fixes #3232.
2020-02-21 14:06:19 +01:00
Edwin Cheng
d70ddec746 Remove unused placeholder 2020-02-21 18:33:45 +08:00
Edwin Cheng
4e48a73f9c Improve server version info 2020-02-21 18:33:45 +08:00
Aleksey Kladov
7f4b205b72 Better errorse 2020-02-20 18:41:12 +01:00
Laurențiu Nicola
5cd311d64e Fix off by one in onEnter 2020-02-20 11:24:47 +02:00
bors[bot]
e00b9ca3c9
Merge #3215
3215: Exclude methods from non-parameter types introduced by generic constraints r=flodiebold a=lnicola

Fixes #3184.

r? @flodiebold

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2020-02-19 19:46:37 +00:00
Aleksey Kladov
9549aad525 Fill missing fields of enum variants 2020-02-19 18:17:09 +01:00
Aleksey Kladov
7db7c86881
Merge pull request #3239 from matklad/opt-backtrace
Make backtrace optional
2020-02-19 17:13:27 +01:00
Aleksey Kladov
2ff23c172e Make backtrace optional 2020-02-19 16:28:25 +01:00
kjeremy
044180847a Bump lsp-types 2020-02-19 09:14:05 -05:00
bors[bot]
27587f3501
Merge #3236
3236: Merge NameDefinition and NameKind r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-19 13:57:03 +00:00
Aleksey Kladov
372439dec8 Merge NameDefinition and NameKind 2020-02-19 14:56:22 +01:00
bors[bot]
ff41558296
Merge #3235
3235: Derive visibility as well r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-19 13:46:48 +00:00
Aleksey Kladov
0d5ae89948 Derive visibility as well 2020-02-19 14:45:49 +01:00
bors[bot]
b560de4117
Merge #3234
3234: Don't store deriveable Module info in NameDefinition r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-19 13:33:30 +00:00
Aleksey Kladov
86b66067f6 Don't store deriveable Module info in NameDefinition 2020-02-19 14:32:22 +01:00
Aleksey Kladov
bcb5f1b65c Extend selection handles commas in tuple pats 2020-02-19 13:59:19 +01:00
bors[bot]
624a9978e2
Merge #3231
3231: Add `remove_mut` assist r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-19 11:49:52 +00:00
Aleksey Kladov
312a779610 Add remove_mut assist 2020-02-19 12:44:54 +01:00
bors[bot]
eb804261dc
Merge #3228
3228: Use proper range for hover on macro arguments r=matklad a=edwin0cheng

This PR use `original_range` to remap the range of found syntax node in `hover` and thus it should return the proper text range now.

fixed #3000 
fixed #3135 


Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-02-19 10:46:00 +00:00
Laurențiu Nicola
5b05209744 Exclude methods from non-parameter types introduced by generic constraints 2020-02-19 10:46:13 +02:00
Shotaro Yamada
d06733efeb Cleanup 2020-02-19 13:36:59 +09:00
Shotaro Yamada
dd0c3c41b9 Fix a crash with non-ascii whitespace in doc-comments 2020-02-19 13:13:29 +09:00
Edwin Cheng
b9d94d73a2 Use proper range for hover on macro arguments 2020-02-19 11:56:27 +08:00
Aleksey Kladov
b4450b1043 Cleanup imports 2020-02-18 23:52:53 +01:00
Aleksey Kladov
97ab471b6d Minor simplification 2020-02-18 18:52:33 +01:00
Kirill Bulatov
f6816c253b Update versions 2020-02-18 16:12:40 +02:00
Kirill Bulatov
eceaf94f19 More manual clippy fixes 2020-02-18 16:12:37 +02:00
Kirill Bulatov
b8ddcb0652 Run cargo +nightly fix --clippy -Z unstable-options 2020-02-18 16:03:08 +02:00
bors[bot]
eab80cd961
Merge #3218
3218: Cut some deps r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-18 13:46:54 +00:00
Aleksey Kladov
039f2039a4 Remove unicase dependency 2020-02-18 14:44:52 +01:00
Aleksey Kladov
b643ccfaed Drop extra deps 2020-02-18 14:44:52 +01:00
Veetaha
583b1e155a
Remove dat FIXME 2020-02-18 15:19:49 +02:00
bors[bot]
c447fe9bc0
Merge #3026
3026: ra_syntax: reshape SyntaxError for the sake of removing redundancy r=matklad a=Veetaha

Followup of #2911, also puts some crosses to the todo list of #223.

**AHTUNG!** A big part of the diff of this PR are test data files changes.

Simplified `SyntaxError` that was `SyntaxError { kind: { /* big enum */  }, location: Location }` to `SyntaxError(String, TextRange)`. I am not sure whether the tuple struct here is best fit, I am inclined to add names to the fields, because I already provide getters `SyntaxError::message()`, `SyntaxError::range()`.
I also removed `Location` altogether ...

This is currently WIP, because the following is not done:
- [ ] ~~Add tests to `test_data` dir for unescape errors *// I don't know where to put these errors in particular, because they are out of the scope of the lexer and parser. However, I have an idea in mind that we move all validators we have right now to parsing stage, but this is up to discussion...*~~ **[UPD]** I came to a conclusion that tree validation logic, which unescape errors are a part of, should be rethought of, we currently have no tests and no place to put tests for tree validations. So I'd like to extract potential redesign (maybe move of tree validation to ra_parser) and adding tests for this into a separate task.

Co-authored-by: Veetaha <gerzoh1@gmail.com>
Co-authored-by: Veetaha <veetaha2@gmail.com>
2020-02-18 12:57:26 +00:00
Aleksey Kladov
865759925b Rename folder 2020-02-18 12:37:45 +01:00
Aleksey Kladov
c0fa5e2246 Rename the binary to rust-analyzer 2020-02-18 12:33:16 +01:00
Aleksey Kladov
4d307ff802 Fully document ra_lsp_server 2020-02-18 12:25:26 +01:00
Aleksey Kladov
1f142d79ed Refactor 2020-02-18 12:17:47 +01:00
Aleksey Kladov
42c766b2bd Reduce visibility 2020-02-18 12:16:40 +01:00
Aleksey Kladov
b6740060f6 Refactor 2020-02-18 12:15:12 +01:00
Aleksey Kladov
93b969003d Some docs 2020-02-18 12:11:32 +01:00
Aleksey Kladov
59e1207dac Better folder structure 2020-02-18 11:56:18 +01:00
Veetaha
053ccf4121 ra_syntax: fix reparsing merging errors, also now reparse_token() reports errors 2020-02-18 02:11:16 +02:00
Kirill Bulatov
e29dbdb139 Simplify the command execution 2020-02-18 00:38:01 +02:00
Kirill Bulatov
67d30312d0 Simplify the code further 2020-02-18 00:18:26 +02:00
Kirill Bulatov
addb61df36 Idempotent location and installation of rust src 2020-02-18 00:07:15 +02:00
Kirill Bulatov
5cea8a37b7 Install rust-src when it is not found 2020-02-17 23:40:34 +02:00
Veetaha
fc5e7b8807 ra_syntax: migrate test data to 0-length text-range of SyntaxError when constructed from TextUnit 2020-02-17 23:14:31 +02:00
Veetaha
cd8e56c580 ra_syntax: remove message() method and use only Display trait in SyntaxError as per matklad 2020-02-17 23:13:38 +02:00
Veetaha
e05eb631d4 ra_syntax: change module-level documentation for syntax_error to "see X" as per matklad 2020-02-17 22:50:58 +02:00
Veetaha
b510e77fbe ra_syntax: followup fix for making SyntaxError::range() to return by value 2020-02-17 22:24:38 +02:00
Veetaha
e00922d113 ra_syntax: SyntaxError::range() now returns by value 2020-02-17 22:24:38 +02:00
Veetaha
acdab6f0f2 ra_syntax: moved reexport declaration after imports as per matklad 2020-02-17 22:24:38 +02:00
Veetaha
6ae4850c89 ra_syntax: Apply Aleksei Kladov suggestion about TextRange of TextUnit
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-17 22:24:33 +02:00
Veetaha
c58276673a Change semmantical analyzis to tree validation as per @matklad
Co-Authored-By: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-17 22:24:33 +02:00
Veetaha
9fdf984958 ra_syntax: reshape SyntaxError for the sake of removing redundancy 2020-02-17 22:24:33 +02:00
Laurențiu Nicola
b6b8fd9525 Replace ra_cli mentions 2020-02-17 22:07:24 +02:00
Aleksey Kladov
2c9b91ad32 Merge ra_vfs_glob and ra_lsp_server 2020-02-17 19:07:30 +01:00
Aleksey Kladov
659b0e73cf Merge cli and ra_lsp_server 2020-02-17 19:03:03 +01:00
Aleksey Kladov
2d1b3da5fb Use anyhow 2020-02-17 18:19:25 +01:00
Aleksey Kladov
8e86d12771 Cleanup 2020-02-17 18:15:19 +01:00
Aleksey Kladov
06e37b273e Better name 2020-02-17 18:10:15 +01:00
Aleksey Kladov
3ef916061b More precise types 2020-02-17 18:09:07 +01:00
Aleksey Kladov
c818f5c65e Unify verbosity handling 2020-02-17 18:05:45 +01:00
Aleksey Kladov
fa482a9fee Move interesting stuff to main 2020-02-17 18:03:48 +01:00
Aleksey Kladov
a51b2603f9 Stronger Types 2020-02-17 18:02:59 +01:00
Aleksey Kladov
017f0e4e53 Refactor arg parsing 2020-02-17 18:02:10 +01:00
Aleksey Kladov
90e61ac75d Sort deps 2020-02-17 17:41:53 +01:00
Aleksey Kladov
d7be1da8df Inline ra_batch 2020-02-17 17:32:17 +01:00
Aleksey Kladov
559c5f37f6 Cleanup imports 2020-02-17 17:19:55 +01:00
Aleksey Kladov
d5371b5dec Inline help 2020-02-17 17:18:45 +01:00
Aleksey Kladov
0353e1c6f4 Use Arguments::from_os 2020-02-17 17:12:37 +01:00
Aleksey Kladov
57140f1730 Drop proptest tests
It takes waaay to long to compile.

We should add quickcheck tests when we touch the relevant code next
time.
2020-02-17 16:57:06 +01:00
bors[bot]
fcf15cc05a
Merge #3169
3169: Show record field names in Enum completion r=flodiebold a=adamrk

Adresses https://github.com/rust-analyzer/rust-analyzer/issues/2947.
Previously the details shown when autocompleting an Enum variant would look like the variant was a tuple even if it was a record:
![2020-02-16-15:59:32_crop](https://user-images.githubusercontent.com/16367467/74607233-64f21980-50d7-11ea-99db-e973e29c71d7.png)

This change will show the names of the fields for a record and use curly braces instead of parentheses:
![2020-02-16-15:33:00_crop](https://user-images.githubusercontent.com/16367467/74607251-8ce17d00-50d7-11ea-9d4d-38d198a4aec0.png)

This required exposing the type `adt::StructKind` from `ra_hir` and adding a function 
```
kind(self, db: &impl HirDatabase) -> StructKind
```
in the `impl` of `EnumVariant`. 

There was also a previously existing function `is_unit(self, db: &impl HirDatabase) -> bool` for `EnumVariant` which I removed because it seemed redundant after adding `kind`.

Co-authored-by: adamrk <ark.email@gmail.com>
2020-02-17 10:54:32 +00:00
adamrk
0e260aa6b1 use 'if let' instead of match on kind in lower.rs 2020-02-17 11:53:12 +01:00
bors[bot]
93d28fb50c
Merge #3099
3099: Init implementation of structural search replace r=matklad a=mikhail-m1

next steps:
* ignore space and other minor difference
* add support to ra_cli
* call rust parser to check pattern
* documentation

original issue #2267 

Co-authored-by: Mikhail Modin <mikhailm1@gmail.com>
2020-02-17 10:02:54 +00:00
bors[bot]
8d8d542dfa
Merge #3108
3108: Magic Completion for `impl Trait for` Associated Items r=matklad a=kdelorey

# Summary
This PR adds a set of magic completions to auto complete associated trait items (functions/consts/types). 

![Associated Trait Impl](https://user-images.githubusercontent.com/2295721/74493144-d8f1af00-4e96-11ea-93a4-82725bf89646.gif)

## Notes
Since the assist and completion share the same logic when figuring out the associated items that are missing, a shared utility was created in the `ra_assists::utils` module.

Resolves #1046 

As this is my first PR to the rust-analyzer project, I'm new to the codebase, feedback welcomed!

Co-authored-by: Kevin DeLorey <2295721+kdelorey@users.noreply.github.com>
2020-02-17 09:34:08 +00:00
bors[bot]
953dbe3e02
Merge #3181
3181: Add ability to pass additional arguments to rustfmt. r=matklad a=Leonqn

relates to #2848

Co-authored-by: Ilya Titkov <ilya@titkov.me>
2020-02-17 09:05:01 +00:00
bors[bot]
c9989a524c
Merge #3153
3153: When a single test is run, do not run others with overlapping names r=matklad a=SomeoneToIgnore



Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-17 08:52:45 +00:00
Ilya Titkov
a2b0bdcc24 Add arguments to rustfmt 2020-02-17 11:44:58 +03:00
bors[bot]
daffdd8674
Merge #3179
3179: Introduce AsMacroCall trait r=matklad a=edwin0cheng

This PR introduce `AsMacroCall` trait to help convert `ast::MacroCall` to `MacroCallId`. The main goal here is to centralize various conversions to single place and make implementing eager macro calls without further ado.

```rust
pub trait AsMacroCall {
    fn as_call_id(
        &self,
        db: &(impl db::DefDatabase + AstDatabase),
        resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
    ) -> Option<MacroCallId>;
}
```

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-02-17 08:38:09 +00:00
Edwin Cheng
2d4e79e1e6 Introduce AsMacroCall trait 2020-02-17 12:57:24 +08:00
Aleksey Kladov
ca7e9ab0da 1-based columns 2020-02-16 18:30:48 +01:00
Aleksey Kladov
0f79ec76d6 Support goto def in bences 2020-02-16 18:24:06 +01:00
Aleksey Kladov
6a3ec2dfa5 Refactor arg parsing 2020-02-16 18:20:22 +01:00
Aleksey Kladov
2ba918775c Refactor position parsing 2020-02-16 18:17:35 +01:00
Aleksey Kladov
98cc51580d Enable profiling for bench 2020-02-16 18:04:08 +01:00
Kirill Bulatov
f0338cea5b Fix a slow test 2020-02-16 18:55:52 +02:00
Kirill Bulatov
dabdb57067 Simplify module retrieval 2020-02-16 18:44:46 +02:00
Aleksey Kladov
28fa5edbce Add module colors to css 2020-02-16 17:06:01 +01:00
adamrk
e88eb89132 add space before/after wrapping braces 2020-02-16 16:33:15 +01:00
adamrk
68d3743faf replace uses of VariantData::is_unit with VariantData::kind 2020-02-16 16:10:32 +01:00
adamrk
04aff742b1 show names for record fields in enum completion 2020-02-16 16:10:23 +01:00
Florian Diebold
e14e7ffa34 Fix coercion of &T to itself
The autoderef coercion logic did not handle matching placeholders. This led to
some type mismatches.
2020-02-16 12:58:20 +01:00
bors[bot]
d976772716
Merge #3157
3157: Extend analysis-stats a bit r=matklad a=flodiebold

This adds some tools helpful when debugging nondeterminism in analysis-stats:
 - a `--randomize` option that analyses everything in random order
 - a `-vv` option that prints even more detail

Also add a debug log if Chalk fuel is exhausted (which would be a source of
nondeterminism, but didn't happen in my tests).

I found one source of nondeterminism (rust-lang/chalk#331), but there are still
other cases remaining.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-15 22:35:44 +00:00
Aleksey Kladov
11dda31941 Remove extra dep 2020-02-15 23:23:44 +01:00
Florian Diebold
3484d727c3 Extend analysis-stats a bit
This adds some tools helpful when debugging nondeterminism in analysis-stats:
 - a `--randomize` option that analyses everything in random order
 - a `-vv` option that prints even more detail

Also add a debug log if Chalk fuel is exhausted (which would be a source of
nondeterminism, but didn't happen in my tests).

I found one source of nondeterminism (rust-lang/chalk#331), but there are still
other cases remaining.
2020-02-15 18:04:01 +01:00
Kevin DeLorey
057d0bee55 Added module doc comment to explain the purpose of the completion. 2020-02-15 10:27:04 -06:00
Kevin DeLorey
ae8ae650fc Fixed bug that allowed for completion in a nested method. 2020-02-15 09:50:07 -06:00
Kevin DeLorey
fc13b7fc9a Reordered the use items. 2020-02-14 18:54:00 -06:00
Kirill Bulatov
426c0f26fe If possible, use --exact flag when running tests 2020-02-15 01:06:14 +02:00
Mikhail Modin
f8f454ab5c Init implementation of structural search replace 2020-02-14 21:45:42 +00:00
Benjamin Brittain
843f03a3d2 Bump crate resolution limit for large projects
Change-Id: Ie0221e5bcfd1779cd5e241f96b4489e5bd3854c1
2020-02-14 16:15:59 -05:00
bors[bot]
b2b94cbf71
Merge #3147
3147: Check that impl self type matches up with expected self type in path mode r=matklad a=flodiebold

Fixes #3144.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-02-14 20:32:55 +00:00
bors[bot]
6fb36dfdcb
Merge #3145
3145: Make Self implement the trait inside trait default methods r=matklad a=flodiebold



Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-02-14 20:26:08 +00:00
Florian Diebold
f47dc4de8d Check that impl self type matches up with expected self type in path mode
Fixes #3144.
2020-02-14 21:08:25 +01:00
Florian Diebold
001dd6a200 Make Self implement the trait inside trait default methods 2020-02-14 20:39:04 +01:00
Aleksey Kladov
0bfebb8b20 Make AtomicX type resolve again 2020-02-14 19:33:39 +01:00
Florian Diebold
5028b86cb8 Move hir_fmt code to display module 2020-02-14 15:01:42 +01:00
Florian Diebold
a324d066cb Rename Ty::Param => Ty::Placeholder
This aligns more with Chalk.
2020-02-14 14:44:00 +01:00
Kevin DeLorey
be97cbfdb4 Adjusted the completion lookups to filter by just the name. 2020-02-13 19:10:08 -06:00
bors[bot]
1f897d1c6e
Merge #3120
3120: Support trait auto import r=matklad a=SomeoneToIgnore

Unfortunately, for real cases it does not work as spectacular as in the tests.

The main reason for that is type inference:
* The callee type [here](https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_hir_ty/src/method_resolution.rs#L369) is unknown for many cases
* The trait solution [here](https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_hir_ty/src/method_resolution.rs#L399) is also often ambiguous

That results in trait candidates being rejected, and some real cases not supported.
Example: no imports for `String::from_str("test")`

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-13 11:37:32 +00:00
Adam Bratschi-Kaye
6f2cab1368
Add error context to failures in ra_project_model using anyhow crate (#3119)
Add error context to failures in ra_project_model using anyhow crate
2020-02-13 11:10:50 +01:00
Quan Luu
409c1a7f06 prevent "Play" symbol in "Run Test" code lens from rendering as emoji 2020-02-13 15:09:39 +07:00
Kevin DeLorey
0bc9e62374 Completion now replaces whole fn/const/type def with snippet. 2020-02-12 21:00:47 -06:00
Kevin DeLorey
43e62a87ab Cheese const tests as they requre an ident before becoming a CONST_DEF. 2020-02-12 20:46:55 -06:00
Kevin DeLorey
877cfbacf9 Started to refactor the trigger of the trait_impl completion. 2020-02-12 20:21:43 -06:00
Han Mertens
bed9c083de Run cargo test 2020-02-12 23:15:48 +01:00
Han Mertens
537da096fe Run cargo xtask codegen 2020-02-12 23:09:13 +01:00
Han Mertens
b435fe8b77 Add test for unnamed argument in function pointer 2020-02-12 22:55:37 +01:00
Kirill Bulatov
e4f4cd77a0 Do not collect all traits 2020-02-12 23:27:19 +02:00
Han Mertens
0e10e77a78 Support unnamed arguments in function pointers
Fixes #3089
2020-02-12 21:40:05 +01:00
Kirill Bulatov
e008b08054 Support associated consts 2020-02-12 22:38:19 +02:00
Aleksey Kladov
f2424f947c Add couple of utility methods 2020-02-12 18:19:55 +01:00
Aleksey Kladov
6ec982d54d Simplify 2020-02-12 18:02:00 +01:00
Kirill Bulatov
3ccf8b746a Also consider associated constants 2020-02-12 18:52:29 +02:00
Kirill Bulatov
f65daf23df Revert source_analyzer changes 2020-02-12 17:34:37 +02:00
Kirill Bulatov
afc1d18ff3 Fix post-rebase issues 2020-02-12 17:18:42 +02:00
Kirill Bulatov
acf5f43639 Refactor the code 2020-02-12 17:18:42 +02:00
Kirill Bulatov
07058cbf9f Adjust the assist group name 2020-02-12 17:18:42 +02:00
Kirill Bulatov
24f7028d3f Add profiling 2020-02-12 17:18:42 +02:00
Kirill Bulatov
d5c3808545 Support trait method call autoimports 2020-02-12 17:18:42 +02:00
Kirill Bulatov
8f959f20ee Trait location draft 2020-02-12 17:18:42 +02:00
Kirill Bulatov
9b6db7bbd4 Refactor path for imports extraction 2020-02-12 17:18:42 +02:00
Kirill Bulatov
2b9b16cb45 Add method tests 2020-02-12 17:18:41 +02:00
Kirill Bulatov
24ab3e80ca Resolve methods and functions better 2020-02-12 17:18:41 +02:00
bors[bot]
5bf6698609
Merge #3121
3121: Do not add imports before inner attributes r=matklad a=SomeoneToIgnore

Current `insert_use_statement` function adds imports before inner attributes which results in compiler errors:
<img width="1440" alt="image" src="https://user-images.githubusercontent.com/2690773/74344019-a3749500-4db4-11ea-9d88-f71e903e795a.png">


Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-12 15:08:34 +00:00
Kirill Bulatov
2a7d97d829 Fix the trailing whitespace test 2020-02-12 17:04:16 +02:00
Kirill Bulatov
848c576266 Introduce AttrKind 2020-02-12 16:44:52 +02:00
Aleksey Kladov
225fc353af Add more hir APIs for associated items 2020-02-12 15:31:44 +01:00
Kirill Bulatov
1596b31698 Do not add imports before inner attributes 2020-02-12 16:21:55 +02:00
bors[bot]
759100fb0d
Merge #3062
3062: Implement slice pattern AST > HIR lowering r=jplatte a=jplatte

WIP. The necessary changes for parsing are implemented, but actual inference is not yet. Just wanted to upload what I've got so far so it doesn't get duplicated :)

Will fix #3043

Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
2020-02-11 21:46:36 +00:00
Jonas Platte
a3b104aa6d
Implement slice pattern AST > HIR lowering 2020-02-11 22:33:11 +01:00
Florian Diebold
43df7c3d53 Don't let unknown match arms fall back to ! 2020-02-11 21:09:11 +01:00
Aleksey Kladov
f3dd0a05bb Return early, return often 2020-02-11 18:36:12 +01:00
Aleksey Kladov
adfed5c689 Fix join lines when two rules match 2020-02-11 18:33:25 +01:00
Kevin DeLorey
6f130e7ef8 Formatting. 2020-02-11 10:07:23 -06:00
Kevin DeLorey
47d314e856 Fixing minor suggestions and added module level documentation. 2020-02-11 10:04:30 -06:00
Kevin DeLorey
e664cd73e3 Removed doc comments entirely from the changes. 2020-02-11 09:48:26 -06:00
bors[bot]
305d921982
Merge #3064
3064: Handle macro token cases for rename r=matklad a=edwin0cheng

Fixes #2957

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-02-11 15:46:05 +00:00
Kevin DeLorey
3aaf46afa1 Formatted changes. 2020-02-11 09:40:08 -06:00
Kevin DeLorey
d7e36c3dd2 Removed docs from private method. 2020-02-11 07:31:39 -06:00
Kevin DeLorey
b4429a9d64 Fixed warning generated after refactoring. 2020-02-11 07:10:06 -06:00
Kevin DeLorey
ca43bb3ff7 Updated the add_missing_impl_members to use the shared utility. 2020-02-11 06:57:26 -06:00
Aleksey Kladov
44425eaebc Better error messages while deserializing 2020-02-11 09:46:45 +01:00
Kevin DeLorey
f0f242cb4f Adjusted the hashset buckets to lump functions/consts together as their names must be unique. 2020-02-10 21:09:04 -06:00
Kevin DeLorey
785723e0d9 Added tests to test associated types and consts. 2020-02-10 21:02:51 -06:00
Kevin DeLorey
52c4324e31 Added some documentation to the complete_trait_impl completion. 2020-02-10 20:55:49 -06:00
bors[bot]
f8d6d6f23b
Merge #3074
3074: Or patterns r=matthewjasper a=matthewjasper

Works towards #2458

Co-authored-by: Matthew Jasper <mjjasper1@gmail.com>
2020-02-10 20:14:08 +00:00
Matthew Jasper
49b53cd7a0 Address review comments 2020-02-10 20:11:44 +00:00
Aleksey Kladov
5a71eb8749 More specific error if rustc --print sysroot fails 2020-02-10 17:04:18 +01:00
Kevin DeLorey
3ffc84fd15 Added associated const magic completion. 2020-02-09 20:59:12 -06:00
Veetaha
139479e8a3 move to to_usize() 2020-02-10 01:57:43 +02:00
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
Kevin DeLorey
d85abd77b9 Added a utility function that can be used to determine the missing impl items. 2020-02-09 12:24:59 -06:00
Kevin DeLorey
a957c473fd Merge branch 'master' into kdelorey/complete-trait-impl 2020-02-09 10:37:43 -06: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
Aleksey Kladov
fe141a8c10 Set auto-import target
closes #3067
2020-02-09 16:14:07 +01: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
Aleksey Kladov
fb99831cb0 Slightly simpler API for groups 2020-02-09 14:30:27 +01:00
Edwin Cheng
3038470c68 Use get_or_insert_with 2020-02-09 20:41:29 +08:00
Florian Diebold
9bb699b28d Some README fixes/cleanups
Make capitalization more consistent and fix some typos.
2020-02-09 13:35:54 +01: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
Kirill Bulatov
7de7c8a7ef Remove ImportResolver-related stubs 2020-02-09 12:34:41 +02:00
Edwin Cheng
dd0421e587 Handle macro token cases for rename 2020-02-09 17:17:56 +08: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
Kevin DeLorey
22caf982b9 Added associated type completion. 2020-02-08 15:41:25 -06:00
Kevin DeLorey
5c0c18926b Cleaning up unessicary code that the Magic completion takes care of. 2020-02-08 13:22:31 -06:00
Kevin DeLorey
f801723dd2 Got the magic completion working. 2020-02-08 11:28:39 -06:00
Kevin DeLorey
5216b09ed6 Update completion kind to Magic in the unit tests. 2020-02-07 21:02:01 -06: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
Florian Diebold
dded90a748 Formatting 2020-02-07 18:28:10 +01:00
Florian Diebold
6787f124b5 Clean up RPIT a bit 2020-02-07 18:28:10 +01:00
Florian Diebold
0718682cff Fix compilation of other crates 2020-02-07 18:28:10 +01:00
Florian Diebold
a3d8cffde3 Use variables in predicates as well 2020-02-07 18:28:10 +01:00
Florian Diebold
86348f5994 Comment fixes / todos 2020-02-07 18:28:10 +01:00
Florian Diebold
3397ca679f Fix APIT some more 2020-02-07 18:28:10 +01:00
Florian Diebold
c6654fd4a7 Fix APIT 2020-02-07 18:28:10 +01:00
Florian Diebold
ed25cf70d5 Change Ty::Param to contain param ID 2020-02-07 18:28:10 +01:00
Florian Diebold
f8b7b64bce WIP use params for APIT 2020-02-07 18:28:10 +01:00
Florian Diebold
33aa2f8e4f Fix assoc type selection 2020-02-07 18:28:10 +01:00
Florian Diebold
4a8279a21a Fix another test 2020-02-07 18:28:10 +01:00
Florian Diebold
dbc14f9d57 First stab at desugaring bounds for APIT 2020-02-07 18:28:10 +01:00
Florian Diebold
a9430865b3 Fix crash 2020-02-07 18:28:10 +01:00
Florian Diebold
a5554dcb17 Fix enum constructors 2020-02-07 18:28:10 +01:00
Florian Diebold
4789a993eb Fix printing of function types 2020-02-07 18:28:10 +01:00
Florian Diebold
16c6937447 Lower impl trait to variables, move away from using placeholders where they don't belong 2020-02-07 18:28:10 +01:00
Florian Diebold
93aa166748 wip lower impl trait to type args 2020-02-07 18:28:10 +01:00
Florian Diebold
9dec65d3b1 wip implement lowering mode 2020-02-07 18:28:10 +01:00
Florian Diebold
7ea4bce1b2 Add impl trait lowering mode 2020-02-07 18:28:10 +01:00
Florian Diebold
22a65b11b3 Introduce TyLoweringContext 2020-02-07 18:28:10 +01:00
bors[bot]
5397f05bfe
Merge #3049
3049: Introduce assists utils r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-07 16:28:33 +00:00
Aleksey Kladov
d00add1f1f Introduce assists utils 2020-02-07 17:28:02 +01:00
Aleksey Kladov
561b4b11ff Name assist handlers 2020-02-07 17:28:02 +01:00
Aleksey Kladov
aa64a84b49 Cleanups 2020-02-07 15:12:51 +01:00
Aleksey Kladov
ce44547cfb Cleanup imports 2020-02-07 15:10:19 +01:00
Aleksey Kladov
6ac9c4ad6a Cleanup 2020-02-07 15:04:50 +01:00
Aleksey Kladov
2d95047f7c Cleanup 2020-02-07 14:55:47 +01:00
Aleksey Kladov
b831b17b3d Simplify 2020-02-07 14:53:50 +01:00
bors[bot]
1996762b1f
Merge #3048
3048: Remove irrelevant distinction r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-07 13:35:02 +00:00
Aleksey Kladov
ae70d07237 Rename 2020-02-07 14:26:59 +01:00
Aleksey Kladov
f55be75a17 Remove irrelevant distinction 2020-02-07 14:25:16 +01:00
bors[bot]
8337dcd9e2
Merge #3047
3047: Update async unsafe fn ordering in parser r=matklad a=kiljacken

As of rust-lang/rust#61319 the correct order for functions that are both unsafe and async is: `async unsafe fn` and not `unsafe async fn`.

This commit updates the parser tests to reflect this, and corrects parsing behavior to accept the correct ordering.

Fixes #3025

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
2020-02-07 13:21:02 +00:00
bors[bot]
6d6a995e09
Merge #3040
3040: Rework value parameter parsing r=matklad a=tobz1000

Fixes #2847.

- `Fn__(...)` parameters with idents/patterns no longer parse
- Trait function parameters with arbitrary patterns parse
- Trait function parameters without idents/patterns no longer parse
- `fn(...)` parameters no longer parse with patterns other than a single ident

__Question__: The pre-existing test `param_list_opt_patterns` has been kept as-is, although the name no longer makes sense (it's testing `Fn__(...)` params, which aren't allowed patterns any more). What would be best to do about this?

Co-authored-by: Toby Dimmick <tobydimmick@pm.me>
2020-02-07 13:13:36 +00:00
Emil Lauridsen
73ec2ab184 Update async unsafe fn ordering.
As of rust-lang/rust#61319 the correct order for functions that are both
unsafe and async is: `async unsafe fn` and not `unsafe async fn`.

This commit updates the parser tests to reflect this, and corrects
parsing behavior to accept the correct ordering.

Fixes #3025
2020-02-07 13:51:51 +01:00
Toby Dimmick
90ff2be4e8 PR tweaks 2020-02-07 12:36:33 +00:00
bors[bot]
4d0d113c7d
Merge #3044
3044: Don't crash when recieving unkown file for cargo diagnostic. r=matklad a=kiljacken

Fixes #3014

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
2020-02-07 11:41:25 +00:00
Emil Lauridsen
137a878461 to_string_lossy() -> display() 2020-02-07 12:35:36 +01:00
Aleksey Kladov
36ee9ecb67 Cleanup early return assist 2020-02-07 12:30:39 +01:00
Emil Lauridsen
5db7c8642b Don't crash when recieving unkown file for cargo diagnostic. 2020-02-07 12:30:29 +01:00
Aleksey Kladov
aa1234e02b Generalize invert_if to just always work 2020-02-07 12:14:33 +01:00
Aleksey Kladov
56e3fbe588 A tiny bit more consistent API 2020-02-06 23:59:27 +01:00
Toby Dimmick
0183952d2e Closure params test 2020-02-06 20:39:27 +00:00
Toby Dimmick
e1921ea59c rustfmt 2020-02-06 20:04:35 +00:00
Toby Dimmick
7e66785859 Rework value parameter parsing
- `Fn__(...)` parameters with idents/patterns no longer parse
- Trait function parameters with arbitrary patterns parse
- Trait function parameters without idents/patterns no longer parse
- `fn(...)` parameters no longer parse with patterns other than a single ident
2020-02-06 19:45:51 +00:00
Aleksey Kladov
7e73b7a5f8 Minor rename 2020-02-06 18:47:26 +01:00
Kirill Bulatov
f4a4fcf275 Remove the leftovers after ImportLocator removal 2020-02-06 19:27:48 +02:00
Aleksey Kladov
755077e372 Doctest autoimport 2020-02-06 18:14:44 +01:00
Aleksey Kladov
d1e8b8d134 Fix tests 2020-02-06 17:42:17 +01:00
Aleksey Kladov
ad204f7562 Mostly remove ImoportLocator infra 2020-02-06 17:17:51 +01:00
Aleksey Kladov
cf812c12d1 Assists are not generic 2020-02-06 17:12:02 +01:00
Aleksey Kladov
f8965ffafd Remove assists TestDB 2020-02-06 16:56:42 +01:00
Aleksey Kladov
2c922ef549 Start switching assists to a root database 2020-02-06 16:56:42 +01:00
Aleksey Kladov
a173e31890 Make assists use ImportsLocator directly 2020-02-06 16:40:28 +01:00
Aleksey Kladov
dfbe96750b Move imports locator to ide_db 2020-02-06 16:26:43 +01:00
Aleksey Kladov
ec23030e16 Add a fixme note 2020-02-06 16:24:14 +01:00
Aleksey Kladov
271017e6bf Move NameKind up 2020-02-06 16:23:28 +01:00
Aleksey Kladov
f8dde21fe9 Simplify 2020-02-06 16:00:39 +01:00
Aleksey Kladov
832dfae250 Tweak goto parent module 2020-02-06 15:47:33 +01:00
bors[bot]
ff2d77bde6
Merge #3029
3029: Docs r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-06 14:14:47 +00:00
Aleksey Kladov
355c98fd08 Docs 2020-02-06 15:10:17 +01:00
Aleksey Kladov
8a39519e1c Cleanup 2020-02-06 15:10:07 +01:00
Aleksey Kladov
ec6fb8da7c Add profiling around add_impl_members
This intention is pretty slow for `impl Interator`, because it has a
ton of default methods which need to be substituted.

The proper fix here is to not compute the actual edit until the user
triggers the action, but that's awkward to do in the LSP right now, so
let's just put a profiling code for now.
2020-02-06 14:55:10 +01:00
Aleksey Kladov
88267c86c0 cleanup imports 2020-02-06 14:03:45 +01:00
Aleksey Kladov
939f05f3e3 Move to a crate 2020-02-06 12:43:56 +01:00
Aleksey Kladov
1bfb111cf9 Move change to ide-db 2020-02-06 12:35:40 +01:00
Aleksey Kladov
ee76e6141e Fix test imports 2020-02-06 12:26:10 +01:00
Aleksey Kladov
0509a0a34e Move Query 2020-02-06 12:24:13 +01:00
Aleksey Kladov
ad247aa670 Move symbol_index 2020-02-06 12:22:35 +01:00
Aleksey Kladov
ec95152a4e Move FeatureFlags 2020-02-06 12:18:52 +01:00
Aleksey Kladov
ee2ee1a8ff Move line_index 2020-02-06 12:17:40 +01:00
Aleksey Kladov
551f33d754 Move ide-db 2020-02-06 12:08:08 +01:00
Aleksey Kladov
896906fea8 Start ide_db 2020-02-06 12:07:06 +01:00
Aleksey Kladov
a4c6e8c4e2 Refactor if-let -> match assist to use ast::make 2020-02-05 14:08:16 +01:00
bors[bot]
83dc22e1fb
Merge #3019
3019: Better cursor placement when merging arms r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-02-05 12:44:00 +00:00
Aleksey Kladov
f756d5da06 Better cursor placement when merging arms 2020-02-05 13:41:43 +01:00
Aleksey Kladov
28acd01c63 Merge match arms works with many arms 2020-02-05 12:26:43 +01:00
Kirill Bulatov
78092c7c66 Apply the reviews suggestions 2020-02-05 12:47:28 +02:00
Aleksey Kladov
45dd90b0e8 Cleanup 2020-02-05 11:46:05 +01:00
Kirill Bulatov
2b9952625b Normalize dashes in crate names 2020-02-05 11:53:54 +02:00
Kevin DeLorey
fc46ed81ee Add detection for a user already starting a fn impl and still providing completion. 2020-02-04 22:04:57 -06:00
bors[bot]
c9e1aab880
Merge #2948
2948: Allow add_explicit_type to replace a placeholder type r=matklad a=lnicola



Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2020-02-04 16:12:05 +00:00
Aleksey Kladov
f5a20014ce minor, if let else -> match 2020-02-04 13:41:56 +01:00
Aleksey Kladov
4ea0c12cf1 Make sure that newly created nodes are the root of the tree 2020-02-04 13:22:32 +01:00
bors[bot]
73c36fdbd2
Merge #2962
2962: Differentiate underscore alias from named aliases r=matklad a=zombiefungus

pre for Fixing Issue 2736 
edited to avoid autoclosing the issue

Co-authored-by: zombiefungus <divmermarlav@gmail.com>
2020-02-04 09:44:31 +00:00
Veetaha
a3e5663ae0 ra_syntax: added tests for tokenization errors 2020-02-04 00:00:55 +02:00
Veetaha
9367b9a292 ra_syntax: add backticks around tokens specimen 2020-02-04 00:00:55 +02:00
Veetaha
c3117eea31 ra_syntax: removed unnecessary init statement from reparsing tests 2020-02-04 00:00:55 +02:00
Veetaha
58e01d8754 ra_syntax: rename first_token() -> lex_first_token() 2020-02-04 00:00:55 +02:00
Veetaha
b1764d85fc ra_syntax: fixed a typo in doc comment 2020-02-04 00:00:55 +02:00
Veetaha
9e7eaa959f ra_syntax: refactored the lexer design as per @matklad and @kiljacken PR review 2020-02-04 00:00:55 +02:00
Veetaha
bf60661aa3 ra_syntax: remove backticks from TokenizeError message since that is not Markdown ;( 2020-02-04 00:00:55 +02:00
Veetaha
c6d0881382 add better docs for tokenize errors 2020-02-04 00:00:55 +02:00
Veetaha
ffe00631d5 ra_syntax: moved ParsedToken derive attribute under the doc comment 2020-02-04 00:00:55 +02:00
Veetaha
a2bc4c2a74 ra_syntax: fixed doc comment 2020-02-04 00:00:55 +02:00
Veetaha
ac37a11f04 Reimplemented lexer with vectors instead of iterators 2020-02-04 00:00:55 +02:00
Veetaha
ad24976da3 ra_syntax: changed added diagnostics information returned from tokenize() (implemented with iterators) 2020-02-04 00:00:55 +02:00
Kirill Bulatov
bfbc5e2d37 Use proper import name in the label 2020-02-03 15:44:28 +02:00
bors[bot]
834fcecd31
Merge #2994
2994: Small cleanup r=matklad a=SomeoneToIgnore

A follow-up to https://github.com/rust-analyzer/rust-analyzer/pull/2990#discussion_r374044482

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-03 13:01:58 +00:00
Kirill Bulatov
4f27155d5c Simplify paths searches 2020-02-03 13:56:03 +02:00
Kirill Bulatov
fcf5bbbbeb Fix inlay hints test snippet compilation 2020-02-03 13:35:14 +02:00
bors[bot]
d400fde66c
Merge #2959
2959: Rework how we send diagnostics to client r=matklad a=kiljacken

The previous way of sending from the thread pool suffered from stale diagnostics due to being canceled before we could clear the old ones.

The key change is moving to sending diagnostics from the main loop thread, but doing all the hard work in the thread pool. This should provide the best of both worlds, with little to no of the downsides.

This should hopefully fix a lot of issues, but we'll need testing in each individual issue to be sure.

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
2020-02-03 11:27:31 +00:00
Emil Lauridsen
9f70f443a3 Update snapshot tests due to removed SuggestedFix 2020-02-03 12:24:57 +01:00
Emil Lauridsen
cde20bf8f0 Remove stray todo 2020-02-03 12:18:06 +01:00
Laurențiu Nicola
e0c7ce8417 Allow add_explicit_type to replace a placeholder type 2020-02-03 13:09:38 +02:00
Emil Lauridsen
790788d5f4 Rework how we send diagnostics to client.
The previous way of sending from the thread pool suffered from stale
diagnostics due to being canceled before we could clear the old ones.

The key change is moving to sending diagnostics from the main loop
thread, but doing all the hard work in the thread pool. This should
provide the best of both worlds, with little to no of the downsides.

This should hopefully fix a lot of issues, but we'll need testing in
each individual issue to be sure.
2020-02-03 11:34:24 +01:00
Kirill Bulatov
01d59f4a32 Use name only when searching for an import candidate 2020-02-02 23:27:20 +02:00
Aleksey Kladov
24ad1cce2c Avoid premature pessimization
The extra allocation for message should not matter here at all, but
using a static string is just as ergonomic, if not more, and there's
no reason to write deliberately slow code
2020-02-02 18:56:37 +01:00
bors[bot]
e24829909a
Merge #2982
2982: Merge imports when auto importing r=flodiebold a=SomeoneToIgnore



Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-02-02 13:06:14 +00:00
zombiefungus
f4f71e361e include requested changes 2020-02-02 08:04:24 -05:00
zombiefungus
7d52715945 add new ImportAlias enum to differentiate no alias from an _ alias 2020-02-02 08:04:24 -05:00
Kirill Bulatov
2ee94e3e24
Remove obsolete rustdoc 2020-02-02 14:59:07 +02:00
Kirill Bulatov
c669b2f489 Code review fixes 2020-02-02 14:27:52 +02:00
Kirill Bulatov
6dae5cbb11 Require ModPath for importing 2020-02-02 14:06:51 +02:00
Kirill Bulatov
a9669a5505 Merge imports when auto importing 2020-02-02 10:28:16 +02:00
Kirill Bulatov
d3188769e4 Auto import functions 2020-02-01 22:13:02 +02:00
Aleksey Kladov
5559d6b8a8 Prevent child cargo process from messing with our stdin
By default, `spawn` inherits stderr/stdout/stderr of the parent
process, and so, if child, for example does fcntl(O_NONBLOCK), weird
stuff happens to us.

Closes https://github.com/rust-analyzer/lsp-server/pull/10
2020-02-01 16:25:44 +01:00
bors[bot]
fc0a8c14dc
Merge #2965
2965: Improve auto import message r=kiljacken a=lnicola



Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2020-02-01 11:10:50 +00:00
Laurențiu Nicola
0fdca457df Improve auto import message 2020-01-31 22:12:18 +02:00
Laurențiu Nicola
0829e26354 Fix extra parentheses warnings 2020-01-31 21:07:21 +02:00
Aleksey Kladov
9d5a5211a4 Small cleanup 2020-01-31 13:34:44 +01:00
Aleksey Kladov
c2e3dba8cb Add a FIXME note 2020-01-30 18:01:38 +01:00
bors[bot]
c7e0baf1a8
Merge #2920
2920: Better handle illformed node id from metadata r=matklad a=edwin0cheng

In some rare cases, deps node-id from cargo-metadata do not match its version-id, which cause a panic in `cargo-workspace.rs`. This PR try to ignore these ill-formed node id from `cargo-metadata`. An alternative is return  `Err` in these cases but I think make it resilience is a better choice here.

Related #2767

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-30 16:48:35 +00:00
Aleksey Kladov
c445c72eb3 Simplify fixture parsing 2020-01-30 13:17:56 +01:00
bors[bot]
5dcd9fdf5e
Merge #2895
2895: Rewrite ra_prof's profile printing r=michalt a=michalt

This changes the way we print things to first construct a mapping from
events to the children and uses that mapping to actually print things.
It should not change the actual output that we produce.

The new approach two benefits:

 * It avoids a potential quadratic behavior of the previous approach.
   For instance, for a vector of N elements:
   ```
   [Message{level: (N - 1)}, ..., Message{level: 1}, Message{level: 0}]
   ```
   we would first do a linear scan to find entry with level 0, then
   another scan to find one with level 1, etc.

 * It makes it much easier to improve the output in the future, because
   we now pre-compute the children for each entry and can easily take
   that into account when printing.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>

Co-authored-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-29 20:09:49 +00:00
Michal Terepeta
644c383f65 A couple of small improvements to ra_prof printing
Based on suggestions from @matklad.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-29 20:55:35 +01:00
bors[bot]
d92a15c163
Merge #2943
2943: Re-sync queries for memory usage measurnment r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-01-29 15:11:38 +00:00
Aleksey Kladov
f1720d7983 Re-sync queries for memory usage measurnment 2020-01-29 16:10:46 +01:00
Kirill Bulatov
6d219c9a10 Properly select a target for auto importing 2020-01-29 16:23:18 +02:00
Aleksey Kladov
d2fd252f9d Simplify fixture parsing 2020-01-29 14:06:23 +01:00
Aleksey Kladov
7cc0a86528 Fix long loop timeout 2020-01-29 14:04:10 +01:00
Emil Lauridsen
4ec5f6e258 Change error output to make a bit more sense 2020-01-29 13:51:20 +01:00
Emil Lauridsen
8ffbe86dfd Parse cargo output a line at a time.
We previously used serde's stream deserializer to read json blobs from
the cargo output. It has an issue though: If the deserializer encounters
invalid input, it gets stuck reporting the same error again and again
because it is unable to foward over the input until it reaches a new
valid object.

Reading a line at a time and manually deserializing fixes this issue,
because cargo makes sure to only outpu one json blob per line, so should
we encounter invalid input, we can just skip a line and continue.

The main reason this would happen is stray printf-debugging in
procedural macros, so we still report that an error occured, but we
handle it gracefully now.

Fixes #2935
2020-01-29 13:40:27 +01:00
bors[bot]
6fd29651b4
Merge #2931
2931: Added documentation to test_utils r=matklad a=Veetaha

Added some doc comments to test_utils functions while studying this crate. They should be all stable enough to document them.
Also some minor code relocation in `parse_fixture()` closer to its usage according to the advice of @matklad.

Co-authored-by: Veetaha <gerzoh1@gmail.com>
2020-01-29 11:06:18 +00:00
Aleksey Kladov
9753eb98cc Complain loudly if the main loop is blocked 2020-01-29 11:21:49 +01:00
Aleksey Kladov
aaa4861a0b More uniform naming 2020-01-29 11:15:08 +01:00
Aleksey Kladov
2d2585e03f Don't compute diagnostics on the main thread
closes #2909
2020-01-29 11:03:59 +01:00
Kevin DeLorey
698ff91c13 Already implemented fn will no longer be suggested for trait implementations. 2020-01-28 20:33:12 -06:00
Veetaha
5e1ae1d7aa test_utils: move flush!() to its usage as per conversation with @matklad 2020-01-29 03:53:15 +02:00
Veetaha
d3472e8ae4 test_utils: updated documentation and some typos 2020-01-29 03:52:13 +02:00
bors[bot]
3bdf2e0972
Merge #2917
2917: Prefer imports starting with std r=matklad a=SomeoneToIgnore

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

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-01-28 16:22:18 +00:00
Kirill Bulatov
713870ee0c Add the tests 2020-01-28 18:03:24 +02:00
Aleksey Kladov
4b9e5d5dd9 Publicize debug printing of CrateDefMap 2020-01-28 16:29:31 +01:00
Kirill Bulatov
762d293581 Apply the proposed refactoring 2020-01-28 17:19:41 +02:00
Aleksey Kladov
6ca19b2188 Standard formatting for array types 2020-01-28 15:32:20 +01:00
bors[bot]
76e17fe7d8
Merge #2924
2924: Modify ordering of drops in check watcher to only ever have one cargo r=matklad a=kiljacken

Due to the way drops are ordered when assigning to a mutable variable we
were launching a new cargo sub-process before letting the old one quite.

By explicitly replacing the original watcher with a dummy first, we
ensure it is dropped and the process is completed, before we start the
new process.

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
2020-01-28 13:54:29 +00:00
Emil Lauridsen
35025f0975 Modify ordering of drops in check watcher to only ever have one cargo
Due to the way drops are ordered when assigning to a mutable variable we
were launching a new cargo sub-process before letting the old one quite.

By explicitly replacing the original watcher with a dummy first, we
ensure it is dropped and the process is completed, before we start the
new process.
2020-01-28 14:48:50 +01:00
Emil Lauridsen
fdc04ef920 Don't do check progress update for fresh crates 2020-01-28 14:33:52 +01:00
Edwin Cheng
c32be4bfe8 Ignore illform node id from metadata 2020-01-28 17:08:17 +08:00
Laurențiu Nicola
c34571c19e Buffer reads from cargo check's stdout 2020-01-28 01:27:43 +02:00
Kirill Bulatov
7a2e449424 Prefer imports starting with std 2020-01-28 01:02:06 +02:00
bors[bot]
5dd8f8e26f
Merge #2810
2810: Improves reference search by StructLiteral r=mikhail-m1 a=mikhail-m1

Hey, I've made some changes to improve search for struct literals, now it works for `struct Foo<|> {`, `struct Foo <|>{`, `struct Foo<|>(`. Unfortunately tuple creation is represented as a call expression, so for tuples it works only is search is started in a tuple declaration.  It leads to incorrect classification of function calls during search phase, but from user perspective it's not visible and works as expected. May be it worth to add a comment or rename it to remove this misleading classification. Issue #2549.

Co-authored-by: Mikhail Modin <mikhailm1@gmail.com>
2020-01-27 21:58:35 +00:00
Mikhail Modin
fbc3ffcee6 Improves reference search by StructLiteral 2020-01-27 21:34:19 +00:00
Florian Diebold
339a11c33c Tweak Chalk settings 2020-01-27 21:52:35 +01:00
Florian Diebold
d3a3e5abdf Ignore failing impl Trait tests 2020-01-27 21:38:10 +01:00
Florian Diebold
96ddf2962c Upgrade Chalk 2020-01-27 21:25:33 +01:00
bors[bot]
1d729033eb
Merge #2883
2883: Implement Syntax Highlight inside macro call r=matklad a=edwin0cheng



Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-27 13:36:26 +00:00
bors[bot]
4f9506416c
Merge #2887
2887: Initial auto import action implementation r=matklad a=SomeoneToIgnore

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

Adds an auto import action implementation.

This implementation is not ideal and has a few limitations:

* The import search functionality should be moved into a separate crate accessible from ra_assists.
This requires a lot of changes and a preliminary design. 
Currently the functionality is provided as a trait impl, more on that here: https://github.com/rust-analyzer/rust-analyzer/issues/2180#issuecomment-575690942

* Due to the design desicion from the previous item, no doctests are run for the new aciton (look for a new FIXME in the PR)

* For the same reason, I have to create the mock trait implementaion to test the assist

* Ideally, I think we should have this feature as a diagnostics (that detects an absense of an import) that has a corresponding quickfix action that gets evaluated on demand.
Curretly we perform the import search every time we resolve the import which looks suboptimal.
This requires `classify_name_ref` to be moved from ra_ide, so not done currently.

A few improvements to the imports mechanism to be considered later:

* Constants like `ra_syntax::SyntaxKind::NAME` are not imported, because they are not present in the database

* Method usages are not imported, they are found in the database, but `find_use_path` does not return any import paths for them

* Some import paths returned by the `find_use_path` method end up in `core::` or `alloc::` instead of `std:`, for example: `core::fmt::Debug` instead of `std::fmt::Debug`.
This is not an error techically, but still looks weird.

* No detection of cases where a trait should be imported in order to be able to call a method

* Improve `auto_import_text_edit` functionality: refactor it and move away from the place it is now, add better logic for merging the new import with already existing imports

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-01-27 13:04:53 +00:00
Kirill Bulatov
9be1ab7ff9 Code review fixes 2020-01-27 14:42:45 +02:00
Kirill Bulatov
9a6b5c6183 Enforce alphabetical import sorting 2020-01-27 01:53:59 +02:00
Kirill Bulatov
1a78991df6 Adjust the tests 2020-01-27 00:57:24 +02:00
Kirill Bulatov
d0a782ef1c Have a better trait interface 2020-01-27 00:17:10 +02:00
Kirill Bulatov
bef5cf0b99 Raise the import search query cap 2020-01-27 00:16:29 +02:00
Kirill Bulatov
f57239729c Remove unnecessary lifetime parameter 2020-01-27 00:16:29 +02:00
Kirill Bulatov
316795e074 Initial auto import action implementation 2020-01-27 00:16:29 +02:00
Jeremy Kolb
6967472703 Move snaps to new naming scheme 2020-01-26 13:29:01 -05:00
Jeremy Kolb
b89991daed Update crates 2020-01-26 10:46:45 -05:00
bors[bot]
d1330a4a65
Merge #2906
2906: Fix thread priority problems on windows r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-01-26 13:17:19 +00:00
Aleksey Kladov
493a903f22 Bump main thread priority on windows 2020-01-26 14:15:57 +01:00
Tomáš
ec6a7f0710 fixed inline_local_variable bug 2020-01-25 21:07:21 +01:00
Aleksey Kladov
40109941db Use default threadpool size 2020-01-25 13:27:36 +01:00
bors[bot]
adda6dbdf8
Merge #2899
2899: Provide more runners for potential tests r=matklad a=SomeoneToIgnore

Based on the https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Runners.20for.20custom.20test.20annotations discussion.

Adds a test runner for every method that has an annotation that contains `test` word in it, allowing to run tests annotated with custom testing annotations such as `#[tokio::test]`, `#[test_case(...)]` and others at costs of potentially emitting some false-positives.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-01-25 11:10:28 +00:00
Aleksey Kladov
6577a7622d Add print_time helper 2020-01-25 11:59:11 +01:00
Aleksey Kladov
f44aee27d3 Disable env_logger humantime feature
We rarely care about timings of events, and, when we care, we need
millisecond precision
2020-01-25 11:53:40 +01:00
Aleksey Kladov
b90ea640e6 Cancel requests during shutdown 2020-01-24 16:35:37 +01:00
Kirill Bulatov
3137215e8d Provide more runners for potential tests 2020-01-23 13:40:21 +02:00
Emil Lauridsen
05aa5b854b Remove RWLock from check watcher.
@matklad mentioned this might be a good idea.

So the general idea is that we don't really need the lock, as we can
just clone the check watcher state when creating a snapshot. We can then
use `Arc::get_mut` to get mutable access to the state from `WorldState`
when needed.

Running with this it seems to improve responsiveness a bit while cargo
is running, but I have no hard numbers to prove it. In any case, a
serialization point less is always better when we're trying to be
responsive.
2020-01-23 09:26:08 +01:00
Kevin DeLorey
bc1fc6239d Renamed the trait completion mod. 2020-01-22 22:38:03 -06:00
Kevin DeLorey
e3cda83f90 Added basic support for completing fn for trait impl. 2020-01-22 22:34:00 -06:00
kjeremy
ee7dd4b9ae Update crates 2020-01-22 15:40:35 -05:00
Michal Terepeta
39cbb6b620 Rewrite ra_prof's profile printing
This changes the way we print things to first construct a mapping from
events to the children and uses that mapping to actually print things.
It should not change the actual output that we produce.

The new approach two benefits:

 * It avoids a potential quadratic behavior of the previous approach.
   For instance, for a vector of N elements:
   ```
   [Message{level: (N - 1)}, ..., Message{level: 1}, Message{level: 0}]
   ```
   we would first do a linear scan to find entry with level 0, then
   another scan to find one with level 1, etc.

 * It makes it much easier to improve the output in the future, because
   we now pre-compute the children for each entry and can easily take
   that into account when printing.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-22 20:13:56 +01:00
Kirill Bulatov
4029e44102 Omit default parameters for reference types 2020-01-22 16:55:09 +02:00
Veetaha
fa31841f1f Fixed a typo 2020-01-22 13:02:21 +02:00
Veetaha
1ac105056a Fixed a typo 2020-01-22 13:02:21 +02:00
Veetaha
b6be1b6f61 Preserved a comment on the bug previously present in ast::Literal::kind() 2020-01-22 13:02:21 +02:00
Veetaha
3ec781d4f2 ra_syntax: remove code duplication and token reevaluation from ast::Literal::kind() 2020-01-22 13:02:21 +02:00
Edwin Cheng
f320af4d63 Implement Syntax Highlight inside Macro 2020-01-21 00:06:47 +08:00
bors[bot]
de2409702b
Merge #2877
2877: "Insert explicit type " assist fix #2869, fix typo r=matklad a=TomasKralCZ

So this was quite straightforward. I basically looked at how the other assists work and tried doing something simillar. I also fixed a typo in the other assist.

Co-authored-by: TomasKralCZ <tomas@kral.hk>
2020-01-20 10:16:06 +00:00
TomasKralCZ
72792f6bc5 changed 'descendants()' to 'children()' 2020-01-20 10:19:33 +01:00
TomasKralCZ
f67ee69777 added eq_token() method to LetStmt 2020-01-19 18:55:56 +01:00
Michal Terepeta
e8acf49088 Fix a corner case when printing unaccounted time
Previously `ra_prof` wouldn't actually print the unaccounted time in
some cases.

We would print, for instance, this:
```
    5ms - foo
        2ms - bar
```
instead of:
```
    5ms - foo
        2ms - bar
        3ms - ???
```

The fix is to properly handle the case when an entry has 0 children
instead of using the `last` variable.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-19 18:34:40 +01:00
TomasKralCZ
514df15d9e Merge branch 'master' of https://github.com/rust-analyzer/rust-analyzer 2020-01-19 17:51:03 +01:00
TomasKralCZ
c3b9a19eb7 fix 'add_explicit_type' assist range 2020-01-19 17:40:53 +01:00
TomasKralCZ
8dc94a452c fix typo in 'inline_local_variable' 2020-01-19 17:39:53 +01:00
Florian Diebold
18ec4e3403 Improve parameter hints a bit & add emacs support
- just include the name, not e.g. `mut`
 - don't return empty hints (or `_`)
2020-01-18 13:40:32 +01:00
Florian Diebold
33d637f2dd Fix inference for shift operators
Fixes #2602.
2020-01-17 16:59:51 +01:00
Aleksey Kladov
3a859e587f Nest attrs into exprs in function args 2020-01-17 11:47:07 +01:00
Aleksey Kladov
b7c45fba57 Extract expr_with_attrs 2020-01-17 11:44:40 +01:00
Aleksey Kladov
90b8a31b83
Merge pull request #2813 from jyn514/arg_attributes
Allow attributes before function arguments
2020-01-17 11:15:07 +01:00
Joshua Nelson
f077d5c303
move inline function closer to relevant code
also updates generated inline tests
2020-01-16 22:20:17 -05:00
bors[bot]
ea2b27d8b9
Merge #2865
2865: fix(mixed): fixed a couple of typos and added a todo r=kjeremy a=Veetaha

Fixed a couple of typos and added a todo while studying the codebase.

Co-authored-by: Veetaha <gerzoh1@gmail.com>
2020-01-17 02:20:16 +00:00
Aleksey Kladov
5398b9eeba Minimize test 2020-01-16 18:39:29 +01:00
Aleksey Kladov
ab0a11b1de Simplify array parsing 2020-01-16 18:35:03 +01:00
bors[bot]
d3c4fbbbc4
Merge #2862
2862: Move from `from_source` to `SourceBinder` r=matklad a=matklad

bors r+

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-01-16 16:58:13 +00:00
Aleksey Kladov
846f11c217 Fix comment 2020-01-16 17:57:50 +01:00
Aleksey Kladov
3ceb9a941a Remove dead code 2020-01-16 17:56:14 +01:00
Aleksey Kladov
6bc236253d Correctly discover module containers 2020-01-16 17:52:58 +01:00
Aleksey Kladov
595b06a1b8 Create modules via SourceBinder 2020-01-16 17:33:07 +01:00
Aleksey Kladov
9a6c26e348 Move module to SourceBinder 2020-01-16 16:53:11 +01:00
bors[bot]
e614356de1
Merge #2827
2827: Fix array element attribute position r=matklad a=edwin0cheng

This PR fixed a bug which an ATTR node insert in the wrong place in array element. ~~And introduce `precede_next` for allow outer attributes to insert into a parsed `expr`.~~  

related #2783

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-16 15:49:23 +00:00
Edwin Cheng
a766883a75 fix formating 2020-01-16 23:48:03 +08:00
Aleksey Kladov
16cfc8d50c Cache source for generics 2020-01-16 16:44:25 +01:00
Aleksey Kladov
7aa627fe58 Move more stuff to SourceBinder 2020-01-16 16:37:51 +01:00
Edwin Cheng
ed8d5c86e3 Fix array element attribute position 2020-01-16 23:37:43 +08:00
Aleksey Kladov
a3d6ddbe69 More natural trait setup 2020-01-16 16:27:21 +01:00
Aleksey Kladov
8691ae8ac0 Removed FromSource 2020-01-16 16:16:31 +01:00
Aleksey Kladov
81a45ca1b3 Make FromSource private 2020-01-16 16:08:46 +01:00
Aleksey Kladov
272f6dfd9e Micro-optimize type hints to avoid allocations 2020-01-16 14:31:34 +01:00
Aleksey Kladov
bd96d0b258 Minimize visibility 2020-01-16 11:58:31 +01:00
Joshua Nelson
c78e34968f
shrink inline tes 2020-01-15 19:12:56 -05:00
Veetaha
a24dcd7bab fix(ra_parser.typo): amend 'format language' to 'formal language' 2020-01-15 23:29:55 +02:00
bors[bot]
c78d269b66
Merge #2837
2837: Accidentally quadratic r=matklad a=matklad

Our syntax highlighting is accdentally quadratic. Current state of the PR fixes it in a pretty crude way, looks like for the proper fix we need to redo how source-analyzer works. 

**NB:** don't be scared by diff stats, that's mostly a test-data file

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-01-15 19:38:10 +00:00
Kirill Bulatov
79b77403b6 Reduce visibility 2020-01-15 20:21:05 +02:00
Kirill Bulatov
d51cf7794d itertools::Either -> either::Either 2020-01-15 20:20:20 +02:00
Kirill Bulatov
78a21253b4 Apply the api design suggestions 2020-01-15 20:17:17 +02:00
Kirill Bulatov
73dc8b6f06 Another attempt to add multiple edits 2020-01-15 20:16:27 +02:00
Aleksey Kladov
ef1326ee19 More orthogonal path editing 2020-01-15 18:48:28 +01:00
Aleksey Kladov
7d2d3ac3db More fluent API 2020-01-15 18:30:23 +01:00
Aleksey Kladov
c84010e246 Slightly more fluent API 2020-01-15 18:14:49 +01:00
Aleksey Kladov
8296d3208d Simplify 2020-01-15 18:01:05 +01:00
Aleksey Kladov
448575aa4a Simplify 2020-01-15 18:01:05 +01:00
Aleksey Kladov
263401bf75 Rename 2020-01-15 17:44:12 +01:00
Aleksey Kladov
aaef88db0e Typos 2020-01-15 16:53:01 +01:00
Aleksey Kladov
5b255b4e6b ⬆️ once_cell 2020-01-15 16:52:28 +01:00
Aleksey Kladov
787d1aba63 Add comment 2020-01-15 16:52:28 +01:00
Aleksey Kladov
4194e5c88c Optimize inlay hints 2020-01-15 16:52:28 +01:00
Aleksey Kladov
11d6b9dadd Only new-style classification 2020-01-15 16:52:28 +01:00
Aleksey Kladov
35bfeaf4af Add a test 2020-01-15 16:52:28 +01:00
Aleksey Kladov
c640c2ea11 Make syntax highlighting linear 2020-01-15 16:52:28 +01:00
Aleksey Kladov
7e70fc22a7 Flip generics 2020-01-15 16:52:28 +01:00
Aleksey Kladov
a71bb70f0a Store DB in SourceBinder 2020-01-15 16:52:28 +01:00
Aleksey Kladov
ccfe53376a Introduce SourceBinder 2020-01-15 16:52:28 +01:00
Emil Lauridsen
7a8c6351bf Extract check task handling into function 2020-01-15 16:33:58 +01:00
Emil Lauridsen
ade657cb66 Tweak naming slightly 2020-01-15 15:53:08 +01:00
Emil Lauridsen
478ba65f8d Manage check state updates in main_loop to reduce lock contention 2020-01-15 15:50:49 +01:00
Aleksey Kladov
21ea62d292 Don't parse child modules when doing diagnostics 2020-01-15 14:42:57 +01:00
Jeremy Kolb
e1688be1bb lsp-types 0.69.0
Stabilizes most proposed features
2020-01-15 08:05:42 -05:00
bors[bot]
876f92d547
Merge #2843
2843: Add inlay parameter name hints for call expr r=matklad a=imtsuki

This patch adds Intellij-like parameter name hints for literal values in function calls.

<img width="624" alt="Screenshot" src="https://user-images.githubusercontent.com/8423594/72366533-68d7f800-3735-11ea-9279-cf193ca8ca2f.png">

Signed-off-by: imtsuki <me@qjx.app>

Co-authored-by: imtsuki <me@qjx.app>
2020-01-15 10:24:51 +00:00
imtsuki
d854ad8f27 FnSignature: use unwrap_or_default for parameter_name_list
Signed-off-by: imtsuki <me@qjx.app>
2020-01-15 09:30:19 +08:00
kjeremy
e89ade3809 Cleanup assert 2020-01-14 13:55:32 -05:00
bors[bot]
b2ed130ffd
Merge #2841
2841: More UI friendly labels r=kjeremy a=kjeremy



Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2020-01-14 18:16:11 +00:00
Jeremy Kolb
864434137a unwrap 2020-01-14 13:15:41 -05:00
bors[bot]
767ff2c13c
Merge #2844
2844: Use dummy value for line! and column! macro r=matklad a=edwin0cheng

Use dummy value `0` for line! and column! macro. 

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-14 17:59:24 +00:00
bors[bot]
6a5100f4d5
Merge #2834
2834: refactor(ra_syntax.validation): removed code duplication from validate_literal() r=kiljacken a=Veetaha

Hi! This is my first ever contribution to this project.
I've taken some dirty job from issue #223

This is a simple atomic PR to remove code duplication according to FIXME comment in the function that is the main focus of the further development.

I just didn't want to mix refactoring with the implementation of new features...

I am not sure whether you prefer such atomic PRs here or you'd rather have a single PR that contains all atomic commits inside of it?

So if you want me to add all that validation in one PR I'll mark this one as WIP and update it when the work is finished, otherwise, I'll go with the option of creating separate PRs per each feature of validation of strings, numbers, and comments respectively.

### Comments about refactoring
Yeah, reducing the duplication is quite hard here, extracting into stateless functions could be another option but the number of their arguments would be very big and repeated across char and string implementations so that just writing their types and names would become cumbersome.
I tried the option of having everything captured implicitly in the closure but failed since rust doesn't have templated (or generic) closures as C++ does, this is needed because `unescape_byte*()` and `unescape_char|str()` have different return types...
Maybe I am missing something here? I may be wrong because I am not enough experienced in Rust...
Well, I am awaiting any kind of feedback!

Co-authored-by: Veetaha <gerzoh1@gmail.com>
2020-01-14 17:49:18 +00:00
Edwin Cheng
6ebb1edf21 Use dummy value for line! and column! macro 2020-01-15 01:47:01 +08:00
Jeremy Kolb
9042bb7892 Assert that first letter is capitalized 2020-01-14 12:32:46 -05:00
Jeremy Kolb
e04661e495 Fix casing 2020-01-14 12:32:26 -05:00
imtsuki
d78a3cb638 Update test snapshot
Signed-off-by: imtsuki <me@qjx.app>
2020-01-15 01:32:03 +08:00
imtsuki
c390e92fdd Add inlay parameter name hints for function calls
Signed-off-by: imtsuki <me@qjx.app>
2020-01-15 01:18:52 +08:00
Jeremy Kolb
4cb82c334d More UI friendly labels 2020-01-14 11:49:14 -05:00
bors[bot]
e406f2bed6
Merge #2839
2839: Tweak add_custom_impl r=matklad a=kjeremy

Display a nicer label and categorize

Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2020-01-14 14:27:58 +00:00
Jeremy Kolb
325912f01e Tweak add_custom_impl 2020-01-14 09:08:45 -05:00
Aleksey Kladov
a38540771f Move Type API to type 2020-01-14 14:42:52 +01:00
Aleksey Kladov
21c5fd8b1b Push resolver further up 2020-01-14 14:24:03 +01:00
Aleksey Kladov
7ec62ea5e6 Push resolver up 2020-01-14 14:11:07 +01:00
Aleksey Kladov
52e7f67128 Move impls_future to Type, where it belongs 2020-01-14 11:29:43 +01:00
Aleksey Kladov
0358f5fdeb Use lang-items to resolve future trait 2020-01-14 11:29:43 +01:00
Aleksey Kladov
aedff7cdcf Move utility functions down 2020-01-14 11:29:43 +01:00
Aleksey Kladov
eb8989f9e4 Rename file 2020-01-14 11:29:43 +01:00
Veetaha
60251da204 refactor(ra_syntax.validation): removed code duplication from validate_literal() function 2020-01-14 04:09:03 +02:00
kjeremy
170c7bd7e3 Log client info if present 2020-01-13 16:20:47 -05:00
Aleksey Kladov
5654387e77 Don't panic if chalk panics 2020-01-13 19:00:42 +01:00
bors[bot]
7ea7de338f
Merge #2825
2825: Some clippy lints r=matklad a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
2020-01-13 17:06:19 +00:00
kjeremy
c5c5f4260b Readability 2020-01-13 11:38:53 -05:00
kjeremy
a82c679c97 Some clippy lints 2020-01-13 11:27:06 -05:00
Emil Lauridsen
c774850fd8 Schedule check update regardless of notification setting 2020-01-13 17:22:21 +01:00
Emil Lauridsen
daca5a3711 Defer cargo check until after workspace load 2020-01-13 17:12:14 +01:00
kjeremy
0610444407 Dropping a reference does nothing.
Allows clippy to continue compilation
2020-01-13 10:51:39 -05:00
bors[bot]
96e759413d
Merge #2815
2815: Report macro calls as functions r=matklad a=kjeremy



Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2020-01-13 10:34:43 +00:00
memoryruins
5575588387 Add macro_rules item snippet 2020-01-12 18:47:15 -05:00
Jeremy Kolb
9e71ff9636 Report macro calls as functions 2020-01-12 17:22:09 -05:00
Roland Ruckerbauer
20b8d283ae Remove hir usage from macro_rules! detection in structure_node() 2020-01-12 17:34:57 +01:00
Roland Ruckerbauer
15c5426b54 Use hir .path() and .name() to differentiate
macro call and macro definition
2020-01-12 17:34:57 +01:00
Roland Ruckerbauer
c6655c67d2 Added test for file_structure unidentified macro definition 2020-01-12 17:34:57 +01:00
Roland Ruckerbauer
db151763d4 Fix file_structure() to recognize macro_rules!
where first token != "macro_rules"
2020-01-12 17:34:57 +01:00
Joshua Nelson
c3ac2c93fb
Allow attributes before function arguments
This adds support for function calls of the form:

```rust
  (
    #[attr(...)] 1.2,
    #[attr_one(...)]
    #[attr_two(...)]
    1.5,
    ... etc ...
  )
```

Closes https://github.com/rust-analyzer/rust-analyzer/issues/2801
2020-01-12 10:25:41 -05:00
Edwin Cheng
0593da9a36 Fix format 2020-01-12 20:25:58 +08:00
Edwin Cheng
384e1ced88 Use prev_token and next_token 2020-01-12 20:25:58 +08:00
Edwin Cheng
b7ab079211 Use indices first and last instead of min-max 2020-01-12 20:25:58 +08:00
Edwin Cheng
caed836e41 Use first and last token only 2020-01-12 20:25:58 +08:00
Edwin Cheng
b30e6a7b56 Handle extend selection in recursive macro 2020-01-12 20:25:58 +08:00
Edwin Cheng
07f4171b18 Minor fix 2020-01-12 20:25:58 +08:00
Edwin Cheng
4c4416543a Fix formatting 2020-01-12 20:25:58 +08:00
Edwin Cheng
83b2d78bbb Supporting extend selection inside macro calls 2020-01-12 20:25:58 +08:00
bors[bot]
8bb2a50ce6
Merge #2807
2807: Use attr location for builtin derive in goto-implementation r=matklad a=edwin0cheng

This PR is use attribute location for builtin derive in `ImplBlock`'s NavigationTarget such that the goto-implementation will goto to a correct position. 

Related to #2531

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-12 11:33:31 +00:00
Edwin Cheng
db5f73d261 Add test 2020-01-12 19:24:34 +08:00
Florian Diebold
2c11a9b42d Qualify paths in 'fill match arms' assist 2020-01-12 11:34:52 +01:00
Edwin Cheng
d7be1a4372 Use attr location for builtin macro goto-imp 2020-01-12 18:08:53 +08:00
bors[bot]
86d2af9f7b
Merge #2803
2803: Fix various names, e.g. Iterator not resolving in core prelude r=matklad a=flodiebold

Basically, `Iterator` is re-exported via several steps, which happened to not be
resolved yet when we got to the prelude import, but since the name resolved to
the reexport from `core::iter` (just to no actual items), we gave up trying to
resolve it further.

Maybe part of the problem is that we can have
`PartialResolvedImport::Unresolved` or `PartialResolvedImport::Indeterminate`
with `None` in all namespaces, and handle them differently.

Fixes #2683.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-01-11 23:00:37 +00:00
Florian Diebold
9dc1826cfa Fix various names, e.g. Iterator not resolving in core prelude
Basically, `Iterator` is re-exported via several steps, which happened to not be
resolved yet when we got to the prelude import, but since the name resolved to
the reexport from `core::iter` (just to no actual items), we gave up trying to
resolve it further.

Maybe part of the problem is that we can have
`PartialResolvedImport::Unresolved` or `PartialResolvedImport::Indeterminate`
with `None` in all namespaces, and handle them differently.

Fixes #2683.
2020-01-11 23:37:58 +01:00
Florian Diebold
ccb75f7c97 Use FxHashMap 2020-01-11 23:33:04 +01:00
Florian Diebold
4496e2a06a Apply review suggestions 2020-01-11 23:33:04 +01:00
Florian Diebold
15fc643e05 Fix ordering problem between qualifying paths and substituting params 2020-01-11 23:33:04 +01:00
Florian Diebold
12905e5b58 Some more refactoring 2020-01-11 23:33:04 +01:00
Florian Diebold
def124e932 Fix file ID when qualifying paths; add another failing test 2020-01-11 23:33:04 +01:00
Florian Diebold
4545f289a9 Handle type args 2020-01-11 23:33:04 +01:00
Florian Diebold
5cb1f71322 More failing tests 2020-01-11 23:33:04 +01:00
Florian Diebold
4d75430e91 Qualify some paths in 'add missing impl members' 2020-01-11 23:33:04 +01:00
Florian Diebold
460fa71c55 Use self 2020-01-11 23:33:04 +01:00
Florian Diebold
2906d188c2 Cleanup 2020-01-11 23:33:04 +01:00
Florian Diebold
38cd9f0c94 Handle cycles 2020-01-11 23:33:04 +01:00
Florian Diebold
b1325488ec Use query for importable locations 2020-01-11 23:33:04 +01:00
Florian Diebold
947eec7b87 Use super, don't use private imports 2020-01-11 23:33:04 +01:00
Florian Diebold
df9d3bd25e Use shortest path 2020-01-11 23:33:04 +01:00
Florian Diebold
1ea2b475a9 handle most cases 2020-01-11 23:33:04 +01:00
Florian Diebold
b62292e8f9 basics working 2020-01-11 23:33:04 +01:00
Florian Diebold
2c50f996b6 more WIP 2020-01-11 23:33:04 +01:00
Florian Diebold
22b412f1a9 find_path WIP 2020-01-11 23:33:04 +01:00
Florian Diebold
877fda04c5 Add test 2020-01-11 23:33:04 +01:00
bors[bot]
3924c7de50
Merge #2791
2791: Slightly more robust cargo watcher root search r=kiljacken a=kiljacken

Fixes #2780 (hopefully).

Use the already painstakingly found `workspaces` instead of naively using `folder_roots` from editor.

Co-authored-by: Emil Lauridsen <mine809@gmail.com>
2020-01-11 20:41:41 +00:00
Emil Lauridsen
8e778f9842 Clean up straggling mut 2020-01-11 21:37:01 +01:00
Emil Lauridsen
480c44918c Disable cargo checking in workspaces with no cargo projects 2020-01-11 21:32:40 +01:00
bors[bot]
7c1af25b22
Merge #2795
2795: Use dummy value for macro file in bulitin macros r=matklad a=edwin0cheng

This PR skip the actual line and column computation for `MacroFile` and return a dummy value instead.

Related to #2794



Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-01-11 20:13:48 +00:00
Edwin Cheng
9f65ae20c2 Use dummy value for macro file in bulitin macros 2020-01-11 16:37:42 +08:00
bors[bot]
991b62a4f9
Merge #2790
2790: Add test for macro expansion in various expressions r=edwin0cheng a=flodiebold

cc @edwin0cheng 

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-01-11 03:51:04 +00:00
Emil Lauridsen
d6da18e99d Address nit 2020-01-10 22:41:52 +01:00
Emil Lauridsen
1d1eea217d Slightly more robust cargo watcher root search 2020-01-10 22:10:26 +01:00
Florian Diebold
dd6ec81d65 Add test for macro expansion in various expressions 2020-01-10 22:08:02 +01:00
kjeremy
a633a6275a Fix Write being sent down the wire.
Not sure what the deal is here but it wasn't sending Write.
2020-01-10 15:30:17 -05:00
kjeremy
32540abcb3 Add AccessMode to decls 2020-01-10 15:14:19 -05:00
kjeremy
49fd6a5228 Split Declaration out into it's own type 2020-01-10 15:14:19 -05:00
kjeremy
cc96ddfe69 Simplify and update tests to account for access 2020-01-10 15:14:19 -05:00
Jeremy Kolb
6c89d86ade Tweaks 2020-01-10 15:14:19 -05:00
Jeremy Kolb
d993f329a0 Basic DocumentHighlightKind support for assignments 2020-01-10 15:14:19 -05:00