From 30afba50a9a9a20ce7c59533f92c3e1642575338 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 12 Mar 2025 08:32:29 +0100 Subject: [PATCH] Start tracking diffs in `ScriptingSession` (#26463) The diff is not exposed yet, but we'll take care of that next. Release Notes: - N/A --- Cargo.lock | 2 + crates/scripting_tool/Cargo.toml | 4 + .../scripting_tool/src/scripting_session.rs | 160 +++++++++++++----- crates/sum_tree/src/tree_map.rs | 32 +++- crates/text/src/text.rs | 73 +++++--- 5 files changed, 207 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2388f9d211..37dedc85da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11915,6 +11915,8 @@ name = "scripting_tool" version = "0.1.0" dependencies = [ "anyhow", + "buffer_diff", + "clock", "collections", "futures 0.3.31", "gpui", diff --git a/crates/scripting_tool/Cargo.toml b/crates/scripting_tool/Cargo.toml index c02abcf650..a225726b23 100644 --- a/crates/scripting_tool/Cargo.toml +++ b/crates/scripting_tool/Cargo.toml @@ -14,6 +14,8 @@ doctest = false [dependencies] anyhow.workspace = true +buffer_diff.workspace = true +clock.workspace = true collections.workspace = true futures.workspace = true gpui.workspace = true @@ -30,6 +32,8 @@ settings.workspace = true util.workspace = true [dev-dependencies] +buffer_diff = { workspace = true, features = ["test-support"] } +clock = { workspace = true, features = ["test-support"] } collections = { workspace = true, features = ["test-support"] } gpui = { workspace = true, features = ["test-support"] } language = { workspace = true, features = ["test-support"] } diff --git a/crates/scripting_tool/src/scripting_session.rs b/crates/scripting_tool/src/scripting_session.rs index 50e55b7b1a..a7ba633659 100644 --- a/crates/scripting_tool/src/scripting_session.rs +++ b/crates/scripting_tool/src/scripting_session.rs @@ -1,5 +1,6 @@ use anyhow::anyhow; -use collections::HashSet; +use buffer_diff::BufferDiff; +use collections::{HashMap, HashSet}; use futures::{ channel::{mpsc, oneshot}, pin_mut, SinkExt, StreamExt, @@ -18,10 +19,15 @@ use util::{paths::PathMatcher, ResultExt}; struct ForegroundFn(Box, AsyncApp) + Send>); +struct BufferChanges { + diff: Entity, + edit_ids: Vec, +} + pub struct ScriptingSession { project: Entity, scripts: Vec