rust-analyzer/crates
bors[bot] 9946def7e2
Merge #10877
10877: feat: make hightlighting linear r=matklad a=matklad

In https://youtu.be/qvIZZf5dmTE, we've noticed that AstIdMap does a
linear lookup when going from SyntaxNode to Id. This leads to
accidentally quadratic overall performance. Replace linear lookup with a
O(1) hashmap lookup.

Future work: don't duplicate `SyntaxNodePtr` in `AstIdMap` and switch to
"call site dependency injection" style storage (eg, store a
`HashSet<ErasedFileAstId>`).

See the explanation of the work here on YouTube :-)

As you can see from then benchmark results, this doesn't actually make analysis stats fastre. I am a bit mystified as to why this is happening to be honest. 

Baseline
```
Database loaded:     598.40ms, 304minstr, 118mb (metadata 390.57ms, 21minstr, 841kb; build 111.31ms, 8764kinstr, -214kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     9.70s, 75ginstr, 377mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           43.16s, 342ginstr, 641mb
Total:               52.86s, 417ginstr, 1018mb
```

This PR:
```
Database loaded:     626.34ms, 304minstr, 118mb (metadata 416.26ms, 21minstr, 841kb; build 113.67ms, 8750kinstr, -209kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     10.16s, 75ginstr, 389mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           44.51s, 342ginstr, 644mb
Total:               54.67s, 417ginstr, 1034mb
```

I think we probably should merge the first commit here, but not the second. 

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-12-11 14:49:29 +00:00
..
base_db Merge #10872 2021-11-30 14:07:39 +00:00
cfg Replace some String usages with SmolStr in completions 2021-11-05 12:30:39 +01:00
flycheck Don't discard flycheck error messages 2021-11-27 18:57:51 +01:00
hir Remove some allocations 2021-12-10 20:01:24 +01:00
hir_def Merge #10977 2021-12-10 14:19:51 +00:00
hir_expand Merge #10877 2021-12-11 14:49:29 +00:00
hir_ty Remove some allocations 2021-12-10 20:01:24 +01:00
ide Merge #10978 2021-12-10 22:31:55 +00:00
ide_assists Merge #10976 2021-12-11 13:50:55 +00:00
ide_completion Merge #10976 2021-12-11 13:50:55 +00:00
ide_db Merge #10985 2021-12-11 14:32:29 +00:00
ide_diagnostics Treat extern blocks as item containers 2021-12-07 17:31:26 +01:00
ide_ssr Merge #10698 2021-11-07 11:02:39 +00:00
limit Drop resolver and authors manifest entries 2021-10-25 18:12:40 +03:00
mbe Clean up some unused cross-crate dependencies 2021-12-05 13:54:49 +02:00
parser Bump parser step limit a little 2021-12-06 11:47:36 +02:00
paths Set MSRV 2021-10-23 15:07:11 +03:00
proc_macro_api Bump object avoid a duplicate dependency 2021-10-30 09:02:45 +03:00
proc_macro_srv Fix proc macro ABI version checks 2021-11-18 10:24:24 +02:00
proc_macro_test Set MSRV 2021-10-23 15:07:11 +03:00
profile Bump countme 2021-12-04 15:14:31 +02:00
project_model Fix library target overriding sysroot deps 2021-12-08 17:05:00 +01:00
rust-analyzer internal: add "Shuffle Crate Graph" command 2021-12-07 16:37:19 +01:00
sourcegen Set MSRV 2021-10-23 15:07:11 +03:00
stdx Remove some allocations 2021-12-10 20:01:24 +01:00
syntax Remove possible multiline details in completions 2021-11-24 16:08:11 +01:00
test_utils Set MSRV 2021-10-23 15:07:11 +03:00
text_edit Update crates/text_edit/src/lib.rs 2021-11-03 15:44:46 +01:00
toolchain Set MSRV 2021-10-23 15:07:11 +03:00
tt Set MSRV 2021-10-23 15:07:11 +03:00
vfs minor: Lift out FxIndex{Map/Set} types into ide_db 2021-11-16 12:15:47 +01:00
vfs-notify Set MSRV 2021-10-23 15:07:11 +03:00