Commit Graph

400 Commits

Author SHA1 Message Date
Florian Diebold
2906d188c2 Cleanup 2020-01-11 23:33:04 +01:00
Florian Diebold
38cd9f0c94 Handle cycles 2020-01-11 23:33:04 +01:00
Florian Diebold
b1325488ec Use query for importable locations 2020-01-11 23:33:04 +01:00
Florian Diebold
947eec7b87 Use super, don't use private imports 2020-01-11 23:33:04 +01:00
Florian Diebold
df9d3bd25e Use shortest path 2020-01-11 23:33:04 +01:00
Florian Diebold
1ea2b475a9 handle most cases 2020-01-11 23:33:04 +01:00
Florian Diebold
b62292e8f9 basics working 2020-01-11 23:33:04 +01:00
Florian Diebold
2c50f996b6 more WIP 2020-01-11 23:33:04 +01:00
Florian Diebold
22b412f1a9 find_path WIP 2020-01-11 23:33:04 +01:00
Michal Terepeta
2e2e443560 Add _query suffix to compute_crate_def_map for consistency
Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-03 14:20:24 +01:00
Michal Terepeta
7cd6f12926 Split crate_def_map into two methods
This change:

  - introduces `compute_crate_def_map` query and renames
    `CrateDefMap::crate_def_map_query` for consistency,

  - annotates `crate_def_map` as `salsa::transparent` and adds a
    top-level `crate_def_map` wrapper function around that starts the
    profiler and immediately calls into `compute_crate_def_map` query.

This allows us to better understand where we spent the time, in
particular, how much is spent in the recomputaiton and how much in
salsa.

Example output (where we don't actually re-compute anything, but the
query still takes a non-trivial amount of time):

