repl: Replace REPL panel with sessions view (#14981)
This PR removes the REPL panel and replaces it with a new sessions view that gets displayed in its own pane. The sessions view can be opened with the `repl: sessions` command (we can adjust the name, as needed). There was a rather in-depth refactoring needed to extricate the various REPL functionality on the editor from the `RuntimePanel`. <img width="1136" alt="Screenshot 2024-07-22 at 4 12 12 PM" src="https://github.com/user-attachments/assets/ac0da351-778e-4200-b08c-39f9e77d78bf"> <img width="1136" alt="Screenshot 2024-07-22 at 4 12 17 PM" src="https://github.com/user-attachments/assets/6ca53476-6ac4-4f8b-afc8-f7863f7065c7"> Release Notes: - N/A
This commit is contained in:
parent
8f20ea1093
commit
d8a42bbf63
9 changed files with 474 additions and 637 deletions
|
@ -2,8 +2,8 @@ use std::time::Duration;
|
|||
|
||||
use gpui::{percentage, Animation, AnimationExt, AnyElement, Transformation, View};
|
||||
use repl::{
|
||||
ExecutionState, JupyterSettings, Kernel, KernelSpecification, KernelStatus, RuntimePanel,
|
||||
Session, SessionSupport,
|
||||
ExecutionState, JupyterSettings, Kernel, KernelSpecification, KernelStatus, Session,
|
||||
SessionSupport,
|
||||
};
|
||||
use ui::{
|
||||
prelude::*, ButtonLike, ContextMenu, IconWithIndicator, Indicator, IntoElement, PopoverMenu,
|
||||
|
@ -39,15 +39,7 @@ impl QuickActionBar {
|
|||
return None;
|
||||
}
|
||||
|
||||
let workspace = self.workspace.upgrade()?.read(cx);
|
||||
|
||||
let (editor, repl_panel) = if let (Some(editor), Some(repl_panel)) =
|
||||
(self.active_editor(), workspace.panel::<RuntimePanel>(cx))
|
||||
{
|
||||
(editor, repl_panel)
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
let editor = self.active_editor()?;
|
||||
|
||||
let has_nonempty_selection = {
|
||||
editor.update(cx, |this, cx| {
|
||||
|
@ -62,10 +54,7 @@ impl QuickActionBar {
|
|||
})
|
||||
};
|
||||
|
||||
let session = repl_panel.update(cx, |repl_panel, cx| {
|
||||
repl_panel.session(editor.downgrade(), cx)
|
||||
});
|
||||
|
||||
let session = repl::session(editor.downgrade(), cx);
|
||||
let session = match session {
|
||||
SessionSupport::ActiveSession(session) => session,
|
||||
SessionSupport::Inactive(spec) => {
|
||||
|
@ -84,18 +73,15 @@ impl QuickActionBar {
|
|||
|
||||
let element_id = |suffix| ElementId::Name(format!("{}-{}", id, suffix).into());
|
||||
|
||||
let panel_clone = repl_panel.clone();
|
||||
let editor_clone = editor.downgrade();
|
||||
let editor = editor.downgrade();
|
||||
let dropdown_menu = PopoverMenu::new(element_id("menu"))
|
||||
.menu(move |cx| {
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor_clone = editor_clone.clone();
|
||||
let editor = editor.clone();
|
||||
let session = session.clone();
|
||||
ContextMenu::build(cx, move |menu, cx| {
|
||||
let menu_state = session_state(session, cx);
|
||||
let status = menu_state.status;
|
||||
let editor_clone = editor_clone.clone();
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor = editor.clone();
|
||||
|
||||
menu.when_else(
|
||||
status.is_connected(),
|
||||
|
@ -139,7 +125,6 @@ impl QuickActionBar {
|
|||
},
|
||||
)
|
||||
.separator()
|
||||
// Run
|
||||
.custom_entry(
|
||||
move |_cx| {
|
||||
Label::new(if has_nonempty_selection {
|
||||
|
@ -150,17 +135,12 @@ impl QuickActionBar {
|
|||
.into_any_element()
|
||||
},
|
||||
{
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor_clone = editor_clone.clone();
|
||||
let editor = editor.clone();
|
||||
move |cx| {
|
||||
let editor_clone = editor_clone.clone();
|
||||
panel_clone.update(cx, |this, cx| {
|
||||
this.run(editor_clone.clone(), cx).log_err();
|
||||
});
|
||||
repl::run(editor.clone(), cx).log_err();
|
||||
}
|
||||
},
|
||||
)
|
||||
// Interrupt
|
||||
.custom_entry(
|
||||
move |_cx| {
|
||||
Label::new("Interrupt")
|
||||
|
@ -169,17 +149,12 @@ impl QuickActionBar {
|
|||
.into_any_element()
|
||||
},
|
||||
{
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor_clone = editor_clone.clone();
|
||||
let editor = editor.clone();
|
||||
move |cx| {
|
||||
let editor_clone = editor_clone.clone();
|
||||
panel_clone.update(cx, |this, cx| {
|
||||
this.interrupt(editor_clone, cx);
|
||||
});
|
||||
repl::interrupt(editor.clone(), cx);
|
||||
}
|
||||
},
|
||||
)
|
||||
// Clear Outputs
|
||||
.custom_entry(
|
||||
move |_cx| {
|
||||
Label::new("Clear Outputs")
|
||||
|
@ -188,13 +163,9 @@ impl QuickActionBar {
|
|||
.into_any_element()
|
||||
},
|
||||
{
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor_clone = editor_clone.clone();
|
||||
let editor = editor.clone();
|
||||
move |cx| {
|
||||
let editor_clone = editor_clone.clone();
|
||||
panel_clone.update(cx, |this, cx| {
|
||||
this.clear_outputs(editor_clone, cx);
|
||||
});
|
||||
repl::clear_outputs(editor.clone(), cx);
|
||||
}
|
||||
},
|
||||
)
|
||||
|
@ -207,7 +178,6 @@ impl QuickActionBar {
|
|||
)
|
||||
// TODO: Add Restart action
|
||||
// .action("Restart", Box::new(gpui::NoAction))
|
||||
// Shut down kernel
|
||||
.custom_entry(
|
||||
move |_cx| {
|
||||
Label::new("Shut Down Kernel")
|
||||
|
@ -216,13 +186,9 @@ impl QuickActionBar {
|
|||
.into_any_element()
|
||||
},
|
||||
{
|
||||
let panel_clone = panel_clone.clone();
|
||||
let editor_clone = editor_clone.clone();
|
||||
let editor = editor.clone();
|
||||
move |cx| {
|
||||
let editor_clone = editor_clone.clone();
|
||||
panel_clone.update(cx, |this, cx| {
|
||||
this.shutdown(editor_clone, cx);
|
||||
});
|
||||
repl::shutdown(editor.clone(), cx);
|
||||
}
|
||||
},
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue