repl.rs

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