Commit Graph

1200 Commits

Author SHA1 Message Date
Florian Diebold
3b06faad26 Make closures impl closure traits 2019-09-24 23:05:12 +02:00
Florian Diebold
619a8185a6 Give closures types 2019-09-24 23:05:12 +02:00
Florian Diebold
7bb6fdcf52 Upgrade Chalk again 2019-09-24 22:29:52 +02:00
bors[bot]
c12a713739
Merge #1898
1898: Drive by lints r=kjeremy a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2019-09-23 18:47:14 +00:00
Florian Diebold
6df9c4035a Upgrade Chalk 2019-09-23 20:36:15 +02:00
kjeremy
1808175f98 Drive by lints 2019-09-23 14:31:30 -04:00
Florian Diebold
4f1afe77b9 Split off path expression inference code into submodule 2019-09-23 18:53:52 +02:00
Florian Diebold
bc905d202c Handle projection types from Chalk 2019-09-22 20:08:46 +02:00
Florian Diebold
18bf278c25 Handle associated type shorthand (T::Item)
This is only allowed for generic parameters (including `Self` in traits), and
special care needs to be taken to not run into cycles while resolving it,
because we use the where clauses of the generic parameter to find candidates for
the trait containing the associated type, but the where clauses may themselves
contain instances of short-hand associated types.

In some cases this is even fine, e.g. we might have `T: Trait<U::Item>, U:
Iterator`. If there is a cycle, we'll currently panic, which isn't great, but
better than overflowing the stack...
2019-09-22 20:02:32 +02:00
gfreezy
6a4cf48bff fix module attr path 2019-09-20 23:20:43 +08:00
Ekaterina Babshukova
2867c40925 introduce FromSource trait 2019-09-19 19:38:27 +03:00
Aleksey Kladov
7d15c81a33 account for impls generated by macros 2019-09-18 04:34:48 +03:00
bors[bot]
54379ec6f8
Merge #1862
1862: Assoc item resolution refactoring (again) r=flodiebold a=flodiebold

This is #1849, with the associated type selection code removed for now. Handling cycles there will need some more thought.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-09-17 21:16:28 +00:00
Florian Diebold
c2f9558e1a Remove assoc type selection code for now to fix crashes 2019-09-17 23:11:20 +02:00
Florian Diebold
69c8cfc4c1 Add test for T::Item cycles 2019-09-17 23:06:05 +02:00
Aleksey Kladov
2890a1450a remove confusing code
I must confess I don't really understand what this code is trying to
do, but it definitely misreports changes during fixedpoint iteration,
and no tests fail if I remove it, so...
2019-09-17 21:04:15 +03:00
Florian Diebold
a040fde3ae Remove TraitItem and ImplItem in favor of AssocItem 2019-09-17 19:47:45 +02:00
Florian Diebold
53a932509d Small review improvements 2019-09-17 19:47:45 +02:00
Florian Diebold
35d1c03896 Add test for <T>::Item 2019-09-17 19:47:45 +02:00
Florian Diebold
fe1dfd2b20 Refactor some more
Type-relative paths (`<T>::foo`) also need to work in type context, for example
`<T>::Item` is legal. So rather than returning the type ref from the resolver
function, just check it before.
2019-09-17 19:47:45 +02:00
Florian Diebold
406280e52f Refactor associated item resolution more
When resolving an associated item in value namespace, use the `Ty` lowering code
for the segments before the last instead of replicating it.
2019-09-17 19:47:45 +02:00
Florian Diebold
828d60574f Refactor a bit to prepare for resolving trait assoc items 2019-09-17 19:47:45 +02:00
Florian Diebold
913ab1ec0a Resolve assoc types on type parameters
E.g. `fn foo<T: Iterator>() -> T::Item`. It seems that rustc does this only for
type parameters and only based on their bounds, so we also only consider traits
from bounds.
2019-09-17 19:47:45 +02:00
Florian Diebold
16ee779483 Adapt some tests 2019-09-17 19:47:45 +02:00
bors[bot]
ba583091e6
Merge #1817
1817: Support path starting with a type r=matklad a=uHOOCCOOHu

The path syntax `<Ty>::foo`

Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-16 12:43:21 +00:00
Dylan MacKenzie
cd8155b7f7 Remove is_unnamed 2019-09-15 23:08:32 -07:00
Dylan MacKenzie
beac779c96 Gracefully handle const _ items in ConstData 2019-09-15 16:48:50 -07:00
uHOOCCOOHu
7ed3be3291
Define known paths and group names 2019-09-15 20:14:33 +08:00
uHOOCCOOHu
de9670fe45
Move store TypeRef of type based path in PathKind 2019-09-15 19:48:24 +08:00
uHOOCCOOHu
4926bed426
Support path starting with a type 2019-09-15 19:40:32 +08:00
Dylan MacKenzie
426112c97e Add DotDotPat to AST
This is modeled on `PlaceholderPat`.
2019-09-14 17:08:22 -07:00
Florian Diebold
dc935be1b5 Support bare Trait without dyn 2019-09-14 10:20:41 +02:00
Florian Diebold
a61615c955 Upgrade Chalk
... and remove Ty::UnselectedProjection. It'll be handled differently.
2019-09-14 10:04:56 +02:00
Aleksey Kladov
2fbe79ed9a make PerNs non-generic 2019-09-13 16:38:59 +03:00
Aleksey Kladov
51e2d76b98 Specify desirable namespace when calling resolve
That way, we are able to get rid of a number of unreachable statements
2019-09-13 16:24:10 +03:00
Aleksey Kladov
114a1b878e rename AdtDef -> Adt 2019-09-13 00:34:52 +03:00
Aleksey Kladov
bcf30d389c generalize impl_froms to nested enums 2019-09-13 00:31:04 +03:00
Aleksey Kladov
45117c6388 make various enums "inherit" from AdtDef 2019-09-13 00:10:16 +03:00
Aleksey Kladov
63e1e63a91 start cleaning up the resolution
Nameres related types, like `PerNs<Resolution>`, can represent
unreasonable situations, like a local in a type namespace. We should
clean this up, by requiring that call-site specifies the kind of
resolution it expects.
2019-09-12 21:34:22 +03:00
JasperDeSutter
e6ee324b85 add macros with local_inner_macros argument 2019-09-12 14:41:16 +02:00
bors[bot]
a1261631a8
Merge #1818
1818: Infer box expression r=matklad a=uHOOCCOOHu

Infer `box e` to be `std::boxed::Box<T>` where `e: T`

Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-12 10:53:29 +00:00
Aleksey Kladov
0ffd1fdbe4 fix panic when fetching generics
due to macro expansion, the root node is not always a file
2019-09-12 13:12:26 +03:00
uHOOCCOOHu
8c078a0164
Infer box expression 2019-09-12 02:35:09 +08:00
bors[bot]
6ce6744e18
Merge #1796
1796: Support completion for macros r=matklad a=uHOOCCOOHu

This is based on #1795 , and fixes #1727 

Also prettify hover text of macros.

Some screenshorts below:

Completion in item place.
<img width="416" alt="Screenshot_20190910_134056" src="https://user-images.githubusercontent.com/14816024/64587159-fa72da00-d3d0-11e9-86bb-c98f169ec08d.png">

After pressing `tab`.
<img width="313" alt="Screenshot_20190910_134111" src="https://user-images.githubusercontent.com/14816024/64587160-fa72da00-d3d0-11e9-9464-21e3f6957bd7.png">

Complete macros from `std`.
<img width="588" alt="Screenshot_20190910_134147" src="https://user-images.githubusercontent.com/14816024/64587161-fb0b7080-d3d0-11e9-866e-5161f0d1b546.png">

Hover text.
<img width="521" alt="Screenshot_20190910_134242" src="https://user-images.githubusercontent.com/14816024/64587162-fb0b7080-d3d0-11e9-8f09-ad17e3f6702a.png">



Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-11 14:49:57 +00:00
uHOOCCOOHu
c033d18700
Fix typo 2019-09-11 22:39:02 +08:00
Aleksey Kladov
9eb14e1170 cleanup expansion to item list 2019-09-10 22:22:57 +03:00
bors[bot]
c3d96f64ef
Merge #1795
1795: Make macro scope a real name scope and fix some details r=matklad a=uHOOCCOOHu

This PR make macro's module scope a real name scope in `PerNs`, instead of handling `Either<PerNs, MacroDef>` everywhere.

In `rustc`, the macro scope behave exactly the same as type and value scope.
It is valid that macros, types and values having exact the same name, and a `use` statement will import all of them. This happened to module `alloc::vec` and macro `alloc::vec!`.
So `Either` is not suitable here.

There is a trap that not only does `#[macro_use]` import all `#[macro_export] macro_rules`, but also imports all macros `use`d in the crate root.
In other words, it just _imports all macros in the module scope of crate root_. (Visibility of `use` doesn't matter.)

And it also happened to `libstd` which has `use alloc_crate::vec;` in crate root to re-export `alloc::vec`, which it both a module and a macro.
The current implementation of `#[macro_use] extern crate` doesn't work here, so that is why only macros directly from  `libstd` like `dbg!` work, while `vec!` from `liballoc` doesn't.
This PR fixes this.

Another point is that, after some tests, I figure out that _`macro_rules` does NOT define macro in current module scope at all_.
It defines itself in legacy textual scope. And if `#[macro_export]` is given, it also is defined ONLY in module scope of crate root. (Then being `macro_use`d, as mentioned above)
(Well, the nightly [Declarative Macro 2.0](https://github.com/rust-lang/rust/issues/39412) simply always define in current module scope only, just like normal items do. But it is not yet supported by us)

After this PR, in my test, all non-builtin macros are resolved now. (Hover text for documentation is available) So it fixes #1688 . Since compiler builtin macros are marked as `#[rustc_doc_only_macro]` instead of `#[macro_export]`, we can simply tweak the condition to let it resolved, but it may cause expansion error.

Some critical notes are also given in doc-comments.

<img width="447" alt="Screenshot_20190909_223859" src="https://user-images.githubusercontent.com/14816024/64540366-ac1ef600-d352-11e9-804f-566ba7559206.png">


Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-09 21:09:23 +00:00
Niko Matsakis
85fdf57dbd modify tests
Some method resolution tests now yield `{unknown}` where they did not
before.

Other tests now succeed, likely because this is helping the solver
steer its efforts.
2019-09-09 16:05:31 -04:00
Niko Matsakis
3f9996d18a also make "unknown" case non-enumerable 2019-09-09 15:30:26 -04:00
Niko Matsakis
65582933cf make all traits non-enumerable
As discussed on Zulip, this actually matches the present behavior of
rustc.
2019-09-09 15:24:24 -04:00
uHOOCCOOHu
5f48ef3902
Strip 2019-09-10 01:21:29 +08:00
Aleksey Kladov
e5a8093dd4 document module 2019-09-09 17:31:11 +03:00
uHOOCCOOHu
40f9134159
Make macro scope a real name scope
Fix some details about module scoping
2019-09-09 20:54:02 +08:00
Aleksey Kladov
ef2b84ddf1 introduce hir debugging infra
This is to make debugging rust-analyzer easier.

The idea is that `dbg!(krate.debug(db))` will print the actual, fuzzy
crate name, instead of precise ID. Debug printing infra is a separate
thing, to make sure that the actual hir doesn't have access to global
information.

Do not use `.debug` for `log::` logging: debugging executes queries,
and might introduce unneded dependencies to the crate graph
2019-09-09 12:32:16 +03:00
uHOOCCOOHu
9ed21d65fb
Fix test 2019-09-09 01:34:53 +08:00
uHOOCCOOHu
92c07803cc
Rename textual_macro -> legacy_macro
Add comments
2019-09-09 01:34:53 +08:00
uHOOCCOOHu
f7f7c2aff8
Revert "Replace with immutable map to avoid heavy cloning"
This reverts commit 2c494eb803c88ef5d23607c3b156fce60c2b8076.

See: https://github.com/rust-analyzer/rust-analyzer/pull/1784#issuecomment-529119924
2019-09-09 01:34:53 +08:00
uHOOCCOOHu
c90256429b
Replace with immutable map to avoid heavy cloning 2019-09-09 01:34:53 +08:00
uHOOCCOOHu
26b092bd3b
Resolve textual scoped macros inside item 2019-09-09 01:34:53 +08:00
uHOOCCOOHu
e0f305a6bf
Support textual scoped macros 2019-09-09 01:33:28 +08:00
Aleksey Kladov
6021a2a83a cleanup hir db imports 2019-09-08 09:55:12 +03:00
Aleksey Kladov
bcc9a28734 don't cycle when processing macros from prelude in prelude 2019-09-07 21:47:59 +03:00
Florian Diebold
8fb3cab76c Fix crash for super trait cycles 2019-09-07 16:49:57 +02:00
Florian Diebold
9db34eec20 Fix Chalk environments
The clauses need to be wrapped in `FromEnv` clauses for elaboration (i.e.
things like inferring `T: Clone` from `T: Copy`) to work correctly.
2019-09-07 16:30:37 +02:00
Florian Diebold
a1776b27c7 Use traits from where clauses for method resolution
E.g. if we have `T: some::Trait`, we can call methods from that trait without it
needing to be in scope.
2019-09-07 16:30:31 +02:00
Florian Diebold
d21cdf3c99 Lower Fn(X, Y) -> Z paths 2019-09-07 15:13:05 +02:00
Florian Diebold
60bdb66ef2 Lower bounds on trait definition, and resolve assoc types from super traits 2019-09-07 14:31:43 +02:00
Florian Diebold
4ae4d9c311 Add some more tests 2019-09-07 13:35:41 +02:00
bors[bot]
007737a0e7
Merge #1779
1779: minor r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-09-06 11:33:37 +00:00
Aleksey Kladov
f477f2516a minor 2019-09-06 14:30:24 +03:00
Aleksey Kladov
9ae455ea52 make source_root API more abstract 2019-09-06 14:21:11 +03:00
bors[bot]
419eec3d2f
Merge #1771
1771: Further tweak for macro_use on extern crate r=matklad a=uHOOCCOOHu

Some more tweaks to #1743 to behave more like `rustc`
1. Hoist macros from `#[macro_use] extern crate`, so that they can be used before `extern crate`.
2. Implicit `#[macro_use]` for `prelude` if exists


Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-05 19:50:06 +00:00
Aleksey Kladov
5a38a80d1a rename test file to match impl file 2019-09-05 21:43:32 +03:00
Aleksey Kladov
3e5f7299e1 move mod resolution to a separate file 2019-09-05 20:27:10 +03:00
uHOOCCOOHu
67d33cc21a
Hoist macros from extern crate with macro_use 2019-09-05 18:50:04 +08:00
uHOOCCOOHu
dec43a0c5d
Consider prelude to be macro_use 2019-09-05 18:50:04 +08:00
bors[bot]
6702f5b7b5
Merge #1743
1743: Support `#[macro_use]` on `extern crate` r=matklad a=uHOOCCOOHu

Unfortunately, #1688 is still an issue. My guess is wrong :(

Co-authored-by: uHOOCCOOHu <hooccooh1896@gmail.com>
2019-09-05 09:04:02 +00:00
uHOOCCOOHu
3ff5d7e73c
Fix typo 2019-09-05 12:03:32 +08:00
uHOOCCOOHu
0d23286caf
Let macro_use bypass module scope 2019-09-05 11:46:00 +08:00
Florian Diebold
b8c1e402fa Make type walking infrastructure a bit nicer
If/when we switch to using Chalk's Ty, we'll need to replace this by its `Fold`
trait, but I didn't want to import the whole thing just yet.
2019-09-03 14:00:35 +02:00
Florian Diebold
c4fcfa2b0d Properly format impl Trait<Type = Foo> types
It's a bit complicated because we basically have to 'undo' the desugaring, and
the result is very dependent on the specifics of the desugaring and will
probably produce weird results otherwise.
2019-09-03 14:00:35 +02:00
Florian Diebold
741e350d4b Add support for associated type bindings (where Trait<Type = X>) 2019-09-03 14:00:35 +02:00
Florian Diebold
966ab9abd2 Add test for assoc type bindings 2019-09-03 13:25:29 +02:00
Aleksey Kladov
9c3b25177e Correctly build BodySourceMap for macro-expanded expressions 2019-09-03 11:04:38 +03:00
Aleksey Kladov
4b51c92fee slightly simplify expr lowering flow 2019-09-03 09:41:21 +03:00
Aleksey Kladov
da850361ba clearer ignore 2019-09-03 09:01:09 +03:00
Aleksey Kladov
82b218b7bf remove needless refs 2019-09-03 08:59:44 +03:00
Aleksey Kladov
48ffbf29b7 use recrod terminology for hir::Pat 2019-09-03 08:59:09 +03:00
Aleksey Kladov
db69d134fb move expr lowering to lower 2019-09-03 08:56:36 +03:00
Aleksey Kladov
5e3f291195 fix hir for new block syntax 2019-09-02 21:23:19 +03:00
Aleksey Kladov
f377b94628 remove useless trait 2019-09-02 19:45:41 +03:00
Florian Diebold
f92177cfb5 Add an expr_source method analogous to the source methods in the code model
... and use that instead of exposing the source map.
2019-09-02 14:56:38 +02:00
Florian Diebold
a7858bb7bf Report type mismatches in analysis-stats
Only the number usually; each one individually when running with -v.
2019-09-02 14:56:38 +02:00
uHOOCCOOHu
a66214b34e
Fix import strategy of macro_use and its test 2019-09-02 14:36:20 +08:00
Aleksey Kladov
4b6bccb58c ⬆️ once_cell 2019-09-01 23:18:15 +03:00
uHOOCCOOHu
dfa758f6a9
Add test 2019-09-01 02:03:33 +08:00
uHOOCCOOHu
f5bea9051b
Support resolution of #[macro_use] extern crate 2019-09-01 01:54:41 +08:00
Aleksey Kladov
0f6c048ce1 ⬆️ insta 2019-08-29 17:04:01 +03:00
Kirill Bulatov
4adfdea1ad Small fixes 2019-08-26 23:00:35 +03:00
Kirill Bulatov
590aed2eec Remove redundant tests 2019-08-26 23:00:27 +03:00
Florian Diebold
c256a72b03 Fix 'missing Ok in tail expr' validation
Because of the coercion change, the type mismatch now only happens on the block
expression.
2019-08-26 22:44:50 +03:00
Florian Diebold
e37b6c5837 Make infer_block not unify; add back calculate_least_upper_bound 2019-08-26 22:44:50 +03:00
Kirill Bulatov
44386d5373 An attempt to add the coercion logic for Never 2019-08-26 22:44:50 +03:00
Kirill Bulatov
89f3cc587d Properly coerce never types 2019-08-26 22:44:50 +03:00
Kirill Bulatov
8b612251fd Remove extra inference test 2019-08-26 22:44:50 +03:00
Kirill Bulatov
44cf7b34fe Fix never in if expressions 2019-08-26 22:44:50 +03:00
Kirill Bulatov
c1f47c3788 Add test marks 2019-08-26 22:44:50 +03:00
Kirill Bulatov
0ce05633a1 Fix match type inference for Never match arms 2019-08-26 22:44:50 +03:00
Kirill Bulatov
f63cfd5fca Tests 2019-08-26 22:44:50 +03:00
bors[bot]
cd433ed194
Merge #1734
1734: Strip indents and empty lines in check_apply_diagnostic_fix_from_position r=matklad a=matklad



Co-authored-by: Phil Ellison <phil.j.ellison@gmail.com>
2019-08-25 09:58:54 +00:00
Phil Ellison
6620949cae Simplify checking return type, add new test 2019-08-25 12:56:23 +03:00
Phil Ellison
6a04e9ce14 Fix build for Diagnostic type change 2019-08-25 12:56:23 +03:00
Phil Ellison
200470692f Cast SyntaxNodePtr to AstPtr directly 2019-08-25 12:56:23 +03:00
Phil Ellison
c8911e872e Remove reliance on expr ordering 2019-08-25 12:56:23 +03:00
Phil Ellison
4f6f3933ec cargo format 2019-08-25 12:55:56 +03:00
Phil Ellison
a40e390860 Check type rather than just name in ok-wrapping diagnostic. Add test for handling generic functions (which currently fails) 2019-08-25 12:55:56 +03:00
Phil Ellison
d025016f92 Mock std String and Result types in tests for ok-wrapping diagnostic 2019-08-25 12:55:55 +03:00
Phil Ellison
bacb938ab0 Add type_mismatches to InferenceResult and use this in ok-wrapping code fix 2019-08-25 12:55:55 +03:00
Phil Ellison
d00a285fa7 Initial implementation of Ok-wrapping 2019-08-25 12:55:55 +03:00
Dylan MacKenzie
1e991f2eaf Convert BoxPat to Missing in HIR 2019-08-23 16:07:11 -07:00
Aleksey Kladov
5b18a4eef9 rename struct -> record, pos -> tuple 2019-08-23 16:59:50 +03:00
Florian Diebold
4768f5e717 Improve/fix type bound lowering 2019-08-22 21:58:29 +02:00
Florian Diebold
b1a40042e8 Handle impl/dyn Trait in method resolution
When we have one of these, the `Trait` doesn't need to be in scope to call its
methods. So we need to consider this when looking for method
candidates. (Actually I think the same is true when we have a bound `T:
some::Trait`, but we don't handle that yet).

At the same time, since Chalk doesn't handle these types yet, add a small hack
to skip Chalk in method resolution and just consider `impl Trait: Trait` always
true. This is enough to e.g. get completions for `impl Trait`, but since we
don't do any unification we won't infer the return type of e.g. `impl
Into<i64>::into()`.
2019-08-22 21:55:11 +02:00
Florian Diebold
16a7d8cc85 Add impl Trait and dyn Trait types
- refactor bounds handling in the AST a bit
 - add HIR for bounds
 - add `Ty::Dyn` and `Ty::Opaque` variants and lower `dyn Trait` / `impl Trait`
   syntax to them
2019-08-22 19:33:00 +02:00
Aleksey Kladov
9f238930f1 Don't add ? bounds as real bounds
closes #1709
2019-08-22 15:35:42 +03:00
Aleksey Kladov
b50a04827c remove ast::*Kind from hir 2019-08-19 14:04:51 +03:00
Aleksey Kladov
189d879659 implement initial type inference for index expressions 2019-08-17 18:05:20 +03:00
Aleksey Kladov
b082cd679a normalize ordering ops 2019-08-17 17:51:01 +03:00
Aleksey Kladov
7e5a186c1f Introduce separate hir::BinaryOp
Unlike ast::BinOp, it has significantly more structure to it, so it's
easier to, say, handle all assignment-like operations in the same way.
2019-08-17 17:42:41 +03:00
bors[bot]
cd24349997
Merge #1691
1691: Show inherent and trait impls of structs and enums r=viorina a=viorina



Co-authored-by: Ekaterina Babshukova <ekaterina.babshukova@yandex.ru>
2019-08-16 14:24:51 +00:00
Ekaterina Babshukova
35a04ec066 show inherent and trait impls of structs and enums 2019-08-16 17:07:45 +03:00
Aleksey Kladov
343463c824 implement durability 2019-08-15 15:27:00 +03:00
Aleksey Kladov
9266c18ce6 switch from volatile to untracked read 2019-08-15 15:24:02 +03:00
Florian Diebold
5af9691dc9 Handle placeholder assoc types when Chalk produces them 2019-08-12 21:43:00 +02:00
Florian Diebold
9d72b14cfe Normalize assoc types in more places 2019-08-12 21:43:00 +02:00
Florian Diebold
11b9845afd Improve debug logging a bit 2019-08-12 21:43:00 +02:00
Florian Diebold
6265497523 Normalize associated types during inference 2019-08-12 21:43:00 +02:00
Florian Diebold
22724f37f3 Lower fully qualified associated type paths
I.e. `<T as Trait>::Foo`.
2019-08-12 21:43:00 +02:00
Florian Diebold
6cfdfdecba Add representations of associated types
This adds three different representations, copied from the Chalk model:
 - `Ty::Projection` is an associated type projection written somewhere in the
   code, like `<Foo as Trait>::Bar`.
 - `Ty::UnselectedProjection` is similar, but we don't know the trait
   yet (`Foo::Bar`).
 - The above representations are normalized to their actual types during type
   inference. When that isn't possible, for example for `T::Item` inside an `fn
   foo<T: Iterator>`, the type is normalized to an application type with
   `TypeCtor::AssociatedType`.
2019-08-12 21:43:00 +02:00
Florian Diebold
3a9a0bc968 Add another test for assoc type resolution 2019-08-12 21:43:00 +02:00
Evgenii P
475a93097f Use Source in Diagnostic and implement 2019-08-12 23:06:08 +07:00
Aleksey Kladov
6efc79b89d implement while let desugaring 2019-08-07 15:14:22 +02:00
Aleksey Kladov
39967a85e1 refactor if-let lowering
mainly to get rid of unwraps
2019-08-07 13:57:24 +02:00
Aleksey Kladov
4d6475ada0 refactor if lowering 2019-08-07 12:32:32 +02:00
bors[bot]
4912cc35af Merge #1634
1634: Implement .await completion for futures r=flodiebold a=eupn

Closes #1263 with completion for `.await` syntax for types that are implementing `std::future::Future` trait.

r? @flodiebold 

Co-authored-by: Evgenii P <eupn@protonmail.com>
2019-08-04 09:42:17 +00:00
bors[bot]
658382c1f5 Merge #1640
1640: Bump deps r=matklad a=lnicola

`insta`, `unicode-xid` and others

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2019-08-04 08:12:12 +00:00
Laurențiu Nicola
5153001889 Bump deps 2019-08-04 10:43:51 +03:00
Evgenii P
9f9c5aa659 rustfmt 2019-08-04 08:45:14 +07:00
Evgenii P
8597af8ed4 Idiomatic return 2019-08-04 08:08:46 +07:00
Evgenii P
d610adfc2b Employ early return pattern more 2019-08-04 08:03:17 +07:00
Evgenii P
4034ea9e4e source_binder.rs: fix order of imports 2019-08-04 07:56:29 +07:00
Alexander Andreev
83fe7b5fcb Resolve out of line modules inside inline module with attribute path
Fixed #1510
Fixed #1529
2019-08-03 19:44:59 +03:00
Evgenii P
6a94f203fc Use std::future::Future trait from stdlib 2019-08-03 17:07:20 +07:00
Evgenii P
858736c477 do fixup: remove unused import 2019-08-03 02:46:00 +07:00
Evgenii P
291bd81e74 Relax trait solving more for completion 2019-08-03 01:56:27 +07:00
Evgenii P
ab7774545c Use future lang item instead of hardcoded std::future::Future 2019-08-03 01:53:51 +07:00
Evgenii P
30bc3b93be rustfmt 2019-08-03 01:16:20 +07:00
Evgenii P
c417b98f02 Implement completion for the .await syntax 2019-08-03 01:15:43 +07:00
kjeremy
8d2068cf32 Update insta to 0.9.0 and cargo update 2019-07-31 10:05:00 -04:00
bors[bot]
a5fe9f7a87 Merge #1604
1604: Fix failing type interference for floating point literal r=matklad a=theotherphil

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/1592

Co-authored-by: Phil Ellison <phil.j.ellison@gmail.com>
2019-07-29 19:02:39 +00:00
Phil Ellison
d79dc38e99 Move assist test, add literal type inference test 2019-07-29 19:02:03 +01:00
Alexander Andreev
3629268f71 Fixed request changes. 2019-07-29 15:16:58 +03:00
Alexander Andreev
538ec1122b Added resolve modules inside inline module
#1510
2019-07-29 09:54:40 +03:00
Ekaterina Babshukova
8e49bb664a show local variable types in completion 2019-07-23 19:26:27 +03:00
bors[bot]
443061e752 Merge #1570
1570: switch to upstream rowan's API r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-07-21 13:48:46 +00:00
Ekaterina Babshukova
5fe19d2fbd provide completion in struct patterns 2019-07-21 14:41:33 +03:00
Aleksey Kladov
d52ee59a71 streamline API 2019-07-21 13:28:58 +03:00
bors[bot]
dac6adbef9 Merge #1562
1562: Continue support for .await r=matklad a=unrealhoang

- add await expr to ast and HIR Expr
- infer type for `.await`

Co-authored-by: Unreal Hoang <unrealhoang@gmail.com>
2019-07-20 11:27:50 +00:00
Unreal Hoang
bacf926a77
infer type for await
by projecting inner_ty to Future::Output alias
2019-07-20 20:12:19 +09:00
Unreal Hoang
5ac9f5cdc7
add await expr to ast 2019-07-20 19:35:49 +09:00
Aleksey Kladov
f3bdbec1b6 rename range -> text_range 2019-07-20 12:58:27 +03:00
Aleksey Kladov
6d5d82e412 move debug_dump to fmt::Debug 2019-07-20 12:48:24 +03:00
Aleksey Kladov
8467ba8cdb flip syntax text to use internal iteration 2019-07-19 20:29:59 +03:00
Aleksey Kladov
a6df224f7d minor 2019-07-19 18:25:07 +03:00
Aleksey Kladov
5c594bcb48 cleanup casts 2019-07-19 18:22:00 +03:00
Aleksey Kladov
f9d9e0a1f7 several highlighting cleanups
* make stuff more type-safe by using `BindPat` instead of just `Pat`
* don't add `mut` into binding hash
* reset shadow counter when we enter a function
2019-07-19 16:09:32 +03:00
Aleksey Kladov
e2b28f5bb8 migrate ra_hir to the new rowan 2019-07-19 13:16:25 +03:00
Aleksey Kladov
df33e7685b use Parse in mbe 2019-07-18 23:19:04 +03:00
Ekaterina Babshukova
4abe03879b highlight mutable variables differently 2019-07-18 18:52:50 +03:00
Aleksey Kladov
0fb4b896e2 use more correct phantom types for ptrs 2019-07-18 18:13:32 +03:00
kjeremy
1fcc002677 cargo update 2019-07-15 15:07:11 -04:00
Florian Diebold
c8284d8424 Switch to Chalk master, without fuel 2019-07-15 08:49:55 +02:00
Florian Diebold
dcb0c02e3a Remove blacklist, instead mark Sized as non-enumerable
This seems to be enough to prevent hanging in rust-analyzer, Chalk and the rustc
repo.
2019-07-15 08:49:55 +02:00
Florian Diebold
e2bce9e7eb Cargo update, including updating Chalk 2019-07-14 18:22:47 +02:00
Florian Diebold
1e60ba8927 Have InferenceContext contain an InferenceResult instead of duplicating all fields 2019-07-14 18:22:47 +02:00
Florian Diebold
0a20770f46 Some renamings for clarity 2019-07-14 18:22:47 +02:00
Alexander Andreev
9c75f30272 Fixed request comments 2019-07-14 09:24:18 +03:00
Alexander Andreev
22b863c534 Fixed comments 2019-07-13 21:51:20 +03:00
Alexander Andreev
1f0e9c149f More resolution modules with attribute path
#1211
2019-07-13 21:26:04 +03:00
Ekaterina Babshukova
2a1e11b36f complete fields in enum variants 2019-07-12 20:31:49 +03:00
Aleksey Kladov
deab4caa7b make Parse fields private
this is in preparation for the new rowan API
2019-07-12 19:41:13 +03:00
Aleksey Kladov
61135d4d4d fix profile name 2019-07-09 11:13:15 +03:00
bors[bot]
f59cd1a4a0 Merge #1515
1515: Trait environment r=matklad a=flodiebold

This adds the environment, i.e. the set of `where` clauses in scope, when solving trait goals. That means that e.g. in
```rust
fn foo<T: SomeTrait>(t: T) {}
```
, we are able to complete methods of `SomeTrait` on the `t`. This affects the trait APIs quite a bit (since every method that needs to be able to solve for some trait needs to get this environment somehow), so I thought I'd do it rather sooner than later ;)

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-07-09 07:50:18 +00:00
bors[bot]
35f28c538a Merge #1512
1512: Infer ? operator r=unrealhoang a=unrealhoang

Logical continuation of https://github.com/rust-analyzer/rust-analyzer/pull/1501

cc https://github.com/rust-analyzer/rust-analyzer/issues/1426

Co-authored-by: Unreal Hoang <unrealhoang@gmail.com>
2019-07-09 00:41:03 +00:00
Unreal Hoang
9a0d4b16b7
beautify tests 2019-07-09 09:27:03 +09:00
Florian Diebold
9afbf2dff4 Unify normalize and implements to simplify code 2019-07-08 21:47:37 +02:00
Florian Diebold
15862fc041 Use environment for associated type normalization as well 2019-07-08 21:20:17 +02:00
Florian Diebold
b1b12072ed Start handling environment in trait resolution
I.e. if we are inside a function with some where clauses, we assume these where
clauses hold.
2019-07-08 21:20:17 +02:00
Florian Diebold
638100dc8b Refactor a bit & introduce Environment struct 2019-07-08 21:20:17 +02:00
Marco Groppo
95d78a8d8d Look for the fXX_runtime lang items during method resolution. 2019-07-08 20:37:29 +02:00