Supplementary LSP server log improvements (#3002)

Follow-up of https://github.com/zed-industries/zed/pull/2991 improving
rough edges around supplementary LSP servers:

* Fixes
https://zed-industries.slack.com/archives/C04S6T1T7TQ/p1695281196667609
Copilot init panic
* Makes LSP server list scrollable in the panel
* Shows supplementary servers' RPC logs in the panel

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2023-09-21 11:22:56 +03:00
parent 0bb060233f
commit 4ac08a809b
2 changed files with 7 additions and 7 deletions

View file

@ -647,6 +647,7 @@ impl View for LspLogToolbarItemView {
Overlay::new( Overlay::new(
MouseEventHandler::new::<Menu, _>(0, cx, move |_, cx| { MouseEventHandler::new::<Menu, _>(0, cx, move |_, cx| {
Flex::column() Flex::column()
.scrollable::<Self>(0, None, cx)
.with_children(menu_rows.into_iter().map(|row| { .with_children(menu_rows.into_iter().map(|row| {
Self::render_language_server_menu_item( Self::render_language_server_menu_item(
row.server_id, row.server_id,

View file

@ -7968,7 +7968,7 @@ impl Project {
} }
pub fn language_server_for_id(&self, id: LanguageServerId) -> Option<Arc<LanguageServer>> { pub fn language_server_for_id(&self, id: LanguageServerId) -> Option<Arc<LanguageServer>> {
if let LanguageServerState::Running { server, .. } = self.language_servers.get(&id)? { if let Some(LanguageServerState::Running { server, .. }) = self.language_servers.get(&id) {
Some(server.clone()) Some(server.clone())
} else if let Some((_, server)) = self.supplementary_language_servers.get(&id) { } else if let Some((_, server)) = self.supplementary_language_servers.get(&id) {
Some(Arc::clone(server)) Some(Arc::clone(server))
@ -8039,11 +8039,9 @@ fn subscribe_for_copilot_events(
copilot, copilot,
|project, copilot, copilot_event, cx| match copilot_event { |project, copilot, copilot_event, cx| match copilot_event {
copilot::Event::CopilotLanguageServerStarted => { copilot::Event::CopilotLanguageServerStarted => {
if let Some((name, copilot_server)) = copilot.read(cx).language_server() { match copilot.read(cx).language_server() {
let new_server_id = copilot_server.server_id(); Some((name, copilot_server)) => {
if let hash_map::Entry::Vacant(v) = let new_server_id = copilot_server.server_id();
project.supplementary_language_servers.entry(new_server_id)
{
let weak_project = cx.weak_handle(); let weak_project = cx.weak_handle();
let copilot_log_subscription = copilot_server let copilot_log_subscription = copilot_server
.on_notification::<copilot::request::LogMessage, _>( .on_notification::<copilot::request::LogMessage, _>(
@ -8058,10 +8056,11 @@ fn subscribe_for_copilot_events(
} }
}, },
); );
project.supplementary_language_servers.insert(new_server_id, (name.clone(), Arc::clone(copilot_server)));
project.copilot_log_subscription = Some(copilot_log_subscription); project.copilot_log_subscription = Some(copilot_log_subscription);
v.insert((name.clone(), Arc::clone(copilot_server)));
cx.emit(Event::LanguageServerAdded(new_server_id)); cx.emit(Event::LanguageServerAdded(new_server_id));
} }
None => debug_panic!("Received Copilot language server started event, but no language server is running"),
} }
} }
}, },