repl.rs

 1use async_dispatcher::{set_dispatcher, Dispatcher, Runnable};
 2use gpui::{AppContext, PlatformDispatcher};
 3use settings::Settings as _;
 4use std::{sync::Arc, time::Duration};
 5
 6mod jupyter_settings;
 7mod kernels;
 8mod outputs;
 9mod runtime_panel;
10mod session;
11mod stdio;
12
13pub use jupyter_settings::JupyterSettings;
14pub use kernels::{Kernel, KernelSpecification};
15pub use runtime_panel::{ClearOutputs, Interrupt, Run, Shutdown};
16pub use runtime_panel::{RuntimePanel, SessionSupport};
17pub use runtimelib::ExecutionState;
18pub use session::Session;
19
20fn zed_dispatcher(cx: &mut AppContext) -> impl Dispatcher {
21    struct ZedDispatcher {
22        dispatcher: Arc<dyn PlatformDispatcher>,
23    }
24
25    // PlatformDispatcher is _super_ close to the same interface we put in
26    // async-dispatcher, except for the task label in dispatch. Later we should
27    // just make that consistent so we have this dispatcher ready to go for
28    // other crates in Zed.
29    impl Dispatcher for ZedDispatcher {
30        fn dispatch(&self, runnable: Runnable) {
31            self.dispatcher.dispatch(runnable, None)
32        }
33
34        fn dispatch_after(&self, duration: Duration, runnable: Runnable) {
35            self.dispatcher.dispatch_after(duration, runnable);
36        }
37    }
38
39    ZedDispatcher {
40        dispatcher: cx.background_executor().dispatcher.clone(),
41    }
42}
43
44pub fn init(cx: &mut AppContext) {
45    set_dispatcher(zed_dispatcher(cx));
46    JupyterSettings::register(cx);
47    runtime_panel::init(cx)
48}