From c27859871fe7a74e2d29ab2a6d4f128cfbbae04a Mon Sep 17 00:00:00 2001 From: Joseph Lyons Date: Tue, 16 May 2023 18:16:09 -0400 Subject: [PATCH] Send editor event when saving a new file --- crates/editor/src/editor.rs | 76 +++++++++++++++++++++---------------- crates/editor/src/items.rs | 7 +++- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index ff4c0846cb..21d495d6ee 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1330,7 +1330,7 @@ impl Editor { cx.set_global(ScrollbarAutoHide(should_auto_hide_scrollbars)); } - this.report_editor_event("open", cx); + this.report_editor_event("open", None, cx); this } @@ -6897,7 +6897,8 @@ impl Editor { .as_singleton() .and_then(|b| b.read(cx).file()) .and_then(|file| Path::new(file.file_name(cx)).extension()) - .and_then(|e| e.to_str()); + .and_then(|e| e.to_str()) + .map(|a| a.to_string()); let telemetry = project.read(cx).client().telemetry().clone(); let telemetry_settings = cx.global::().telemetry(); @@ -6905,49 +6906,58 @@ impl Editor { let event = ClickhouseEvent::Copilot { suggestion_id, suggestion_accepted, - file_extension: file_extension.map(ToString::to_string), + file_extension, }; telemetry.report_clickhouse_event(event, telemetry_settings); } - fn report_editor_event(&self, name: &'static str, cx: &AppContext) { - if let Some((project, file)) = self.project.as_ref().zip( - self.buffer - .read(cx) - .as_singleton() - .and_then(|b| b.read(cx).file()), - ) { - let settings = cx.global::(); + fn report_editor_event( + &self, + name: &'static str, + file_extension: Option, + cx: &AppContext, + ) { + let Some(project) = &self.project else { + return + }; - let extension = Path::new(file.file_name(cx)) - .extension() - .and_then(|e| e.to_str()); - let telemetry = project.read(cx).client().telemetry().clone(); - telemetry.report_mixpanel_event( + // If None, we are in a file without an extension + let file_extension = file_extension.or(self + .buffer + .read(cx) + .as_singleton() + .and_then(|b| b.read(cx).file()) + .and_then(|file| Path::new(file.file_name(cx)).extension()) + .and_then(|e| e.to_str()) + .map(|a| a.to_string())); + + let settings = cx.global::(); + + let telemetry = project.read(cx).client().telemetry().clone(); + telemetry.report_mixpanel_event( match name { "open" => "open editor", "save" => "save editor", _ => name, }, - json!({ "File Extension": extension, "Vim Mode": settings.vim_mode, "In Clickhouse": true }), + json!({ "File Extension": file_extension, "Vim Mode": settings.vim_mode, "In Clickhouse": true }), settings.telemetry(), ); - let event = ClickhouseEvent::Editor { - file_extension: extension.map(ToString::to_string), - vim_mode: settings.vim_mode, - operation: name, - copilot_enabled: settings.features.copilot, - copilot_enabled_for_language: settings.show_copilot_suggestions( - self.language_at(0, cx) - .map(|language| language.name()) - .as_deref(), - self.file_at(0, cx) - .map(|file| file.path().clone()) - .as_deref(), - ), - }; - telemetry.report_clickhouse_event(event, settings.telemetry()) - } + let event = ClickhouseEvent::Editor { + file_extension, + vim_mode: settings.vim_mode, + operation: name, + copilot_enabled: settings.features.copilot, + copilot_enabled_for_language: settings.show_copilot_suggestions( + self.language_at(0, cx) + .map(|language| language.name()) + .as_deref(), + self.file_at(0, cx) + .map(|file| file.path().clone()) + .as_deref(), + ), + }; + telemetry.report_clickhouse_event(event, settings.telemetry()) } /// Copy the highlighted chunks to the clipboard as JSON. The format is an array of lines, diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 1a9fcc963e..9e122cc63d 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -637,7 +637,7 @@ impl Item for Editor { project: ModelHandle, cx: &mut ViewContext, ) -> Task> { - self.report_editor_event("save", cx); + self.report_editor_event("save", None, cx); let format = self.perform_format(project.clone(), FormatTrigger::Save, cx); let buffers = self.buffer().clone().read(cx).all_buffers(); cx.spawn(|_, mut cx| async move { @@ -686,6 +686,11 @@ impl Item for Editor { .as_singleton() .expect("cannot call save_as on an excerpt list"); + let file_extension = abs_path + .extension() + .map(|a| a.to_string_lossy().to_string()); + self.report_editor_event("save", file_extension, cx); + project.update(cx, |project, cx| { project.save_buffer_as(buffer, abs_path, cx) })