1pub mod components;
2mod jupyter_settings;
3mod kernels;
4pub mod notebook;
5mod outputs;
6mod repl_editor;
7mod repl_sessions_ui;
8mod repl_store;
9mod session;
10
11use std::{sync::Arc, time::Duration};
12
13use async_dispatcher::{set_dispatcher, Dispatcher, Runnable};
14use gpui::{AppContext, PlatformDispatcher};
15use project::Fs;
16pub use runtimelib::ExecutionState;
17use settings::Settings as _;
18
19pub use crate::jupyter_settings::JupyterSettings;
20pub use crate::kernels::{Kernel, KernelSpecification, KernelStatus};
21pub use crate::repl_editor::*;
22pub use crate::repl_sessions_ui::{
23 ClearOutputs, Interrupt, ReplSessionsPage, Restart, Run, Sessions, Shutdown,
24};
25use crate::repl_store::ReplStore;
26pub use crate::session::Session;
27use client::telemetry::Telemetry;
28
29pub const KERNEL_DOCS_URL: &str = "https://zed.dev/docs/repl#changing-kernels";
30
31pub fn init(fs: Arc<dyn Fs>, telemetry: Arc<Telemetry>, cx: &mut AppContext) {
32 set_dispatcher(zed_dispatcher(cx));
33 JupyterSettings::register(cx);
34 ::editor::init_settings(cx);
35 repl_sessions_ui::init(cx);
36 ReplStore::init(fs, telemetry, cx);
37}
38
39fn zed_dispatcher(cx: &mut AppContext) -> impl Dispatcher {
40 struct ZedDispatcher {
41 dispatcher: Arc<dyn PlatformDispatcher>,
42 }
43
44 // PlatformDispatcher is _super_ close to the same interface we put in
45 // async-dispatcher, except for the task label in dispatch. Later we should
46 // just make that consistent so we have this dispatcher ready to go for
47 // other crates in Zed.
48 impl Dispatcher for ZedDispatcher {
49 fn dispatch(&self, runnable: Runnable) {
50 self.dispatcher.dispatch(runnable, None)
51 }
52
53 fn dispatch_after(&self, duration: Duration, runnable: Runnable) {
54 self.dispatcher.dispatch_after(duration, runnable);
55 }
56 }
57
58 ZedDispatcher {
59 dispatcher: cx.background_executor().dispatcher.clone(),
60 }
61}