Hello community,

here is the log from the commit of package ghc-yi-rope for openSUSE:Factory 
checked in at 2017-08-31 21:02:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-yi-rope (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-yi-rope.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-yi-rope"

Thu Aug 31 21:02:46 2017 rev:3 rq:513562 version:0.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-yi-rope/ghc-yi-rope.changes  2017-04-07 
13:55:28.989032222 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-yi-rope.new/ghc-yi-rope.changes     
2017-08-31 21:02:50.925587746 +0200
@@ -1,0 +2,5 @@
+Thu Jul 27 14:08:04 UTC 2017 - [email protected]
+
+- Update to version 0.9.
+
+-------------------------------------------------------------------

Old:
----
  yi-rope-0.8.tar.gz

New:
----
  yi-rope-0.9.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-yi-rope.spec ++++++
--- /var/tmp/diff_new_pack.hC6bzx/_old  2017-08-31 21:02:52.357386575 +0200
+++ /var/tmp/diff_new_pack.hC6bzx/_new  2017-08-31 21:02:52.377383766 +0200
@@ -19,7 +19,7 @@
 %global pkg_name yi-rope
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        0.8
+Version:        0.9
 Release:        0
 Summary:        A rope data structure used by Yi
 License:        GPL-2.0+

++++++ yi-rope-0.8.tar.gz -> yi-rope-0.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yi-rope-0.8/bench/MainBenchmarkSuite.hs 
new/yi-rope-0.9/bench/MainBenchmarkSuite.hs
--- old/yi-rope-0.8/bench/MainBenchmarkSuite.hs 2016-10-07 19:59:34.000000000 
+0200
+++ new/yi-rope-0.9/bench/MainBenchmarkSuite.hs 2017-07-03 23:38:45.000000000 
+0200
@@ -84,7 +84,7 @@
     mkTexts x t = (x, F.fromText' x t)
 
 allTexts :: [(Int -> String, [(Int, F.YiString)])]
-allTexts = [longTexts {-, wideTexts, shortTexts, tinyTexts -}]
+allTexts = [longTexts, wideTexts, shortTexts, tinyTexts]
 
 allChars :: [(Int -> String, [(Int, Char)])]
 allChars = map mkChar "λa"
@@ -160,6 +160,7 @@
   , onCharGroup "singleton" F.singleton
   , onTextGroup "countNewLines" F.countNewLines
   , onTextGroup "lines" F.lines
+  , onTextGroup "lines'" F.lines'
   , onSplitGroup "splitAt" F.splitAt
   , onSplitGroup "splitAtLine" F.splitAtLine
   , onTextGroup "toReverseString" F.toReverseString
@@ -181,4 +182,4 @@
   ] ++ splitBench
     ++ wordsBench
     ++ spanBreakBench
-    ++ foldBench
+    ++ foldBench
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yi-rope-0.8/src/Yi/Rope.hs 
new/yi-rope-0.9/src/Yi/Rope.hs
--- old/yi-rope-0.8/src/Yi/Rope.hs      2016-10-10 15:23:38.000000000 +0200
+++ new/yi-rope-0.9/src/Yi/Rope.hs      2017-07-03 23:38:45.000000000 +0200
@@ -2,6 +2,7 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ViewPatterns #-}
 {-# OPTIONS_HADDOCK show-extensions #-}
 
 -- |
@@ -70,6 +71,7 @@
 import           Data.Default
 import qualified Data.FingerTree as T
 import           Data.FingerTree hiding (null, empty, reverse, split)
+import           Data.Function (fix)
 import qualified Data.List as L (foldl')
 import           Data.Maybe
 import           Data.Monoid
@@ -501,24 +503,18 @@
     go acc (t':ts') = go (acc <> (c `cons` t')) ts'
 
 -- | Add a 'Char' in front of a 'YiString'.
---
--- We add the character to the front of the first chunk. This does
--- mean that a lot of 'cons' might result in an abnormally large first
--- chunk so if you have to do that, consider using 'append' instead..
 cons :: Char -> YiString -> YiString
 cons c (YiString t) = case viewl t of
   EmptyL -> Yi.Rope.singleton c
-  Chunk !l x :< ts -> YiString $ Chunk (l + 1) (c `TX.cons` x) <| ts
+  Chunk l x :< ts | l < defaultChunkSize -> YiString $ Chunk (l + 1) (c 
`TX.cons` x) <| ts
+  _ -> YiString $ Chunk 1 (TX.singleton c) <| t
 
 -- | Add a 'Char' in the back of a 'YiString'.
---
--- We add the character to the end of the last chunk. This does mean
--- that a lot of 'snoc' might result in an abnormally large last chunk
--- so if you have to do that, consider using 'append' instead..
 snoc :: YiString -> Char -> YiString
 snoc (YiString t) c = case viewr t of
   EmptyR -> Yi.Rope.singleton c
-  ts :> Chunk l x -> YiString $ ts |> Chunk (l + 1) (x `TX.snoc` c)
+  ts :> Chunk l x | l < defaultChunkSize -> YiString $ ts |> Chunk (l + 1) (x 
`TX.snoc` c)
+  _ -> YiString $ t |> Chunk 1 (TX.singleton c)
 
 -- | Single character 'YiString'. Consider whether it's worth creating
 -- this, maybe you can use 'cons' or 'snoc' instead?
@@ -569,26 +565,11 @@
 
 -- | This is like 'lines'' but it does *not* preserve newlines.
 --
--- Specifically, we just strip the newlines from the result of
--- 'lines''.
---
--- This behaves slightly differently than the old split: the number of
--- resulting strings here is equal to the number of newline characters
--- in the underlying string. This is much more consistent than the old
--- behaviour which blindly used @ByteString@s split and stitched the
--- result back together which was inconsistent with the rest of the
--- interface which worked with number of newlines.
+-- Implementation note: GHC does a pretty good job of optimizing
+-- this naive version. Hand coding a loop should be unnecessary
+-- here.
 lines :: YiString -> [YiString]
-lines = Prelude.map dropNl . lines'
-  where
-    dropNl (YiString t)  = case viewr t of
-      EmptyR -> Yi.Rope.empty
-      ts :> ch@(Chunk l tx) ->
-        YiString $ ts |- if TX.null tx
-                         then ch
-                         else case TX.last tx of
-                           '\n' -> Chunk (l - 1) (TX.init tx)
-                           _ -> ch
+lines = fmap fromText . TX.lines . toText
 
 -- | Splits the 'YiString' into a list of 'YiString' each containing a
 -- line.
@@ -603,13 +584,15 @@
 --
 -- > 'toText' . 'concat' . 'lines'' ≡ 'toText'
 --
--- but the underlying structure might change: notably, chunks will
--- most likely change sizes.
 lines' :: YiString -> [YiString]
-lines' t = let (YiString f, YiString s) = splitAtLine' 0 t
-           in if T.null s
-              then if T.null f then [] else [YiString f]
-              else YiString f : lines' (YiString s)
+lines' = splitByKeepingDelim '\n'
+
+splitByKeepingDelim :: Char -> YiString -> [YiString]
+splitByKeepingDelim x = fmap fromText . fix go x . toText
+  where
+    go :: (Char -> TX.Text -> [TX.Text]) -> Char -> TX.Text -> [TX.Text]
+    go _ c (TX.span (/=c) -> (_, TX.null -> True)) = []
+    go f c (TX.span (/=c) -> (a,b)) = a `TX.snoc` c : f c (TX.tail b)
 
 -- | Joins up lines by a newline character. It does not leave a
 -- newline after the last line. If you want a more classical
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yi-rope-0.8/yi-rope.cabal 
new/yi-rope-0.9/yi-rope.cabal
--- old/yi-rope-0.8/yi-rope.cabal       2016-10-10 15:27:03.000000000 +0200
+++ new/yi-rope-0.9/yi-rope.cabal       2017-07-03 22:35:43.000000000 +0200
@@ -1,17 +1,17 @@
 name:                yi-rope
-version:             0.8
+version:             0.9
 synopsis:            A rope data structure used by Yi
 description:         A rope data structure used by Yi
 license:             GPL-2
 license-file:        LICENSE
-author:              Mateusz Kowalczyk
-maintainer:          [email protected]
+author:              AUTHORS
+maintainer:          [email protected]
 category:            Yi
 build-type:          Simple
 cabal-version:       >=1.10
 
 library
-  ghc-options: -fpedantic-bottoms -fexpose-all-unfoldings -Wall -O2 
-flate-dmd-anal
+  ghc-options: -fpedantic-bottoms -fexpose-all-unfoldings -ferror-spans -Wall 
-O2 -flate-dmd-anal
 
   exposed-modules:
     Yi.Rope


Reply via email to