rust-analyzer/crates
bors fe8ee9c43a Auto merge of #13744 - vtta:numthreads, r=Veykril
feat: add the ability to limit the number of threads launched by `main_loop`

## Motivation
`main_loop` defaults to launch as many threads as cpus in one machine. When developing on multi-core remote servers on multiple projects, this will lead to thousands of idle threads being created. This is very annoying when one wants check whether his program under developing is running correctly via `htop`.

<img width="756" alt="image" src="https://user-images.githubusercontent.com/41831480/206656419-fa3f0dd2-e554-4f36-be1b-29d54739930c.png">

## Contribution
This patch introduce the configuration option `rust-analyzer.numThreads` to set the desired thread number used by the main thread pool.
This should have no effects on the performance as not all threads are actually used.
<img width="1325" alt="image" src="https://user-images.githubusercontent.com/41831480/206656834-fe625c4c-b993-4771-8a82-7427c297fd41.png">

## Demonstration
The following is a snippet of `lunarvim` configuration using my own build.
```lua
vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "rust_analyzer" })
require("lvim.lsp.manager").setup("rust_analyzer", {
  cmd = { "env", "RA_LOG=debug", "RA_LOG_FILE=/tmp/ra-test.log",
    "/home/jlhu/Projects/rust-analyzer/target/debug/rust-analyzer",
  },
  init_options = {
    numThreads = 4,
  },
  settings = {
    cachePriming = {
      numThreads = 8,
    },
  },
})

```

## Limitations
The `numThreads` can only be modified via `initializationOptions` in early initialisation because everything has to wait until the thread pool starts including the dynamic settings modification support.
The `numThreads` also does not reflect the end results of how many threads is actually created, because I have not yet tracked down everything that spawns threads.
2023-01-09 11:53:23 +00:00
..
base-db Inline all format arguments where possible 2022-12-24 14:36:10 -05:00
cfg Inline all format arguments where possible 2022-12-24 14:36:10 -05:00
flycheck use inline format args 2023-01-02 14:52:32 +00:00
hir Auto merge of #13458 - cameron1024:suggest-checked-wrapping-saturating, r=Veykril 2023-01-09 11:24:44 +00:00
hir-def remove unnecessary lifetimes that can be elided 2023-01-02 15:02:54 +00:00
hir-expand Auto merge of #13860 - danieleades:clippy, r=lnicola 2023-01-08 17:29:57 +00:00
hir-ty Auto merge of #13860 - danieleades:clippy, r=lnicola 2023-01-08 17:29:57 +00:00
ide Auto merge of #13860 - danieleades:clippy, r=lnicola 2023-01-08 17:29:57 +00:00
ide-assists Auto merge of #13684 - unvalley:extract-expressions-from-format-string, r=Veykril 2023-01-09 11:40:48 +00:00
ide-completion fix: add_format_like_completions to handle no exprs 2023-01-09 12:23:59 +01:00
ide-db test: fix arg_type test 2023-01-09 12:22:29 +01:00
ide-diagnostics remove needless borrows 2023-01-02 14:52:32 +00:00
ide-ssr Inline all format arguments where possible 2022-12-24 14:36:10 -05:00
limit Inline all format arguments where possible 2022-12-24 14:36:10 -05:00
mbe remove unnecessary lifetimes that can be elided 2023-01-02 15:02:54 +00:00
parser remove useless operations 2023-01-02 15:02:54 +00:00
paths ⬆️ rust-analyzer 2022-11-23 17:24:03 +02:00
proc-macro-api remove useless operations 2023-01-02 15:02:54 +00:00
proc-macro-srv remove needless borrows 2023-01-02 14:52:32 +00:00
proc-macro-srv-cli ⬆️ rust-analyzer 2022-11-23 17:24:03 +02:00
proc-macro-test Moar linting: needless_borrow, let_unit_value, ... 2022-12-25 05:07:47 -05:00
profile remove needless borrows 2023-01-02 14:52:32 +00:00
project-model remove unnecessary lifetimes that can be elided 2023-01-02 15:02:54 +00:00
rust-analyzer Auto merge of #13744 - vtta:numthreads, r=Veykril 2023-01-09 11:53:23 +00:00
sourcegen remove needless borrows 2023-01-02 14:52:32 +00:00
stdx remove useless casts 2023-01-02 15:02:54 +00:00
syntax remove unnecessary lazy evaluations 2023-01-02 15:02:54 +00:00
test-utils Auto merge of #13860 - danieleades:clippy, r=lnicola 2023-01-08 17:29:57 +00:00
text-edit ⬆️ rust-analyzer 2022-11-23 17:24:03 +02:00
toolchain Moar linting: needless_borrow, let_unit_value, ... 2022-12-25 05:07:47 -05:00
tt Inline all format arguments where possible 2022-12-24 14:36:10 -05:00
vfs derive 'Hash' 2022-12-30 11:14:15 +00:00
vfs-notify ⬆️ rust-analyzer 2022-11-23 17:24:03 +02:00