Create `event_loop` module

finchie
Dec 17, 2025, 2:13 PM
3YGYMEXVHOHRQVPC53MVPSLI2ZJM77MBPWNPDDCL56DNCPUC6XTAC

Dependencies

  • [2] WFWTKCJN Create initial Visual Studio Code extension
  • [3] 72K45XKD Refactor inline credit to improve hover messages
  • [4] LQJG2LGQ Refactor `PathState` handling to be updated incrementally

Change contents

  • replacement in extensions/vscode/src/lib.rs at line 23
    [2.109431][2.109431:109465]()
    use repository::OpenRepositories;
    [2.109431]
    [2.109465]
    use crate::event_loop::Event;
    use crate::repository::OpenRepositories;
  • edit in extensions/vscode/src/lib.rs at line 26
    [2.109466]
    [3.731]
    mod event_loop;
  • edit in extensions/vscode/src/lib.rs at line 389
    [2.118517]
    [2.118517]
    event_loop::start();
  • file addition: event_loop (d--r------)
    [2.54351]
  • file addition: mod.rs (----------)
    [0.138]
    use std::sync::OnceLock;
    use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
    static EVENT_SENDER: OnceLock<UnboundedSender<Event>> = OnceLock::new();
    const EVENT_BATCH_LIMIT: usize = 8;
    #[derive(Debug)]
    pub enum Event {}
    #[tokio::main]
    #[tracing::instrument(skip_all)]
    async fn event_loop(mut receiver: UnboundedReceiver<Event>) {
    tracing::info!("Starting event loop");
    let mut event_buffer = Vec::with_capacity(EVENT_BATCH_LIMIT);
    loop {
    let events_received = receiver
    .recv_many(&mut event_buffer, EVENT_BATCH_LIMIT)
    .await;
    if events_received == 0 {
    // Channel has been closed, stop event loop
    tracing::info!("Shutting down event loop");
    break;
    };
    tracing::debug!(?event_buffer);
    event_buffer.clear();
    }
    }
    #[tracing::instrument]
    pub fn start() {
    let (sender, receiver) = tokio::sync::mpsc::unbounded_channel();
    if let Err(_existing_value) = EVENT_SENDER.set(sender) {
    tracing::error!("Event sender has already been initialized");
    }
    std::thread::spawn(|| event_loop(receiver));
    }
    pub fn send(event: Event) {
    EVENT_SENDER
    .get()
    .expect("EVENT_SENDER should be set")
    .send(event)
    .expect("Receiver should be open");
    }
  • edit in extensions/vscode/Cargo.toml at line 36
    [2.176058]
    [3.12321]
    tokio.workspace = true
  • edit in Cargo.toml at line 52
    [2.177229]
    [2.177229]
    tokio = { version = "1.48", features = ["full"] }
  • edit in Cargo.lock at line 2597
    [2.235889]
    [2.235889]
    "tokio",
  • edit in Cargo.lock at line 3170
    [2.250220]
    [2.250220]
    [[package]]
    name = "signal-hook-registry"
    version = "1.4.7"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
    dependencies = [
    "libc",
    ]
  • edit in Cargo.lock at line 3469
    [2.257441]
    [2.257441]
    "parking_lot 0.12.5",
  • edit in Cargo.lock at line 3471
    [2.257462]
    [2.257462]
    "signal-hook-registry",
  • edit in Cargo.lock at line 3473
    [2.257474]
    [2.257474]
    "tokio-macros",
  • edit in Cargo.lock at line 3475
    [2.257497]
    [2.257497]
    ]
    [[package]]
    name = "tokio-macros"
    version = "2.6.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn",