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
kjeremy
2257a48cd3
Use more explicity type for save registration
2020-07-14 11:03:44 -04:00
kjeremy
06dea07dde
Bump tracing-tree to remove quanta
...
Hopefully fixes power 32-bit build.
See: https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Running.20check.20builds.20on.2032.20bit.20power
2020-07-13 18:11:24 -04:00
Aleksey Kladov
693ac892f2
Don't copy-paste impl_froms
into every crate
2020-07-13 16:21:02 +02:00
kjeremy
2e466db7f3
Update adler and syn
2020-07-13 08:52:07 -04:00
Florian Diebold
71d645101d
Upgrade Chalk
2020-07-12 20:20:31 +02:00
Florian Diebold
c82f5379de
Enable Chalk tracing in hir_ty tests
2020-07-12 20:12:01 +02:00
Jeremy Kolb
6a18dbe116
Update lsp-types
2020-07-12 12:28:00 -04:00
Jeremy Kolb
007812dcae
Update lsp-types to account for new CodeActionKind structure
2020-07-11 17:29:45 -04:00
Aleksey Kladov
b20a6b582b
Rewrite item_tree tests to expect
...
insta review wouldn't update the test, so ...
2020-07-11 22:11:31 +02:00
Aleksey Kladov
9a3c22bbfd
Make slow test parallel
2020-07-11 12:56:44 +02:00
kjeremy
e07c7008af
Update deps
2020-07-10 17:14:24 -04:00
bors[bot]
89c7c55995
Merge #5270
...
5270: Add argument count mismatch diagnostic r=matklad a=jonas-schievink
Closes https://github.com/rust-analyzer/rust-analyzer/issues/4025 .
This currently has one false positive on this line, where `max` is resolved to `Iterator::max` instead of `Ord::max`:
8aa10c00a4/crates/expect/src/lib.rs (L263)
(I have no idea why it thinks that `usize` is an `Iterator`)
TODO:
* [x] Tests
* [x] Improve diagnostic text for method calls
Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
2020-07-09 15:34:43 +00:00
Jonas Schievink
f4a9d9a00f
Address review comments
2020-07-09 17:33:49 +02:00
Aleksey Kladov
e075e6eef2
Move diagnostics tests to expect
2020-07-09 16:04:29 +02:00
Aleksey Kladov
b398519011
Cleanup diagnostic conversion code
2020-07-09 15:34:37 +02:00
Aleksey Kladov
117392e879
Remove insta from ra_ide
2020-07-09 14:33:57 +02:00
Aleksey Kladov
b660681a6b
Unify tests
2020-07-09 10:58:56 +02:00
Aleksey Kladov
7db795e747
⬆️ deps
2020-07-08 22:02:54 +02:00
Aleksey Kladov
dab7f3d2c6
Remove relative_path dependency
2020-07-08 19:32:36 +02:00
bors[bot]
41feb816c9
Merge #5255
...
5255: Replace ad hocery with science r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2020-07-07 21:32:08 +00:00
Aleksey Kladov
69b79e3a73
Replace ad hocery with science
2020-07-07 23:28:48 +02:00
Veetaha
f92bfb5807
Gzip artifacts
...
Co-authored-by: bjorn3 <bjorn3@users.noreply.github.com>
Override miniz_oxide to build it with optimizations
Building this crate with optimizations decreases the gzipping
part of `cargo xtask dist` from `30-40s` down to `3s`,
the overhead for `rustc` to apply optimizations is miserable on this background
2020-07-07 23:30:11 +03:00
Aleksey Kladov
1e6336c4b9
⬆️ backtrace
2020-07-07 16:26:33 +02:00