Benjamin Coenen
e73d140b51
add suggestion ..Default::default() for remaining struct fields in a constructor #6492
...
Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
2020-11-13 17:17:16 +01:00
kjeremy
3b9d164043
Update crates
2020-11-11 11:17:48 -05:00
kjeremy
f32be79296
Do not use yanked once_cell
2020-11-11 11:02:49 -05:00
Aleksey Kladov
731f7bfc02
Replace RacyFlag with OnceCell
2020-11-11 03:11:40 +01:00
kjeremy
6b9a3504ca
cargo update
2020-11-04 22:01:19 -05:00
kjeremy
0403e82d91
Bump chalk and lexer
2020-11-02 12:00:58 -05:00
Aleksey Kladov
f5e7f07838
Update crates
...
This is to bust the caches
2020-11-02 17:00:05 +01:00
Jeremy Kolb
5fccb72dd5
cargo update
2020-10-31 10:20:25 -04:00
Florian Diebold
bca51e3519
Upgrade Chalk to 0.36
...
Quite a few changes, because Chalk got rid of the `ApplicationTy` nesting.
2020-10-30 18:57:55 +01:00
kjeremy
e7e58b08ac
cargo update
2020-10-28 15:37:40 -04:00
kjeremy
5cb6fafd36
Latest proposed LSP 3.16.0
...
Needs: https://github.com/gluon-lang/lsp-types/pull/183
2020-10-26 09:23:34 -04:00
Florian Diebold
39dfca23f1
Add tracing to main rust-analyzer binary
2020-10-25 13:53:38 +01:00
bors[bot]
bf84e4958e
Merge #6331 #6342
...
6331: correct hover text for items with doc attribute with raw strings r=matklad a=JoshMcguigan
Fixes #6300 by improving the handling of raw string literals in attribute style doc comments.
This still has a bug where it could consume too many `"` at the start or end of the comment text, just as the original code had. Not sure if we want to fix that as part of this PR or not? If so, I think I'd prefer to add a unit test for either the `as_simple_key_value` function (I'm not exactly sure where this would belong / how to set this up) or create a `fn(&SmolStr) -> &SmolStr` to unit test by factoring out the `trim` operations from `as_simple_key_value`. Thoughts on this?
6342: Shorter dependency chain r=matklad a=popzxc
Continuing implementing suggestions from the `Completion refactoring` zulip thread.
This PR does the following:
- Removes dependency of `completions` on `assists` by moving required functionality into `ide_db`.
- Moves completely `call_info` crate into `ide_db` as it looks like it fits perfect there.
- Adds a bunch of new tests and docs.
- Adds the re-export of `base_db` to the `ide_db` and removes direct dependency on `base_db` from other crates.
The last point is controversial, I guess, but I noticed that in places where `ide_db` is used, `base_db` is also *always* used. Thus I think the dependency on the `base_db` is implied by the fact of `ide_db` interfaces, and thus it makes sense to just provide `base_db` out of the box.
Co-authored-by: Josh Mcguigan <joshmcg88@gmail.com>
Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
2020-10-24 19:08:12 +00:00
Laurențiu Nicola
c81d044622
Bump chalk
2020-10-24 17:14:05 +03:00
Laurențiu Nicola
4834015fd1
Bump rustc_lexer
2020-10-24 17:11:58 +03:00
Laurențiu Nicola
09468ce370
Bump deps
2020-10-24 17:10:36 +03:00
Igor Aleksanov
19cce08662
Re-export base_db from ide_db
2020-10-24 11:39:57 +03:00
Igor Aleksanov
b6ea56ea09
Make call_info a part of ide_db
2020-10-24 11:07:10 +03:00
Igor Aleksanov
8d3d509af7
Remove dependency on 'assists' from 'completion' crate
2020-10-24 10:47:23 +03:00
bors[bot]
2fa942ad30
Merge #6251 #6310
...
6251: Semantic Highlight: Add Callable modifier for variables r=matklad a=GrayJack
This PR added the `HighlightModifier::Callable` variant and assigned it to variables and parameters that are fn pointers, closures and implements FnOnce trait.
This allows to colorize these variables/parameters when used in call expression.
6310: Rewrite algo::diff to support insertion and deletion r=matklad a=Veykril
This in turn also makes `algo::diff` generate finer diffs(maybe even minimal diffs?) as insertions and deletions aren't always represented as as replacements of parent nodes now.
Required for #6287 to go on.
Co-authored-by: GrayJack <gr41.j4ck@gmail.com>
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2020-10-23 22:12:15 +00:00
bors[bot]
81609960fa
Merge #6324
...
6324: Improve #[cfg] diagnostics r=jonas-schievink a=jonas-schievink
Unfortunately I ran into https://github.com/rust-analyzer/rust-analyzer/issues/4058 while testing this on https://github.com/nrf-rs/nrf-hal/ , so I didn't see much of it in action yet, but it does seem to work.
Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2020-10-23 10:38:30 +00:00
Jonas Schievink
68b17986c7
Implement DNF-based #[cfg]
introspection
2020-10-22 17:57:00 +02:00
Lukas Wirth
d86863aeb4
Rewrite algo::diff to support insertion and deletion
2020-10-22 09:51:11 +02:00
Jeremy Kolb
f64f569483
Update crates
...
This brings in a number of new dependencies though.
2020-10-20 17:36:02 -04:00
Aleksey Kladov
c4699819d0
⬆️ crates
2020-10-19 13:57:41 +02:00
Igor Aleksanov
9e7c952bbd
Extract call_info and completion into separate crates
2020-10-18 13:09:00 +03:00
Aleksey Kladov
6c7769a2e3
update deps
2020-10-18 01:53:01 +02:00
Aleksey Kladov
cb63e83237
⬆️ xshell
2020-10-18 01:51:39 +02:00
Aleksey Kladov
0fab08740b
⬆️ xshell
2020-10-17 13:25:22 +02:00
Aleksey Kladov
49a90d4c31
Switch from not_bash to xshell
2020-10-17 02:42:42 +02:00
bors[bot]
3e450cf89f
Merge #6207 #6224 #6226 #6227
...
6207: Extract ImportAssets out of auto_import r=matklad a=Veykril
See https://github.com/rust-analyzer/rust-analyzer/pull/6172#issuecomment-707182140
I couldn't fully pull out `AssistContext` as `find_node_at_offset_with_descend`: 81fa00c5b5/crates/assists/src/assist_context.rs (L90-L92)
requires the `SourceFile` which is private in it and I don't think making it public just for this is the right call?
6224: ⬆️ salsa r=matklad a=matklad
bors r+
🤖
6226: Add reminder to update lsp-extensions.md r=matklad a=matklad
bors r+
🤖
6227: Reduce bors timeout r=matklad a=matklad
bors r+
🤖
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-10-14 11:37:51 +00:00
Aleksey Kladov
41e2639f35
⬆️ salsa
2020-10-14 12:40:48 +02:00
Laurențiu Nicola
e559066bed
Bump pulldown-cmark
2020-10-13 20:41:49 +03:00
Laurențiu Nicola
baf84d4a93
Bump regex
2020-10-13 18:06:40 +03:00
Laurențiu Nicola
9937c0d50a
Bump rustc_lexer
2020-10-13 18:06:23 +03:00
Laurențiu Nicola
017a04f424
Bump crossbeam-channel and lsp-server in rust-analyzer
2020-10-13 18:05:06 +03:00
Laurențiu Nicola
db7813ef2c
Bump crossbeam-channel in crates
2020-10-13 16:57:01 +03:00
Laurențiu Nicola
c6605affe4
Bump some deps
2020-10-13 16:46:36 +03:00
Laurențiu Nicola
852b2481a4
Remove Cargo.lock comment
2020-10-13 16:46:22 +03:00
Jonas Schievink
f8be6c636c
macOS: install GNU tar
2020-10-12 19:51:49 +02:00
kjeremy
a7d6674e4d
Update crates
2020-10-11 18:01:50 -04:00
kjeremy
13bb0404a8
Bump rustc_lexer, cfg-if to 1.0 and add new license to check
2020-10-08 10:39:02 -04:00
Casey Primozic
37df2138ec
Switch from git to latest tagged release of chalk deps
2020-10-07 12:11:22 -07:00
Casey Primozic
56a8a7645f
Bump chalk to use latest git to get fix
...
* Chalk very recently (like an hour ago) merged a fix that prevents rust analyzer from panicking. This allows it to be usable again for code that hits those situations. See #6134 , #6145 , Probably #6120
2020-10-06 15:05:20 -07:00
kjeremy
ff678e1349
Up rustc-ap-rustc_lexer to 681
...
cargo update as well
2020-10-01 15:21:13 -04:00
kjeremy
9b2e38f009
cargo update
2020-09-30 09:49:40 -04:00
Nathan Whitaker
f50458deaf
Update chalk to 0.30.0
2020-09-28 14:24:11 -04:00
Jeremy Kolb
76dfac7894
chalk 0.29.0
2020-09-28 07:44:27 -04:00
Jeremy Kolb
89ac5995e9
Update deps
2020-09-27 18:14:50 -04:00
Bram van den Heuvel
dff6895ce8
Update chalk to 0.28.0
2020-09-25 15:29:31 +02:00
Jean SIMARD
875ad9b5c4
Bump smol_str from 0.1.16 to 0.1.17
2020-09-24 16:39:08 +02:00
kjeremy
95d7e3ce49
lsp-types 0.82
2020-09-23 15:41:55 -04:00
kjeremy
c7243e4a59
Support active parameters at the per-signature level
...
Update crates
2020-09-18 11:39:25 -04:00
Charles Lew
b302f69b7c
Update chalk to 0.27 and adapt to chalk changes.
2020-09-15 22:37:05 +08:00
kjeremy
07110a4472
Update crates
2020-09-14 08:43:26 -04:00
kjeremy
50bbe8bddd
Update serde
2020-09-11 15:07:49 -04:00
kjeremy
b2334d0ecb
cargo update
2020-09-11 11:38:36 -04:00
kjeremy
b74aba4011
Update crates
...
Gets passed pulled crossbeam crate
2020-09-08 08:50:03 -04:00
kjeremy
11758d518a
Up proc-macro2 to 1.20
...
This changes the way Display is implemented
2020-09-03 17:40:12 -04:00
kjeremy
5e4195bb6a
Chalk 0.25
...
Picks up flodiebold's infinite loop fix
2020-09-02 14:07:06 -04:00
bors[bot]
7f79dbc84f
Merge #5930
...
5930: Migrate to the latest Semantic Tokens Proposal for LSP 3.16 r=matklad a=kjeremy
This stabilizes call hierarchy and semantic tokens features on the client side and changes the server-side semantic tokens protocol to match the latest proposal for 3.16.
The server-side change will break clients depending on the earlier semantic tokens draft.
Fixes #4942
Co-authored-by: kjeremy <kjeremy@gmail.com>
2020-09-02 15:11:22 +00:00
kjeremy
b527257330
Move to vscode-languageclient 7.0.0-next.9
...
Stabilizes call hierarchy and semantic tokens features.
2020-09-02 09:40:59 -04:00
kjeremy
62656f09c0
cargo update
2020-09-02 09:36:03 -04:00
Veetaha
4bc56ebd93
Replace custom not_bash::fs2
setup with fs_err crate
2020-08-29 17:47:13 +03:00
Aleksey Kladov
c692b5d76d
⬆️ expect-test
2020-08-28 14:47:14 +02:00
Aleksey Kladov
07da02fc37
⬆️ crates
2020-08-27 19:06:00 +02:00
Aleksey Kladov
f8a59adf5e
Tease apart orthogonal concerns in markdown link rewriting
...
`hir` should know nothing about URLs, markdown and html. It should
only be able to:
* resolve stringy path from documentation
* generate canonical stringy path for a def
In contrast, link rewriting should not care about semantics of paths
and names resolution, and should be concern only with text mangling
bits.
2020-08-26 20:24:00 +02:00
Zac Pullar-Strecker
b835f06cec
Merge remote-tracking branch 'upstream/master' into 503-hover-doc-links
2020-08-25 16:44:36 +12:00
Jonas Schievink
f3ac19e8cd
Support extern types
2020-08-24 22:02:55 +02:00
Zac Pullar-Strecker
7bbca7a1b3
Merge remote-tracking branch 'upstream/master' into 503-hover-doc-links
2020-08-24 21:20:13 +12:00
Zac Pullar-Strecker
4f5f608b49
Reorganise code
2020-08-24 20:26:45 +12:00
Aleksey Kladov
95f33bb5f7
⬆️ autocfg
2020-08-21 19:14:44 +02:00
Aleksey Kladov
863b1fb731
⬆️ ungrammar
2020-08-21 19:14:05 +02:00
bors[bot]
df54561a68
Merge #5835
...
5835: Switch to expect_test from crates.io
r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-08-21 11:21:05 +00:00
Aleksey Kladov
b0fd3faf36
Switch to expect_test from crates.io
2020-08-21 13:19:31 +02:00
kjeremy
41c5d9caaa
Update crates
2020-08-20 12:50:43 -04:00
Aleksey Kladov
6b0b9178b3
⬆️ crates
2020-08-18 23:52:29 +02:00
bors[bot]
a95c5e2121
Merge #5758
...
5758: SSR: Explicitly autoderef and ref placeholders as needed r=matklad a=davidlattimore
Structural search replace now inserts *, & and &mut in the replacement to match any auto[de]ref in the matched code.
e.g. `$a.foo() ==>> bar($a)` might convert `x.foo()` to `bar(&mut x)`
Co-authored-by: David Lattimore <dml@google.com>
2020-08-18 10:52:27 +00:00
David Lattimore
29e6238cb7
SSR: A few small refactorings
2020-08-18 20:39:55 +10:00
Aleksey Kladov
88adca766a
⬆️ crates
2020-08-18 11:20:45 +02:00
Jeremy Kolb
409090e74c
Chalk 0.23
2020-08-16 12:15:44 -04:00
Jeremy Kolb
7819e794db
Bump rustc_lexer
2020-08-16 11:57:10 -04:00
Jeremy Kolb
9aca8d6647
Update chrono
2020-08-16 11:34:13 -04:00
Jonas Schievink
cb816b1ea8
Add a proc_macro_test crate
...
This exports all 3 kinds of proc macros and is useful for testing
2020-08-15 00:27:32 +02:00
Aleksey Kladov
1b0c7701cc
Rename ra_ide -> ide
2020-08-13 17:58:27 +02:00
Aleksey Kladov
fc34403018
Rename ra_assists -> assists
2020-08-13 17:33:38 +02:00
Aleksey Kladov
ae3abd6e57
Rename ra_ssr -> ssr
2020-08-13 17:02:44 +02:00
Aleksey Kladov
bb5c189b7d
Rename ra_ide_db -> ide_db
2020-08-13 16:39:16 +02:00
Aleksey Kladov
ae71a631fd
Rename ra_hir -> hir
2020-08-13 16:36:55 +02:00
Aleksey Kladov
6a77ec7bbe
Rename ra_hir_ty -> hir_ty
2020-08-13 16:35:29 +02:00
Aleksey Kladov
b28c54a2c2
Rename ra_hir_def -> hir_def
2020-08-13 16:29:33 +02:00
Aleksey Kladov
b7aa4898e0
Rename ra_hir_expand -> hir_expand
2020-08-13 16:29:33 +02:00
Aleksey Kladov
ed20a857f4
Rename ra_db -> base_db
2020-08-13 16:29:33 +02:00
Aleksey Kladov
2119dc23e8
Rename ra_proc_macro -> proc_macro_api
2020-08-13 12:39:27 +02:00
bors[bot]
de1d93455f
Merge #5744
...
5744: Rename ra_project_model -> project_model r=matklad a=pksunkara
Co-authored-by: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
2020-08-13 10:10:03 +00:00
Pavan Kumar Sunkara
eac24d52e6
Rename ra_project_model -> project_model
2020-08-13 12:05:30 +02:00
Aleksey Kladov
c81f6230da
Remove ra_fmt crate
2020-08-13 11:59:42 +02:00
Aleksey Kladov
68c2238725
Rename ra_cfg -> cfg
2020-08-13 10:36:04 +02:00
Aleksey Kladov
2f45cfc415
Rename ra_mbe -> mbe
2020-08-13 10:36:04 +02:00
Aleksey Kladov
d42ba63976
⬆️ crates
2020-08-13 10:36:04 +02:00
Aleksey Kladov
0e6b94de78
Minor
2020-08-13 10:36:04 +02:00
Pavan Kumar Sunkara
349e6c62ad
Rename ra_proc_macro_srv -> proc_macro_srv
2020-08-13 03:18:19 +02:00
Aleksey Kladov
a1c187eef3
Rename ra_syntax -> syntax
2020-08-12 18:30:53 +02:00
Aleksey Kladov
50a02eb359
Rename ra_parser -> parser
2020-08-12 17:14:23 +02:00
Aleksey Kladov
6dafc13f5f
Rename ra_text_edit -> text_edit
2020-08-12 17:03:06 +02:00
Aleksey Kladov
7510048ec0
Cleanup TextEdit API
2020-08-12 16:58:56 +02:00
Aleksey Kladov
8d34262956
Rename ra_toolchain -> toolchain
2020-08-12 16:52:28 +02:00
Aleksey Kladov
550d7fbe3c
Rename ra_tt -> tt
2020-08-12 16:46:54 +02:00
Aleksey Kladov
208b7bd7ba
Rename ra_prof -> profile
2020-08-12 16:35:29 +02:00
Aleksey Kladov
98baa9b569
Rename ra_arena
2020-08-12 16:22:05 +02:00
Jonas Schievink
67b2b3d0ce
Fix build on musl and test it in CI
2020-08-12 12:23:25 +02:00
kjeremy
9842bbfd27
cargo update
2020-08-10 10:56:16 -04:00
Jeremy Kolb
4591bd458d
Update chalk
2020-08-05 22:24:23 -04:00
Aleksey Kladov
edd4a83ee3
Use salsa's purge to account for all memory
2020-08-05 15:28:20 +02:00
Zac Pullar-Strecker
b34ad4bc8a
update & configure cmark to render three backticks
2020-08-02 20:32:09 +12:00
Aleksey Kladov
bff8dd0949
Update grammar
2020-08-01 13:47:19 +02:00
Aleksey Kladov
a015714def
Better JSON serialization in metrics
2020-08-01 04:09:52 +02:00
Zac Pullar-Strecker
b7bbfc2543
pulldown_cmark no-default-features
2020-08-01 14:08:24 +12:00
Zac Pullar-Strecker
7bd48a63f6
use static data for namespace recognition
2020-08-01 12:32:49 +12:00
Zac Pullar-Strecker
4c745d219f
remove some crates.io deps
2020-08-01 11:47:27 +12:00
Zac Pullar-Strecker
f05d7b41a7
Merge remote-tracking branch 'upstream/master' into 503-hover-doc-links
...
Hasn't fixed tests yet.
2020-07-31 14:12:44 +12:00
Laurențiu Nicola
797cdb00d9
Bump chalk
2020-07-30 23:09:07 +03:00
Laurențiu Nicola
fa64817eab
Bump perf-event and rustc_lexer
2020-07-30 20:36:03 +03:00
Aleksey Kladov
7204374719
Report instructions in addition to time
...
They hopefully will be more stable on CI
2020-07-30 10:23:32 +02:00
kjeremy
e51d1ddf5b
cargo_metadata 0.11.1 and cargo update
2020-07-29 17:06:56 -04:00
Aleksey Kladov
ba585309ec
Replace rand with oorandom
2020-07-29 19:49:10 +02:00
Aleksey Kladov
3d28292157
Switch to ungrammar from ast_src
...
The primary advantage of ungrammar is that it (eventually) allows one
to describe concrete syntax tree structure -- with alternatives and
specific sequence of tokens & nodes.
That should be re-usable for:
* generate `make` calls
* Rust reference
* Hypothetical parser's evented API
We loose doc comments for the time being unfortunately. I don't think
we should add support for doc comments to ungrammar -- they'll make
grammar file hard to read. We might supply docs as out-of band info,
or maybe just via a reference, but we'll think about that once things
are no longer in flux
2020-07-29 19:18:25 +02:00
Aleksey Kladov
514bb96e7c
⬆️ deps
2020-07-27 09:30:44 +02:00
David Lattimore
2b53639e38
SSR: Use expect! in tests
2020-07-24 21:34:00 +10:00
Aleksey Kladov
be06aaecde
Lighter weight tempdir
2020-07-23 22:26:25 +02:00
kjeremy
cf07bbc0db
Update tracing
2020-07-23 13:31:16 -04:00
Aleksey Kladov
4f7a3fba59
Replace superslice with API on path to stabilization
2020-07-23 12:59:18 +02:00
kjeremy
9a9c0e1105
Use symbol tags
2020-07-22 12:18:48 -04:00
Aleksey Kladov
9ad41eb908
Setup global allocator in the correct crate
...
It worked before, but was roundabout
2020-07-22 13:42:53 +02:00
Aleksey Kladov
deed44a472
Remove support for jemalloc
...
We only used it for measuring memory usage, but now we can use glibc's
allocator for that just fine
2020-07-22 13:40:45 +02:00
bors[bot]
2e73ba1b49
Merge #5479
...
5479: Allow gathering memory stats on non-jemalloc Linux r=matklad a=jonas-schievink
I could also parse `/proc/$PID/statm` to get the resident set size, but decided against that for now as it isn't terribly useful.
Note that `mallinfo()` is incredibly slow for some reason, and unfortunately this will be exposed to users via the "Memory Usage" command (even worse, the opened document will show the outdated values while the server is processing). So, not very ideal, but it keeps me from recompiling r-a with different feature sets all the time.
Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
2020-07-22 11:00:17 +00:00
kjeremy
f71ff7fc7a
bump crossbeam-channel
2020-07-21 14:45:10 -04:00
Jonas Schievink
56c090d0d0
Allow gathering memory stats on non-jemalloc Linux
2020-07-21 19:55:54 +02:00
Laurențiu Nicola
daab8b2fd0
Remove insta dep
2020-07-21 13:11:51 +03:00
bors[bot]
9518e2f9d6
Merge #5451 #5463 #5465 #5466
...
5451: Highlight more cases of SyntaxKind when it is a punctuation r=matklad a=GrayJack
This maybe closes #5406
Closes #5453
Separate what one expect to be a punctuation semantic token (like `,`, `;`, `(`, etc), and what is not (`&`, `::`, `+`, etc)
5463: Bump lexer r=matklad a=kjeremy
Since we're now on rust 1.45
5465: Bump chalk r=matklad a=kjeremy
5466: Do not show default types in function and closure return values r=matklad a=SomeoneToIgnore
Avoid things like
<img width="522" alt="image" src="https://user-images.githubusercontent.com/2690773/87985936-1bbe4f80-cae5-11ea-9b8a-5383d896c296.png ">
Co-authored-by: GrayJack <gr41.j4ck@gmail.com>
Co-authored-by: kjeremy <kjeremy@gmail.com>
Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2020-07-21 09:57:46 +00:00
kjeremy
9cfb373665
Bump chalk
2020-07-20 15:50:35 -04:00
kjeremy
d8eec71dc9
Bump lexer
2020-07-20 15:37:50 -04:00
kjeremy
11c7182163
cargo update
2020-07-20 13:53:17 -04:00
Jeremy Kolb
398a401044
cargo update
2020-07-19 13:09:01 -04:00
Aleksey Kladov
46ac9ff5e3
Simplify exclusion logic
2020-07-18 16:40:10 +02:00
Aleksey Kladov
19e78020bd
Remove insta for ra_hir_def
2020-07-17 15:54:40 +02:00
Jeremy Kolb
c8a232c2ef
Update log
2020-07-16 17:41:22 -04:00
Jeremy Kolb
7fba2274d9
Update lsp-types for HoverOptions
2020-07-15 18:17:46 -04:00
bors[bot]
b8b41c5f41
Merge #5354
...
5354: Add opt-in mimalloc feature r=matklad a=ivan
This adds a `mimalloc` feature to use [mimalloc](https://github.com/microsoft/mimalloc ) via [mimalloc_rust](https://github.com/purpleprotocol/mimalloc_rust ), and a corresponding `cargo xtask install --server --mimalloc`.
In my tests on Linux, mimalloc seems to run consistently faster than jemalloc and uses only slightly more memory in `analysis-stats` on chalk. Also, builds with mimalloc produce a binary 3MB smaller than builds with jemalloc.
A summary of `env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/` runs on NixOS master on an Intel 4790K in VMware Workstation:
<table>
<tr>
<td></td><td>self-reported time</td><td>elapsed time</td><td>max RSS</td>
</tr>
<tr><td>glibc 2.30 run 1</td><td>225.1 sec</td><td>3:46.91</td><td>1075208</td></tr>
<tr><td>glibc 2.30 run 2</td><td>228.4 sec</td><td>3:50.13</td><td>1074996</td></tr>
<tr><td>jemalloc run 1</td><td>201.8 sec</td><td>3:23.03</td><td>1055960</td></tr>
<tr><td>jemalloc run 2</td><td>199.2 sec</td><td>3:20.41</td><td>1065040</td></tr>
<tr><td>mimalloc run 1</td><td>188.6 sec</td><td>3:09.77</td><td>1105584</td></tr>
<tr><td>mimalloc run 2</td><td>185.0 sec</td><td>3:06.23</td><td>1108132</td></tr>
<tr><td>mimalloc + lto run 1</td><td>160.7 sec</td><td>2:41.80</td><td>1106076</td></tr>
<tr><td>mimalloc + lto run 2</td><td>162.2 sec</td><td>2:43.31</td><td>1104268</td></tr>
</tr>
</table>
I included an `lto = true; codegen-units = 1` run out of curiosity, this PR doesn't enable it.
<details>
<summary>analysis-stats benchmark runs</summary>
## default
```
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.10s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 333.880345ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 10.176299461s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 214.968806927s, 0b allocated 0b resident
Total: 225.145114417s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 225.34
System time (seconds): 1.49
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:46.91
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1075208
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 6
Minor (reclaiming a frame) page faults: 294711
Voluntary context switches: 365
Involuntary context switches: 3273
Swaps: 0
File system inputs: 2904
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.10s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 332.711598ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 9.895020518s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 218.5001697s, 0b allocated 0b resident
Total: 228.39519833s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 228.26
System time (seconds): 1.75
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:50.13
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1074996
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 9
Minor (reclaiming a frame) page faults: 294748
Voluntary context switches: 330
Involuntary context switches: 1561
Swaps: 0
File system inputs: 12608
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
```
## jemalloc
```
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.11s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 356.090374ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 10.176550183s, 439mb allocated 465mb resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 191.607201827s, 993mb allocated 1036mb resident
Total: 201.783937913s, 993mb allocated 1036mb resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 201.07
System time (seconds): 1.89
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:23.03
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1055960
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 357755
Voluntary context switches: 240
Involuntary context switches: 1889
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.10s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 317.917622ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 9.902142185s, 439mb allocated 463mb resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 189.295317017s, 993mb allocated 1046mb resident
Total: 199.197555943s, 993mb allocated 1046mb resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 198.64
System time (seconds): 1.67
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:20.41
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1065040
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 369013
Voluntary context switches: 243
Involuntary context switches: 2835
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
```
## mimalloc
```
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.12s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 332.116806ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 9.796643695s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 178.82132362s, 0b allocated 0b resident
Total: 188.617975605s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 187.70
System time (seconds): 1.97
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:09.77
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1105584
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 296481
Voluntary context switches: 222
Involuntary context switches: 1868
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.13s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 320.046776ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 9.287690124s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 175.710939697s, 0b allocated 0b resident
Total: 184.998640033s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 184.38
System time (seconds): 1.81
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 3:06.23
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1108132
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 297055
Voluntary context switches: 374
Involuntary context switches: 2374
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
```
## mimalloc + lto
```
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.11s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 369.600196ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 7.572726834s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 153.090899101s, 0b allocated 0b resident
Total: 160.663635235s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 160.01
System time (seconds): 1.70
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 2:41.80
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1106076
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 296610
Voluntary context switches: 209
Involuntary context switches: 2798
Swaps: 0
File system inputs: 8
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
# env time -v cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
Finished release [optimized] target(s) in 0.10s
Running `target/release/rust-analyzer analysis-stats ../chalk/`
[ERROR ra_project_model] cyclic dependency chalk-integration -> chalk-engine
[ERROR ra_project_model] cyclic dependency chalk-recursive -> chalk-integration
[ERROR ra_project_model] cyclic dependency chalk-solve -> chalk-integration
Database loaded 334.630658ms
Crates in this dir: 11
Total modules found: 159
Total declarations: 2631
Total functions: 1947
Item Collection: 7.71699197s, 0b allocated 0b resident
Total expressions: 57094
Expressions of unknown type: 2938 (5%)
Expressions of partially unknown type: 2427 (4%)
Type mismatches: 232
Inference: 154.50351318s, 0b allocated 0b resident
Total: 162.220513775s, 0b allocated 0b resident
Command being timed: "cargo run --release -p rust-analyzer -- analysis-stats ../chalk/"
User time (seconds): 161.52
System time (seconds): 1.74
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 2:43.31
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1104268
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 296183
Voluntary context switches: 200
Involuntary context switches: 1666
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
```
</details>
Co-authored-by: Ivan Kozik <ivan@ludios.org>
2020-07-15 09:43:08 +00:00
Ivan Kozik
6710856c10
Add opt-in mimalloc feature
2020-07-14 20:57:51 +00:00