Aleksey Kladov
9a6c26e348
Move module to SourceBinder
2020-01-16 16:53:11 +01:00
Aleksey Kladov
16cfc8d50c
Cache source for generics
2020-01-16 16:44:25 +01:00
Aleksey Kladov
7aa627fe58
Move more stuff to SourceBinder
2020-01-16 16:37:51 +01:00
Aleksey Kladov
a3d6ddbe69
More natural trait setup
2020-01-16 16:27:21 +01:00
Aleksey Kladov
8691ae8ac0
Removed FromSource
2020-01-16 16:16:31 +01:00
Aleksey Kladov
81a45ca1b3
Make FromSource private
2020-01-16 16:08:46 +01:00
Aleksey Kladov
aaef88db0e
Typos
2020-01-15 16:53:01 +01:00
Aleksey Kladov
c640c2ea11
Make syntax highlighting linear
2020-01-15 16:52:28 +01:00
Aleksey Kladov
7e70fc22a7
Flip generics
2020-01-15 16:52:28 +01:00
Aleksey Kladov
a71bb70f0a
Store DB in SourceBinder
2020-01-15 16:52:28 +01:00
Aleksey Kladov
ccfe53376a
Introduce SourceBinder
2020-01-15 16:52:28 +01:00
Aleksey Kladov
21ea62d292
Don't parse child modules when doing diagnostics
2020-01-15 14:42:57 +01:00
Aleksey Kladov
a38540771f
Move Type API to type
2020-01-14 14:42:52 +01:00
Aleksey Kladov
21c5fd8b1b
Push resolver further up
2020-01-14 14:24:03 +01:00
Aleksey Kladov
52e7f67128
Move impls_future to Type, where it belongs
2020-01-14 11:29:43 +01:00
Aleksey Kladov
0358f5fdeb
Use lang-items to resolve future trait
2020-01-14 11:29:43 +01:00
Aleksey Kladov
aedff7cdcf
Move utility functions down
2020-01-14 11:29:43 +01:00
Aleksey Kladov
eb8989f9e4
Rename file
2020-01-14 11:29:43 +01:00
Edwin Cheng
d7be1a4372
Use attr location for builtin macro goto-imp
2020-01-12 18:08:53 +08:00
Florian Diebold
4496e2a06a
Apply review suggestions
2020-01-11 23:33:04 +01:00
Florian Diebold
4d75430e91
Qualify some paths in 'add missing impl members'
2020-01-11 23:33:04 +01:00
Michal Terepeta
d6c2a59538
Split infer
query into two for better profiling
...
This is the same change as we did with `crate_def_map` and it does seem
that we mostly spend time in salsa, without recomputing much on
rust-analyzer side.
Example output:
```
233ms - handle_inlay_hints
163ms - get_inlay_hints
163ms - SourceAnalyzer::new
67ms - def_with_body_from_child_node
67ms - analyze_container
67ms - analyze_container
67ms - Module::from_definition
67ms - Module::from_file
67ms - crate_def_map
0ms - parse_macro_query (6 calls)
0ms - raw_items_query (1 calls)
66ms - ???
0ms - crate_def_map (1 calls)
0ms - crate_def_map (1 calls)
96ms - infer
2ms - trait_solve_query (2 calls)
94ms - ???
0ms - body_with_source_map_query (1 calls)
0ms - crate_def_map (1 calls)
[...]
```
Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-03 19:58:11 +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
100c2d0127
Add profile
calls to {Module,Function}::diagnostics
...
With this change the output `ra_prof` gives a better indication where
the time is spent. Example output:
```
213ms - publish_diagnostics
213ms - diagnostics
70ms - Module::from_definition
70ms - Module::from_file
132ms - Module::diagnostics
78ms - Function::diagnostics
0ms - body_with_source_map_query (1 calls)
2ms - trait_solve_query (1 calls)
76ms - ???
15ms - Function::diagnostics
0ms - body_with_source_map_query (1 calls)
15ms - trait_solve_query (5 calls)
38ms - Function::diagnostics (51 calls)
8ms - parse_query (1 calls)
```
Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
2020-01-03 12:50:35 +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
Florian Diebold
9fd2c813ca
visible_from -> is_visible_from
2019-12-27 11:25:04 +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
ca15cf422c
Add visibility in code model for fields
2019-12-26 16:23:40 +01:00
Florian Diebold
c39352fa43
Fill in type params in 'add missing impl members' assist
2019-12-24 17:29:27 +01: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
6c3ddcfa50
Simplify
2019-12-22 15:37:53 +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
02f79e37ca
Remove import source map
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
d335311893
Remove import source map
2019-12-21 12:45:33 +01:00
Aleksey Kladov
67ba9072fa
Remove hir for imports
2019-12-21 12:18:20 +01:00
Aleksey Kladov
1b8ce5b37b
Move impls to ItemScope
2019-12-20 16:52:02 +01:00
Aleksey Kladov
3d4b48e481
Fix resolve for field init shorthand
2019-12-20 14:48:14 +01:00
Aleksey Kladov
1234dda9ee
Use generic ItemLoc for impls
2019-12-20 13:47:44 +01:00
Aleksey Kladov
f42697e54b
Support for nested traits
2019-12-20 12:29:25 +01:00
Aleksey Kladov
ac5a3f611b
Support for nested ADT
2019-12-20 12:20:49 +01:00
Aleksey Kladov
67c2aea182
Rebuild ra_lsp_server and nest helper function.
...
Completion now works again, so there's no need not to nest
2019-12-20 11:52:17 +01:00
Aleksey Kladov
d316ba9a13
Handle nested declrations in from_source
2019-12-20 11:52:17 +01:00
Aleksey Kladov
a04177f135
Add local functions to bodies
2019-12-20 11:52:17 +01:00
Aleksey Kladov
b2731ab78a
Drop dead code
2019-12-19 18:07:39 +01:00
bors[bot]
4a58522119
Merge #2562
...
2562: Fix NavigationTarget ranges r=matklad a=edwin0cheng
Fix the issue described in https://github.com/rust-analyzer/rust-analyzer/pull/2544#issuecomment-565572553
This PR change the order for finding `full_range` of `focus_range` in following orders:
1. map both ranges to macro_call
2. map focus range to a token inside macro call, and full range to the whole of macro call
3. map both ranges to the whole of macro call
And fix the corresponding tests and make these tests easily to follow.
Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-12-17 13:37:32 +00:00
Aleksey Kladov
2619950b3b
Use different types for path with and without generics
2019-12-14 19:15:40 +01:00
Edwin Cheng
b53587c7bd
Re-export Origin to replace ExpansionOrigin
2019-12-15 01:46:39 +08:00
Edwin Cheng
61360fdfec
Fix original_source find order
2019-12-15 01:24:51 +08: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
Aleksey Kladov
8e65b77387
Dedupe from_source impls
2019-12-12 15:50:16 +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
63c192b34a
Simplify from_source
2019-12-12 14:48:33 +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
Aleksey Kladov
d89996fd5b
Build correct SourceAnalyzer for traits
2019-12-10 13:52:04 +01:00
Aleksey Kladov
61c3887b70
Remove one more Ty
2019-12-08 17:50:43 +01:00
Aleksey Kladov
a1639d0d1e
Remove more dead code
2019-12-08 17:45:14 +01:00
Aleksey Kladov
6805bb01e2
Cleanup module structure
2019-12-08 17:45:14 +01:00
Aleksey Kladov
e2cc552076
Remove dead code
2019-12-08 12:51:25 +01:00
Aleksey Kladov
b37c6a746b
Remove ty from code_model
2019-12-08 12:44:14 +01:00
Aleksey Kladov
b77d7c24aa
Remove bodies from code_model
2019-12-08 12:27:21 +01:00
Aleksey Kladov
b017bae837
remove infer
method from CodeModel
2019-12-08 12:26:53 +01:00
Aleksey Kladov
7aacf9a197
Drop some unused methods
2019-12-08 12:24:21 +01:00
Aleksey Kladov
200bda3daf
Cleanup Field ty
2019-12-08 12:16:57 +01:00
Aleksey Kladov
08d3166c8b
Cleanup Crate API
2019-12-08 12:02:53 +01:00
Edwin Cheng
509fedd9d2
Remove MacroFileKind
2019-12-08 16:16:52 +08:00
Aleksey Kladov
6e2e60cbc9
Discover type parameters in more cases
2019-12-07 21:55:02 +01: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
f4f8b81474
Get the right analyzer for impls
2019-12-07 20:05:08 +01:00
Aleksey Kladov
7d2080a031
Classify name works for TypeParams
2019-12-07 19:52:09 +01:00
Aleksey Kladov
1692f07393
ToNav for GenericParam
2019-12-07 19:44:43 +01:00
Aleksey Kladov
dda9587e75
Track source of type parameters
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
bors[bot]
431836f4a0
Merge #2489
...
2489: Implement `format_args` r=flodiebold a=flodiebold
This fixes a huge amount of type mismatches (because every format call was a type mismatch so far); I also hoped to get go to def working within `format!` etc., and the test says it should, but in practice it still doesn't seem to...
Also remove the `len` parameter from `Name::new_inline_ascii`, which I'm assuming was only there because of `const fn` limitations?
cc @edwin0cheng
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-12-06 20:59:51 +00:00
Florian Diebold
b2c01f446e
Implement ancestors_with_macros in a better way
2019-12-06 21:53:31 +01: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
Florian Diebold
a565072dde
Try to make go to definition work in format!
...
SourceAnalyzer didn't work properly within expression macro expansions because
it didn't find the enclosing function. Fix this by going up the expansion chain
to find ancestors. This makes the test work, but apparently in real usage it's
still not working.
2019-12-06 21:25:22 +01: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
Florian Diebold
18f6a995d0
Add expansion infrastructure for derive macros
2019-12-05 17:23:09 +01:00
Aleksey Kladov
1a567f5ca2
Reduce copy-paste
2019-12-05 16:56:13 +01:00
Aleksey Kladov
0c0ce1ae41
Introduce ChildFromSource
2019-12-05 16:55:54 +01:00
ice1000
7702f690a9
One pub function less is good!
2019-12-05 08:28:31 -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
009437f5d9
Replace ra_hir_expand::either
with crate
2019-12-03 11:07:56 -05:00
Edwin Cheng
bb601e7eaf
Add BuiltinShadowMode
2019-11-30 23:29:21 +08:00
Aleksey Kladov
8f1f5a783a
Move source-related traits to a separate module
2019-11-28 19:05:21 +03:00
Aleksey Kladov
e823c578c9
Use InFile for AstId
2019-11-28 16:02:38 +03:00
Aleksey Kladov
ccd1b0800a
Rename Source -> InFile
2019-11-28 12:50:26 +03:00
Aleksey Kladov
1d14fd1737
Use Name::missing consistently
2019-11-27 23:22:20 +03:00
Aleksey Kladov
04735abfae
Minimize API
2019-11-27 22:21:01 +03:00
Aleksey Kladov
27b362b059
Reformat
2019-11-27 21:44:38 +03:00
Aleksey Kladov
d9a36a736b
Rename module_id -> local_id
2019-11-27 21:31:51 +03:00
Aleksey Kladov
47ec2ceb12
prune deps
2019-11-27 21:26:49 +03:00
Aleksey Kladov
a87579500a
Move Ty
2019-11-27 21:16:00 +03:00
Aleksey Kladov
3686530815
Decouple
2019-11-27 16:48:48 +03:00
Aleksey Kladov
12501fcdd0
Remove TypableDef
2019-11-27 16:39:58 +03:00
Aleksey Kladov
d6e8f27488
Cleanup imports
2019-11-27 16:29:11 +03:00
Aleksey Kladov
9fa46ff5c6
Use Id for variats
2019-11-27 16:25:01 +03:00
Aleksey Kladov
17680f6060
More decoupling
2019-11-27 16:02:33 +03:00
Aleksey Kladov
d569869f7a
Decouple more
2019-11-27 15:56:20 +03:00
Aleksey Kladov
1fe9656ba4
Decouple
2019-11-27 12:47:18 +03:00
Aleksey Kladov
825049bc62
Decouple
2019-11-27 12:34:26 +03:00
Aleksey Kladov
e91ebfc752
Cleanup imports
2019-11-27 12:13:07 +03:00
Aleksey Kladov
3a0929fca7
Decouple
2019-11-27 12:02:54 +03:00
Aleksey Kladov
a306531e6a
Decouple
2019-11-27 11:40:10 +03:00
Aleksey Kladov
aa45561183
Crate -> CrateId
2019-11-27 09:42:55 +03:00
Aleksey Kladov
bed6869865
Cleanup
2019-11-26 22:56:07 +03:00
Aleksey Kladov
cace49e9a7
Decouple
2019-11-26 22:31:04 +03:00
bors[bot]
d770f22c53
Merge #2420
...
2420: Remove last traces of adt from Ty r=matklad a=matklad
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-11-26 18:42:52 +00:00
bors[bot]
3206b83a70
Merge #2418
...
2418: Hide MacroCallLoc outside hir_expand r=matklad a=edwin0cheng
This PR refactor `MacroCallLoc` such that it be hided to become implementation details of hir_expand.
Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-11-26 18:34:15 +00:00
Aleksey Kladov
936c6950e7
Remove last traces of adt from Ty
2019-11-26 21:32:39 +03:00
Aleksey Kladov
882fe0a47e
More precise NameKind::Self
2019-11-26 21:32:39 +03:00
Aleksey Kladov
4e415a269e
Remove ns-polymorphic type_for_def
2019-11-26 21:04:24 +03:00
Edwin Cheng
447268ceac
Hide MacroCallLoc
2019-11-27 01:33:08 +08:00
Aleksey Kladov
475367d08a
Cleanup imports
2019-11-26 18:07:40 +03:00
Aleksey Kladov
b60b26b8ab
Reduce visibility
2019-11-26 18:02:50 +03:00
Aleksey Kladov
72d8e7e69a
Use TraitId in TraitRef
2019-11-26 18:01:34 +03:00
Aleksey Kladov
24b1e79af5
Remove another helper
2019-11-26 17:45:06 +03:00
Aleksey Kladov
25b32f9d68
Doc
2019-11-26 17:44:43 +03:00
Aleksey Kladov
d118997b93
Remove assoc_type_by_name helper
2019-11-26 17:44:43 +03:00
Aleksey Kladov
9bc8f1f4f8
Store names in TraitData
2019-11-26 17:44:43 +03:00
Aleksey Kladov
4a0792362e
Detangle ty from traits a bit
2019-11-26 17:44:43 +03:00
bors[bot]
4822d26540
Merge #2406
...
2406: Add hygiene information to SourceAnalyzer r=matklad a=edwin0cheng
This should fix https://github.com/rust-analyzer/rust-analyzer/pull/2392#issuecomment-557964686
Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2019-11-26 13:18:03 +00:00
Edwin Cheng
0623164c1d
Remove dbg!
2019-11-26 21:13:36 +08:00
bors[bot]
36dca8de93
Merge #2410
...
2410: Introduce hir_ty r=matklad a=matklad
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-11-26 12:42:15 +00:00
Aleksey Kladov
45d05ed783
id-ify impls_in_crate_query
2019-11-26 15:36:25 +03:00
Jeremy Kolb
8b1f2cd14e
Update parking_lot and smallvec to drop some dependencies
2019-11-26 07:29:28 -05:00
Aleksey Kladov
4c43631829
Introduce hir_ty
2019-11-26 15:06:06 +03:00
Aleksey Kladov
a443b5033c
Id-ify Ty::Adt
2019-11-26 14:29:12 +03:00
Aleksey Kladov
e5eadb3390
Introduce hir::Type
...
It should provide a convenient API over more low-level Ty
2019-11-26 14:02:57 +03:00
Aleksey Kladov
0a7ef09331
Use chalk fork to paper over #2052
2019-11-26 11:46:09 +03:00
Aleksey Kladov
131c2da6bf
⬆️ salsa
2019-11-26 11:29:20 +03:00
Edwin Cheng
245a9b165a
Add hygiene information to SourceAnalyzer
2019-11-26 15:05:53 +08:00
Aleksey Kladov
1a0da6d4da
Use TypeAliasId in Ty, pt 2
2019-11-25 18:58:17 +03:00
Aleksey Kladov
6d2ec8765d
Use TypeAliasId in Ty, pt 1
2019-11-25 18:44:36 +03:00
Aleksey Kladov
3e32ac4f86
More ids in Ty
2019-11-25 18:31:48 +03:00
Aleksey Kladov
1455663ea1
Fixme for union fields
2019-11-25 17:50:49 +03:00
Aleksey Kladov
5fd68b5929
Fix hir for ast::UnionDef
2019-11-25 17:50:49 +03:00