```
  211ms - handle_inlay_hints
      150ms - get_inlay_hints
          150ms - SourceAnalyzer::new
               65ms - def_with_body_from_child_node
                   65ms - analyze_container
                       65ms - analyze_container
                           65ms - Module::from_definition
                               65ms - Module::from_file
                                   65ms - crate_def_map
                                        1ms - parse_macro_query (6 calls)
                                        0ms - raw_items_query (1 calls)
                                       64ms - ???
```

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-03 13:59:46 +01:00
Michal Terepeta
84e2e173ee Remove a duplicate line in collect_defs
Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-03 12:40:50 +01:00
Emil Lauridsen
8280795a85 Remove unused hard-coded paths 2019-12-29 17:39:44 +01:00
Emil Lauridsen
fc3ab03af7 Add helpers for unpacking lang items 2019-12-29 17:38:37 +01:00
bors[bot]
523b4cbc60
Merge #2650
2650: Add macro call support for SourceAnalyzer::type_of r=matklad a=edwin0cheng



Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-29 15:02:27 +00:00
Aleksey Kladov
8f36f768e1 Don't add non-impl/trait containers to scope 2019-12-29 14:47:47 +01:00
Florian Diebold
9fd2c813ca visible_from -> is_visible_from 2019-12-27 11:25:04 +01:00
Florian Diebold
dfe95d735b Remove Arc from RawVisibility
Now that it's not used as a direct query return value anymore, it doesn't need
to be cheaply cloneable anymore.
2019-12-26 16:42:57 +01:00
Florian Diebold
04cf98f8a6 Fix cross-crate glob privacy handling 2019-12-26 16:31:38 +01:00
Florian Diebold
78111620a3 Remove visibility query, instead add struct field visibility to data
Methods should be handled the same, and for items the visibility will be in the
def map.
2019-12-26 16:23:40 +01:00
Florian Diebold
50ebff257d Rename ResolvedVisibility -> Visibility 2019-12-26 16:23:40 +01:00
Florian Diebold
e1a2961273 Rename Visibility -> RawVisibility 2019-12-26 16:23:40 +01:00
Florian Diebold
04e8eaa14b Handle privacy for modules 2019-12-26 16:23:40 +01:00
Florian Diebold
21359c3ab5 Take visibility into account for glob imports 2019-12-26 16:23:40 +01:00
Florian Diebold
8ac25f119e Keep track of visibility during def collection 2019-12-26 16:23:40 +01:00
Florian Diebold
79c90b5641 Collect visibility of items during nameres 2019-12-26 16:23:40 +01:00
Florian Diebold
c31dae2aca Add doc comment 2019-12-26 16:23:40 +01:00
Florian Diebold
8aeaf93b9a Make enum variant fields public 2019-12-26 16:23:40 +01:00
Florian Diebold
1ce809d0fa Add logic for resolving and checking visibility 2019-12-26 16:23:40 +01:00
Florian Diebold
069bf55cca Add infrastructure for visibility on syntax and hir_def level 2019-12-26 16:23:40 +01:00
Edwin Cheng
208ad97fdc Remove AsyncOwner 2019-12-25 00:25:18 +08:00
Edwin Cheng
d0537cda9e Formatting 2019-12-24 20:30:39 +08:00
Edwin Cheng
0edb5b4a50 Implement infer await from async func 2019-12-24 19:45:28 +08:00
Edwin Cheng
12cc2ed557 Use pre-stored macro file 2019-12-23 21:56:10 +08:00
Edwin Cheng
16156d766d Add macro call support for type_of 2019-12-23 13:19:01 +08:00
Aleksey Kladov
e424545c0f Rudimentary name resolution for local items 2019-12-22 22:41:21 +01:00
Aleksey Kladov
7c405c0156 Simplify 2019-12-22 19:32:35 +01:00
Aleksey Kladov
007032f850 Refactor 2019-12-22 19:31:01 +01:00
Aleksey Kladov
baee746185 Share impl Scope between modules and blocks 2019-12-22 15:52:35 +01:00
Aleksey Kladov
6c3ddcfa50 Simplify 2019-12-22 15:37:53 +01:00
Aleksey Kladov
e8da7d4061 Remove unused parameters 2019-12-22 15:31:30 +01:00
Aleksey Kladov
558956c84b Remove import field 2019-12-22 15:28:55 +01:00
Aleksey Kladov
2c60f42825 Separate defs from imports 2019-12-22 15:21:48 +01:00
Aleksey Kladov
e69af85962 Refactor PerNs construction 2019-12-22 15:10:19 +01:00
Aleksey Kladov
fe38fffaa9 Minor rename 2019-12-22 15:04:31 +01:00
Aleksey Kladov
e903f58d29 More profiling 2019-12-21 19:44:08 +01:00
bors[bot]
f874d6c475
Merge #2637
2637: Optimize and profile r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-21 17:46:52 +00:00
Aleksey Kladov
d4b135f38c Optimize and profile 2019-12-21 18:46:21 +01:00
Aleksey Kladov
1a8f2aa024 Move LocalImportId 2019-12-21 17:34:28 +01:00
Aleksey Kladov
02f79e37ca Remove import source map 2019-12-21 17:26:28 +01:00
Aleksey Kladov
ec56f59ac1 Remove import from resolution 2019-12-21 17:26:28 +01:00
Aleksey Kladov
4e0168ec14 Remove imports from hir 2019-12-21 15:18:14 +01:00
Aleksey Kladov
973b5cf7e2 Revert "Merge #2629"
This reverts commit cdc9d682b0, reversing
changes made to 90ef070db3.
2019-12-21 15:04:33 +01:00
Aleksey Kladov
2d3fdf3fb5 Privatize LocalImportID 2019-12-21 12:47:34 +01:00
Aleksey Kladov
d335311893 Remove import source map 2019-12-21 12:45:33 +01:00
Aleksey Kladov
ab7a70fb14 Don't track imports 2019-12-21 12:38:40 +01:00
bors[bot]
3ebf15c9b2
Merge #2626
2626: Recursive collect macros in impl items r=matklad a=edwin0cheng



Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-21 10:12:18 +00:00
bors[bot]
1cbef27ff8
Merge #2625
2625: Clippy lints r=matklad a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
2019-12-21 06:12:36 +00:00
Edwin Cheng
c1166697a7 Add a limit for protect against infinite recursion 2019-12-21 05:16:29 +08:00
Edwin Cheng
360de5ba71 Recursive collect macros in impl items 2019-12-21 05:02:31 +08:00
kjeremy
0d5d63a80e Clippy lints 2019-12-20 15:14:30 -05:00
bors[bot]
6eab968c60
Merge #2624
2624: Separate module item from module scope r=matklad a=matklad

bors r+

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-20 19:51:03 +00:00
bors[bot]
f578cd2182
Merge #2623
2623: Add support macros in impl blocks r=matklad a=edwin0cheng

This PR add support for macros in impl blocks, which reuse `Expander` for macro expansion.

