From bc5d7a6915af2774f17f31641ed249d20311f9ee Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sun, 13 Jul 2025 10:24:23 +0200 Subject: fine-grained space merging --- Main.hs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'Main.hs') diff --git a/Main.hs b/Main.hs index dd2f35f..c7701b1 100644 --- a/Main.hs +++ b/Main.hs @@ -112,13 +112,31 @@ zeal (Conflict m o y) = pops ms ys = ((ms, ys), []) zeal x = [x] -resolve Config {..} c@(Conflict m o y) +resolve cfg@Config {..} c@(Conflict m o y) + | all Toks.space (concat [m, o, y]) && cfgSpaces /= SpacesNormal = + resolveSpace cfg c | m == o && o == y = Ok o | m == o && cfgResolveSeparate = Ok y | o == y && cfgResolveSeparate = Ok m | m == y && cfgResolveOverlaps = Ok m resolve _ x = x +-- TODO: there might be a bit of interplay between the spaces handling and +-- separate/overlapped conflict resolution -- e.g., what if someone wants to +-- merge overlapping edits in text but separate edits in spaces? At this point +-- that might be ignorable. +resolveSpace Config {..} c@(Conflict m o y) + | m == o && o == y = Ok o + | otherwise = + case cfgSpaces of + SpacesConflict -> c + SpacesMy -> Ok m + SpacesOld -> Ok o + SpacesYour -> Ok y + _ -> error "spaces resolution failed" + +resolveSpaces _ x = x + merge cfg@Config {..} ms ys = regroup . map (resolve cfg) -- cgit v1.2.3