aboutsummaryrefslogtreecommitdiff
path: root/Main.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <miroslav.kratochvil@uni.lu>2025-07-17 15:29:52 +0200
committerMirek Kratochvil <miroslav.kratochvil@uni.lu>2025-07-17 15:29:52 +0200
commit44bd3e8c149f923aa82da77da03db3be13bca83e (patch)
treece4748fb2ac1fe2e615882b4b25eab2c44e65b54 /Main.hs
parent960f316059281ba6a95b99069e192493e5ffddd2 (diff)
downloadwerge-44bd3e8c149f923aa82da77da03db3be13bca83e.tar.gz
werge-44bd3e8c149f923aa82da77da03db3be13bca83e.tar.bz2
make spaces work properly, clean up everything
Diffstat (limited to 'Main.hs')
-rw-r--r--Main.hs42
1 files changed, 27 insertions, 15 deletions
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 =