Commit graph

164 commits

Author SHA1 Message Date
Aleksey Kladov
87ac5f5b36 use positional ids for fields 2019-01-25 14:21:14 +03:00
Aleksey Kladov
31d3a56b18 move adt to adt 2019-01-25 01:53:07 +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
1db2cbcb8b move consts&statics to new id 2019-01-25 00:50:08 +03:00
Aleksey Kladov
f3a37522a0 removed untyped typabledef 2019-01-24 23:39:39 +03:00
Aleksey Kladov
4c514a3e02 move enum variant to the new API 2019-01-24 23:32:41 +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
60a607d33f new struct id 2019-01-24 17:54:18 +03:00
Aleksey Kladov
ec7ed054e0 Functions use new id scheme 2019-01-24 15:28:50 +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
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
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
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
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
Hirokazu Hata
0aedd4fb2f Add Ty::Array to walk_mut 2019-01-17 00:08:53 +09:00
Hirokazu Hata
5c570fa770 Remove unneeded code 2019-01-16 23:39:14 +09:00
Hirokazu Hata
5d3884d5b4 Fix Ty::Array 2019-01-16 23:37:42 +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
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
9446be2999 remove Cancelable from adt API 2019-01-15 18:43:25 +03:00
Aleksey Kladov
fedd320cf2 check_canceled does not return Result 2019-01-15 15:45:48 +03:00
Marcus Klaas de Vries
37ba237e66 Address issues found in review 2019-01-14 21:52:08 +01:00
Marcus Klaas de Vries
a9a6a50c75 Fixup tests 2019-01-14 19:30:21 +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
6e73cc89b6 Implement tuple inference 2019-01-13 21:10:01 +09:00
Florian Diebold
1ed7fbfc1b args -> params 2019-01-12 21:58:16 +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
Marcus Klaas de Vries
978de5cf8b Implement type inference for enum variants 2019-01-10 14:32:56 +01:00
Aleksey Kladov
e8815b614e nicer trailing comma handling in types 2019-01-09 19:14:21 +03: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
695294bbb9 ra_db is independent from editor 2019-01-08 21:03: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
71f7d82e45 Introduce ArenaMap 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
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
Marcus Klaas de Vries
4fc233a02e Implement type inference for boolean operators 2019-01-05 21:28:30 +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
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
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
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