From 3eac83eece75b083b11a624f324fc4e282417af3 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 7 Jun 2024 14:30:38 -0400 Subject: [PATCH] Add event for yarn project identification (#12785) Report a `open yarn project` `app_event` for each worktree where `yarn.lock` is found and only report it once per session. Release Notes: - N/A --- crates/project/src/project.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index fab00fb83fd60d1b845a2c783142627fbcfb6ab5..c2cb6808a7bdceadc90dba1509b256e3002d7e2e 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -229,6 +229,7 @@ pub struct Project { hosted_project_id: Option, dev_server_project_id: Option, search_history: SearchHistory, + yarn_worktree_ids_reported: Vec, } pub enum LanguageServerToQuery { @@ -787,6 +788,7 @@ impl Project { hosted_project_id: None, dev_server_project_id: None, search_history: Self::new_search_history(), + yarn_worktree_ids_reported: Vec::new(), } }) } @@ -945,6 +947,7 @@ impl Project { .dev_server_project_id .map(|dev_server_project_id| DevServerProjectId(dev_server_project_id)), search_history: Self::new_search_history(), + yarn_worktree_ids_reported: Vec::new(), }; this.set_role(role, cx); for worktree in worktrees { @@ -7897,6 +7900,8 @@ impl Project { worktree.read(cx).id(), changes.clone(), )); + + this.report_yarn_project(&worktree, changes, cx); } worktree::Event::UpdatedGitRepositories(updated_repos) => { if is_local { @@ -7949,6 +7954,32 @@ impl Project { self.metadata_changed(cx); } + fn report_yarn_project( + &mut self, + worktree: &Model, + updated_entries_set: &UpdatedEntriesSet, + cx: &mut ModelContext, + ) { + let worktree_id = worktree.update(cx, |worktree, _| worktree.id()); + + if !self.yarn_worktree_ids_reported.contains(&worktree_id) { + let is_yarn_project = updated_entries_set.iter().any(|(path, _, _)| { + path.as_ref() + .file_name() + .and_then(|name| name.to_str()) + .map(|name_str| name_str == "yarn.lock") + .unwrap_or(false) + }); + + if is_yarn_project { + self.client() + .telemetry() + .report_app_event("open yarn project".to_string()); + self.yarn_worktree_ids_reported.push(worktree_id); + } + } + } + fn update_local_worktree_buffers( &mut self, worktree_handle: &Model,