Commit graph

1799 commits

Author SHA1 Message Date
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
bors[bot]
e2592cf090 Merge #450
450: Implement autoderef for field accesses r=matklad a=flodiebold

Which means we now get completion for fields e.g. in `&self` methods :)

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-07 14:04:30 +00:00
Florian Diebold
7bb279b365 Implement autoderef for field accesses 2019-01-07 14:54:23 +01:00
bors[bot]
a6071c9f4c Merge #442
442: WIP: indent on typing dot r=matklad a=simonvandel

Fixes #439.

The unit test passes, but I can't seem to make VS code perform the action. The existing action on "=" doesn't work either on my end either though.

I didn't add any smart way of detecting the current indent level. Any ideas how I would do that?

Co-authored-by: Simon Vandel Sillesen <simon.vandel@gmail.com>
2019-01-07 06:26:09 +00:00
Simon Vandel Sillesen
f3c708ab7b my formatting tool locally messes things up 2019-01-07 06:24:07 +01:00
Simon Vandel Sillesen
979dcf36e4 fix nits 2019-01-07 06:16:04 +01:00
bors[bot]
c69bb8a7e7 Merge #446
446: Use HIR Expr for type inference r=flodiebold a=flodiebold

Now we can reuse the type inference inside a function when typing whitespace etc. :)

The order of the lines in the type tests changed a bit, which I'm not sure why, but there are no actual changes in the inference results.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-07 00:11:13 +00: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]
3c945ceb5e Merge #447
447: Show types when hovering patterns as well r=flodiebold a=flodiebold



Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-06 22:12:54 +00:00
Florian Diebold
a4e97f5a2b Show types when hovering patterns as well 2019-01-06 22:53:09 +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
Simon Vandel Sillesen
bbc044990a formatting 2019-01-06 22:06:22 +01:00
Simon Vandel Sillesen
0be055072d fix tests 2019-01-06 21:59:14 +01:00
bors[bot]
0d59422b18 Merge #445
445: kill module source r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-06 17:01:49 +00:00
Aleksey Kladov
8a3b489c2f kill module source 2019-01-06 20:01:26 +03:00
bors[bot]
cf0ce14351 Merge #429
429: Reorganize hir public API in terms of code model r=matklad a=matklad

Recently, I've been thinking about introducing "object orient code model" API for rust: a set of APIs with types like `Function`, `Module`, etc, with methods like `get_containing_declaration()`, `get_type()`, etc. 

Here's how a similar API might look like in .Net land:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.semanticmodel?view=roslyn-dotnet

https://docs.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.imethodsymbol?view=roslyn-dotnet

The main feature of such API is that it can be powered by different backends. For example, one can imagine a backend based on salsa, and a backend which reads all the data from a specially prepared JSON file. The "OO" bit is interesting mostly in this "can swap implementations via dynamic dispatch" aspect, the actual API could have a more database/ECS flavored feeling.

It's not clear at this moment how exactly should we implement such a dynamically (or if we even need dynamism in the first pace) swapable API in Rust, but I'd love to experiment with this a bit. 

For starters, I propose creating a `code_model_api` which contains various definition types and their public methods (mandatory implemented as one-liners, so that the API has a header-file feel). Specifically, I propose that each type is a wrapper around some integer ID, and that all methods of it accept a `&db` argument.  The actual impl goes elsewhere: into the db queries or, absent a better place, into the `code_model_api_impl`. In the first commit, I've moved the simplest type, `Crate`, over to this pattern.

I *think* that we, at least initially, will be used types from `code_model_api` *inside* `hir` as well, but this is not required: we might pick a different implementation down the line, while preserving the API. 

Long term I'd love to replace the `db: &impl HirDatabase` argument by a `mp: &dyn ModelProvider`, implement `ModelProvider` for `T: HirDatabase`, and move `code_model_api` into the separate crate, which does not depend on `hir`. 

@flodiebold you've recently done some `Def`s work, would do you think of this plan? Could it become a good API in the future, or is it just a useless boilerplate duplicating method signatures between `code_model_api` and `code_model_impl`?


Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-06 14:51:10 +00: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
c303e6fbdf fix ra_analysis to work with the new API 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
bors[bot]
eaf553dade Merge #441
441: hir::Expr r=matklad a=flodiebold

Still a bit to do, but I already adapted `FnScopes` and thought I'd get feedback already.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-01-06 13:45:22 +00:00
Simon Vandel Sillesen
4f3bc42349 add more tests 2019-01-06 12:24:33 +01:00
bors[bot]
cbac31cbdb Merge #443
443: split_import intention correctly works with use trees r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-01-06 09:50:33 +00:00
Aleksey Kladov
bc3e732ec5 split_import intention correctly works with use trees 2019-01-06 12:48:33 +03:00
Simon Vandel Sillesen
b0ffa98a00 add "." as a trigger char on type formatting 2019-01-06 09:56:00 +01:00
Simon Vandel Sillesen
2e52b27e71 refactor 2019-01-06 09:41:11 +01:00
Simon Vandel Sillesen
bb8624dff6 format code 2019-01-06 08:08:23 +01:00
Simon Vandel Sillesen
cfaaf33069 rename unused variable 2019-01-06 07:56:02 +01:00
Florian Diebold
98957f4e6f Add fn signature query 2019-01-06 01:13:31 +01:00
Simon Vandel Sillesen
f99398d9d5 indent on typing dot. fixes #439 2019-01-06 00:58:03 +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