From bbbd1e9902e1a341ca5583324994b6fdaefb679b Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Fri, 10 Jan 2025 21:48:44 -0700 Subject: [PATCH] LSP debug logs: Default to soft wrap + fold long lines + autoscroll (#22996) Closes #18737 Release notes: - Improved LSP debug logs by defaulting to soft wrap and folding a suffix of long lines. Also adds autoscroll, so if the cursor is on the last line of the logs they will scroll like `tail`. --- crates/editor/src/editor.rs | 14 ++++++++++++++ crates/language_tools/src/lsp_log.rs | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 6d87575e96..4334a34bf0 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -10901,6 +10901,20 @@ impl Editor { self.fold_creases(ranges, true, cx); } + pub fn fold_ranges( + &mut self, + ranges: Vec>, + auto_scroll: bool, + cx: &mut ViewContext, + ) { + let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); + let ranges = ranges + .into_iter() + .map(|r| Crease::simple(r, display_map.fold_placeholder.clone())) + .collect::>(); + self.fold_creases(ranges, auto_scroll, cx); + } + pub fn fold_creases( &mut self, creases: Vec>, diff --git a/crates/language_tools/src/lsp_log.rs b/crates/language_tools/src/lsp_log.rs index b488394333..66c6fb14d4 100644 --- a/crates/language_tools/src/lsp_log.rs +++ b/crates/language_tools/src/lsp_log.rs @@ -1,13 +1,13 @@ use collections::{HashMap, VecDeque}; use copilot::Copilot; -use editor::{actions::MoveToEnd, Editor, EditorEvent}; +use editor::{actions::MoveToEnd, scroll::Autoscroll, Editor, EditorEvent}; use futures::{channel::mpsc, StreamExt}; use gpui::{ actions, div, AppContext, Context, Corner, EventEmitter, FocusHandle, FocusableView, IntoElement, Model, ModelContext, ParentElement, Render, Styled, Subscription, View, ViewContext, VisualContext, WeakModel, WindowContext, }; -use language::LanguageServerId; +use language::{language_settings::SoftWrap, LanguageServerId}; use lsp::{ notification::SetTrace, IoKind, LanguageServer, LanguageServerName, MessageType, SetTraceParams, TraceValue, @@ -649,6 +649,15 @@ impl LspLogView { ], cx, ); + let entry_length = entry.len(); + if entry_length > 1024 { + editor.fold_ranges( + vec![last_point + 1024..last_point + entry_length], + false, + cx, + ); + } + editor.request_autoscroll(Autoscroll::fit(), cx); editor.set_read_only(true); }); } @@ -691,6 +700,7 @@ impl LspLogView { editor.move_to_end(&MoveToEnd, cx); editor.set_read_only(true); editor.set_show_inline_completions(Some(false), cx); + editor.set_soft_wrap_mode(SoftWrap::EditorWidth, cx); editor }); let editor_subscription = cx.subscribe( @@ -728,6 +738,7 @@ impl LspLogView { editor.set_text(server_info, cx); editor.set_read_only(true); editor.set_show_inline_completions(Some(false), cx); + editor.set_soft_wrap_mode(SoftWrap::EditorWidth, cx); editor }); let editor_subscription = cx.subscribe(