From 44bd3e8c149f923aa82da77da03db3be13bca83e Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Thu, 17 Jul 2025 15:29:52 +0200 Subject: make spaces work properly, clean up everything --- Main.hs | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'Main.hs') diff --git a/Main.hs b/Main.hs index 5917abe..d86a6cb 100644 --- a/Main.hs +++ b/Main.hs @@ -244,25 +244,31 @@ zeal Config {..} (Conflict m o y) = xs -> [Ok $ reverse xs] pops (m:ms) (y:ys) | m == y = (m :) <$> pops ms ys - | SpacesMy <- cfgSpaces + | cfgSpaceRetain == ResolveMy , Toks.space m , Toks.space y = (m :) <$> pops ms ys - | SpacesYour <- cfgSpaces + | cfgSpaceRetain == ResolveYour , Toks.space m , Toks.space y = (y :) <$> pops ms ys pops ms ys = ((ms, ys), []) zeal _ x = [x] resolveSpace Config {..} c@(Conflict m o y) - | not (all Toks.space $ concat [m, o, y]) - || cfgSpaces `elem` [SpacesNormal, SpacesConflict] = c + | not (all Toks.space $ concat [m, o, y]) = c | m == o && o == y = Ok o - | otherwise = - case cfgSpaces of - SpacesMy -> Ok m - SpacesOld -> Ok o - SpacesYour -> Ok y - _ -> error $ "spaces resolution error " ++ show cfgSpaces + | cfgSpaceRetain == ResolveMy = Ok m + | cfgSpaceRetain == ResolveOld = Ok o + | cfgSpaceRetain == ResolveYour = Ok y + | cfgSpaceResolution == SpaceNormal = c + | cmResolveSeparate cfgSpaceConflicts && m == o = Ok y + | cmResolveSeparate cfgSpaceConflicts && o == y = Ok m + | cmResolveOverlaps cfgSpaceConflicts && m == y = Ok m + | SpaceSpecial r <- cfgSpaceResolution = + case r of + ResolveMy -> Ok m + ResolveOld -> Ok o + ResolveYour -> Ok y + ResolveKeep -> c resolveSpace _ x = x expand :: Int -> [Merged] -> [Merged] @@ -280,12 +286,18 @@ expand n = go go (x:xs) = x : go xs resolve cfg@Config {..} c@(Conflict m o y) - | cfgSpaces /= SpacesNormal && all Toks.space (concat [m, o, y]) = - resolveSpace cfg c + | cfgSpaceResolution /= SpaceNormal + , all Toks.space (concat [m, o, y]) = resolveSpace cfg c | m == o && o == y = Ok o - | m == o && cfgResolveSeparate = Ok y - | o == y && cfgResolveSeparate = Ok m - | m == y && cfgResolveOverlaps = Ok m + | cmResolveSeparate cfgConflicts && m == o = Ok y + | cmResolveSeparate cfgConflicts && o == y = Ok m + | cmResolveOverlaps cfgConflicts && m == y = Ok m + | otherwise = + case cfgResolution of + ResolveMy -> Ok m + ResolveOld -> Ok o + ResolveYour -> Ok y + ResolveKeep -> c resolve _ x = x merge cfg@Config {..} ms ys = -- cgit v1.2.3