Skip to content

Commit

Permalink
Optimize REPL kernel spec refresh (#21844)
Browse files Browse the repository at this point in the history
Python kernelspec refresh now only performed on (known) python files. 

Release Notes:

- N/A
  • Loading branch information
rgbkrk authored Dec 11, 2024
1 parent ae35129 commit f8b6d71
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 17 deletions.
30 changes: 18 additions & 12 deletions crates/repl/src/repl_sessions_ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,21 +73,27 @@ pub fn init(cx: &mut AppContext) {
return;
}

let project_path = editor
.buffer()
.read(cx)
.as_singleton()
.and_then(|buffer| buffer.read(cx).project_path(cx));
let buffer = editor.buffer().read(cx).as_singleton();

let language = buffer
.as_ref()
.and_then(|buffer| buffer.read(cx).language());

let project_path = buffer.and_then(|buffer| buffer.read(cx).project_path(cx));

let editor_handle = cx.view().downgrade();

if let (Some(project_path), Some(project)) = (project_path, project) {
let store = ReplStore::global(cx);
store.update(cx, |store, cx| {
store
.refresh_python_kernelspecs(project_path.worktree_id, &project, cx)
.detach_and_log_err(cx);
});
if let Some(language) = language {
if language.name() == "Python".into() {
if let (Some(project_path), Some(project)) = (project_path, project) {
let store = ReplStore::global(cx);
store.update(cx, |store, cx| {
store
.refresh_python_kernelspecs(project_path.worktree_id, &project, cx)
.detach_and_log_err(cx);
});
}
}
}

editor
Expand Down
21 changes: 16 additions & 5 deletions crates/repl/src/repl_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ impl ReplStore {

let remote_kernel_specifications = self.get_remote_kernel_specifications(cx);

cx.spawn(|this, mut cx| async move {
let all_specs = cx.background_executor().spawn(async move {
let mut all_specs = local_kernel_specifications
.await?
.into_iter()
Expand All @@ -186,10 +186,21 @@ impl ReplStore {
}
}

this.update(&mut cx, |this, cx| {
this.kernel_specifications = all_specs;
cx.notify();
})
anyhow::Ok(all_specs)
});

cx.spawn(|this, mut cx| async move {
let all_specs = all_specs.await;

if let Ok(specs) = all_specs {
this.update(&mut cx, |this, cx| {
this.kernel_specifications = specs;
cx.notify();
})
.ok();
}

anyhow::Ok(())
})
}

Expand Down

0 comments on commit f8b6d71

Please sign in to comment.