add change files diffs to-record selection

[?]
Nov 20, 2025, 7:49 PM
2SLTGWP6FTM7C7BMSYEI2EBD4YTVO2XCIVRPHBJH5XHVLLVR76TAC

Dependencies

  • [2] MJDGPSHG WIP contents diff
  • [3] ZVI4AWER woot contents_diff
  • [4] QMAUTRB6 refactor diff
  • [5] GWZGYNIB add view crate
  • [6] 23SFYK4Q big view refactor into a new crate
  • [7] OPXFZKEB view tests setup
  • [8] XSZZB47U refactor stuff into lib
  • [9] 3BK22XE5 add a test for hover btn and more refactors
  • [10] I2AG42PA new cols layout
  • [11] SASAN2XC use nav-scrollable
  • [12] KWTBNTO3 diffs selection and scrolling
  • [13] UR4J677R nav for log changes and refactors
  • [14] 3XRG4BB6 rewritten nav-scrollable!
  • [15] WAOGSCOJ very nice refactor, wip adding channels logs
  • [16] EJPSD5XO shared allowed actions conditions between update and view
  • [17] YK3MOJJL chonky refactor, wip other channels logs & diffs
  • [18] CULHFNIV add error report view
  • [19] LFEMJYYD start of to_record selection
  • [20] 5O4FWCFP add tests to_record selection and improve it
  • [21] HPSOAD4R fix moved tracked file view
  • [22] UUB7SHLR more re-use in diffs
  • [23] A6Z4O6RC actions menu
  • [24] C5P3JIFC refactor out the nav-scrollable children len arg
  • [25] Z752SDIL advanced shaping for file names
  • [26] PKJCFSBM theme improvements
  • [27] 7SSBM4UQ view: refactor repo view
  • [28] PTWZYQFR use nav-scrollable for repo status
  • [29] JZXYSIYD channel selection!
  • [30] AZ5D2LQU allow to set record description
  • [31] L6KSEFQI move cursor related stuff into its module
  • [32] ZD56BUSU add back +/- bg colors
  • [33] 7BLZN73O add a key to refresh repo
  • [34] 7WCB5YQJ refactor msgs and modules
  • [35] N256FH74 improve views
  • [36] OJPGHVC3 entire log!
  • [37] MYGIBRRH wip custom theme
  • [38] KEPKF3WO unify diffs handling, simplify view
  • [*] 6YZAVBWU Initial commit