see also: #2459 

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-20 19:42:46 +00:00
Edwin Cheng
ad81d1dbc1 Add support macros in impl blocks 2019-12-21 03:37:03 +08:00
Aleksey Kladov
f5947be0ea Simplify 2019-12-20 20:15:54 +01:00
Florian Diebold
2a8c9100bf Handle closure return types
Fixes #2547.
2019-12-20 18:16:11 +01:00
Aleksey Kladov
7a862f0d47 Make legacy macros private 2019-12-20 17:12:20 +01:00
Aleksey Kladov
af42cb5981 Privitize impls 2019-12-20 16:55:38 +01:00
Aleksey Kladov
7adb53319d Make items private 2019-12-20 16:52:02 +01:00
Aleksey Kladov
e6b1194f2f Move some code to scope 2019-12-20 16:52:02 +01:00
Aleksey Kladov
4f9e3f3632 Fix typos 2019-12-20 16:52:02 +01:00
Aleksey Kladov
1b8ce5b37b Move impls to ItemScope 2019-12-20 16:52:02 +01:00
Aleksey Kladov
030e540ad1 Reduce visibility 2019-12-20 16:52:02 +01:00
Aleksey Kladov
2ce1aa32c4 Rename ModuleScope -> ItemScope 2019-12-20 16:52:02 +01:00
Aleksey Kladov
16ac792f48 Docs 2019-12-20 16:52:02 +01:00
Aleksey Kladov
0f212b3798 Move ModuleScope to a new module 2019-12-20 16:52:02 +01:00
Aleksey Kladov
49aac9ef63 Add item_scope module 2019-12-20 16:52:02 +01:00
bors[bot]
d590f6ce12
Merge #2592
2592: Add std::ops::Index support for infering r=edwin0cheng a=edwin0cheng

see also #2534

Seem like this can't fix #2534 for this case:

```rust
fn foo3(bar: [usize; 2]) {
    let baz = bar[1];   // <--- baz is still unknown ?
    println!("{}", baz);
}
```

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-20 14:36:53 +00:00
Aleksey Kladov
794bbab70d Remove code that never was alive? 2019-12-20 15:26:19 +01:00
Aleksey Kladov
3d4b48e481 Fix resolve for field init shorthand 2019-12-20 14:48:14 +01:00
Aleksey Kladov
2d8a001465 Reduce copy-paste some more 2019-12-20 13:58:09 +01:00
Aleksey Kladov
1234dda9ee Use generic ItemLoc for impls 2019-12-20 13:47:44 +01:00
Aleksey Kladov
d137df0137 Remove more copy-paste 2019-12-20 13:19:41 +01:00
Aleksey Kladov
957c0171e6 Remove more copy-paste 2019-12-20 13:11:01 +01:00
Aleksey Kladov
f42697e54b Support for nested traits 2019-12-20 12:29:25 +01:00
Aleksey Kladov
fe1b160dcf Support for nested statics, consts and type aliases 2019-12-20 12:22:55 +01:00
Aleksey Kladov
ac5a3f611b Support for nested ADT 2019-12-20 12:20:49 +01:00
Aleksey Kladov
94ad07af4b Introduce ContainerId 2019-12-20 12:07:23 +01:00
Aleksey Kladov
8fc20b6503 Rename ContainerId -> AssocContainerId 2019-12-20 12:00:05 +01:00
Aleksey Kladov
a04177f135 Add local functions to bodies 2019-12-20 11:52:17 +01:00
Aleksey Kladov
9ccad60acc Implement ChildBySource for DefWithBody 2019-12-19 18:21:26 +01:00
Aleksey Kladov
ba12e83c26 Add body as a possible container for items 2019-12-19 18:12:46 +01:00
Aleksey Kladov
5bd8de3f5e Allow storing defs in bodies 2019-12-19 18:09:50 +01:00
Aleksey Kladov
43ed3d1196 Handle start imports in import groups 2019-12-19 16:57:22 +01:00
Edwin Cheng
dddee23f43 Add std::ops::Index support for infering 2019-12-19 12:45:07 +08:00
Aleksey Kladov
afdeacf3c1 Remove dead code 2019-12-18 17:52:52 +01:00
Aleksey Kladov
d33fc26e05 Touch up docs 2019-12-18 17:42:49 +01:00
Aleksey Kladov
04715cbe1c Forbid <T>::foo syntax in mod paths 2019-12-18 17:41:33 +01:00
Aleksey Kladov
88c6109897 Move PathKindUp 2019-12-18 17:06:52 +01:00
Aleksey Kladov
d043689735 Touch up docs 2019-12-18 17:04:20 +01:00
Aleksey Kladov
0630f8110f Drop dead code 2019-12-17 16:03:15 +01:00
Aleksey Kladov
aca022f1d4 Refactor PathKind 2019-12-17 15:38:28 +01:00
Aleksey Kladov
2619950b3b Use different types for path with and without generics 2019-12-14 19:15:40 +01:00
Florian Diebold
f02fcc1644 Use path macro 2019-12-13 22:33:38 +01:00
Florian Diebold
6911bc89a7 Rename N! to name! 2019-12-13 22:33:38 +01:00
Florian Diebold
259c42f00e Add macros for known names and paths 2019-12-13 22:33:37 +01:00
Emil Lauridsen
7705209051 Correctly infer - and ! using std::ops::{Neg,Not} 2019-12-13 12:45:38 +01:00
Aleksey Kladov
332f2205b0 Correct obsolete comment 2019-12-12 17:17:57 +01:00
Aleksey Kladov
125559c14b Move use tree lowering to a separate module 2019-12-12 17:15:57 +01:00
Aleksey Kladov
8e65b77387 Dedupe from_source impls 2019-12-12 15:50:16 +01:00
Aleksey Kladov
7a255a2f93 Remove old location infra 2019-12-12 15:19:07 +01:00
Aleksey Kladov
56710f119b Move enum&union to new loc 2019-12-12 15:11:57 +01:00
Aleksey Kladov
f135a8ea55 Move structs to new loc 2019-12-12 14:58:04 +01:00
Aleksey Kladov
82e9b24558 Move traits to the new loc 2019-12-12 14:36:14 +01:00
Aleksey Kladov
7b0644d81e Switch to the new location for impls 2019-12-12 14:25:34 +01:00
bors[bot]
6b1c2ee168
Merge #2500 #2505 #2506
2500: Fix format_args expansion & go to definition r=matklad a=flodiebold

