Aleksey Kladov
66e2266d04
Extern fns are implicitly unsafe
...
closes #4865
2020-07-11 21:53:32 +02:00
Aleksey Kladov
b4443b0398
Bump macro recursion limit in release
2020-07-11 20:01:56 +02:00
Aleksey Kladov
a8891ae3ca
More tight recursion limit when expanding macros in function bodies
...
cc #4944
cc #5317
This doesn't fully close #4944 -- looks like we hit SO in syntax
highlighting, when we use `Semantics::expand_macro`.
Seems like we need to place expansion limit on the macro itself (store
it as a part of MacroCallId?)!
2020-07-11 18:39:49 +02:00
Aleksey Kladov
b85042601d
Goto type definition works for self
2020-07-10 14:08:35 +02:00
Aleksey Kladov
4399eff2d0
Re-enable IDE features for incomplete impl blocs
2020-07-09 12:14:26 +02:00
Aleksey Kladov
dab7f3d2c6
Remove relative_path dependency
2020-07-08 19:32:36 +02:00
Aleksey Kladov
4bbc385277
Switch to fully dynamically dispatched salsa
...
This improves compile times quite a bit
2020-07-07 10:14:48 +02:00
Jonas Schievink
6ee73cd334
Use SmolStr
2020-07-02 15:42:37 +02:00
Jonas Schievink
361b399b6d
Fix tests
2020-07-02 13:34:08 +02:00
Jonas Schievink
31f5b48817
Record and suggest trait items via ImportMap
2020-07-02 12:43:52 +02:00
Jonas Schievink
4ef1d533bd
ItemTree: Lower fields despite invalid type
2020-07-01 19:24:39 +02:00
Jonas Schievink
7c9b3d154c
Remove entries_without_primitives
2020-06-30 14:06:23 +02:00
Jonas Schievink
a80e8fea85
Simplify entry API usage
2020-06-30 13:54:40 +02:00
Jonas Schievink
56fb8a401a
Reorder imports
2020-06-30 13:25:15 +02:00
Jonas Schievink
0fcbc716fd
Split namespace maps in ItemScope
...
Reduces memory usage of the CrateDefMap query by ~130 MB on r-a.
2020-06-30 13:23:42 +02:00
Paul Daniel Faria
28bb8ed9cb
Cleanup changes leftover from previous tracking attempt
2020-06-27 10:16:19 -04:00
Paul Daniel Faria
2fc92fa28c
Remove track_parent and parent_map, replace with simple walk in missign unsafe validator
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
f78df42f81
Fix issues caused during rebase
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
2608a6fd3a
unsafe: Clean up, improve tracking, add debug_assert
...
Move unsafe_expressions to unsafe_validation.rs, replace vec tracking of
child exprs with inline macro, add debug assert to ensure tracked
children match walked children exactly
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
7f2219dc76
Track expr parents during lowering, use parent map when checking if unsafe exprs are within unsafe blocks
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
b9569886a9
Rename Expr::UnsafeBlock to Expr::Unsafe
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
278cbf12cd
Track unsafe blocks, don't trigger missing unsafe diagnostic when unsafe exprs within unsafe block
2020-06-27 10:10:26 -04:00
bors[bot]
656cbc68a1
Merge #5033
...
5033: Order of glob imports should not affect import shadowing r=Nashenas88 a=Nashenas88
Fixes #5032
Co-authored-by: Paul Daniel Faria <Nashenas88@users.noreply.github.com>
2020-06-27 02:51:54 +00:00
Paul Daniel Faria
1f5d30ff16
Replace simple is_named with matches macro
2020-06-26 22:51:13 -04:00
Jonas Schievink
efe378d2b4
Make find_inner_item fallible
...
The ItemTree does not collect incomplete items, such as traits with no
name, so the (malformed) AST node might have no corresponding item.
2020-06-26 18:07:31 +02:00
Jonas Schievink
7f6694b12e
find_inner_item: more detailed panic message
2020-06-26 18:02:41 +02:00
Jonas Schievink
5d7172f17e
Simplify inner item lowering
2020-06-26 17:30:27 +02:00
Paul Daniel Faria
b700443e78
Remove comment that's no longer valid
2020-06-26 11:13:58 -04:00
Paul Daniel Faria
76755ce176
Split glob import map to per-ns, switch ExprCollector to use a simpler push_res
2020-06-26 11:11:51 -04:00
Jonas Schievink
72fe70f2f8
Make VFS join methods fallible
2020-06-26 16:30:50 +02:00
Paul Daniel Faria
de9e964e4a
Track import type outside of , use enum rather than bool to improve readability
2020-06-25 12:42:12 -04:00
Jonas Schievink
dad2f75b91
Use ItemTree to answer enum_data query
2020-06-25 16:52:47 +02:00
Jonas Schievink
563d585594
Use IdRange for variants
2020-06-25 16:52:15 +02:00
Jonas Schievink
b06214d164
Generalize FieldIds -> IdRange<T>
2020-06-25 16:42:59 +02:00
Jonas Schievink
2a8fc9e682
adt.rs: fetch struct/union data from item tree
2020-06-25 16:41:08 +02:00
Paul Daniel Faria
0b657ddbfe
Revert resolution of all glob imports first, replace with tracking of glob imports and shadowing when more specific
2020-06-25 09:27:00 -04:00
Paul Daniel Faria
70d4829560
Order of glob imports should not affect import shadowing
2020-06-25 09:23:34 -04:00
Jonas Schievink
d84b3ff6a1
Collect field/variant attrs in ItemTree
2020-06-25 14:39:27 +02:00
Jonas Schievink
9ba7726579
Allow iterating fields in the ItemTree
2020-06-25 13:50:27 +02:00
Jonas Schievink
2928600374
Reorder items
2020-06-24 16:54:21 +02:00
Jonas Schievink
d6fd7809b0
Clean up and fix inner item collection a bit
2020-06-24 16:54:21 +02:00
Jonas Schievink
3b50b0b2b6
Use a HashMap instead of Vec
...
This is no longer enforcing stack discipline, so a Vec isn't necessary
or helpful
2020-06-24 16:54:21 +02:00
Jonas Schievink
59d4640b64
Remove unneeded HirFileId argument
2020-06-24 16:54:21 +02:00
Jonas Schievink
d4ddec2bdf
Shrink arenas after building ItemTree
2020-06-24 16:54:21 +02:00
Jonas Schievink
94169ee504
ItemTree: Use more boxed slices
2020-06-24 16:54:21 +02:00
Jonas Schievink
abdba92334
Don't allocate empty generics
2020-06-24 16:54:21 +02:00
Jonas Schievink
43cad21623
Don't allocate common visibilities
2020-06-24 16:54:20 +02:00
Jonas Schievink
16fd4dabb7
Remove file id from item tree
...
It's not needed, and `source` is only used by tests anyways
2020-06-24 16:53:56 +02:00
Jonas Schievink
c019002d17
Slightly reduce ItemTree memory footprint
2020-06-24 16:53:56 +02:00
Jonas Schievink
f9a1a9cd3c
Merge item tree traits
...
The Source trait isn't needed anymore since we no longer merge
extern crate items with use items.
2020-06-24 16:53:56 +02:00
Jonas Schievink
b5fd02d93c
Generate ModItem via macro
2020-06-24 16:53:56 +02:00
Jonas Schievink
20ff1cdcfb
Address more comments
2020-06-24 16:53:56 +02:00
Jonas Schievink
a0ad457575
if let else -> match
2020-06-24 16:53:56 +02:00
Jonas Schievink
ae7a296c85
Unify and test attribute handling
2020-06-24 16:53:56 +02:00
Jonas Schievink
689e147c9d
Collect inner items in expression macros
2020-06-24 16:53:54 +02:00
Jonas Schievink
ffa0435050
Make generics and attr queries use ItemTree
...
Now it's fast
2020-06-24 16:53:16 +02:00
Jonas Schievink
19586bc5c6
Record HirFileId's in profiler
2020-06-24 16:53:16 +02:00
Jonas Schievink
1fbe21a545
Make remaining item data queries use item tree
2020-06-24 16:53:16 +02:00
Jonas Schievink
4b03b39d5b
draw the rest of the owl
2020-06-24 16:53:16 +02:00
Jonas Schievink
b94caeb88b
ItemTree: Make clonable and add AST access
2020-06-24 16:53:16 +02:00
Jonas Schievink
c12f7b610b
Lower generics
2020-06-24 16:53:16 +02:00
Jonas Schievink
864b650f92
ItemTree: use a newtyped ID
2020-06-24 16:53:16 +02:00
Jonas Schievink
278556f9fe
Move ItemTree lowering into its own module
2020-06-24 16:53:16 +02:00
Jonas Schievink
f9e5ba7d40
Remove now-broken incremental test
...
The ItemTree tracks impl and trait items, so the CrateDefMap now needs
recomputing when those change
2020-06-24 16:53:16 +02:00
Jonas Schievink
0e2602f75e
Remove raw item query
2020-06-24 16:53:16 +02:00
Jonas Schievink
7054e89d18
Fix test
2020-06-24 16:53:16 +02:00
Jonas Schievink
9d24412929
Move collector
2020-06-24 16:53:14 +02:00
Jonas Schievink
f9417bcf49
Draw the rest of the owl
2020-06-24 16:52:37 +02:00
Jonas Schievink
e24de2007f
collector changes WIP
2020-06-24 16:52:37 +02:00
Jonas Schievink
696a7a5a41
lower traits
2020-06-24 16:52:37 +02:00
Jonas Schievink
34bc80650b
Hook up query, add impls, lower moar
2020-06-24 16:52:37 +02:00
Aleksey Kladov
1d75d11d6c
Start item tree
2020-06-24 16:52:37 +02:00
Paul Daniel Faria
43c6f6c039
Fix formatting issue with glob shadow test
2020-06-24 08:50:59 -04:00
Paul Daniel Faria
dfd79907b8
Use a macro in push_res to simplify code, simplify glob_shadowed_def assertion
2020-06-24 08:20:41 -04:00
Paul Daniel Faria
38af81f183
Account for updated module ids when determining whether a resolution is "changed"
2020-06-23 22:10:01 -04:00
Aleksey Kladov
d016cb4867
Use only one code-path for parsing fixtures
...
This removes leading newlines everywhere, shifting all ranges in tests
by one
2020-06-24 00:48:38 +02:00
Aleksey Kladov
6996ec860b
Drop rarely used fixture functionality
2020-06-23 18:37:26 +02:00
Aleksey Kladov
dad1333b48
New VFS
2020-06-23 17:51:06 +02:00
Jonas Schievink
500d8b2f60
Handle bindings after @ in patterns
2020-06-21 15:19:38 +02:00
bors[bot]
04d64267de
Merge #4947
...
4947: Replace `impls_in_trait` query with smarter use of `CrateImplDefs` r=matklad a=jonas-schievink
`impls_in_trait` was allocating a whopping ~400 MB of RAM when running analysis-stats on r-a itself.
Remove it, instead adding a query that computes a summary `CrateImplDefs` map for all transitive dependencies. This can probably still be made more efficient, but this already reduces the peak memory usage by 25% without much performance impact on analysis-stats.
**Before**:
```
Total: 34.962107188s, 2083mb allocated 2141mb resident
422mb ImplsForTraitQuery (deps)
250mb CrateDefMapQueryQuery
147mb MacroArgQuery
140mb TraitSolveQuery (deps)
68mb InferQueryQuery (deps)
62mb ImplDatumQuery (deps)
```
**After**:
```
Total: 35.261100358s, 1520mb allocated 1569mb resident
250mb CrateDefMapQueryQuery
147mb MacroArgQuery
144mb TraitSolveQuery (deps)
68mb InferQueryQuery (deps)
61mb ImplDatumQuery (deps)
45mb BodyQuery
45mb ImplDatumQuery
```
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2020-06-20 22:14:21 +00:00
Florian Diebold
584bddef0c
Don't panic on crates depending on themselves
...
Fixes #3883 .
2020-06-19 18:38:03 +02:00
Jonas Schievink
ebd8233b3e
Replace impls_in_trait
with CrateImplDefs
2020-06-19 01:29:34 +02:00
Aleksey Kladov
42be05a335
Simplify
2020-06-18 16:02:45 +02:00
Aleksey Kladov
3c72fc0573
Anchor file-system operations to the file, and not to the source root.
...
Anchoring to the SourceRoot wont' work if the path is absolute:
#[path = "/tmp/foo.rs"]
mod foo;
Anchoring to a file will.
However, we *should* anchor, instead of just producing an abs path.
I can imagine a situation where, for example, rust-analyzer processes
crates from different machines (or, for example, from in-memory git
branch), where the same absolute path in different crates might refer
to different files in the end!
2020-06-16 18:45:58 +02:00
Aleksey Kladov
52a220cece
Deprecate hir::Path::from_ast
2020-06-15 10:55:48 +02:00
Jonas Schievink
0231e4ac77
find_path: return shorter paths for external items
...
If a containing module is already in scope, there's no need to
use the full path to the item.
2020-06-12 13:01:20 +02:00
Jonas Schievink
90331ea035
Make known paths use core
instead of std
2020-06-11 16:23:20 +02:00
bors[bot]
32157d48f4
Merge #4843
...
4843: Don't guess macro expansion crate r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-06-11 10:18:53 +00:00
Aleksey Kladov
fac7b0e252
Don't guess macro expansion crate
2020-06-11 12:13:14 +02:00
Aleksey Kladov
d8a5d39c2d
Make relevant_crates return a Set
2020-06-11 11:30:06 +02:00
Jonas Schievink
dd22657407
ImportMap: use IndexMap internally
...
It iterates in insertion order, which makes the ordering more
predictable.
2020-06-10 16:15:49 +02:00
Jonas Schievink
7e83ed99a8
Respect casing when searching for imports
2020-06-10 16:04:55 +02:00
Jonas Schievink
56c7145993
Limit import map queries
2020-06-10 12:40:33 +02:00
Jonas Schievink
bcf875f46a
Clean up import_map.rs
2020-06-10 12:38:58 +02:00
Jonas Schievink
4bcf8c8c68
Add an FST index to ImportMap
2020-06-10 12:38:58 +02:00
bors[bot]
f133159ec0
Merge #4760
...
4760: Minimize FileLoader interface r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-06-05 15:23:22 +00:00
Aleksey Kladov
bbb40d7463
Minimize FileLoader interface
2020-06-05 17:22:56 +02:00
bors[bot]
4029628f15
Merge #4729 #4748
...
4729: Hover actions r=matklad a=vsrs
This PR adds a `hoverActions` LSP extension and a `Go to Implementations` action as an example:
![hover_actions_impl](https://user-images.githubusercontent.com/62505555/83335732-6d9de280-a2b7-11ea-8cc3-75253d062fe0.gif )
4748: Add an `ImportMap` and use it to resolve item paths in `find_path` r=matklad a=jonas-schievink
Removes the "go faster" queries I added in https://github.com/rust-analyzer/rust-analyzer/pull/4501 and https://github.com/rust-analyzer/rust-analyzer/pull/4506 . I've checked this PR on the rustc code base and the assists are still fast.
This should fix https://github.com/rust-analyzer/rust-analyzer/issues/4515 .
Note that this does introduce a change in behavior: We now always refer to items defined in external crates using paths through the external crate. Previously we could also use a local path (if for example the extern crate was reexported locally), as seen in the changed test. If that is undesired I can fix that, but the test didn't say why the previous behavior would be preferable.
Co-authored-by: vsrs <vit@conrlab.com>
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
2020-06-05 15:14:35 +00:00
Aleksey Kladov
bba374bab2
More direct signature for resolve_path
2020-06-05 15:07:30 +02:00
Aleksey Kladov
e63c00f100
Rename resolve_relative_path -> resolve_path
...
For things like `concant!(env!("OUT_DIR"))`, we need to support abs paths
2020-06-05 14:58:30 +02:00