mirror of
https://github.com/zed-industries/zed.git
synced 2026-06-17 07:55:42 +00:00
Closes AI-394 When the kernel isn't running — e.g. Python isn't installed, ipykernel is missing, or the kernel failed to launch — clicking run on a notebook cell would unconditionally enter the executing state and silently drop the execute request. The cell then spun forever with no logs and no way to cancel (the stop button only works on a running kernel). This change makes `execute_cell` attempt to send the execute request first, and only mark the cell as executing when the send succeeds. On failure it: - Renders the failure (including the original kernel launch error) as an error output on the cell, reusing the same `ErrorView` used for Python tracebacks - Logs the reason at the moment run is clicked, instead of only once at notebook open - No longer swallows `try_send` errors when the kernel process has died Also adds the first unit test for the notebook editor, which exercises the production path end to end: a real `.ipynb` parsed via `NotebookItem::try_open`, a kernelspec pointing at a nonexistent interpreter selected through `ReplStore::set_active_kernelspec`, a real failed process spawn, and assertions through the production save path (`to_nbformat_cell`). Verified red/green: the test fails against the previous behavior. Note for future notebook tests: `NotebookEditor` renders a continuously animating kernel status icon, so rendering it as a root view in a GPUI test makes `run_until_parked` spin forever. The test creates the editor inside an empty window instead. Release Notes: - N/A