Commit Graph

1361 Commits

Author SHA1 Message Date
Florian Diebold
bc59f83991 Use traits from prelude for method resolution 2019-05-12 20:25:26 +02:00
Florian Diebold
7fda874dd4 Blacklist some traits from being considered in where clauses
For Send/Sync/Sized, we don't handle auto traits correctly yet and because they
have a lot of impls, they can easily lead to slowdowns. In the case of
Fn/FnMut/FnOnce, we don't parse the special Fn notation correctly yet and don't
handle closures yet, so we are very unlikely to find an impl.
2019-05-12 20:23:57 +02:00
Florian Diebold
c8b85891b0 Fix impl blocks with unresolved target trait being treated as inherent impls 2019-05-12 20:21:45 +02:00
Florian Diebold
cbe75676b9 Add support for inline bounds
E.g. impl<T: Clone> Foo for T.
2019-05-11 16:56:36 +02:00
Florian Diebold
d6dc75f9f2 Handle auto traits & negative impls
We don't pass field types to Chalk yet though, so the auto trait inference won't
be correct.
2019-05-11 16:21:20 +02:00
Florian Diebold
7744cd41e2 Reduce Chalk max_size parameter, add test for slow case 2019-05-11 16:21:20 +02:00
Florian Diebold
d8cd0e36f5 Handle Chalk conversion for FnDef 2019-05-11 16:21:20 +02:00
Florian Diebold
58b68966bf Handle resolution errors in where clauses
This is slightly hacky, but maybe more elegant than alternative solutions: We
just use a hardcoded Chalk trait ID which we special-case to have no impls.
2019-05-11 16:21:20 +02:00
Florian Diebold
50bbf9eb09 Handle where clauses in trait solving 2019-05-11 16:21:20 +02:00
Florian Diebold
530b3047ed Deduplicate impls in impls_for_trait
This was duplicating impls in dependencies a lot...
2019-05-07 13:45:29 +02:00
Florian Diebold
4083caa233 Add a HirDisplay implementation for TraitRef 2019-05-07 13:45:29 +02:00
Florian Diebold
a78228a39c Turn implements into a query again 2019-05-07 13:45:29 +02:00
Sergey Parilin
26ed925685 fill struct fields diagnostic 2019-05-06 17:16:11 +03:00
bors[bot]
aa7bdfd37f Merge #1208
1208: [WIP] Goto for Macro's r=matklad a=Lapz

Adds goto definition for macros. Currently only works for macros in the current crate ~~otherwise it panics~~. Proper macro resolution needs to be added for it to resolve macros in other crates.

Todo
- [X] Allow goto from macro calls
- [X] Fix panics
- [x] Add tests



![Screen Recording 2019-04-25 at 18 00 24](https://user-images.githubusercontent.com/19998186/56754499-1dd01c00-6785-11e9-9e9a-1e36de70cfa3.gif)



Co-authored-by: Lenard Pratt <l3np27@gmail.com>
2019-05-04 18:38:10 +00:00
Florian Diebold
a4eb1a546c Differentiate Tuple / FnPtr type constructors by cardinality
This is necessary because Chalk (reasonably) expects each 'struct' to know how
many type parameters it takes.
2019-05-04 19:11:21 +02:00
Florian Diebold
19fbd91998 Simplify subst / subst_bound_vars a bit 2019-05-04 18:41:48 +02:00
Lenard Pratt
8198e13c26 Added local macro goto 2019-05-04 17:39:51 +01:00
Florian Diebold
f43e69a64e Handle recursive types in canonicalization 2019-05-04 18:25:36 +02:00
Florian Diebold
5795d773db Remove ToChalk implementation for ApplicationTy 2019-05-04 18:18:30 +02:00
Florian Diebold
621864319f Make canonicalization API a bit nicer 2019-05-04 18:18:30 +02:00
Florian Diebold
0bcf47b22b Update Chalk 2019-05-04 18:18:30 +02:00
Florian Diebold
0f34568924 Turn eprintln!s into debug!s 2019-05-04 18:18:30 +02:00
Florian Diebold
7310f3f801 Handle Ty::Unknown in Chalk conversion
Badly, but at least it doesn't crash.
2019-05-04 18:18:30 +02:00
Florian Diebold
0ad7317b24 Canonicalize before doing method resolution 2019-05-04 18:18:30 +02:00
Florian Diebold
ef77d83751 Document the peculiarity of the solver query a bit
Also remove the only remaining mention of chalk outside of the ty::traits
module.
2019-05-04 18:18:30 +02:00
Florian Diebold
c8a643f090 Move Chalk conversion code to its own module 2019-05-04 18:18:30 +02:00
Florian Diebold
99492278ac Implement Deref<Target=[Ty]> for Substs 2019-05-04 18:18:30 +02:00
Florian Diebold
6c3ee834d6 Simplify solution_from_chalk 2019-05-04 18:18:30 +02:00
Florian Diebold
b9c0c2abb7 Chalk integration
- add proper canonicalization logic
 - add conversions from/to Chalk IR
2019-05-04 18:18:30 +02:00
Florian Diebold
6269791d36 Add Ty::Bound variant for use in Chalk integration 2019-05-04 18:18:30 +02:00
Aleksey Kladov
bcf45371ff make macro expansion into a proper query 2019-05-04 18:01:43 +03:00
Aleksey Kladov
87a1e276d5 minor, move 2019-05-04 17:42:24 +03:00
Aleksey Kladov
5dc384132f introduce macro_arg intermediate query
Currently, when expanding macros, we look at the source code
directly (we invoke ast_id_to_node query via to_node method).

This is less then ideal, because it make us re-expand macros after
every source change.

This commit establishes a salsa-firewall: a query to get macro call's
token tree. Unlike the syntax tree, token tree changes only if we
actually modify the macro itself.
2019-05-04 17:38:09 +03:00
Aleksey Kladov
8876f44054 Revert "eagarly clean astd maps"
This reverts commit 6c63a59425.

This causes massive slowdowns: looks like we accidentally have some source-depndent
2019-05-04 16:04:34 +03:00
Aleksey Kladov
6c63a59425 eagarly clean astd maps 2019-05-04 11:53:44 +03:00
Aleksey Kladov
594aac059e Use correct FileId when expanding macros in expressions 2019-05-01 15:53:13 +03:00
Felix S. Klock II
d694b0174a Sidestep two-phase borrow violation signaled by mutable_borrow_reservation_conflict.
See rust-lang/rust#59159 for further information/discussion.
2019-04-29 14:03:51 +02:00
Edwin Cheng
dfab545d5d Add more information on macro rules fail to parse 2019-04-26 02:03:55 +08:00
Aleksey Kladov
848cb16a01 drop empty file 2019-04-25 10:07:23 +03:00
Lenard Pratt
1ab7066e32 Introduced resolve_macro_call on resolver
changed to manual expansion

fix for nested macros
2019-04-23 10:17:31 +01:00
Lenard Pratt
ce211434a6 Added macro resolution and expansion 2019-04-22 21:35:44 +01:00
Lenard Pratt
afaeb18910 Addeded resolver and db 2019-04-22 21:33:48 +01:00
bors[bot]
c416caeda2 Merge #1194
1194: Pr 1190 r=matklad a=matklad



Co-authored-by: Andrea Pretto <eulerdisk@gmail.com>
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-04-22 13:19:47 +00:00
Aleksey Kladov
aa1ef6ae9a unused import 2019-04-22 16:18:14 +03:00
Aleksey Kladov
e01052d1f0 move auto-imoprter into IDE
auto-import is purely an IDE concern, so it should be done outside of
HIR
2019-04-22 15:56:28 +03:00
Edwin Cheng
d6d9aa2003 Change macro stack monitor test to func ptr based 2019-04-22 17:15:22 +08:00
Edwin Cheng
b177813f3b Add mbe expand limit and poision macro set 2019-04-22 15:33:55 +08:00
Andrea Pretto
200032852b complete_import: prevent panic when the anchor is the completion source range
(fix rebase mess)

 Please enter the commit message for your changes. Lines starting
2019-04-22 00:48:43 +02:00
Andrea Pretto
9144214958 complete_import: add new import resolver infrastructure with some hardcoded importable name.
Changes complete_scope to support that.
2019-04-22 00:14:58 +02:00
Andrea Pretto
766813898f auto_import: make auto import working with target as a list of SmolStr instead of ast::Path 2019-04-22 00:13:00 +02:00
Edwin Cheng
9a5b9638c1 Add more information on parse_macro fail 2019-04-22 05:04:37 +08:00
Florian Diebold
787fb3e5ec Add HIR for where clauses & ignore impls with where clauses in trait resolution
This prevents any `impl<T> Trait for T where ...` from being treated as a
blanket impl while we don't handle where clauses yet.
2019-04-21 15:01:17 +02:00
bors[bot]
fa15c4d75e Merge #1175
1175: Fix bugs and add error log about macro expansion r=matklad a=edwin0cheng

This PR fixed / add following things:

* Add a fused count which stop recursion of macro expansion in name resolution.
* Add some logs when macro expansion fails
* Add `$crate` meta variable support in mbe, which create a `$crate` ident token in token tree.
* Fixed matching a `$REPEAT` pattern inside a subtree, e.g. `(fn $name:ident {$($i:ident)*} ) => {...}`
* Remove composite-able punct token in syntax node to token conversion. 

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-04-21 10:34:07 +00:00
Florian Diebold
82751f8a4a Add a simple test for str method completion 2019-04-20 18:26:53 +02:00
Edwin Cheng
9e35bf91b8 Fix bugs 2019-04-20 23:53:39 +08:00
Marco Groppo
8ac3d1f9aa lang_item_lookup is now a salsa query. 2019-04-20 00:29:16 +02:00
Marco Groppo
8ebb20edce New krate() method in Resolver.
Renamed Impl to ImplBlock.
2019-04-20 00:20:26 +02:00
Marco Groppo
e85ee60c42 Initial support for lang items. 2019-04-20 00:10:19 +02:00
Edwin Cheng
8747c903a2 Refactoring 2019-04-17 09:35:03 +08:00
Edwin Cheng
039ab2e820 Simpliy code 2019-04-17 09:31:53 +08:00
Edwin Cheng
0edb5ce97a Bug fix and add more comments 2019-04-17 09:31:52 +08:00
Edwin Cheng
180655077a Fix 1099 2019-04-17 09:31:52 +08:00
Florian Diebold
4f8a49f43c Refactor method candidate generation a bit
This fixes the order in which candidates are chosen a bit (not completely
though, as the ignored test demonstrates), and makes autoderef work with trait
methods. As a side effect, this also makes completion of trait methods work :)
2019-04-14 21:53:35 +02:00
Florian Diebold
8bcbcc454c Extract generic_params method to a HasGenericParams trait 2019-04-14 13:07:45 +02:00
Florian Diebold
4497e1d3ea Add Container enum to handle both kinds of container (impl/trait) 2019-04-14 11:28:53 +02:00
Florian Diebold
7650a44640 Make callable signature handling a bit nicer 2019-04-14 11:28:53 +02:00
Florian Diebold
9339241b78 Some cleanup 2019-04-14 11:28:53 +02:00
Florian Diebold
a1ed53a4f1 More trait infrastructure
- make it possible to get parent trait from method
 - add 'obligation' machinery for checking that a type implements a
   trait (and inferring facts about type variables from that)
 - handle type parameters of traits (to a certain degree)
 - improve the hacky implements check to cover enough cases to exercise the
   handling of traits with type parameters
 - basic canonicalization (will probably also be done by Chalk)
