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