The expansion of format_args wasn't yet correct enough to type-check. Also make macros in statement position expand to expressions for now, since it's not handled correctly in HIR lowering yet. This finally fixes go to definition within print macros, I think 🙂 

2505: Remove more dead code r=matklad a=matklad



2506: Remove one more Ty r=matklad a=matklad



Co-authored-by: Florian Diebold <flodiebold@gmail.com>
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-08 16:53:21 +00:00
bors[bot]
d0ad30ad97
Merge #2501 #2502 #2503
2501: Fix coercion from &Foo to an inference variable in a reference r=matklad a=flodiebold

We didn't try to unify within the reference, but we should.

2502: Delay legacy macro expansion r=matklad a=edwin0cheng

This PR make the following changes:

* Delay legacy macro expansion such that we concentrated all item collecting macro expansion in one place.
* Add `MacroDirective` to replace 3-tuples 
* After this refactoring, no macro is expanded recursively, hence we can remove the `MacroStackMonitor` and we handle the expansion limit by the fix-point loop count. 

2503: Code: check whether the LSP binary is in PATH r=matklad a=lnicola

I'm not really sure about the TS changes. I just made a couple of functions async and it seems to work.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2019-12-08 16:44:29 +00:00
Edwin Cheng
3a95d01d0c Delay legacy macro expansion 2019-12-08 20:33:42 +08:00
Florian Diebold
5e096def15 Expand macros in blocks to expressions for now
Expanding to statements isn't handled properly yet and breaks things.
2019-12-08 13:03:13 +01:00
bors[bot]
7a6b6ed0a5
Merge #2498
2498: Drop some unused methods r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-08 11:24:44 +00:00
Aleksey Kladov
200bda3daf Cleanup Field ty 2019-12-08 12:16:57 +01:00
bors[bot]
b236f6aa49
Merge #2466
2466: Handle partial resolve cases r=matklad a=edwin0cheng

Another try to fix #2443 :

We resolve all imports every time in `DefCollector::collect` loop even it is resolved previously.  
This is because other unresolved imports and macros will bring in another `PerNs`, so we can only assume that it has been partially resolved.

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-08 10:44:30 +00:00
Edwin Cheng
509fedd9d2 Remove MacroFileKind 2019-12-08 16:16:52 +08:00
Aleksey Kladov
88c5b1282a Rename GenericParam -> TypeParam
We don't have LifetimeParam yet, but they are planned!
2019-12-07 20:25:48 +01:00
Aleksey Kladov
7d2080a031 Classify name works for TypeParams 2019-12-07 19:52:09 +01:00
Aleksey Kladov
dda9587e75 Track source of type parameters 2019-12-07 19:44:43 +01:00
Aleksey Kladov
d75f768c13 Minor 2019-12-07 19:44:43 +01:00
Aleksey Kladov
8e9837df21 Remove idx and parent generics from generics
This makes `hir_def::GenericParams` flatter. The logic for
re-numbering the params is moved to hir instead.
2019-12-07 13:05:56 +01:00
Aleksey Kladov
30fefcc08c Store GenericParams in arena 2019-12-07 13:05:56 +01:00
Edwin Cheng
51f4fb448f Refactor resolve_imports logic 2019-12-07 19:24:15 +08:00
Edwin Cheng
e5997e1746 Push glob_imports only if non-exists 2019-12-07 09:50:21 +08:00
bors[bot]
f18b7e18c4
Merge #2484
2484: DynMap r=matklad a=matklad