2019-04-14 11:28:53 +02:00
Florian Diebold
413c87f155 Get substs for trait refs in impl blocks 2019-04-14 11:28:53 +02:00
Robin Freyler
6aae0cf7fa
replace usages of algo::generate with iter::successors from std 2019-04-13 16:43:49 +02:00
Aleksey Kladov
2facb5e061 cleanups 2019-04-13 14:16:46 +03:00
Aleksey Kladov
b260641e0c slight encapsulation 2019-04-13 11:29:47 +03:00
Aleksey Kladov
f9e825d956 move ScopeEntryWithSyntax 2019-04-13 11:24:09 +03:00
Aleksey Kladov
d387bdccba drop obsolete fixme 2019-04-13 11:21:32 +03:00
Aleksey Kladov
4f8dc1b9f0 make expr scope stuff private 2019-04-13 11:06:53 +03:00
Aleksey Kladov
a2cc76ce63 make resolver private 2019-04-13 11:03:02 +03:00
Aleksey Kladov
62d01dd4df hide resolver 2019-04-13 11:00:15 +03:00
Aleksey Kladov
f4a94e74bc fold ScopeWithSyntax into SourceAnalyzer 2019-04-13 10:49:01 +03:00
Aleksey Kladov
30481808fb make stuff private 2019-04-13 09:53:02 +03:00
Aleksey Kladov
1e8569dce9 make private 2019-04-13 09:46:39 +03:00
Aleksey Kladov
d4043a8dba only def-with-body remains 2019-04-13 09:45:52 +03:00
Aleksey Kladov
d88269bc2d generalize 2019-04-13 09:38:37 +03:00
Aleksey Kladov
17a0e22883 simplify 2019-04-13 09:36:28 +03:00
Aleksey Kladov
65b0073653 simplify 2019-04-13 09:33:34 +03:00
Aleksey Kladov
9ead801a9c make private 2019-04-13 09:32:25 +03:00
Aleksey Kladov
3aae223d93 hide some scopes 2019-04-13 09:31:03 +03:00
Aleksey Kladov
58fe5598e7 simplify 2019-04-13 01:32:43 +03:00
Aleksey Kladov
b0d8f9ff5d make stuff private 2019-04-13 01:07:24 +03:00
Aleksey Kladov
81e91980dd simplify 2019-04-13 01:05:18 +03:00
Aleksey Kladov
7c13e22334 simplify tests 2019-04-13 00:56:57 +03:00
Aleksey Kladov
0fd93bc14a use really correct resolver for expressions 2019-04-13 00:44:47 +03:00
Aleksey Kladov
cf2ba2791d add todo 2019-04-11 17:14:41 +03:00
Aleksey Kladov
a347208bb2 use correct resolver for expressions 2019-04-11 16:51:30 +03:00
Aleksey Kladov
ebb0c377f0 remove resolver from CompletonContext 2019-04-11 16:49:35 +03:00
Aleksey Kladov
3c9f2d0e37 simplify 2019-04-11 16:39:56 +03:00
Aleksey Kladov
5471c1ef4b generalize SourceAnalyzer to handle all defs with bodies 2019-04-11 16:37:29 +03:00
Aleksey Kladov
07cc047b4f minimize the API 2019-04-11 16:29:33 +03:00
Aleksey Kladov
b6809b6695 rename 2019-04-11 16:29:33 +03:00
Aleksey Kladov
505acc973b Make call info to use real name resolution 2019-04-11 16:29:33 +03:00
Aleksey Kladov
10d66d63d7 introduce SourceAnalyzer 2019-04-11 16:29:33 +03:00
Aleksey Kladov
6a8b3c1d4b fix typo 2019-04-11 11:13:31 +03:00
Aleksey Kladov
10726fdb65 type-safer source-map for bindings 2019-04-10 10:48:15 +03:00
Aleksey Kladov
1cd184d653 use either for uses 2019-04-10 10:12:54 +03:00
Aleksey Kladov
6b993a9760 migrate to salsas interning 2019-04-09 22:51:22 +03:00
Laurențiu Nicola
61c09edb4a Avoid two-phase borrow conflict 2019-04-08 16:47:28 +03:00
Lenard Pratt
b27fa33a9f updated snapshots 2019-04-07 13:23:18 +01:00
Lenard Pratt
e175921932 Added ArrayExprKind,
changed the  display for fixed array types,
Added Array Enum to ra_hir/expr
2019-04-07 13:23:14 +01:00
Lenard Pratt
2d73c909fe Added inference of array length 2019-04-07 13:23:12 +01:00
robojumper
ca40ca93a5 Parse and infer tuple indices 2019-04-06 01:07:35 +02:00
bors[bot]
c6c88070c4 Merge #1068
1068: profiling crate first draft r=matklad a=pasa

I've made this first draft for #961 
Could you look at it? Is this something what you are looking for?
It has lack of tests. I can't figure out how to test stderr output in rust right now. Do you have some clues?
Additionally I'm thinking about to implement procedural  macros to annotate methods with this profiler. Will it be helpful?



Co-authored-by: Sergey Parilin <sergey.parilin@fxdd.com>
2019-04-03 09:09:11 +00:00
bors[bot]
fdbebccd71 Merge #1076
1076: Const body inference r=flodiebold a=Lapz

This is the second part of #887. I've added type inference on const bodies and introduced the DefWithBody containing Function, Const and Static. I want to add tests but im unsure on how I would go about testing that completions work.


Co-authored-by: Lenard Pratt <l3np27@gmail.com>
2019-04-02 19:01:54 +00:00
Lenard Pratt
b9d2c2c21f made ExprCollector pub(crate) and moved
collect_fn_body_syntax
2019-04-02 19:22:06 +01:00
Lenard Pratt
88e22e9d70 Added const bodies and static body to the ast
and added inference the inference test

reduce code duplication
2019-04-02 19:21:36 +01:00
Aleksey Kladov
0de89f786f always produce source for import 2019-04-02 17:58:04 +03:00
Sergey Parilin
b74449e995 Merge remote-tracking branch 'upstream/master' into issue961_profiling 2019-04-02 17:55:14 +03:00
Sergey Parilin
9b73f80959 PR issuse resolved 2019-04-02 17:52:04 +03:00
Aleksey Kladov
49f13d3a9b fix a panic with glob-import missing a source map 2019-04-02 13:26:09 +03:00
Aleksey Kladov
0e1e40676a rename flavor to kind 2019-04-02 12:53:44 +03:00
Aleksey Kladov
f3a82c372c remove flavor 2019-04-02 12:25:24 +03:00
gfreezy
4ca51cfbcf intelligently add parens when inlining local varaibles 2019-04-01 22:53:47 +08:00
Aleksey Kladov
9e213385c9 switch to new rowan 2019-04-01 12:06:24 +03:00
Lenard Pratt
7f3bf7cc73 Added defWithBody 2019-03-30 10:50:00 +00:00
Aleksey Kladov
a3fee2bda0 more realistic test for incrementality 2019-03-26 19:54:52 +03:00
Aleksey Kladov
1325a31e34 reduce visibility 2019-03-26 19:15:39 +03:00
Aleksey Kladov
e28db444df rename 2019-03-26 19:11:01 +03:00
Aleksey Kladov
b17217b34a simplify 2019-03-26 18:57:57 +03:00
Aleksey Kladov
cffa3f960e make stuff private 2019-03-26 18:47:52 +03:00
Aleksey Kladov
8f32477312 more type safety 2019-03-26 18:27:22 +03:00
Aleksey Kladov
071a19537d strongy-typed ids for macros 2019-03-26 18:03:17 +03:00
Aleksey Kladov
fb8b354dcc add typed ids 2019-03-26 17:25:14 +03:00
Aleksey Kladov
6e5562224e remove some dead code 2019-03-26 16:47:52 +03:00
Aleksey Kladov
f6f2d69bb8 simplify 2019-03-26 14:54:05 +03:00
Aleksey Kladov
0b820cacab move source_id to a separate file 2019-03-26 14:42:28 +03:00
Aleksey Kladov
e231277ab2 make macro parsing a query 2019-03-26 14:13:17 +03:00
Aleksey Kladov
e4646ce0d5 reduce visibility 2019-03-26 13:53:50 +03:00
Aleksey Kladov
5270bca5f7 store macro def inside macro id
This solves the problem of "macro expansion can't call into name
resolution, because name resolution calls back into macro expansion"

Because we store macro def as a part of call id, macro expansion just
knows the def!
2019-03-26 13:20:54 +03:00
Florian Diebold
99711c1863 Clean up comments / use nicer Iterator methods 2019-03-25 21:28:36 +01:00
Florian Diebold
0f7e4a7d24 Implement a very naive implements check
... to make the infer_trait_method_simple test have the correct result.
2019-03-25 21:28:36 +01:00
Florian Diebold
c947c15ce1 Basics for trait method resolution 2019-03-25 21:28:36 +01:00
Aleksey Kladov
309716cffe move tests to where they belong 2019-03-25 14:29:24 +03:00
Aleksey Kladov
5ce84f3cbc tweak diagnostics API 2019-03-25 10:52:50 +03:00
Aleksey Kladov
4c4a714328 test diagnostics 2019-03-25 10:52:50 +03:00
Aleksey Kladov
c7ffd939f6 more enterprisey diagnostics setup 2019-03-25 10:52:50 +03:00
Aleksey Kladov
7ee2887d1e fixes 2019-03-25 10:52:50 +03:00
Aleksey Kladov
45fbab2b1a check impls as well 2019-03-25 10:52:50 +03:00
Aleksey Kladov
79df62bc74 cleanup 2019-03-25 10:52:50 +03:00
Aleksey Kladov
3fb88e95aa switch modules to new diagnostics 2019-03-25 10:52:50 +03:00
Aleksey Kladov
fcca35969d allow dyn diagnostics 2019-03-25 10:52:12 +03:00
Aleksey Kladov
7e8f17188e diagnostics 2019-03-25 10:52:12 +03:00
Marco Groppo
67055c47da Target only the actual operator.
Renamed `BinExpr::op()` and `PrefixExpr::op()` to `op_kind`.
Now `op()` returns the `SyntaxNode`.
2019-03-24 22:21:22 +01:00
Florian Diebold
dbfc68cea0 Fix apply_substs assertion failure
Fixes #1030.
2019-03-23 18:03:09 +01:00
Aleksey Kladov
46a21b07e6 remove obsolete diagnostic 2019-03-23 16:31:11 +03:00
Aleksey Kladov
3f0cf6ebe1 rename persistent hir database -> def database 2019-03-23 15:44:24 +03:00
Aleksey Kladov
4fd8cfd6ad replace todo with fixme 2019-03-23 11:07:09 +03:00
yanchith
504c8c7c2e Refactor primitive types into more orthogonal representation 2019-03-22 10:09:35 +01:00
Florian Diebold
1ee779d1f7 Assert in apply_substs that the number of parameters doesn't change
... and fix a small bug revealed by that.
2019-03-21 22:39:31 +01:00
Florian Diebold
cbb418ebb8 Rename name field to ctor as well 2019-03-21 22:29:12 +01:00
Florian Diebold
97be0e6c46 Some more doc comments 2019-03-21 22:23:52 +01:00
Florian Diebold
f10f5a81b3 TypeName => TypeCtor 2019-03-21 22:20:03 +01:00
Florian Diebold
8a5fbf4713 Remove the old variants replaced by Ty::Apply 2019-03-21 22:17:00 +01:00
Florian Diebold
7a8ba53542 Add Ty::Apply 2019-03-21 22:11:53 +01:00
Florian Diebold
bc7752e527 Represent FnPtr and Tuple using Substs 2019-03-21 22:11:53 +01:00
Aleksey Kladov
f5165af9a7 make Name::new private 2019-03-20 22:33:26 +03:00
Vincent Esche
21f20d5deb Fixed typo in Interner’s name (Intener) 2019-03-20 09:29:10 +01:00
Aleksey Kladov
5641feeddb import resolution is immutable 2019-03-19 18:35:03 +03:00
bors[bot]
40c6dd1f4c Merge #982
982: Implement BindingMode for pattern matching. r=flodiebold a=mjkillough