Change contents

  • edit in libflorescence/src/diff.rs at line 1
    [8.392]
    [15.3070]
    use crate::{hash_one, repo, AHash};
  • replacement in libflorescence/src/diff.rs at line 25
    [8.1027][8.1027:1079]()
    pub diffs_with_contents: Vec<DiffWithContents>,
    [8.1027]
    [8.1079]
    pub diffs_with_contents: Vec<(DiffWithContents, IdHash)>,
  • edit in libflorescence/src/diff.rs at line 108
    [8.2939]
    [8.2939]
    diff_id: IdHash,
  • edit in libflorescence/src/diff.rs at line 118
    [9.122]
    [9.122]
    }
    #[derive(Debug, Clone, Hash, PartialEq, Eq)]
    pub struct Id {
    pub diff: repo::ChangedFileDiff,
    }
    #[derive(Debug, Clone, Hash, PartialEq, Eq)]
    pub struct IdRef<'a> {
    pub diff: &'a repo::ChangedFileDiff,
    }
    #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
    pub struct IdHash(pub AHash);
    pub fn id_hash(id: &Id) -> IdHash {
    IdHash(hash_one(id))
  • edit in libflorescence/src/diff.rs at line 136
    [9.124]
    pub fn id_ref_hash(id: &IdRef<'_>) -> IdHash {
    IdHash(hash_one(id))
    }
    pub fn id_parts_hash(diff: &repo::ChangedFileDiff) -> IdHash {
    id_ref_hash(&IdRef { diff })
    }
  • replacement in inflorescence_view/src/view.rs at line 6
    [7.4204][15.3430:3467]()
    use crate::{diff, el, theme, Theme};
    [7.4204]
    [18.22]
    use crate::{checkbox, diff, el, theme, Theme};
  • edit in inflorescence_view/src/view.rs at line 28
    [19.268][19.268:403](),[19.403][6.15357:15358](),[6.15357][6.15357:15358]()
    const TO_RECORD_LABEL_INCLUDE: &str = "■";
    const TO_RECORD_LABEL_EXCLUDE: &str = "□";
    const TO_RECORD_LABEL_PARTIAL: &str = "▤";
  • replacement in inflorescence_view/src/view.rs at line 166
    [6.16783][19.455:804]()
    let selected = match to_record::determine_file(to_record, file_path, changed_files) {
    to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,
    to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,
    to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,
    };
    [6.16783]
    [15.4907]
    let state = to_record::determine_file(to_record, file_path, changed_files);
    let to_record_toggle =
    el(checkbox::three_way(state)
    .on_press_with(||Msg::ToRecord(to_record::Msg::ToggleFile{file :file_path.clone()}))
    );
  • edit in inflorescence_view/src/view.rs at line 174
    [6.16980][19.805:1377]()
    let to_record_toggle =
    el(button(
    text(selected)
    .size(21)
    .shaping(text::Shaping::Advanced)
    .center()
    .wrapping(text::Wrapping::None)
    )
    .width(31)
    .height(31)
    .padding(0)
    .on_press_with(||Msg::ToRecord(to_record::Msg::ToggleFile{file :file_path.clone()}))
    );
  • replacement in inflorescence_view/src/view.rs at line 252
    [17.413][17.413:462](),[17.462][20.22:102](),[20.102][15.6138:6164](),[15.6138][15.6138:6164]()
    Some((file, state)) => {
    diff::view(state, nav, file, *diff_selected, false)
    }
    [17.413]
    [15.6164]
    Some((file, state)) => diff::view(
    state,
    nav,
    file,
    path,
    *diff_selected,
    false,
    to_record,
    ),
  • replacement in inflorescence_view/src/view.rs at line 281
    [17.745][17.745:794](),[17.794][20.103:182](),[20.182][15.7196:7222](),[15.7196][15.7196:7222]()
    Some((file, state)) => {
    diff::view(state, nav, file, *diff_selected, true)
    }
    [17.745]
    [15.7222]
    Some((file, state)) => diff::view(
    state,
    nav,
    file,
    path,
    *diff_selected,
    true,
    to_record,
    ),
  • replacement in inflorescence_view/src/view.rs at line 399
    [10.1588][19.1629:2192]()
    let selected = match to_record.overall {
    to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,
    to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,
    to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,
    };
    let to_record_toggle = el(button(
    text(selected)
    .size(21)
    .shaping(text::Shaping::Advanced)
    .center()
    .wrapping(text::Wrapping::None),
    )
    .width(31)
    .height(31)
    .padding(0)
    .on_press_with(|| Msg::ToRecord(to_record::Msg::ToggleOverall)));
    [10.1588]
    [19.2192]
    let to_record_toggle = el(checkbox::three_way(to_record.overall)
    .on_press_with(|| Msg::ToRecord(to_record::Msg::ToggleOverall)));
  • replacement in inflorescence_view/src/view.rs at line 502
    [17.3903][20.183:263]()
    diff::view(state, nav, file, *diff_selected, false)
    [17.3903]
    [15.12751]
    diff::view(
    state,
    nav,
    file,
    path,
    *diff_selected,
    false,
    to_record,
    )
  • replacement in inflorescence_view/src/view.rs at line 749
    [17.12339][20.264:344]()
    diff::view(state, nav, file, *diff_selected, false)
    [17.12339]
    [17.12412]
    diff::view(
    state,
    nav,
    file,
    path,
    *diff_selected,
    false,
    to_record,
    )
  • replacement in inflorescence_view/src/view.rs at line 919
    [17.15815][20.345:425]()
    diff::view(state, nav, file, *diff_selected, false)
    [17.15815]
    [15.16507]
    diff::view(
    state,
    nav,
    file,
    path,
    *diff_selected,
    false,
    to_record,
    )
  • edit in inflorescence_view/src/lib.rs at line 1
    [5.102]
    [6.259]
    pub mod checkbox;
  • replacement in inflorescence_view/src/diff.rs at line 4
    [9.832][15.3233:3301]()
    DiffWithoutContents, File, FileAndState, Lines, Section, State,
    [9.832]
    [15.3301]
    DiffWithoutContents, File, FileAndState, IdHash, Lines, Section, State,
  • edit in inflorescence_view/src/diff.rs at line 7
    [8.5299]
    [8.5299]
    use inflorescence_model::to_record;
  • replacement in inflorescence_view/src/diff.rs at line 9
    [8.5300][15.3344:3375]()
    use crate::{el, theme, Theme};
    [8.5300]
    [20.1111]
    use crate::view::Msg;
    use crate::{checkbox, el, theme, Theme};
  • replacement in inflorescence_view/src/diff.rs at line 18
    [11.236][14.1448:1468]()
    pub fn view<'a, M>(
    [11.236]
    [12.5235]
    pub fn view<'a>(
  • edit in inflorescence_view/src/diff.rs at line 22
    [12.5277]
    [12.5277]
    path: &'a str,
  • replacement in inflorescence_view/src/diff.rs at line 25
    [20.1195][14.1506:1552](),[12.5302][14.1506:1552]()
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [20.1195]
    [6.3549]
    to_record: &to_record::State,
    ) -> Element<'a, Msg, Theme> {
  • edit in inflorescence_view/src/diff.rs at line 32
    [20.1311]
    [20.1311]
    path,
  • edit in inflorescence_view/src/diff.rs at line 35
    [20.1367]
    [20.1367]
    to_record,
  • replacement in inflorescence_view/src/diff.rs at line 43
    [6.3762][14.1553:1577]()
    fn view_decoded<'a, M>(
    [6.3762]
    [13.273]
    fn view_decoded<'a>(
  • edit in inflorescence_view/src/diff.rs at line 47
    [6.3951]
    [12.5517]
    path: &'a str,
  • replacement in inflorescence_view/src/diff.rs at line 50
    [20.1406][14.1615:1661](),[12.5542][14.1615:1661]()
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [20.1406]
    [6.3975]
    to_record: &to_record::State,
    ) -> Element<'a, Msg, Theme> {
  • edit in inflorescence_view/src/diff.rs at line 61
    [6.4234]
    [6.4234]
    const CHECKBOX_SPACING: u32 = 4;
  • replacement in inflorescence_view/src/diff.rs at line 74
    [6.4669][6.4669:4697]()
    el(column(res))
    [6.4669]
    [6.4697]
    // Add space to align these with toggle in `Section::Changed`
    let toggle_space = el(container(text("")).width(checkbox::WIDTH));
    el(row([toggle_space, el(column(res))]).spacing(CHECKBOX_SPACING))
  • replacement in inflorescence_view/src/diff.rs at line 78
    [6.4707][6.4707:4756]()
    Section::Changed { deleted, added } => {
    [6.4707]
    [6.4756]
    Section::Changed {
    deleted,
    added,
    diff_id,
    } => {
  • replacement in inflorescence_view/src/diff.rs at line 104
    [6.5452][6.5452:5480]()
    el(column(res))
    [6.5452]
    [6.5480]
    let to_record_pick =
    to_record::determine_change_pick(path, *diff_id, to_record);
    let to_record_toggle = el(checkbox::two_way(to_record_pick)
    .on_press_with(|| {
    Msg::ToRecord(to_record::Msg::ToggleChange {
    file: path.to_string(),
    diff_id: *diff_id,
    })
    }));
    el(row([to_record_toggle, el(column(res))])
    .spacing(CHECKBOX_SPACING))
  • replacement in inflorescence_view/src/diff.rs at line 149
    [6.5875][14.1861:1889]()
    fn view_undecodable<'a, M>(
    [6.5875]
    [13.615]
    fn view_undecodable<'a>(
  • replacement in inflorescence_view/src/diff.rs at line 154
    [12.5720][14.1927:1973]()
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [12.5720]
    [6.5986]
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/diff.rs at line 177
    [6.6403][14.2125:2235]()
    fn view_diff_with_contents<'a, M>(
    diff: &DiffWithContents,
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [6.6403]
    [6.6477]
    fn view_diff_with_contents<'a>(
    (diff, _id): &(DiffWithContents, IdHash),
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/diff.rs at line 267
    [6.8760][14.2236:2274]()
    fn view_diff_without_contents<'a, M>(
    [6.8760]
    [14.2274]
    fn view_diff_without_contents<'a>(
  • replacement in inflorescence_view/src/diff.rs at line 269
    [14.2309][14.2309:2355]()
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [14.2309]
    [6.8840]
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/diff.rs at line 361
    [6.11360][14.2356:2377]()
    fn line_view<'a, M>(
    [6.11360]
    [6.11378]
    fn line_view<'a>(
  • replacement in inflorescence_view/src/diff.rs at line 366
    [6.11486][14.2378:2424]()
    ) -> Element<'a, M, Theme>
    where
    M: 'a,
    {
    [6.11486]
    [6.11510]
    ) -> Element<'a, Msg, Theme> {
  • file addition: checkbox.rs (----------)
    [5.85]
    use iced::widget::{button, text, Button};
    use inflorescence_model::to_record;
    use crate::Theme;
    pub const WIDTH: u32 = 31;
    const TO_RECORD_LABEL_INCLUDE: &str = "■";
    const TO_RECORD_LABEL_EXCLUDE: &str = "□";
    const TO_RECORD_LABEL_PARTIAL: &str = "▤";
    /// A checkbox with three possible states
    pub fn three_way<'a, M>(state: to_record::PickSet) -> Button<'a, M, Theme>
    where
    M: 'a,
    {
    let label = match state {
    to_record::PickSet::Include => TO_RECORD_LABEL_INCLUDE,
    to_record::PickSet::Exclude => TO_RECORD_LABEL_EXCLUDE,
    to_record::PickSet::Partial => TO_RECORD_LABEL_PARTIAL,
    };
    checkbox_btn(label)
    }
    /// A checkbox with two possible states
    pub fn two_way<'a, M>(state: to_record::Pick) -> Button<'a, M, Theme>
    where
    M: 'a,
    {
    let label = match state {
    to_record::Pick::Include => TO_RECORD_LABEL_INCLUDE,
    to_record::Pick::Exclude => TO_RECORD_LABEL_EXCLUDE,
    };
    checkbox_btn(label)
    }
    fn checkbox_btn<'a, M>(label: &'a str) -> Button<'a, M, Theme>
    where
    M: 'a,
    {
    button(
    text(label)
    .size(21)
    .shaping(text::Shaping::Advanced)
    .center()
    .wrapping(text::Wrapping::None),
    )
    .width(WIDTH)
    .height(31)
    .padding(0)
    }
  • replacement in inflorescence_model/src/to_record.rs at line 7
    [19.2589][19.2589:2615]()
    use libflorescence::repo;
    [19.2589]
    [19.2615]
    use libflorescence::{diff, repo};
  • replacement in inflorescence_model/src/to_record.rs at line 14
    [19.2721][19.2721:2854]()
    ToggleFile {
    file: String,
    },
    ToggleChange {
    file: String,
    change: repo::ChangedFileDiff,
    },
    [19.2721]
    [19.2854]
    ToggleFile { file: String },
    ToggleChange { file: String, diff_id: diff::IdHash },
  • replacement in inflorescence_model/src/to_record.rs at line 50
    [19.3774][19.3774:3829]()
    pub changes: HashMap<repo::ChangedFileDiff, Pick>,
    [19.3774]
    [19.3829]
    pub changes: HashMap<diff::IdHash, Pick>,
  • edit in inflorescence_model/src/to_record.rs at line 73
    [19.4378]
    [19.4378]
    pub fn determine_change_pick(
    file: &str,
    diff_id: diff::IdHash,
    state: &State,
    ) -> Pick {
    match state.overall {
    PickSet::Include => return Pick::Include,
    PickSet::Exclude => return Pick::Exclude,
    PickSet::Partial => {}
    }
    if let Some(pick) = state.files.get(file) {
    match pick {
    PickSet::Include => return Pick::Include,
    PickSet::Exclude => return Pick::Exclude,
    PickSet::Partial => {}
    }
    }
    let explicit = state
    .changes
    .get(file)
    .and_then(|file| file.changes.get(&diff_id))
    .copied();
    dbg!(&explicit);
    explicit.unwrap_or_else(|| default_pick(state))
    }
  • replacement in inflorescence_model/src/to_record.rs at line 125
    [19.5160][19.5160:5208]()
    Msg::ToggleChange { file, change } => {
    [19.5160]
    [20.2500]
    Msg::ToggleChange {
    file,
    diff_id: change,
    } => {
  • replacement in inflorescence_model/src/to_record.rs at line 158
    [20.3676][20.3676:3821]()
    if !changes.contains_key(change) {
    changes.insert(change.clone(), unset_pick);
    }
    [20.3676]
    [19.5475]
    let diff_id = diff::id_parts_hash(change);
    changes.entry(diff_id).or_insert(unset_pick);
  • replacement in inflorescence_model/src/to_record.rs at line 238
    [20.4622][20.4622:4656]()
    diff: &repo::ChangedFileDiff,
    [20.4622]
    [20.4656]
    diff_id: diff::IdHash,
  • replacement in inflorescence_model/src/to_record.rs at line 244
    [20.4747][20.4747:4810]()
    .and_then(|PartialFile { changes }| changes.get(diff))
    [20.4747]
    [20.4810]
    .and_then(|PartialFile { changes }| changes.get(&diff_id))
  • replacement in inflorescence_model/src/to_record/test.rs at line 183
    [20.11073][20.11073:11117]()
    change: change.clone(),
    [20.11073]
    [20.11117]
    diff_id: diff::id_parts_hash(change),
  • edit in inflorescence_model/src/to_record/test.rs at line 191
    [20.11349]
    [20.11349]
    let diff_id = diff::id_parts_hash(change);
  • replacement in inflorescence_model/src/to_record/test.rs at line 197
    [20.11451][20.11451:11476]()
    .get(change)
    [20.11451]
    [20.11476]
    .get(&diff_id)
  • replacement in inflorescence_model/src/diff.rs at line 3
    [15.38018][15.38018:38184]()
    contents_to_lines, Combined, DecodedFile, DiffWithContents,
    DiffWithoutContents, File, FileContent, Lines, Section,
    UndecodableContents, UndecodableFile,
    [15.38018]
    [15.38184]
    contents_to_lines, id_hash, id_parts_hash, id_ref_hash, Combined,
    DecodedFile, DiffWithContents, DiffWithoutContents, File, FileContent, Id,
    IdHash, IdRef, Lines, Section, UndecodableContents, UndecodableFile,
  • replacement in inflorescence_model/src/action.rs at line 4
    [18.6707][17.18832:18858](),[16.3742][17.18832:18858]()
    use libflorescence::repo;
    [18.6707]
    [16.3776]
    use libflorescence::{diff, repo};
  • replacement in inflorescence_model/src/action.rs at line 87
    [20.15549][20.15549:15626]()
    | ToRecord(to_record::Msg::ToggleChange { file: _, change: _ }),
    [20.15549]
    [20.15626]
    | ToRecord(to_record::Msg::ToggleChange {
    file: _,
    diff_id: _,
    }),
  • replacement in inflorescence_model/src/action.rs at line 96
    [20.15812][20.15812:15889]()
    | ToRecord(to_record::Msg::ToggleChange { file: _, change: _ }),
    [20.15812]
    [19.13504]
    | ToRecord(to_record::Msg::ToggleChange {
    file: _,
    diff_id: _,
    }),
  • replacement in inflorescence_model/src/action.rs at line 755
    [20.17696][20.17696:17747]()
    selected_diff,
    [20.17696]
    [20.17747]
    diff::id_parts_hash(selected_diff),
  • replacement in inflorescence/src/main.rs at line 538
    [20.18495][20.18495:18657]()
    .and_then(|diffs| diffs.iter().nth(diff_ix))
    .cloned();
    if let Some(change) = selected_diff {
    [20.18495]
    [20.18657]
    .and_then(|diffs| diffs.iter().nth(diff_ix));
    if let Some(diff) = selected_diff {
  • replacement in inflorescence/src/main.rs at line 542
    [20.18770][20.18770:18806]()
    change,
    [20.18770]
    [20.18806]
    diff_id: diff::id_parts_hash(diff),
  • replacement in inflorescence/src/diff.rs at line 5
    [15.102633][17.67463:67543](),[17.67543][15.102634:102769](),[9.1845][15.102634:102769]()
    contents_to_lines, init_diffs_nav, Combined, DecodedFile, DiffWithContents,
    DiffWithoutContents, File, FileAndState, FileContent, FilesState, Lines,
    Section, State, UndecodableContents, UndecodableFile,
    [15.102633]
    [9.1941]
    contents_to_lines, id_parts_hash, init_diffs_nav, Combined, DecodedFile,
    DiffWithContents, DiffWithoutContents, File, FileAndState, FileContent,
    FilesState, IdHash, Lines, Section, State, UndecodableContents,
    UndecodableFile,
  • replacement in inflorescence/src/diff.rs at line 43
    [4.4539][4.4539:4596]()
    ) -> (Vec<DiffWithContents>, Vec<DiffWithoutContents>) {
    [4.4539]
    [4.4596]
    ) -> (Vec<(DiffWithContents, IdHash)>, Vec<DiffWithoutContents>) {
  • replacement in inflorescence/src/diff.rs at line 55
    [21.7195][21.7195:7257]()
    with.push(DiffWithContents::Del{ contents });
    [21.7195]
    [4.4910]
    with.push((DiffWithContents::Del{ contents }, id_parts_hash(diff)));
  • replacement in inflorescence/src/diff.rs at line 58
    [4.4971][4.4971:5023]()
    with.push(DiffWithContents::Undel);
    [4.4971]
    [4.5023]
    with.push((DiffWithContents::Undel, id_parts_hash(diff)));
  • replacement in inflorescence/src/diff.rs at line 61
    [4.5082][4.5082:5132]()
    with.push(DiffWithContents::Add);
    [4.5082]
    [4.5132]
    with.push((DiffWithContents::Add, id_parts_hash(diff)));
  • replacement in inflorescence/src/diff.rs at line 71
    [4.5548][4.5548:5603]()
    with.push(DiffWithContents::Edit {
    [4.5548]
    [4.5603]
    with.push((DiffWithContents::Edit {
  • replacement in inflorescence/src/diff.rs at line 75
    [4.5732][4.5732:5756]()
    });
    [4.5732]
    [4.5756]
    }, id_parts_hash(diff)));
  • replacement in inflorescence/src/diff.rs at line 94
    [4.6669][4.6669:6731]()
    with.push(DiffWithContents::Replacement {
    [4.6669]
    [4.6731]
    with.push((DiffWithContents::Replacement {
  • replacement in inflorescence/src/diff.rs at line 98
    [4.6892][4.6892:6916]()
    });
    [4.6892]
    [4.6916]
    }, id_parts_hash(diff)));
  • replacement in inflorescence/src/diff.rs at line 184
    [3.20496][3.20496:20544]()
    diffs_with_contents: Vec<DiffWithContents>,
    [3.20496]
    [3.20544]
    diffs_with_contents: Vec<(DiffWithContents, IdHash)>,
  • replacement in inflorescence/src/diff.rs at line 192
    [2.6465][3.20731:20771]()
    for change in diffs_with_contents {
    [2.6465]
    [2.6493]
    for (change, diff_id) in diffs_with_contents {
  • edit in inflorescence/src/diff.rs at line 201
    [2.6904]
    [2.6904]
    diff_id,
  • edit in inflorescence/src/diff.rs at line 217
    [2.7395]
    [2.7395]
    diff_id,
  • edit in inflorescence/src/diff.rs at line 245
    [2.8294]
    [2.8294]
    diff_id,
  • edit in inflorescence/src/diff.rs at line 256
    [2.8692]
    [2.8692]
    diff_id,
  • replacement in inflorescence/src/diff.rs at line 281
    [2.9587][2.9587:9655]()
    sections.push(Section::Changed { deleted, added });
    [2.9587]
    [2.9655]
    sections.push(Section::Changed {
    deleted,
    added,
    diff_id,
    });