Implement a `DynMap` a semi-dynamic, semi-static map, which helps to thread heterogeneously typed info in a uniform way. Totally inspired by df3bee3038/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java. 

@flodiebold wdyt? Seems like a potentially useful pattern for various source-map-like things.

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-06 20:28:28 +00:00
Aleksey Kladov
8c86963d47 DynMap
This might, or might not help us to reduce boilerplate associated with
plumbing values from analysis to the IDE layer
2019-12-06 21:28:05 +01:00
bors[bot]
d3702c02cd
Merge #2481
2481: Remove obsolete comment r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-12-06 20:03:44 +00:00
Edwin Cheng
76ff5b7c15 Add tests 2019-12-06 23:48:45 +08:00
bors[bot]
6e10a9f578
Merge #2479
2479: Add expansion infrastructure for derive macros r=matklad a=flodiebold

I thought I'd experiment a bit with attribute macro/derive expansion, and here's what I've got so far. It has dummy implementations of the Copy / Clone derives, to show that the approach works; it doesn't add any attribute macro support, but I think that fits into the architecture.

Basically, during raw item collection, we look at the attributes and generate macro calls for them if necessary. Currently I only do this for derives, and just add the derive macro calls as separate calls next to the item. I think for derives, it's important that they don't obscure the actual item, since they can't actually change it (e.g. sending the item token tree through macro expansion unnecessarily might make completion within it more complicated).

Attribute macros would have to be recognized at that stage and replace the item (i.e., the raw item collector will just emit an attribute macro call, and not the item). I think when we implement this, we should try to recognize known inert attributes, so that we don't do macro expansion unnecessarily; anything that isn't known needs to be treated as a possible attribute macro call (since the raw item collector can't resolve the macro yet).

There's basically no name resolution for attribute macros implemented, I just hardcoded the built-in derives. In the future, the built-ins should work within the normal name resolution infrastructure; the problem there is that the builtin stubs in `std` use macros 2.0, which we don't support yet (and adding support is outside the scope of this).

One aspect that I don't really have a solution for, but I don't know how important it is, is removing the attribute itself from its input. I'm pretty sure rustc leaves out the attribute macro from the input, but to do that, we'd have to create a completely new syntax node. I guess we could do it when / after converting to a token tree.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-12-05 20:00:20 +00:00
Aleksey Kladov
518b5bf927 Remove obsolete comment 2019-12-05 17:55:38 +01:00
Florian Diebold
18f6a995d0 Add expansion infrastructure for derive macros 2019-12-05 17:23:09 +01:00
Aleksey Kladov
0c0ce1ae41 Introduce ChildFromSource 2019-12-05 16:55:54 +01:00
ice1000
d15f300268 Publicize file_id to make test_db compile 2019-12-05 08:37:39 -05:00
ice1000
006a583381 Use placeholder instead of Option 2019-12-05 08:33:29 -05:00
ice1000
7702f690a9 One pub function less is good! 2019-12-05 08:28:31 -05:00
ice1000
762915826a Reduce visibility, use struct instead of tuples 2019-12-05 08:19:27 -05:00
ice1000
088f50c0ab No block at the moment 2019-12-04 18:30:42 -05:00
ice1000
032eb3d68e Remove almost unused ModuleSource::new 2019-12-04 18:30:42 -05:00
ice1000
5c5f90ba57 Confluent ModuleSource usage 2019-12-04 18:30:42 -05:00
ice1000
38853459e3 Add ModuleSource::Block 2019-12-04 18:30:42 -05:00
ice1000
7cbedc50bc Fix test compilation 2019-12-04 18:30:42 -05:00
ice1000
1bb59a7d08 Three-state enum for module origin 2019-12-04 18:30:42 -05:00
ice1000
009437f5d9 Replace ra_hir_expand::either with crate 2019-12-03 11:07:56 -05:00