Implement `BindingMode` for pattern matching, so that types can be
correctly inferred using match ergonomics. The binding mode defaults to
`Move` (referred to as 'BindingMode::BindByValue` in rustc), and is
updated by automatic dereferencing of the value being matched.

Fixes #888.

 - [Binding modes in The Reference](https://doc.rust-lang.org/reference/patterns.html#binding-modes)
 - [`rustc` implementation](e17c48e2f2/src/librustc_typeck/check/_match.rs (L77)) (and [definition of `BindingMode`](e957ed9d10/src/librustc/ty/binding.rs))
 - [Match Ergonomics RFC](https://github.com/rust-lang/rfcs/blob/master/text/2005-match-ergonomics.md#binding-mode-rules)

Co-authored-by: Michael Killough <michaeljkillough@gmail.com>
2019-03-17 21:41:37 +00:00
Michael Killough
6299ccd350 Split test case and use tested_by!. 2019-03-17 19:08:51 +00:00
Michael Killough
33add0ee30 Simplify match statement. 2019-03-17 18:50:22 +00:00
Michael Killough
354134ffb4 impl Default for BindingMode.
This decouples callers from knowing what the default binding mode of
pattern matching is.
2019-03-17 18:46:01 +00:00
Aleksey Kladov
3a77023365 docs 2019-03-17 12:53:22 +03:00
Aleksey Kladov
4d7fa6d30b remove fixme 2019-03-17 12:53:22 +03:00
Aleksey Kladov
6955e392f8 remove old macro support 2019-03-17 12:53:22 +03:00
Aleksey Kladov
ee3cf6172b rename ModuleId -> CrateModuleId 2019-03-17 12:53:22 +03:00
Aleksey Kladov
c51a6a7bdd fix error on wrong path 2019-03-17 12:53:22 +03:00
Aleksey Kladov
0d6b8baa89 log time 2019-03-17 12:53:22 +03:00
Aleksey Kladov
967a4b64af Reorganize name resolution 2019-03-17 12:53:22 +03:00
Aleksey Kladov
b2a6c17362 remove lower module 2019-03-17 12:52:52 +03:00
Aleksey Kladov
c7259a899c remove ItemMap 2019-03-17 12:52:05 +03:00
Aleksey Kladov
71e5adf694 move tests over to crate-def-map 2019-03-17 12:49:07 +03:00
Aleksey Kladov
2195d1db6d Replace module_tree with CrateDefMap 2019-03-17 12:49:07 +03:00
Aleksey Kladov
182c05a96c add name resolution from the old impl
unlike the old impl, this also handles macro imports across crates
2019-03-17 12:46:13 +03:00
Aleksey Kladov
0d8d918656 add skeleton for macro-aware name resolutions 2019-03-17 12:46:13 +03:00
Michael Killough
b42c5ced68 Implement BindingMode for pattern matching.
Implement `BindingMode` for pattern matching, so that types can be
correctly inferred using match ergonomics. The binding mode defaults to
`Move` (referred to as 'BindingMode::BindByValue` in rustc), and is
updated by automatic dereferencing of the value being matched.
2019-03-16 18:13:13 +00:00
Florian Diebold
7faae12311 Remove FnSig from FnDef type
It doesn't need to be in there since it's just information from the def. Another
step towards aligning Ty with Chalk's representation.
2019-03-16 17:29:55 +01:00
Florian Diebold
a9ddaba905 Refactor FnSig a bit 2019-03-16 17:21:32 +01:00
Florian Diebold
628b530e92 Some more Ty displaying cleanup 2019-03-16 16:50:31 +01:00
Florian Diebold
c5ee60e05b Replace Display by a pretty printing trait for Ty
This allows removing the names from Adt and FnDef (and more later), as a first
step towards aligning more with chalk's Ty :)
2019-03-16 16:36:59 +01:00
pcpthm
adad641c52 derive Hash for ra_hir::ModuleDef 2019-03-14 17:25:51 +09:00
Aleksey Kladov
e9e792f2d7 remove Def 2019-03-12 12:36:37 +03:00
Ville Penttinen
4a0bb3d7c5 Add support for goto definition and hover on Self
This fixes #943
2019-03-07 17:34:44 +02:00
kjeremy
eb3ee7b8e5 Updates 2019-03-05 10:26:36 -05:00
kjeremy
ac678473b8 Use impl_froms! 2019-03-04 09:52:48 -05:00
kjeremy
1578375b89 Make ExpOrPatId private 2019-03-04 09:49:18 -05:00
Jeremy Kolb
ad2da5b1da Remove commented out code 2019-03-04 08:27:08 -05:00
Jeremy Kolb
3d8d880c59 Use ImplItems instead of just Function 2019-03-04 08:27:08 -05:00
kjeremy
49da9a3e81 Make goto definition/hover resolve constructors 2019-03-04 08:27:08 -05:00
Florian Diebold
2e8f258845 Inline type inference test snapshots 2019-03-03 12:41:42 +01:00
Florian Diebold
affaf7700a Represent unknown types as {unknown} instead of [unknown]
Since the latter could actually be a real type...
2019-03-03 03:00:17 +01:00
Florian Diebold
b7fdad8448 Add a bunch of tests for type inference involving traits
None of them works correctly yet, of course.
2019-03-02 16:42:51 +01:00
bors[bot]
fd7240837b Merge #915
915: Bring BodySyntaxMapping in line with other source-map instances r=flodiebold a=matklad

* rename to SourceMap
* don't store the actual body inline, just return a pair

r? @flodiebold 

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-03-02 14:09:46 +00:00
Aleksey Kladov
f0a9d026fc remove comment 2019-03-02 17:01:20 +03:00
Aleksey Kladov
8fc08d36e3 remove second way to get the body 2019-03-02 16:59:18 +03:00
Aleksey Kladov
03b2ab8e1f rename syntax_mapping as well 2019-03-02 16:56:09 +03:00
Florian Diebold
862b663501 A bit of cleanup in ty.rs 2019-03-02 14:53:12 +01:00
Aleksey Kladov
80bb7d86ec align lower module query names 2019-03-02 16:49:06 +03:00
Aleksey Kladov
fe5574b05a rename scopes 2019-03-02 16:38:28 +03:00
Aleksey Kladov
ca957edf96 rename to source_map 2019-03-02 16:36:25 +03:00
Aleksey Kladov
f4c5383103 dont store body inside source map 2019-03-02 16:18:40 +03:00
Aleksey Kladov
eaf1df26e9 rename syntax-mapping -> source-map 2019-03-02 15:40:40 +03:00
Ville Penttinen
d3ce69aee3 Remove TypeRef from item opts which implement TypeAscriptionOwner 2019-02-27 14:08:09 +02:00
Ville Penttinen
52054e1140 Use TypeAscriptionOwner
This replaces places where we would use node + node.type_ref() with things that
have an ascribed type, with using the TypeAscriptionOwner as the trait bound so
we can simply pass the node.
2019-02-26 11:47:13 +02:00
bors[bot]
7c9acf2f83 Merge #897
897: Add basic const/static type inference r=flodiebold a=vipentti

This adds basic const/static type inference discussed in #887.

Currently the inference does not work for const/static declared inside a block. In addition the inference does not work inside the bodies of const/static.

Co-authored-by: Ville Penttinen <villem.penttinen@gmail.com>
2019-02-25 12:03:57 +00:00
Aleksey Kladov
78f10fcdc4 rename type to type_alias in the AST as well 2019-02-25 13:49:32 +03:00
Ville Penttinen
cff9a7dfad Move ConstSignature creation to a single method 2019-02-25 10:55:39 +02:00
Ville Penttinen
29f93a7906 Add static type inference 2019-02-25 10:55:23 +02:00
Ville Penttinen
18b0bd9bff Add const type inference 2019-02-25 10:51:46 +02:00
Florian Diebold
bd8ed644e4 Rename Type => TypeAlias 2019-02-24 21:36:49 +01:00
Florian Diebold
c3c0979561 Add test for recursive type aliases 2019-02-24 20:54:04 +01:00
Florian Diebold
5d72b96988 Implement support for type aliases 2019-02-24 20:54:04 +01:00
Aleksey Kladov
d0a261468e introduce completion presentation
This module should remove completion rendering boilerplate from the
"brains" of completion engine.
2019-02-24 18:51:38 +03:00
Florian Diebold
c71740e956 Clean up imports a bit 2019-02-24 15:17:20 +01:00
Florian Diebold
82fe7b77a3 Refactor associated method resolution a bit and make it work with generics 2019-02-23 23:00:02 +01:00
Florian Diebold
dcfb4ee702 Split ty.rs into several modules
It was just getting too big. We now have:

 - ty: the `Ty` enum and helpers
 - ty::infer: actual type inference
 - ty::lower: lowering from HIR to `Ty`
 - ty::op: helpers for binary operations, currently
2019-02-23 15:36:38 +01:00
Florian Diebold
6a04d1f292 Fix resolution of associated method calls across crates
I think it'll be better to make the path resolution the number of unresolved
segments, not the first unresolved index; then this error could simply not have
happened. But I'll do that separately.
2019-02-23 12:37:29 +01:00
bors[bot]
3d8a0982a1 Merge #866
866: Implement basic support for Associated Methods r=flodiebold a=vipentti

This is my attempt at learning to understand how the type inference works by adding basic support for associated methods. Currently it does not resolve associated types or constants. 

The basic idea is that `Resolver::resolve_path` returns a new `PathResult` type, which has two variants, `FullyResolved` and `PartiallyResolved`, fully resolved matches the previous behavior, where as `PartiallyResolved` contains the `PerNs<Resolution` in addition to a `segment_index` which contains the index of the segment which we failed to resolve. This index can then be used to continue inference in `infer_path_expr` using the `Type` we managed to resolve.

This changes some of the previous apis, so looking for feedback and suggestions.

This should enable fixing #832

Co-authored-by: Ville Penttinen <villem.penttinen@gmail.com>
2019-02-22 19:58:22 +00:00
Ville Penttinen
247d1c17b3 Change resolve_path to return the fully resolved path or PerNs::none
This also adds new pub(crate) resolve_path_segments which returns the
PathResult, which may or may not be fully resolved. PathResult is also now
pub(crate) since it is an implementation detail.
2019-02-22 10:15:23 +02:00
Ville Penttinen
39679d499f Ignore failing test for now 2019-02-22 00:27:22 +02:00
Ville Penttinen
a34eb98a78 Make nameres::ResolvePathResult private and refactor 2019-02-22 00:11:21 +02:00
Ville Penttinen
2e7bc905be Remove Const inference for now, refactor PathResult 2019-02-21 23:57:07 +02:00
Florian Diebold
db9a5a9ac0 Add an assert (and fix the other) 2019-02-21 21:25:27 +01:00
Ville Penttinen
816971ebc9 Implement basic support for Associated Methods and Constants
This is done in `infer_path_expr`. When `Resolver::resolve_path` returns
`PartiallyResolved`, we use the returned `Resolution` together with the given
`segment_index` to check if we can find something matching the segment at
segment_index in the impls for that particular type.
2019-02-21 12:25:55 +02:00
Florian Diebold
72712b8a42 Fix handling of generics in tuple variants and refactor a bit
Also make them display a tiny bit nicer.

Fixes #860.
2019-02-20 22:48:55 +01:00
Aleksey Kladov
9738fb48a6 remove ignored macro tests
we need to significantly reengineer macros, so the tests as they exist
are useless
2019-02-19 20:06:53 +03:00
bors[bot]
564ab84b78 Merge #852
852: Handle != r=flodiebold a=matklad

r? @flodiebold

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-02-18 09:13:51 +00:00
Aleksey Kladov
4e8a3f565b handle != operator 2019-02-18 10:09:44 +03:00
Florian Diebold
b82db68400 Handle tuple structs / enum variants properly in type inference 2019-02-17 20:53:13 +01:00
Florian Diebold
3c7c7e5a04 Make GenericArgs::from_ast pub(crate) 2019-02-17 14:55:04 +01:00
Florian Diebold
795d718ba1 Unify with the autorefed/autoderefed receiver type during method resolution 2019-02-17 14:44:39 +01:00
Florian Diebold
a1bda3fc08 Handle generic args for method calls 2019-02-16 23:06:41 +01:00
Florian Diebold
65bd9bc3a8 Handle impl generics in method calls 2019-02-16 23:06:41 +01:00
Florian Diebold
2af067b391 Resolve impl generic params 2019-02-16 23:06:41 +01:00
Florian Diebold
da7056245d Add generic params to impl blocks 2019-02-16 23:06:41 +01:00
Florian Diebold
ccfc6b11c1 Add a test for impl generics 2019-02-16 23:06:41 +01:00
Florian Diebold
0242acae53 Turn ImplBlock into a copy type just containing IDs
This makes it more like the other code model types.

Also make Module::definition_source/declaration_source return HirFileIds, to
make them more like the other source functions.
2019-02-16 22:08:13 +01:00
Florian Diebold
911e32bca9 Complete names from prelude 2019-02-13 21:13:08 +01:00
Florian Diebold
92c595a6a6 Handle extern crates better, so they work correctly in 2015 edition
(see the removed comment.)
2019-02-13 21:13:08 +01:00
Florian Diebold
70839b7ef8 Make edition handling a bit nicer and allow specifying edition in crate_graph macro 2019-02-13 20:31:47 +01:00
Florian Diebold
d5ad38cbb8 Resolve 2015 style imports 2019-02-13 20:10:46 +01:00
Florian Diebold
3a9934e2c3 Keep track of crate edition 2019-02-13 20:10:46 +01:00
Florian Diebold
1526eb25c9 Import the prelude 2019-02-13 20:10:09 +01:00
Florian Diebold
e5f9d54661 Fix another crash 2019-02-12 21:49:54 +01:00
Aleksey Kladov
5f89180fd9 make token trees eq 2019-02-12 20:57:13 +03:00
Pascal Hertleif
4fd3613434 Fix some typos 2019-02-12 15:02:57 +01:00
Laurențiu Nicola
7e8527f748 Implement completion for associated items 2019-02-12 12:51:01 +02:00
Aleksey Kladov
60524771fd replace clone with copy 2019-02-12 13:32:34 +03:00
Aleksey Kladov
fa2e6e0bda fix obsolete comment 2019-02-12 13:29:27 +03:00
Aleksey Kladov
0d060b073c remove hard-coded query-group macro 2019-02-11 22:24:39 +03:00
Aleksey Kladov
bbcd3566de remove useless hash 2019-02-11 19:09:53 +03:00
Aleksey Kladov
28fd228c70 remove query_definitions 2019-02-11 17:44:54 +03:00
Aleksey Kladov
8cafdb3a99 rename combine -> or
This way we match API of Option

https://doc.rust-lang.org/std/option/enum.Option.html#method.or
2019-02-11 17:29:20 +03:00
Aleksey Kladov
58ed8ee665 use extern prelude in Resolver
This fixes two bugs:

- completion for paths works again
- we handle extern prelude shadowing more correctly
2019-02-11 15:41:39 +03:00
bors[bot]
2babbbb978 Merge #784
784: WIP: improve multi-crate fixtures r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-02-11 10:54:27 +00:00
Aleksey Kladov
9923383d53 add graph fixture 2019-02-11 13:47:17 +03:00
Aleksey Kladov
dced2f4ed4 Handle SourceRoots automatically in fixtures 2019-02-11 12:53:10 +03:00
Ville Penttinen
710975ecd8 Fix typo in Cargo.toml authors
Fixes typo introduced in #782
2019-02-11 10:20:04 +02:00
Ville Penttinen
ab3d231b1d Update authors field in Cargo.tomls to "rust-analyzer developers"
This closes #777
2019-02-11 08:55:35 +02:00
Florian Diebold
2f24e740db Implement glob imports within the same crate
Fixes #231.
2019-02-10 16:48:29 +01:00
Florian Diebold
2e1d739a80 Import glob imports from other crates
This is the easy part since we don't have to consider the fixpoint algorithm.
2019-02-10 16:20:01 +01:00
Florian Diebold
c1e295682e Implement glob imports from enums 2019-02-10 16:20:01 +01:00
Florian Diebold
35cfb418ba Add some tests 2019-02-10 16:20:01 +01:00
Florian Diebold
2e9194a621 Spell cases explicitly in Ty::walk{_mut} 2019-02-10 12:35:30 +01:00
Florian Diebold
6964a88e8c Add an ra_cli command that analyses all crates in the current workspace
... and prints various stats about how many expressions have a type etc.
2019-02-10 10:56:58 +01:00
Florian Diebold
c098a3fda5 Add comment and mark 2019-02-09 22:03:01 +01:00
Florian Diebold
a28d4befaf Fix another crash, and try harder to prevent stack overflows 2019-02-09 21:53:55 +01:00
Florian Diebold
c0c3b37255 Fix another crash found when analyzing rustc 2019-02-09 21:37:30 +01:00
Florian Diebold
f1afc93353 Fix handling of literal patterns
Wrap them in a LiteralPat node so they can be distinguished from literal
expressions.
2019-02-09 21:37:30 +01:00
Florian Diebold
7ebde241c0 Fix two crashes found by running inference on all of rustc 2019-02-09 21:37:09 +01:00
Aleksey Kladov
12e3b4c70b reformat the world 2019-02-08 14:49:43 +03:00
kjeremy
6753051a45 Some clippy cleanups 2019-02-06 15:50:26 -05:00
Aleksey Kladov
0c5fd8f7cb move assists to a separate crate 2019-02-06 17:00:00 +03:00
bors[bot]
4183825475 Merge #740
740: Update dependencies r=kjeremy a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2019-02-05 12:16:25 +00:00
Florian Diebold
de4c5e381f Fix ReachedFixedPoint value for unresolved external prelude items 2019-02-04 23:26:25 +01:00
Florian Diebold
699ce06ac3 Complete extern prelude (again) 2019-02-04 22:09:56 +01:00
Florian Diebold
1056b480d6 Make extern crates in the root module add to the extern prelude
To accomplish this, separate the extern prelude from the per-module item maps.
2019-02-04 21:49:34 +01:00
Florian Diebold
d69023fc72 Lower extern crates to imports
This is probably not completely correct, but it kind of works.
2019-02-04 21:49:34 +01:00
Florian Diebold
397d84ee29 Add test for extern crate renames 2019-02-04 21:49:34 +01:00
kjeremy
5227102c12 Test more Self inference 2019-02-04 14:44:06 -05:00
kjeremy
8ec4b84013 Bump insta and proptest to latest 2019-02-04 14:11:51 -05:00
Aleksey Kladov
dbf9820e35 make HirDatabase object-safe 2019-02-03 22:15:31 +03:00
Florian Diebold
d8ef8acb47 Use aliases in import resolution 2019-02-02 00:23:59 +01:00
Florian Diebold
5a7fce4e4c Pass aliases to ImportData 2019-02-02 00:23:53 +01:00
Florian Diebold
aa5f6a1ee8 Add test for use as 2019-02-02 00:23:53 +01:00
Florian Diebold
c5852f422f Some cleanup and additional tests 2019-02-01 23:24:26 +01:00
Florian Diebold
d571d26955 Make the Resolution variants tuple variants 2019-02-01 22:54:30 +01:00
Florian Diebold
d3df80dfe4 Cleanup 2019-02-01 22:54:21 +01:00
Florian Diebold
afce8e4426 Use the new Resolver API for goto def 2019-02-01 22:45:43 +01:00
Florian Diebold
33ff7b56ff Use the new Resolver API in completion 2019-02-01 22:45:25 +01:00
Florian Diebold
6b076f1931 Use new Resolver API in type inference 2019-02-01 22:45:23 +01:00
Florian Diebold
758bc72873 Implement methods to build a resolver 2019-02-01 22:17:48 +01:00
Florian Diebold
5208c2aa93 Sketching the resolver API 2019-02-01 22:14:34 +01:00
csmoe
4dffdcf14a split HirDatabase api 2019-02-01 22:05:24 +08:00
csmoe
12433a7887 split hirdatabase 2019-02-01 21:36:51 +08:00
Aleksey Kladov
de85f1e947 remove hard-coded support for ctry macro
It was used mainly to prevent HirFileId infra from bitroting, but the
`vec![]` macro can serve that just as well!
2019-02-01 10:52:36 +03:00
kjeremy
f0fdc9d5c0 Go To Implementation for Trait 2019-01-31 18:34:52 -05:00
Aleksey Kladov
2d1f0b105d move test 2019-01-31 22:23:30 +02:00
Aleksey Kladov
40feacdeb9 split macros across crates 2019-01-31 22:23:30 +02:00
Aleksey Kladov
ad80a0c551 preserve token spacing 2019-01-31 22:23:30 +02:00
Aleksey Kladov
5934738854 first test sort-of passes 2019-01-31 22:23:30 +02:00
Aleksey Kladov
ce3636798b move macros to a separate crate 2019-01-31 22:23:30 +02:00
Aleksey Kladov
9a043a163c parses simple macro 2019-01-31 22:23:30 +02:00
Aleksey Kladov
0d9210e9bc handle multibyte tokens 2019-01-31 22:23:30 +02:00
Aleksey Kladov
f3489e8111 add eat methods 2019-01-31 22:23:30 +02:00
Aleksey Kladov
e28a5e048a parsing scaffold 2019-01-31 22:23:30 +02:00
Aleksey Kladov
2980508ad2 debug impls 2019-01-31 22:23:30 +02:00
Aleksey Kladov
82cf0185c3 add repeats to ast 2019-01-31 22:23:30 +02:00
Aleksey Kladov
3bd4560d6e convert punts and literals 2019-01-31 22:23:30 +02:00
Aleksey Kladov
c09c6fc97c start tt convertions boilerplate 2019-01-31 22:23:30 +02:00
Aleksey Kladov
a4342a7fee add conversion boilerplate 2019-01-31 22:23:30 +02:00
Aleksey Kladov
ca327f35ad add macro by example ide 2019-01-31 22:23:30 +02:00
Aleksey Kladov
6846ac2a16 shorten name :-) 2019-01-31 22:23:30 +02:00
Aleksey Kladov
b8f56f89c6 start token tree module 2019-01-31 22:23:30 +02:00
bors[bot]
28fdb8d03c Merge #701
701: Minor type inference tweaks r=flodiebold a=marcusklaas

Pass down expectation for reference expressions and type the guard in match expressions.

I wasn't able to add a test for the former addition because the type variable previously introduced would always resolve to the right type in the things I tried!

Co-authored-by: Marcus Klaas de Vries <mail@marcusklaas.nl>
2019-01-30 20:51:47 +00:00
Florian Diebold
1acff307fe Move expr_scopes query to its module 2019-01-30 21:39:34 +01:00
Florian Diebold
65864d85f9 Rename FnScopes -> ExprScopes
The reason for this is that it describes scopes for any body expression, not
just that of a function. It did not actually refer to functions at all anymore.
2019-01-30 21:23:50 +01:00
Marcus Klaas de Vries
13cb4a1b37 Add test for passing on ref expectations 2019-01-30 21:14:26 +01:00
Aleksey Kladov
ef7eb8c257 Use Crate instead of CrateId 2019-01-30 22:37:20 +03:00
Aleksey Kladov
95aa7e46fc move item_map_query 2019-01-30 22:36:22 +03:00
kjeremy
04eb15856b Resolve crate 2019-01-30 13:18:21 -05:00
Jeremy Kolb
3c17643b30 Go to Implementation for structs and enums 2019-01-29 19:13:02 -05:00
Marcus Klaas de Vries
3daca3eb4d Infer type of match guard 2019-01-28 23:09:14 +01:00
WizardOfMenlo
ec32b2e39c Use match-all instead of individual branches 2019-01-28 17:17:04 +00:00
WizardOfMenlo
9416904d14 Added support for primitive types type inference when using std::ops::Not 2019-01-28 14:52:43 +00:00
Marcus Klaas de Vries
6249989e6c Process second review 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
f6eb44cd9e Use type information from the turbofish 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
0da1e8b2f8 Add a FnSig to Ty::FnDef 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
089b1c57c1 Address some issues flagged in review 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
04748a0f16 Add missing ty test snapshot 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
aa06893a14 Add type params to FnSignature 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
67e40e431a Initial implementation of generics for method calls 2019-01-27 17:59:21 +01:00
Marcus Klaas de Vries
3bd47c0285 First attempt at generic type inference for fns 2019-01-27 17:59:21 +01:00
Erlend Tobiassen
b775fa285c
Revert parts of "Test non standard crate root"
Prefer cursor position over file_map
2019-01-27 16:32:31 +01:00
Erlend Tobiassen
b149882d19
Remove dbg!(...) 2019-01-27 15:44:59 +01:00
Erlend Tobiassen
08e12f974c
Fix bad rebase and rustfmt 2019-01-27 15:37:43 +01:00
Erlend Tobiassen
c5e6db16b1
fix #668 2019-01-27 15:19:38 +01:00
Erlend Tobiassen
683e5e64f4
Test non standard crate root 2019-01-27 15:15:56 +01:00
bors[bot]
ffcf618842 Merge #662
662: Preserve indentation in doc comments r=matklad a=kjeremy

Fixes #502 

Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
2019-01-27 08:21:04 +00:00
Florian Diebold
94bbb2418a Add marks 2019-01-26 23:59:11 +01:00
Florian Diebold
77f92674f9 Handle cycles in type vars
This might be the cause of #587.
2019-01-26 23:48:01 +01:00
bors[bot]
e40d8d4032 Merge #683
683: fix AST for if expressions r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-26 21:41:27 +00:00
Aleksey Kladov
619af1e22c fix AST for if expressions
then is not always a block...
2019-01-27 00:37:11 +03:00
Aleksey Kladov
a128075af9 remove Option<SourceFileItemId> hack 2019-01-26 23:27:01 +03:00
Aleksey Kladov
9c1a18a626 store syntax ptr in FileItems
we cache the tree in file_item query anyway
2019-01-26 22:48:04 +03:00
Aleksey Kladov
ae97a45c35 remove dead code 2019-01-26 22:43:07 +03:00
Jeremy Kolb
a892067951 Make doc comments optional 2019-01-26 10:35:23 -05:00
Aleksey Kladov
9457b1f0e6 rename source_file -> parse 2019-01-26 11:51:36 +03:00
Aleksey Kladov
4711cbcace rename FilesDatabase -> SourceDatabase 2019-01-26 11:20:30 +03:00
Aleksey Kladov
3223de5976 move ide queries to ide db 2019-01-26 11:17:05 +03:00
Aleksey Kladov
be1a005ebd fold syntax database into files database 2019-01-26 11:09:39 +03:00
Aleksey Kladov
23172a116c rename POS_FIELD -> POS_FIELD_DEF
to match NAMED_FIELD_DEF
2019-01-26 00:24:12 +03:00
bors[bot]
3c7acecade Merge #656
656: :arrow_up deps r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-25 20:43:09 +00:00
bors[bot]
d0ddc5a7c1 Merge #655
655: Fix type inference of binops on int/float variables r=matklad a=flodiebold

Fixes #651.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-25 20:36:56 +00:00
Florian Diebold
5a1385007c Fix type inference of binops on int/float variables
Fixes #651.
2019-01-25 21:32:49 +01:00
Aleksey Kladov
1fd18f020d ⬆️ salsa 2019-01-25 23:27:16 +03:00
Aleksey Kladov
54f30bb6d8 nicer behavior in case of bugs
We should always reach a fixed point, but if we fail, let's fail
loudly!
2019-01-25 23:13:07 +03:00
Jeremy A. Kolb
7a0bc2dd64 Add docs to struct fields 2019-01-25 14:29:56 -05:00
Aleksey Kladov
f0c6a040bd remove dead code 2019-01-25 21:14:41 +03:00
bors[bot]
cc73d3ccbc Merge #646
646: Add module documentation support r=matklad a=kjeremy



Co-authored-by: Jeremy A. Kolb <jkolb@ara.com>
2019-01-25 17:55:29 +00:00
Jeremy A. Kolb
6588579116 Add module documentation support 2019-01-25 12:51:36 -05:00
Aleksey Kladov
9f2574c97e add ability to get strcut field source 2019-01-25 20:38:03 +03:00
Aleksey Kladov
0044514a4e remember where fields resolve to during inference 2019-01-25 20:02:53 +03:00
bors[bot]
021e691997 Merge #639
639: Update salsa r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-25 12:34:10 +00:00
Aleksey Kladov
08c12e424d use set methods 2019-01-25 15:25:01 +03:00
Aleksey Kladov
8cf092d5de :arrow_up salsa 2019-01-25 15:16:50 +03:00
Aleksey Kladov
64d4f42558 reduce visibility 2019-01-25 14:25:30 +03:00
Aleksey Kladov
87ac5f5b36 use positional ids for fields 2019-01-25 14:21:14 +03:00
Aleksey Kladov
47e5536678 rename struct field -> struct field data 2019-01-25 12:58:01 +03:00
Aleksey Kladov
87288d802c pack enum variants into arena 2019-01-25 12:50:46 +03:00
Aleksey Kladov
2ee2fba752 switch to positional enum variants 2019-01-25 11:35:38 +03:00
Aleksey Kladov
0707f65806 drop obsolete fixme 2019-01-25 10:31:45 +03:00
Aleksey Kladov
3b45ddd984 deglobify 2019-01-25 10:29:55 +03:00
Aleksey Kladov
74beb5bfcb simplify 2019-01-25 10:29:00 +03:00
Aleksey Kladov
ed27bd8d77 remove useless wrapper 2019-01-25 10:20:35 +03:00
Aleksey Kladov
b90b90cb95 fix comment 2019-01-25 10:17:50 +03:00
Aleksey Kladov
bc77f91cf6 rename def_id -> def 2019-01-25 10:16:28 +03:00
Aleksey Kladov
e884ab05c2 write path resolution code only once 2019-01-25 10:15:10 +03:00
Aleksey Kladov
857c35ddb0 refactor import resolution
extract path resolution
use enums instead of bools
2019-01-25 10:08:21 +03:00
Aleksey Kladov
31d3a56b18 move adt to adt 2019-01-25 01:53:07 +03:00
Aleksey Kladov
a03c109f50 Kill DefId 2019-01-25 01:41:36 +03:00
Aleksey Kladov
1ccf73c836 kill DefKindc 2019-01-25 01:38:21 +03:00
Aleksey Kladov
ff9c5bef7b ModuleDef is Def-free 2019-01-25 01:32:47 +03:00
Aleksey Kladov
0f2f3a21e7 Migrate trait & type to new ids 2019-01-25 01:31:32 +03:00
Aleksey Kladov
00ba70a095 generalize 2019-01-25 01:05:50 +03:00
Aleksey Kladov
1db2cbcb8b move consts&statics to new id 2019-01-25 00:50:08 +03:00
Aleksey Kladov
f588535273 remove boilerplate 2019-01-25 00:32:37 +03:00
Aleksey Kladov
90215eb5a0 generalize boilerplate 2019-01-25 00:02:18 +03:00
Aleksey Kladov
1a5f32fcb5 remove dead code 2019-01-24 23:46:48 +03:00
Aleksey Kladov
f3a37522a0 removed untyped typabledef 2019-01-24 23:39:39 +03:00
Aleksey Kladov
6a5a1f5902 adapt ide_api to the new API 2019-01-24 23:36:16 +03:00
Aleksey Kladov
4c514a3e02 move enum variant to the new API 2019-01-24 23:32:41 +03:00
Aleksey Kladov
11dda8a0fb remove useless aliases 2019-01-24 19:29:44 +03:00
Aleksey Kladov
a7c0336a75 macro-generate froms 2019-01-24 19:16:25 +03:00
Aleksey Kladov
ce2041252a kill unused defs 2019-01-24 18:57:38 +03:00
Aleksey Kladov
566c8e321e migrate enums to new id 2019-01-24 18:56:38 +03:00
Aleksey Kladov
cefc5cbb4a introduce EnumId 2019-01-24 17:56:00 +03:00
Aleksey Kladov
60a607d33f new struct id 2019-01-24 17:54:18 +03:00
Aleksey Kladov
c57a857988 add StructId 2019-01-24 16:18:20 +03:00
Aleksey Kladov
1754dd9fdd remove DefKind::Function 2019-01-24 15:31:12 +03:00
Aleksey Kladov
ec7ed054e0 Functions use new id scheme 2019-01-24 15:28:50 +03:00
Aleksey Kladov
f1959bbae0 add FunctionId 2019-01-24 13:34:41 +03:00
Aleksey Kladov
3ab1519cb2 Change ids strategy
this is a part of larghish hir refactoring which aims to

* replace per-source-root module trees with per crate trees
* switch from a monotyped DedId to type-specific ids
2019-01-24 13:29:19 +03:00
Aleksey Kladov
9fe09db771 encapsulate hir locations 2019-01-24 12:41:08 +03:00
Jeremy Kolb
f87ce73579 Add a comment 2019-01-23 20:13:36 -05:00
Jeremy A. Kolb
7b548de634 Add a bunch of new documentation to completions 2019-01-23 17:46:14 -05:00
Jeremy A. Kolb
576625f0a1 Add way of getting docs from the code model and use for completion 2019-01-23 16:32:04 -05:00
Aleksey Kladov
bea75e0943 drop obsolete comment 2019-01-23 20:45:32 +03:00
Aleksey Kladov
59f830d3e8 assign DefIds when lowering 2019-01-23 19:49:11 +03:00
Aleksey Kladov
d4ed25d86f introduced better typed AstPtr 2019-01-23 18:26:02 +03:00
Aleksey Kladov
e22b6edae5 refactor 2019-01-23 18:09:45 +03:00
Aleksey Kladov
343852d8b2 simiplify 2019-01-23 17:57:41 +03:00
Aleksey Kladov
d853e9b1ef better names 2019-01-23 17:52:35 +03:00
Aleksey Kladov
7b901f86cd move SyntaxPtr to ra_syntax 2019-01-23 17:37:10 +03:00
Aleksey Kladov
2dbf58c579 move completion item tests closer to the code
this is the reason why we need marks: the tests were spread across two
files, because I've forgotten that there were tests already
2019-01-23 16:05:13 +03:00
Aleksey Kladov
45da21672a generalize marking infrastructure 2019-01-23 15:36:29 +03:00
Aleksey Kladov
28661facf6 ⬆️ insta 2019-01-23 15:04:38 +03:00
gfreezy
13d2fd32ab fix completion bugs 2019-01-23 15:43:47 +08:00
Jeremy A. Kolb
7c27e6d2b3 Update snaps 2019-01-22 09:51:29 -05:00
Jeremy Kolb
b540451483 Move docs to Function 2019-01-22 08:55:05 -05:00
Jeremy Kolb
b77d780f0e Thread documentation through FnSignature and CompletionItem 2019-01-21 21:42:37 -05:00
Aleksey Kladov
49596bbc2b ⬆️ insta 2019-01-22 01:28:57 +03:00
Florian Diebold
a252110616 Use insta for ty tests 2019-01-21 22:52:35 +01:00
Florian Diebold
e45f476d56 Fix panic trying to get substs on unknown type
Fixes #585.
2019-01-21 21:42:19 +01:00
Florian Diebold
3c4a4c6ae9 Fix panic on inferring field access on an enum 2019-01-20 18:14:19 +01:00
Florian Diebold
5f3509e140 Add an assert 2019-01-19 19:00:36 +01:00
Florian Diebold
969f588025 Generics -> GenericParams 2019-01-19 18:58:04 +01:00
Florian Diebold
9e4b5ecec4 Make generics work in struct patterns 2019-01-19 16:02:06 +01:00
Florian Diebold
d37bb128ef Collect generic args in struct variant paths as well 2019-01-19 16:02:06 +01:00
Florian Diebold
cc4562ab6e Collect generic args in type paths
E.g. `let x: A<X>` is handled correctly.
2019-01-19 16:02:06 +01:00
Florian Diebold
fa7f9d696f Make Module impl methods crate-private, update some comments 2019-01-19 16:02:06 +01:00
Florian Diebold
5862542ded Add AST/HIR for type args in path segments 2019-01-19 16:02:06 +01:00
Florian Diebold
688a45e00b Implement beginnings of generics
- add HIR for generic params
 - resolve generic params in type paths
 - add substitions for ADTs
 - insert type variables for substitutions
2019-01-19 16:02:06 +01:00
Florian Diebold
415cdc5210 Add some tests 2019-01-19 15:49:48 +01:00
Florian Diebold
573f6f8656 Refactor/simplify path resolution 2019-01-19 14:48:07 +01:00
Marcus Klaas de Vries
fa43ef30f4 Change parsing of struct field patterns 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
bcbfa2cc11 Finish move of StructField for pattern type inference 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
4277f420aa Replace Expectation by &Ty in infer_pat method 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
f9a6050034 Move parsing of field pattern lists to the parser (where it belongs) 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
d2769837f1 Move pattern type inference from adt::StructField to core_model_impl (WIP) 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
b5466f3fb3 Address issues flagged in review 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
5027c5d4ee Fix bug in match arm type unification 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
44e9a9605b Fixup annotated bindings 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
d48d5b8b6c Add initial (flawed) implementation of binding annotations 2019-01-19 15:37:26 +03:00
Marcus Klaas de Vries
9433a108cf Make pattern inference work w/o proper expecations 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
be1b4034a5 Infer pattern types for lambdas and loops 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
06d16a18f6 Implement match binding type inference and arm unification 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
ac216880f5 Implement unlabeled struct field pattern inference 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
3340807bd2 Get basic struct pattern type inference working! 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
ab5deb7811 Create struct patterns up to the hir level 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
9c2d83a4c8 Add crude implementation of tuplestruct pattern inference 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
3b0de53904 Work on type inference for ADT patterns 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
5648dcd36e Implement type inference for tuples and refs 2019-01-19 15:37:25 +03:00
Marcus Klaas de Vries
afaa26636e Add additional pattern variants 2019-01-19 15:37:25 +03:00
Aleksey Kladov
e13c9188fe fix the test 2019-01-19 15:37:25 +03:00
Aleksey Kladov
63f7dadc11 rename LoweredImport -> ImportId 2019-01-19 15:37:25 +03:00
Aleksey Kladov
c0aeb5204c switched to lowerd module 2019-01-19 15:37:25 +03:00
Aleksey Kladov
b93c6bc557 simplify 2019-01-19 15:37:25 +03:00
Aleksey Kladov
789772e8e5 move input module items to the lower module 2019-01-19 15:37:25 +03:00
gfreezy
5c8cb56506 move rename to a new mod 2019-01-19 15:36:58 +03:00
Aleksey Kladov
a2ca03d10b ⬆️ salsa 2019-01-17 14:11:00 +03:00
Hirokazu Hata
0aedd4fb2f Add Ty::Array to walk_mut 2019-01-17 00:08:53 +09:00
Hirokazu Hata
f66ca1bd2e Fix test case invalid syntax 2019-01-16 23:39:14 +09:00
Hirokazu Hata
5c570fa770 Remove unneeded code 2019-01-16 23:39:14 +09:00
Hirokazu Hata
478ce1c8b5 Fix infer array test 2019-01-16 23:37:42 +09:00
Hirokazu Hata
5d3884d5b4 Fix Ty::Array 2019-01-16 23:37:42 +09:00
Hirokazu Hata
2a3262c757 Add infer array test 2019-01-16 23:35:06 +09:00
Hirokazu Hata
d665acbbec Implement array inference 2019-01-16 23:35:06 +09:00
Marcus Klaas de Vries
a2b6d3da30 Implement rudimentary type inference for unary operators 2019-01-16 00:04:39 +01:00
Aleksey Kladov
02c3d2f78e hir is cancelation free 2019-01-15 20:56:06 +03:00
Aleksey Kladov
8ba9c2d4ce remove Cancelable from type inference 2019-01-15 20:54:18 +03:00
Aleksey Kladov
b871062e32 remove Cancelable from Ty 2019-01-15 20:43:37 +03:00
Aleksey Kladov
fafcd103d2 remove Cancelable from ids 2019-01-15 19:18:52 +03:00
Aleksey Kladov
490112dea1 remove Cancelable from nameres 2019-01-15 19:15:01 +03:00
Aleksey Kladov
18e9a710cd remove Cancelable from fn_scopes 2019-01-15 19:04:49 +03:00
Aleksey Kladov
040a622c52 remove Cancelable from funciton body 2019-01-15 19:01:59 +03:00
Aleksey Kladov
f1367e0370 remove Cancelable from navigation target 2019-01-15 18:50:16 +03:00
Aleksey Kladov
9dd4099d93 remove Cancelable from static&const API 2019-01-15 18:45:01 +03:00
Aleksey Kladov
9446be2999 remove Cancelable from adt API 2019-01-15 18:43:25 +03:00
Aleksey Kladov
8af9a18660 remove Cancelable from Crate API 2019-01-15 18:33:26 +03:00
Aleksey Kladov
c159e414b4 remove Cancelable from Module API, part 2 2019-01-15 18:30:58 +03:00
Aleksey Kladov
ca52cf1ecd remove Cancelable from Module API 2019-01-15 18:26:29 +03:00
Aleksey Kladov
11f3c8afb2 remove Cancelable from source binders 2019-01-15 18:13:49 +03:00
Aleksey Kladov
68ff52566d remove Cancelable from module_tree_query 2019-01-15 17:55:15 +03:00
Aleksey Kladov
fedd320cf2 check_canceled does not return Result 2019-01-15 15:45:48 +03:00
Aleksey Kladov
dd45697e53 update salsa 2019-01-15 15:06:45 +03:00
Marcus Klaas de Vries
37ba237e66 Address issues found in review 2019-01-14 21:52:08 +01:00
Marcus Klaas de Vries
d67eabb512 Fix type inference for raw (byte) strings 2019-01-14 20:56:14 +01:00
Marcus Klaas de Vries
2689348772 Give literal expression default values for now 2019-01-14 19:46:10 +01:00
Marcus Klaas de Vries
a9a6a50c75 Fixup tests 2019-01-14 19:30:21 +01:00
Marcus Klaas de Vries
606d66a714 Start moving literal interpretation to the AST (WIP) 2019-01-14 13:56:43 +01:00
Marcus Klaas de Vries
81bc8e4973 don't try to treat arrays and tuples as literals 2019-01-14 13:55:49 +01:00
Marcus Klaas de Vries
1574715be5 Use type variables to determine exact type for ambiguous numeric literals 2019-01-14 13:54:31 +01:00
Marcus Klaas de Vries
5f5dc20d85 Try implementing integer type inference (WIP) 2019-01-14 13:52:57 +01:00
Marcus Klaas de Vries
a6146d35b1 Implement type inference for literals (WIP) 2019-01-14 13:52:55 +01:00
Aleksey Kladov
eedc08300c goto defenition works for type-inferred methods 2019-01-13 18:56:57 +03:00
Hirokazu Hata
139da0841d Fix tuple test case 2019-01-13 22:23:06 +09:00
Hirokazu Hata
6e73cc89b6 Implement tuple inference 2019-01-13 21:10:01 +09:00
Hirokazu Hata
829f668bd7 Add infer tuple test 2019-01-13 21:04:03 +09:00
bors[bot]
0199572a3d Merge #517 #518
517: gracefully handle cycles in crate graph r=matklad a=matklad



518: Add an explanatory message when we use the Query fallback r=matklad a=DJMcNab

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

There is no good way to explain it for go_to_def, so I've just fallen back on to_vec.

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com>
2019-01-13 10:41:47 +00:00
Aleksey Kladov
77f67ca7e2 gracefully handle cycles in crate graph
rust-lang/rust has absolutely weird setup with rustc-workspace-shim,
which leads to real cycles.
2019-01-13 13:39:48 +03:00
Aleksey Kladov
8e554ea5fa support ref-patterns 2019-01-13 13:36:06 +03:00
Florian Diebold
1ed7fbfc1b args -> params 2019-01-12 21:58:16 +01:00
Florian Diebold
5db5f5cc1d Small improvements from review comments 2019-01-12 21:51:56 +01:00
Florian Diebold
082ef52bcb Implement basic inherent method resolution 2019-01-12 15:01:19 +01:00
Florian Diebold
1212e59bee Fix assertion error in unification (hopefully)
Currently, all types that we handle during inference need to be resolved as far
as possible at the time. It's maybe too brittle of an invariant; I need to think
how we can do this better. This should fix #484 though, I hope (if
it's the same case as I managed to reproduce).
2019-01-11 22:59:00 +01:00
Aleksey Kladov
f193fbcbae actually produce missing def kinds 2019-01-11 21:02:12 +03:00
Aleksey Kladov
19136cde00 uncopypaste def sources 2019-01-11 20:43:10 +03:00
Aleksey Kladov
0f9c350812 add missing def kinds 2019-01-11 20:28:10 +03:00
Aleksey Kladov
2d3940d0ab rename TreePtr -> TreeArc
This is much clearer about the semantics
2019-01-11 19:59:06 +03:00
Aleksey Kladov
f9ed8d4d23 envapsulate navigation target better 2019-01-11 16:01:57 +03:00
Florian Diebold
a6590ce231 Use name resolution for goto definition 2019-01-10 21:32:54 +01:00
bors[bot]
dc2a8d5acc Merge #470
470: Type inference for enum variants r=flodiebold a=marcusklaas

Opened a new PR instead of https://github.com/rust-analyzer/rust-analyzer/pull/461. Totally botched that one.

I think I resolved all the issues mentioned there.

Co-authored-by: Marcus Klaas de Vries <mail@marcusklaas.nl>
2019-01-10 19:12:40 +00:00
Aleksey Kladov
32fa084c07 introduce marking infrastructure for maintainable tests
This also fixes a particular edge case in name resolution.
2019-01-10 16:45:09 +03:00
Marcus Klaas de Vries
e78286c8e8 Save variant names in EnumData to reduce needless queries
We already have their names when anyway, and when in all (current)
situations where we're interested in an Enum's variants, we want
their names.
2019-01-10 14:43:01 +01:00
Marcus Klaas de Vries
978de5cf8b Implement type inference for enum variants 2019-01-10 14:32:56 +01:00
bors[bot]
aca14c591f Merge #475
475: Show types of fields in completion r=matklad a=matklad

![image](https://user-images.githubusercontent.com/1711539/50910524-0f146200-143f-11e9-84d6-0ba80761cd89.png)

r? @flodiebold 


Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-10 13:07:19 +00:00
Aleksey Kladov
f72c031eb9 implement RefUnwindSafe 2019-01-10 13:04:04 +03:00
Aleksey Kladov
56b2138d82 show field types in completion 2019-01-09 19:40:11 +03:00
Aleksey Kladov
e8815b614e nicer trailing comma handling in types 2019-01-09 19:14:21 +03:00
bors[bot]
76b3985d70 Merge #473
473: Partial typo fix r=matklad a=marcusklaas

This fixes some typos. Mostly in documentation, but also some code is affected (`defenition` was used in a few method names).

Co-authored-by: Marcus Klaas de Vries <mail@marcusklaas.nl>
2019-01-09 12:20:05 +00:00
Marcus Klaas de Vries
0b8fbb4fad Fix typos in ARCHITECTURE.md and a number of crates
specifically: gen_lsp_server, ra_arena, ra_cli, ra_db, ra_hir
2019-01-09 01:17:09 +01:00
Aleksey Kladov
5609989368 more stable DefIds via bfs tree walking 2019-01-09 01:57:40 +03:00
Marcus Klaas de Vries
f8261d611a Fix typo defenition -> definition 2019-01-08 23:38:51 +01:00
Aleksey Kladov
2dc85619be one more invalidation test 2019-01-09 00:54:06 +03:00
Aleksey Kladov
bcb6fabd15 fix test naming 2019-01-09 00:49:21 +03:00
Aleksey Kladov
8f93e7b9a4 remove duplication in tests 2019-01-09 00:48:54 +03:00
Aleksey Kladov
695294bbb9 ra_db is independent from editor 2019-01-08 21:03:42 +03:00
Aleksey Kladov
13301f284c ra_hir does not depend on ra_editor 2019-01-08 21:01:41 +03:00
Aleksey Kladov
702bdacb03 move node at offset to aglo already 2019-01-08 21:01:41 +03:00
Aleksey Kladov
ac92973a6c move function to code_model_api 2019-01-08 20:11:13 +03:00
Aleksey Kladov
ed4f13e5c7 remove FnSignatureInfo from hir 2019-01-08 18:38:34 +03:00
Florian Diebold
946b0ba02c Fix name resolution across source roots
It was using the wrong name in that case.
2019-01-08 15:16:24 +01:00
Florian Diebold
d4b44a092f Fix use tree desugaring 2019-01-08 15:00:29 +01:00
bors[bot]
562b448f9e Merge #458
458: dont reexport module id r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-08 13:36:13 +00:00
Aleksey Kladov
544c63b58e dont reexport module id 2019-01-08 16:35:36 +03:00
Aleksey Kladov
d4c8310d05 switch interner to use arena 2019-01-08 15:53:32 +03:00
Aleksey Kladov
54e5c4f085 minimize visibility 2019-01-08 15:40:02 +03:00
Aleksey Kladov
5edcf313f6 move query impls to adt 2019-01-08 15:38:29 +03:00
Aleksey Kladov
64f202bdd7 move variant public api to api 2019-01-08 15:32:27 +03:00
Aleksey Kladov
2d0ab52212 move variants to API 2019-01-08 15:28:08 +03:00
Aleksey Kladov
71c7936932 minor 2019-01-08 15:23:56 +03:00
Aleksey Kladov
2d4dc22af8 move enum to code_model_api 2019-01-08 15:22:57 +03:00
Aleksey Kladov
e30c533eb6 move stuct to code_model_api 2019-01-08 15:19:37 +03:00
bors[bot]
3bb1cb7017 Merge #455
455: Import fixpoint loop for name resolution r=matklad a=flodiebold

This implements reexports, so only the glob import part of #231 remains.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-08 12:02:06 +00:00
Florian Diebold
dc186c0fcc Import fixpoint loop for name resolution 2019-01-08 12:53:31 +01:00
Aleksey Kladov
50d5e37481 convert some if-lets to match 2019-01-08 14:23:00 +03:00
Aleksey Kladov
fa6e0b0d38 itroduce trait for ast tokens 2019-01-08 12:23:10 +03:00
Aleksey Kladov
3ffd5dd2a6 migrate ra_analysis to new rowan 2019-01-08 11:47:28 +03:00
Aleksey Kladov
da0b348ae9 migrate ra_hir to rowan 2.0 2019-01-08 11:28:42 +03:00
Marcus Klaas de Vries
e51d44a2de Process explicit type hints for str, bool and char 2019-01-07 20:43:41 +01:00
Marcus Klaas de Vries
5d15dd70b0 Tidy up binary operator type inference; add test file 2019-01-07 20:39:23 +01:00
Marcus Klaas de Vries
7b0eaef580 Implement type inference for more binary operators
Mostly just for primitive numeric types such as u32 and f64. Not
yet a general solution using trait resolution.
2019-01-07 20:11:31 +01:00
Marcus Klaas de Vries
3238c06a5a Add remaining binary operations to AST 2019-01-07 19:04:25 +01:00
Florian Diebold
7bb279b365 Implement autoderef for field accesses 2019-01-07 14:54:23 +01:00
Florian Diebold
d618b1f2ce if let -> match 2019-01-07 01:10:29 +01:00
Florian Diebold
2dfb5e6ac0 Improve types for node_expr / node_pat 2019-01-07 00:05:19 +01:00
Florian Diebold
71f7d82e45 Introduce ArenaMap 2019-01-07 00:05:19 +01:00
Florian Diebold
cf49a11263 Sort ranges in type inference tests
Also rename the files to remove the numbers (they don't serve a purpose now that
there are only the data files).
2019-01-07 00:05:19 +01:00
Florian Diebold
6210e82041 Use HIR Expr for type inference
Now we can reuse the type inference inside a function when typing whitespace
etc. :)
2019-01-07 00:05:19 +01:00
bors[bot]
31c1999505 Merge #440
440: Implement type inference for boolean operators r=flodiebold a=marcusklaas

Tried implementing the easiest part of https://github.com/rust-analyzer/rust-analyzer/issues/390. Hope this is somewhat close to what the intent of the issue was. Found it surprisingly easy to find my way around the repository - it's well organized!

Very grateful for any pointers.

Co-authored-by: Marcus Klaas de Vries <mail@marcusklaas.nl>
2019-01-06 21:28:36 +00:00
Marcus Klaas de Vries
82d9a77dad Touch up type inference for boolean operators
Also try to infer its subexpressions and set type expectations
whenever possible.
2019-01-06 22:17:54 +01:00
Aleksey Kladov
8a3b489c2f kill module source 2019-01-06 20:01:26 +03:00
Aleksey Kladov
733383446f move submodule computationt to module_tree 2019-01-06 17:44:50 +03:00
Aleksey Kladov
17b2994b99 fix the test 2019-01-06 17:38:20 +03:00
Aleksey Kladov
5b0267ecf7 fix after rebase 2019-01-06 17:37:18 +03:00
Aleksey Kladov
fd4456d0ec flatten module structure 2019-01-06 17:36:10 +03:00
Aleksey Kladov
5a505189a8 adjust comments 2019-01-06 17:35:57 +03:00
Aleksey Kladov
a7f4f7bfcc split module source into decl/defin 2019-01-06 17:35:57 +03:00
Aleksey Kladov
9cb02fd931 kill old module 2019-01-06 17:35:57 +03:00
Aleksey Kladov
3c2cb89087 add parent & resolve_path 2019-01-06 17:35:29 +03:00
Aleksey Kladov
1836f4db35 make source cancelable 2019-01-06 17:35:29 +03:00
Aleksey Kladov
b37fba7136 make deps cancelable 2019-01-06 17:35:29 +03:00
Aleksey Kladov
61687b9db6 fix tests 2019-01-06 17:35:29 +03:00
Aleksey Kladov
8c4d277036 switch source-binders to Module 2019-01-06 17:35:29 +03:00
Aleksey Kladov
147b0f94e6 Start code_model::Module 2019-01-06 17:35:29 +03:00
Aleksey Kladov
9a820dc0ee move crate to code_model_api 2019-01-06 17:35:29 +03:00
Florian Diebold
98957f4e6f Add fn signature query 2019-01-06 01:13:31 +01:00
Florian Diebold
e5a6cf8153 Various small code review improvements 2019-01-06 00:38:08 +01:00
Florian Diebold
8e3e5ab2c8 Make FnScopes use hir::Expr
This was a bit complicated. I've added a wrapper type for now that does the
LocalSyntaxPtr <-> ExprId translation; we might want to get rid of that or give
it a nicer interface.
2019-01-06 00:29:36 +01:00
Florian Diebold
136aba1cf3 Add HIR Expr machinery 2019-01-05 22:41:12 +01:00
Florian Diebold
a6f33b4ca5 Add test for invalidation of inferred types when typing inside function
This currently fails, but should work once we have hir::Expr.
2019-01-05 22:41:12 +01:00
Marcus Klaas de Vries
4fc233a02e Implement type inference for boolean operators 2019-01-05 21:28:30 +01:00
bors[bot]
4a3ef8fe63 Merge #370
370: Self params & type r=matklad a=flodiebold

This implements type inference for `self`, so field completion for methods taking `self` works now.

 - rename `IMPL_ITEM` to `IMPL_BLOCK` -- rustc calls the methods etc. inside an impl `ImplItem`s, and the impl itself doesn't define an item, so I thought this name was clearer.
 - add HIR for impl blocks -- we collect all impls in a crate at once, so we can go from methods to containing impls, and since we will later also need to find all impls for a certain type (which may be anywhere in the crate, I think?). We could be more lazy here, but I don't know if it's worth the complexity.
 - resolve `self` and `Self` during type inference
 - refactor a bit in ty.rs as well

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-04 19:55:23 +00:00
Aleksey Kladov
6c8e54aaee ⬆️ salsa 2019-01-04 22:31:13 +03:00
Florian Diebold
e6aeabf96f Rename ImplsInCrateQuery as well 2019-01-04 19:52:07 +01:00
Florian Diebold
443ddb73c3 Do impl collection per module, not per crate 2019-01-04 19:29:53 +01:00
Florian Diebold
334ca0d9a7 Rename ImplBlock::target -> target_type, and add target_trait already 2019-01-04 19:16:39 +01:00
Florian Diebold
6ab0e292d2 Refactor a bit 2019-01-04 19:14:22 +01:00
Florian Diebold
538147bf94 Resolve the Self type 2019-01-04 19:13:50 +01:00
Florian Diebold
d4db61b9a1 Resolve the self parameter during type inference 2019-01-04 19:12:29 +01:00
Florian Diebold
111126ed3c Type the self parameter 2019-01-04 19:10:50 +01:00
Florian Diebold
ae9530addc Add HIR for impl blocks
Since we need to be able to go from def to containing impl block, as well as the
other direction, and to find all impls for a certain type, a design similar to
the one for modules, where we collect all impls for the whole crate and keep
them in an arena, seemed fitting. The ImplBlock type, which provides the public
interface, then consists only of an Arc to the arena containing all impls, and
the index into it.
2019-01-04 19:10:47 +01:00
Florian Diebold
226e31dae9 Add test for self type inference 2019-01-04 18:28:43 +01:00
Florian Diebold
fe6c4115f6 Rename ImplItem to ImplBlock
rustc uses the name ImplItem for items in impls, not the impl {} block itself,
which could lead to confusion.
2019-01-04 18:28:36 +01:00
Aleksey Kladov
3fe6f422f9 remove id arena 2019-01-04 16:58:10 +03:00
Aleksey Kladov
d61707b4e1 index stuff produced by macros 2019-01-03 21:29:17 +03:00
Aleksey Kladov
3e764f97eb hardcode vec macro 2019-01-03 14:48:23 +03:00
Aleksey Kladov
28f6eedba5 simplify runnables 2019-01-02 20:12:38 +03:00
Aleksey Kladov
1076e82856 small rename 2019-01-02 16:00:35 +03:00
Aleksey Kladov
35b3fc02e0 comments 2019-01-02 16:00:01 +03:00
Aleksey Kladov
4fe0ec5497 rename 2019-01-02 12:49:47 +03:00
Aleksey Kladov
db8d293208 move macro id to ids 2019-01-02 00:37:36 +03:00
Aleksey Kladov
42cc77703b move more stuff to ids 2019-01-02 00:30:00 +03:00
Aleksey Kladov
37ed2f35ba rename MFileId -> HirFileId 2019-01-02 00:09:54 +03:00
Aleksey Kladov
9c65e61849 introduce ids module 2019-01-01 22:47:10 +03:00
Aleksey Kladov
fca1422ea3 add tests for macro generated items 2019-01-01 22:15:35 +03:00
Aleksey Kladov
756e878158 add items from macros to modules 2019-01-01 22:15:35 +03:00
Aleksey Kladov
4a3f76d3bb wip 2019-01-01 22:15:35 +03:00
Aleksey Kladov
f8d419ee89 fix tests 2019-01-01 22:15:35 +03:00
Aleksey Kladov
289391e163 use MFile 2019-01-01 22:15:35 +03:00
Aleksey Kladov
4161466918 introduce MFileId 2019-01-01 22:15:35 +03:00
Aleksey Kladov
9d4af40995 work towards brining macros to nameres 2019-01-01 22:15:35 +03:00
Aleksey Kladov
7dc45745a3 save top-level macros in module items 2019-01-01 22:15:35 +03:00
Aleksey Kladov
e5b2fd6771 hard-code expansion of query_group 2019-01-01 22:15:35 +03:00
Aleksey Kladov
832bae8e28 fix tests 2019-01-01 22:15:35 +03:00
Aleksey Kladov
882a86240f rename 2019-01-01 22:15:35 +03:00
Aleksey Kladov
b2fec18098 move more macros to hir 2019-01-01 22:15:35 +03:00
Aleksey Kladov
57030f587b use macros database in analysis 2019-01-01 22:15:35 +03:00
Aleksey Kladov
d753656192 introduce MacrosDatabase 2019-01-01 22:15:35 +03:00
Jan Jansen
05daa86634 Make modules with tests runnable
Fixes #154
2018-12-31 15:00:04 +01:00
Florian Diebold
4142792d1f Add more docs in ty.rs
Also get rid of the indirection through query_definitions for the type-related
queries.
2018-12-29 20:27:13 +01:00
Florian Diebold
b1590bdf6a Missing return type means unit, not unknown 2018-12-29 12:08:57 +01:00
Florian Diebold
cfa1de72eb Implement type variables
This will really become necessary when we implement generics, but even now, it
allows us to reason 'backwards' to infer types of expressions that we didn't
understand for some reason.

We use ena, the union-find implementation extracted from rustc, to keep track of
type variables.
2018-12-29 12:04:34 +01:00
Aleksey Kladov
7928995876 nameify structs&enums 2018-12-28 21:34:58 +03:00
Aleksey Kladov
11122e29b7 completion for enum variants 2018-12-28 21:07:47 +03:00
Aleksey Kladov
1a860dba38 simplify 2018-12-28 20:45:58 +03:00
Aleksey Kladov
13631a2955 ⬆️ salsa 2018-12-28 19:10:31 +03:00
Aleksey Kladov
dddbac6877 remove FnId 2018-12-27 23:51:44 +03:00
Aleksey Kladov
e066050671 use names everywhere 2018-12-27 21:21:10 +03:00
Aleksey Kladov
63f54d234f dont leak Name details in testing 2018-12-27 21:02:08 +03:00
Aleksey Kladov
a9f55029b9 introduce known names 2018-12-27 20:26:15 +03:00
Aleksey Kladov
d963042ca9 introduce hir::Name 2018-12-27 20:07:21 +03:00
Aleksey Kladov
e4de2c8d7f add function to completion ctx 2018-12-27 17:33:52 +03:00
dependabot[bot]
4017966a0b
Bump parking_lot from 0.6.4 to 0.7.0
Bumps [parking_lot](https://github.com/Amanieu/parking_lot) from 0.6.4 to 0.7.0.
- [Release notes](https://github.com/Amanieu/parking_lot/releases)
- [Changelog](https://github.com/Amanieu/parking_lot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Amanieu/parking_lot/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-27 13:14:24 +00:00
dependabot[bot]
6fb53caea5
Bump arrayvec from 0.4.9 to 0.4.10
Bumps [arrayvec](https://github.com/bluss/arrayvec) from 0.4.9 to 0.4.10.
- [Release notes](https://github.com/bluss/arrayvec/releases)
- [Commits](https://github.com/bluss/arrayvec/compare/0.4.9...0.4.10)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-27 12:32:18 +00:00
Florian Diebold
bc745a1396 Resolve field types lazily
I.e. not already when getting the HIR for the struct.
2018-12-25 21:40:33 +01:00
Florian Diebold
cdca397061 Add a hir::TypeRef as an intermediate between ast::TypeRef and ty::Ty 2018-12-25 21:14:13 +01:00
Florian Diebold
2870effd5c Implement reference / pointer types
- parse them
 - infer types of & and * expressions
2018-12-25 20:36:06 +01:00
Florian Diebold
b96d361239 Handle structs/enums with missing names a bit better 2018-12-25 17:55:50 +01:00
Florian Diebold
3befd1a9e8 Cleanup 2018-12-25 15:44:10 +01:00
Florian Diebold
ab0b63992b Implement basic completion for fields 2018-12-25 15:27:15 +01:00
Florian Diebold
55c941cd9f Type field accesses 2018-12-25 15:16:42 +01:00
Florian Diebold
07a7285965 Collect field data for structs/enum variants 2018-12-25 15:16:42 +01:00
Florian Diebold
6fcd38cc81 Infer result of struct literals, and recurse into their child expressions 2018-12-25 15:16:42 +01:00
Florian Diebold
4ff1618520 Do name resolution by namespace (types/values) 2018-12-25 15:16:42 +01:00
Florian Diebold
b5b68f2094 Add basic HIR and types for structs/enums 2018-12-25 15:16:42 +01:00
Florian Diebold
4befde1eee Change inference tests to have one per file 2018-12-24 15:36:54 +01:00
Florian Diebold
655f5bc261 Rename a variable for consistency 2018-12-24 15:19:49 +01:00
Florian Diebold
76fb05d91d Clean up Ty a bit
Removing irrelevant comments copied from rustc etc.
2018-12-24 15:18:37 +01:00
Florian Diebold
a1d0b5bc3c Prepare Ty::new for resolution 2018-12-23 17:49:30 +01:00
Florian Diebold
c85748f5fb Type the return values of call expressions 2018-12-23 17:29:03 +01:00
Florian Diebold
ef67581104 Resolve paths to defs (functions currently) during type inference 2018-12-23 17:13:11 +01:00
Florian Diebold
93ffbf80c6 Make let statements kind of work 2018-12-23 14:01:50 +01:00
Florian Diebold
5d60937090 Remove unwraps 2018-12-23 13:48:04 +01:00
Florian Diebold
b4139d54fc Get rid of the terrible nesting in PathExpr inference 2018-12-23 13:48:04 +01:00
Florian Diebold
515c3bc59b Cleanup 2018-12-23 13:48:04 +01:00
Florian Diebold
7348f7883f Add testing infrastructure for type inference
- move dir_tests to test_utils for that.
2018-12-23 13:48:04 +01:00
Florian Diebold
3899898d75 Parse integer / float types 2018-12-23 13:48:04 +01:00
Florian Diebold
3ac605e687 Add beginnings of type infrastructure 2018-12-23 13:48:04 +01:00
Aleksey Kladov
49e746b010 completion uses hir scopes 2018-12-22 11:01:03 +03:00
bors[bot]
4e4ca27eab Merge #319
319: Completion icons r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2018-12-21 23:28:47 +00:00
Aleksey Kladov
8e056ef042 debug pring 2018-12-22 02:23:25 +03:00
Aleksey Kladov
97cb463c9b moar icons 2018-12-22 02:20:14 +03:00
bors[bot]
e4d0930d9c Merge #316
316: Fix handling of nested self in paths r=matklad a=DJMcNab

See https://github.com/rust-analyzer/rust-analyzer/issues/231#issuecomment-442449505.

Co-authored-by: DJMcNab <36049421+djmcnab@users.noreply.github.com>
2018-12-21 23:19:14 +00:00
DJMcNab
bb1ee2f13a Move the self handling from directly inside the loop 2018-12-21 23:01:16 +00:00
Aleksey Kladov
f1f2804c71 move completion items to conv 2018-12-22 01:59:32 +03:00
DJMcNab
d8d60215da Fix handling of nested self in paths 2018-12-21 22:29:59 +00:00
Aleksey Kladov
ccca5aae43 scope-based copmletions on original file 2018-12-22 00:52:02 +03:00
Aleksey Kladov
fd927ea3a9 use root-relative paths 2018-12-21 12:30:28 +03:00
Aleksey Kladov
2d4582bfc6 fixme comment 2018-12-20 12:15:38 +03:00
Aleksey Kladov
2caac99ef3 resolve paths across crates 2018-12-20 12:15:38 +03:00
Aleksey Kladov
590bd5f849 workaround across-crate resolve bugs 2018-12-20 12:15:38 +03:00
Aleksey Kladov
2fe41574a1 fix tests 2018-12-20 12:15:38 +03:00
Aleksey Kladov
26dcc70129 fix hir mock 2018-12-20 12:15:38 +03:00
Aleksey Kladov
85290bc134 switch analysis to vfs 2018-12-20 12:15:38 +03:00
Aleksey Kladov
cb6205c09d use relpaths for module resolve 2018-12-20 12:15:38 +03:00
Aleksey Kladov
1c5ce7a868 File module source does not depend on syntax 2018-12-19 01:51:05 +03:00
Aleksey Kladov
e7aa17b560 Gc syntax trees after every modification 2018-12-19 00:35:13 +03:00
Aleksey Kladov
d05790b947 Work around a bug
cc #288
2018-12-18 14:58:54 +03:00
Aleksey Kladov
5004cb928b verbose assertions in SourceFileItems 2018-12-09 14:21:54 +03:00
Aleksey Kladov
7784c7a701 resolve extern crates propertly 2018-12-09 13:49:54 +03:00
Aleksey Kladov
e89da32bb7 move tests to separate file 2018-12-09 13:33:16 +03:00
Aleksey Kladov
6a16d3fb0b WIP: resolve across crates 2018-12-09 13:33:16 +03:00
Aleksey Kladov
8b9ff46b37 make resolver fields private 2018-12-09 13:33:16 +03:00
Aleksey Kladov
74fe581061 return dependencies with names 2018-12-09 13:33:16 +03:00
Aleksey Kladov
ca7e5905c1 more crate boilerplate 2018-12-09 13:33:16 +03:00
Aleksey Kladov
9c6c7ec2da hir::Crate boilerplate 2018-12-09 13:33:16 +03:00
Aleksey Kladov
159525b120 Check Fileid in SourceFileMap 2018-12-09 13:18:46 +03:00
Aleksey Kladov
4cbc902fcc grand module rename 2018-12-08 19:30:35 +03:00
Aleksey Kladov
93c0b7d794 resolve 2018 style modules 2018-12-08 19:28:35 +03:00
Aleksey Kladov
db456749a8 make stuff private 2018-12-05 13:20:11 +03:00
Aleksey Kladov
4344264024 move fuzzy source binding to a separete mode 2018-12-05 13:16:20 +03:00