ZIm/crates
Kirill Bulatov 9df92c3fb6
Correctly handle network issues during LSP server installation (#9460)
Closes https://github.com/zed-industries/zed/issues/9458

When flying in a plane being totally offline, I've discovered that my
Rust projects do not have any LSP support and rust-analyzer disappeared
out of `~/Library/Application Support/Zed/languages/rust-analyzer/`
directory.

Looking at the
[bad.log](https://github.com/zed-industries/zed/files/14627508/bad.log),
it appears that `get_language_server_command` tries to find a newer LSP
server version and fails on
80bc6c8cc8/crates/language/src/language.rs (L339)

bailing out of all installation related-methods up to here:


80bc6c8cc8/crates/project/src/project.rs (L2916)

where the code thinks that the binary installation process had failed,
cleans the existing directory and tries to install the language server
again:

```log
[2024-03-17T15:14:13+02:00 WARN  isahc::handler] request completed with error: failed to resolve host name
[2024-03-17T15:14:13+02:00 ERROR project] failed to start language server "rust-analyzer": error fetching latest release
[2024-03-17T15:14:13+02:00 ERROR project] server stderr: Some("")
[2024-03-17T15:14:13+02:00 INFO  project] retrying installation of language server "rust-analyzer" in 1s
[2024-03-17T15:14:13+02:00 ERROR util] crates/lsp/src/lsp.rs:720: oneshot canceled
[2024-03-17T15:14:14+02:00 INFO  project] About to spawn test binary
[2024-03-17T15:14:14+02:00 WARN  project] test binary failed to launch
[2024-03-17T15:14:14+02:00 WARN  project] test binary check failed
[2024-03-17T15:14:14+02:00 INFO  project] beginning to reinstall server
[2024-03-17T15:14:14+02:00 INFO  language::language_registry] deleting server container
[2024-03-17T15:14:14+02:00 INFO  language::language_registry] starting language server "rust-analyzer", path: "/Users/someonetoignore/work/other/local_test", id: 2
[2024-03-17T15:14:14+02:00 INFO  language] fetching latest version of language server "rust-analyzer"
[2024-03-17T15:14:14+02:00 WARN  isahc::handler] request completed with error: failed to resolve host name
[2024-03-17T15:14:14+02:00 ERROR project] failed to start language server "rust-analyzer": error fetching latest release
[2024-03-17T15:14:14+02:00 ERROR project] server stderr: Some("")
[2024-03-17T15:14:14+02:00 INFO  project] retrying installation of language server "rust-analyzer" in 1s
[2024-03-17T15:14:15+02:00 ERROR util] crates/languages/src/rust.rs:335: no cached binary
[2024-03-17T15:14:15+02:00 INFO  project] About to spawn test binary
............
```

The PR extracts away all binary fetching-related code into a single
method that does not fail the entire `get_language_server_command` and
allows it to recover and reuse the existing binary:


[good.log](https://github.com/zed-industries/zed/files/14627507/good.log)

```log
[2024-03-17T15:12:24+02:00 INFO  language::language_registry] starting language server "rust-analyzer", path: "/Users/someonetoignore/work/other/local_test", id: 1
[2024-03-17T15:12:24+02:00 INFO  language] fetching latest version of language server "rust-analyzer"
[2024-03-17T15:12:24+02:00 WARN  isahc::handler] request completed with error: failed to resolve host name
[2024-03-17T15:12:24+02:00 INFO  language] failed to fetch newest version of language server LanguageServerName("rust-analyzer"). falling back to using "/Users/someonetoignore/Library/Application Support/Zed/languages/rust-analyzer/rust-analyzer-2024-03-11"
[2024-03-17T15:12:24+02:00 INFO  lsp] starting language server. binary path: "/Users/someonetoignore/Library/Application Support/Zed/languages/rust-analyzer/rust-analyzer-2024-03-11", working directory: "/Users/someonetoignore/work/other/local_test", args: []
```

Release Notes:

- Fixed language servers erased from the disk when project is opened
offline
2024-03-17 15:41:00 +02:00
..
activity_indicator Show formatting failure (#9229) 2024-03-12 16:30:08 +01:00
ai Enable clippy::derive_ord_xor_partial_ord (#9371) 2024-03-14 17:55:57 -04:00
assets Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
assistant Enable clippy::never_loop (#9006) 2024-03-14 14:07:50 -04:00
audio Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
auto_update markdown preview: highlight code blocks (#9087) 2024-03-12 12:54:12 +02:00
breadcrumbs Encode rem values derived from pixels using rems_from_px (#9367) 2024-03-14 16:39:55 -04:00
call Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
channel Fix joining hosted projects (#9038) 2024-03-07 19:56:41 -07:00
cli Allow opening non-extant files (#9256) 2024-03-12 22:30:04 -06:00
client Remove wezterm fork from dependencie (#8998) 2024-03-12 21:27:40 +02:00
clock Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
collab collab logging (#9420) 2024-03-15 16:02:37 -06:00
collab_ui ui: Refine TitleBar component (#9415) 2024-03-15 15:48:07 -04:00
collections Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
color Fix hex_to_hsla inside the color crate (#9412) 2024-03-15 16:58:46 -04:00
command_palette Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
command_palette_hooks Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
copilot Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
copilot_ui Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
db Always remember the last window size and position (#9416) 2024-03-15 14:24:44 -07:00
diagnostics Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
editor Add multi_cursor_modifier setting (#9014) 2024-03-14 20:33:54 -06:00
extension Add ability to specify binary path/args for rust-analyzer (#9293) 2024-03-13 18:42:03 +01:00
extension_api Provide wasm extensions with APIs needed for using pre-installed LSP binaries (#9085) 2024-03-08 17:18:06 -05:00
extensions_ui Encode rem values derived from pixels using rems_from_px (#9367) 2024-03-14 16:39:55 -04:00
feature_flags Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
feedback Remove wezterm fork from dependencie (#8998) 2024-03-12 21:27:40 +02:00
file_finder Rename 'project_core' crate to 'worktree', make it just about worktrees (#9189) 2024-03-11 11:35:27 -07:00
fs Windows: make fs to use workspace windows crate (#9350) 2024-03-14 10:43:06 -07:00
fsevent Add rs-notify implementation of fs::watch (#9040) 2024-03-08 22:18:44 -08:00
fuzzy Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
git Properly display deleted diff hunks (#9182) 2024-03-11 17:53:45 +02:00
go_to_line Restore --all-targets for clippy (#9346) 2024-03-14 12:39:45 -04:00
gpui Small cleanup of gpui manifest file (#9439) 2024-03-16 12:59:18 +01:00
gpui_macros Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
install_cli Fix flickering (#9012) 2024-03-11 10:45:57 +01:00
journal Add --add/--new to control CLI behaviour (#9202) 2024-03-12 14:27:58 -06:00
language Correctly handle network issues during LSP server installation (#9460) 2024-03-17 15:41:00 +02:00
language_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
language_tools Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
languages Correctly handle network issues during LSP server installation (#9460) 2024-03-17 15:41:00 +02:00
live_kit_client Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
live_kit_server Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
lsp Always resolve code action if needed (#8904) 2024-03-05 23:42:12 +02:00
markdown_preview Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
media Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
menu Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
multi_buffer Enable clippy::never_loop (#9006) 2024-03-14 14:07:50 -04:00
node_runtime Implement updating for node-based language servers (#9361) 2024-03-15 11:40:28 -04:00
notifications Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
outline Restore --all-targets for clippy (#9346) 2024-03-14 12:39:45 -04:00
picker Small fixes to task modal & long commands (#8974) 2024-03-07 03:21:11 +02:00
prettier Fix prettier plugins does not seem to be picked up (#9193) 2024-03-12 11:38:30 +01:00
project Foundations for Open All the Things (#9353) 2024-03-14 18:01:40 -07:00
project_panel Add option to collapse all folders in root (#9372) 2024-03-15 09:48:56 +02:00
project_symbols Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
quick_action_bar Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
recent_projects Fill context menu of Zed macOS dock icon with recent projects (#8952) 2024-03-15 16:22:43 +02:00
refineable Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
release_channel Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rich_text Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
rope rope: Preallocate chunks buffer 2024-03-11 13:28:10 +01:00
rpc Enable clippy::non_canonical_clone_impl (#9373) 2024-03-14 18:49:51 -04:00
search Fix project search filtering on projects with multiple worktrees (#9337) 2024-03-14 16:40:48 +01:00
semantic_index Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
settings Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
snippet Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
sqlez_macros Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
story Enable clippy::eq_op (#9369) 2024-03-14 17:05:07 -04:00
storybook ui: Refine TitleBar component (#9415) 2024-03-15 15:48:07 -04:00
sum_tree Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
task Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
tasks_ui Task::spawn now takes an optional task name as an argument. 2024-03-08 15:28:42 +01:00
telemetry_events Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
terminal Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
terminal_view Small improvements of the task terminal spawn behavior (#9399) 2024-03-15 18:32:59 +02:00
text Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
theme Allow overriding font style and weight via experimental.theme_overrides in settings (#9122) 2024-03-11 12:21:37 -04:00
theme_importer Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
theme_selector Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
time_format notification panel: rework time formatting (#8997) 2024-03-12 21:02:04 -06:00
ui Allow loading "Segoe Fluent Icons" font on macOS (#9421) 2024-03-15 17:35:10 -04:00
util chore: Move new util deps to workspace level (#9250) 2024-03-13 00:37:10 +01:00
vcs_menu Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00
vim Encapsulate CommandPaletteFilter and CommandPaletteInterceptor (#9402) 2024-03-15 12:37:25 -04:00
welcome Fix panic in open urls (#9032) 2024-03-07 13:52:50 -07:00
workspace Always remember the last window size and position (#9416) 2024-03-15 14:24:44 -07:00
worktree Add a setting for custom associations between languages and files (#9290) 2024-03-13 10:23:30 -07:00
zed Fix#9253 Duplicate menu item for "Emojis & Symbols" (#9377) 2024-03-14 20:57:32 -06:00
zed_actions Move Clippy configuration to the workspace level (#8891) 2024-03-05 12:01:17 -05:00