diff --git a/crates/agent/src/agent.rs b/crates/agent/src/agent.rs index 160172c5c49d3af5548ccd76af1e441662fadfbb..d948e2f7bc7f2edb02a2ad376f6f56bdc5ec9d91 100644 --- a/crates/agent/src/agent.rs +++ b/crates/agent/src/agent.rs @@ -591,6 +591,7 @@ impl NativeAgent { let tree = worktree.read(cx); let root_name = tree.root_name_str().into(); let abs_path = tree.abs_path(); + let scan_complete = tree.as_local().map(|local| local.scan_complete()); let mut context = WorktreeContext { root_name, @@ -598,20 +599,24 @@ impl NativeAgent { rules_file: None, }; - let rules_task = Self::load_worktree_rules_file(worktree, project, cx); - let Some(rules_task) = rules_task else { - return Task::ready((context, None)); - }; + cx.spawn(async move |cx| { + if let Some(scan_complete) = scan_complete { + scan_complete.await; + } - cx.spawn(async move |_| { - let (rules_file, rules_file_error) = match rules_task.await { - Ok(rules_file) => (Some(rules_file), None), - Err(err) => ( - None, - Some(RulesLoadingError { - message: format!("{err}").into(), - }), - ), + let rules_task = cx.update(|cx| Self::load_worktree_rules_file(worktree, project, cx)); + + let (rules_file, rules_file_error) = match rules_task { + Some(rules_task) => match rules_task.await { + Ok(rules_file) => (Some(rules_file), None), + Err(err) => ( + None, + Some(RulesLoadingError { + message: format!("{err}").into(), + }), + ), + }, + None => (None, None), }; context.rules_file = rules_file; (context, rules_file_error) diff --git a/crates/settings/src/settings_file.rs b/crates/settings/src/settings_file.rs index 258deaa9ee4c64119601fabfdae38b79c654c81b..8b4187da0093c7759d7ba20ee95644293788a57a 100644 --- a/crates/settings/src/settings_file.rs +++ b/crates/settings/src/settings_file.rs @@ -232,8 +232,9 @@ pub fn watch_config_dir( } Some(PathEventKind::Rescan) => { for file_path in &config_paths { - let contents = fs.load(file_path).await.unwrap_or_default(); - if tx.unbounded_send(contents).is_err() { + if let Ok(contents) = fs.load(file_path).await + && tx.unbounded_send(contents).is_err() + { return; } } @@ -244,8 +245,9 @@ pub fn watch_config_dir( && event.path == dir_path { for file_path in &config_paths { - let contents = fs.load(file_path).await.unwrap_or_default(); - if tx.unbounded_send(contents).is_err() { + if let Ok(contents) = fs.load(file_path).await + && tx.unbounded_send(contents).is_err() + { return; } }