parent
82dfa82ba7
commit
b1e59b1371
5 changed files with 272 additions and 227 deletions
|
@ -3,6 +3,7 @@ use std::any::TypeId;
|
|||
use dap::debugger_settings::DebuggerSettings;
|
||||
use debugger_panel::{DebugPanel, ToggleFocus};
|
||||
use editor::Editor;
|
||||
use feature_flags::{DebuggerFeatureFlag, FeatureFlagViewExt};
|
||||
use gpui::{App, DispatchPhase, EntityInputHandler, actions};
|
||||
use new_process_modal::{NewProcessModal, NewProcessMode};
|
||||
use project::debugger::{self, breakpoint_store::SourceBreakpoint, session::ThreadStatus};
|
||||
|
@ -61,7 +62,12 @@ pub fn init(cx: &mut App) {
|
|||
DebuggerSettings::register(cx);
|
||||
workspace::FollowableViewRegistry::register::<DebugSession>(cx);
|
||||
|
||||
cx.observe_new(|workspace: &mut Workspace, _, _| {
|
||||
cx.observe_new(|_: &mut Workspace, window, cx| {
|
||||
let Some(window) = window else {
|
||||
return;
|
||||
};
|
||||
|
||||
cx.when_flag_enabled::<DebuggerFeatureFlag>(window, |workspace, _, _| {
|
||||
workspace
|
||||
.register_action(spawn_task_or_modal)
|
||||
.register_action(|workspace, _: &ToggleFocus, window, cx| {
|
||||
|
@ -159,20 +165,24 @@ pub fn init(cx: &mut App) {
|
|||
return;
|
||||
};
|
||||
|
||||
if let Some(existing) = workspace.item_of_type::<StackTraceView>(cx) {
|
||||
if let Some(existing) = workspace.item_of_type::<StackTraceView>(cx)
|
||||
{
|
||||
let is_active = workspace
|
||||
.active_item(cx)
|
||||
.is_some_and(|item| item.item_id() == existing.item_id());
|
||||
workspace.activate_item(&existing, true, !is_active, window, cx);
|
||||
workspace
|
||||
.activate_item(&existing, true, !is_active, window, cx);
|
||||
} else {
|
||||
let Some(active_session) = debug_panel.read(cx).active_session()
|
||||
let Some(active_session) =
|
||||
debug_panel.read(cx).active_session()
|
||||
else {
|
||||
return;
|
||||
};
|
||||
|
||||
let project = workspace.project();
|
||||
|
||||
let stack_trace_view = active_session.update(cx, |session, cx| {
|
||||
let stack_trace_view =
|
||||
active_session.update(cx, |session, cx| {
|
||||
session.stack_trace_view(project, window, cx).clone()
|
||||
});
|
||||
|
||||
|
@ -219,6 +229,7 @@ pub fn init(cx: &mut App) {
|
|||
})
|
||||
});
|
||||
})
|
||||
})
|
||||
.detach();
|
||||
|
||||
cx.observe_new({
|
||||
|
|
|
@ -73,7 +73,7 @@ use element::{AcceptEditPredictionBinding, LineWithInvisibles, PositionMap, layo
|
|||
pub use element::{
|
||||
CursorLayout, EditorElement, HighlightedRange, HighlightedRangeLine, PointForPosition,
|
||||
};
|
||||
use feature_flags::FeatureFlagAppExt;
|
||||
use feature_flags::{DebuggerFeatureFlag, FeatureFlagAppExt};
|
||||
use futures::{
|
||||
FutureExt, StreamExt as _,
|
||||
future::{self, Shared, join},
|
||||
|
@ -5969,6 +5969,7 @@ impl Editor {
|
|||
buffer: &Entity<Buffer>,
|
||||
cx: &mut App,
|
||||
) -> Task<Vec<task::DebugScenario>> {
|
||||
if cx.has_flag::<DebuggerFeatureFlag>() {
|
||||
maybe!({
|
||||
let project = self.project.as_ref()?;
|
||||
let dap_store = project.read(cx).dap_store();
|
||||
|
@ -6004,6 +6005,9 @@ impl Editor {
|
|||
}))
|
||||
})
|
||||
.unwrap_or_else(|| Task::ready(vec![]))
|
||||
} else {
|
||||
Task::ready(vec![])
|
||||
}
|
||||
}
|
||||
|
||||
fn code_actions(
|
||||
|
@ -10151,6 +10155,9 @@ impl Editor {
|
|||
window: &mut Window,
|
||||
cx: &mut Context<Self>,
|
||||
) {
|
||||
if !cx.has_flag::<DebuggerFeatureFlag>() {
|
||||
return;
|
||||
}
|
||||
let source = self
|
||||
.buffer
|
||||
.read(cx)
|
||||
|
|
|
@ -32,7 +32,7 @@ use crate::{
|
|||
};
|
||||
use buffer_diff::{DiffHunkStatus, DiffHunkStatusKind};
|
||||
use collections::{BTreeMap, HashMap};
|
||||
use feature_flags::FeatureFlagAppExt;
|
||||
use feature_flags::{DebuggerFeatureFlag, FeatureFlagAppExt};
|
||||
use file_icons::FileIcons;
|
||||
use git::{
|
||||
Oid,
|
||||
|
@ -567,11 +567,13 @@ impl EditorElement {
|
|||
register_action(editor, window, Editor::insert_uuid_v4);
|
||||
register_action(editor, window, Editor::insert_uuid_v7);
|
||||
register_action(editor, window, Editor::open_selections_in_multibuffer);
|
||||
if cx.has_flag::<DebuggerFeatureFlag>() {
|
||||
register_action(editor, window, Editor::toggle_breakpoint);
|
||||
register_action(editor, window, Editor::edit_log_breakpoint);
|
||||
register_action(editor, window, Editor::enable_breakpoint);
|
||||
register_action(editor, window, Editor::disable_breakpoint);
|
||||
}
|
||||
}
|
||||
|
||||
fn register_key_listeners(&self, window: &mut Window, _: &mut App, layout: &EditorLayout) {
|
||||
let position_map = layout.position_map.clone();
|
||||
|
@ -8171,11 +8173,13 @@ impl Element for EditorElement {
|
|||
let mut breakpoint_rows = self.editor.update(cx, |editor, cx| {
|
||||
editor.active_breakpoints(start_row..end_row, window, cx)
|
||||
});
|
||||
if cx.has_flag::<DebuggerFeatureFlag>() {
|
||||
for (display_row, (_, bp, state)) in &breakpoint_rows {
|
||||
if bp.is_enabled() && state.is_none_or(|s| s.verified) {
|
||||
active_rows.entry(*display_row).or_default().breakpoint = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let line_numbers = self.layout_line_numbers(
|
||||
Some(&gutter_hitbox),
|
||||
|
@ -8194,6 +8198,7 @@ impl Element for EditorElement {
|
|||
// We add the gutter breakpoint indicator to breakpoint_rows after painting
|
||||
// line numbers so we don't paint a line number debug accent color if a user
|
||||
// has their mouse over that line when a breakpoint isn't there
|
||||
if cx.has_flag::<DebuggerFeatureFlag>() {
|
||||
self.editor.update(cx, |editor, _| {
|
||||
if let Some(phantom_breakpoint) = &mut editor
|
||||
.gutter_breakpoint_indicator
|
||||
|
@ -8210,11 +8215,13 @@ impl Element for EditorElement {
|
|||
Bias::Right,
|
||||
);
|
||||
let breakpoint = Breakpoint::new_standard();
|
||||
phantom_breakpoint.collides_with_existing_breakpoint = false;
|
||||
phantom_breakpoint.collides_with_existing_breakpoint =
|
||||
false;
|
||||
(position, breakpoint, None)
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
let mut expand_toggles =
|
||||
window.with_element_namespace("expand_toggles", |window| {
|
||||
|
@ -8683,7 +8690,8 @@ impl Element for EditorElement {
|
|||
let show_breakpoints = snapshot
|
||||
.show_breakpoints
|
||||
.unwrap_or(gutter_settings.breakpoints);
|
||||
let breakpoints = self.layout_breakpoints(
|
||||
let breakpoints = if cx.has_flag::<DebuggerFeatureFlag>() && show_breakpoints {
|
||||
self.layout_breakpoints(
|
||||
line_height,
|
||||
start_row..end_row,
|
||||
scroll_pixel_position,
|
||||
|
@ -8695,7 +8703,10 @@ impl Element for EditorElement {
|
|||
&row_infos,
|
||||
window,
|
||||
cx,
|
||||
);
|
||||
)
|
||||
} else {
|
||||
vec![]
|
||||
};
|
||||
|
||||
self.layout_signature_help(
|
||||
&hitbox,
|
||||
|
|
|
@ -77,6 +77,11 @@ impl FeatureFlag for NotebookFeatureFlag {
|
|||
const NAME: &'static str = "notebooks";
|
||||
}
|
||||
|
||||
pub struct DebuggerFeatureFlag {}
|
||||
impl FeatureFlag for DebuggerFeatureFlag {
|
||||
const NAME: &'static str = "debugger";
|
||||
}
|
||||
|
||||
pub struct ThreadAutoCaptureFeatureFlag {}
|
||||
impl FeatureFlag for ThreadAutoCaptureFeatureFlag {
|
||||
const NAME: &'static str = "thread-auto-capture";
|
||||
|
|
|
@ -20,6 +20,7 @@ use collections::VecDeque;
|
|||
use debugger_ui::debugger_panel::DebugPanel;
|
||||
use editor::ProposedChangesEditorToolbar;
|
||||
use editor::{Editor, MultiBuffer, scroll::Autoscroll};
|
||||
use feature_flags::{DebuggerFeatureFlag, FeatureFlagViewExt};
|
||||
use futures::future::Either;
|
||||
use futures::{StreamExt, channel::mpsc, select_biased};
|
||||
use git_ui::git_panel::GitPanel;
|
||||
|
@ -480,7 +481,6 @@ fn initialize_panels(
|
|||
workspace_handle.clone(),
|
||||
cx.clone(),
|
||||
);
|
||||
let debug_panel = DebugPanel::load(workspace_handle.clone(), cx);
|
||||
|
||||
let (
|
||||
project_panel,
|
||||
|
@ -490,7 +490,6 @@ fn initialize_panels(
|
|||
channels_panel,
|
||||
chat_panel,
|
||||
notification_panel,
|
||||
debug_panel,
|
||||
) = futures::try_join!(
|
||||
project_panel,
|
||||
outline_panel,
|
||||
|
@ -499,7 +498,6 @@ fn initialize_panels(
|
|||
channels_panel,
|
||||
chat_panel,
|
||||
notification_panel,
|
||||
debug_panel,
|
||||
)?;
|
||||
|
||||
workspace_handle.update_in(cx, |workspace, window, cx| {
|
||||
|
@ -510,8 +508,21 @@ fn initialize_panels(
|
|||
workspace.add_panel(channels_panel, window, cx);
|
||||
workspace.add_panel(chat_panel, window, cx);
|
||||
workspace.add_panel(notification_panel, window, cx);
|
||||
cx.when_flag_enabled::<DebuggerFeatureFlag>(window, |_, window, cx| {
|
||||
cx.spawn_in(
|
||||
window,
|
||||
async move |workspace: gpui::WeakEntity<Workspace>,
|
||||
cx: &mut AsyncWindowContext| {
|
||||
let debug_panel = DebugPanel::load(workspace.clone(), cx).await?;
|
||||
workspace.update_in(cx, |workspace, window, cx| {
|
||||
workspace.add_panel(debug_panel, window, cx);
|
||||
})?;
|
||||
anyhow::Ok(())
|
||||
},
|
||||
)
|
||||
.detach()
|
||||
});
|
||||
})?;
|
||||
|
||||
let is_assistant2_enabled = !cfg!(test);
|
||||
let agent_panel = if is_assistant2_enabled {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue