]> git.wincent.com - docvim.git/commitdiff
Suppress unwanted trailing whitespace
authorGreg Hurrell <greg@hurrell.net>
Sun, 5 Jun 2016 06:12:13 +0000 (23:12 -0700)
committerGreg Hurrell <greg@hurrell.net>
Sun, 5 Jun 2016 06:12:13 +0000 (23:12 -0700)
docvim.cabal
lib/Docvim/Printer/Vim.hs
tests/fixtures/vim/integration-ferret-plugin.golden

index 9dc976d8a6f65b28792ee48b3aa3b33c4cdba364..bc69e16e7144771d108494d9d49af14146ecf5ec 100644 (file)
@@ -82,6 +82,7 @@ library
                ,    optparse-applicative
                ,    parsec
                ,    pretty-show
+               ,    split
                ,    transformers
   default-language:    Haskell2010
   exposed-modules:  Docvim.AST
@@ -119,6 +120,7 @@ test-suite tasty
                ,    parsec
                ,    pretty-show
                ,    process
+               ,    split
                ,    tasty
                ,    tasty-golden
                ,    tasty-hunit
index fda1d1320e9d6e1342917d24eeac9a50cd5063c5..2f66df03860ab3c636f3b7a527a2dd87a5b621b3 100644 (file)
@@ -10,6 +10,7 @@ import Control.Monad.Reader
 import Control.Monad.State
 import Data.Char (isSpace, toUpper)
 import Data.List (intercalate, isSuffixOf, span, sort)
+import Data.List.Split (splitOn)
 import Data.Tuple (swap)
 import Docvim.AST
 import Docvim.Parse (parseUnit, rstrip)
@@ -37,7 +38,7 @@ textwidth :: Int
 textwidth = 78
 
 vimHelp :: Node -> String
-vimHelp n = rstrip output ++ "\n"
+vimHelp n = suppressTrailingWhitespace output ++ "\n"
   where metadata = Metadata (getSymbols n) (getPluginName n)
         context = Context defaultLineBreak ""
         operations = evalState (runReaderT (node n) metadata) context
@@ -47,16 +48,22 @@ vimHelp n = rstrip output ++ "\n"
         reduce acc (Slurp atom) = if isSuffixOf atom acc
                                   then take (length acc - length atom) acc
                                   else acc
+        suppressTrailingWhitespace str = rstrip $ intercalate "\n" (map rstrip (splitOn "\n" str))
 
 -- Helper function that appends and updates `partialLine` context.
 append :: String -> Env
 append string = do
   context <- get
   -- TODO obviously tidy this up
-  -- TODO: always suppress trailing whitespace (some of it is making it into the
-  -- output)
   let (ops, line) = if length (partialLine context) + length leading >= textwidth
-                    then ([Delete (length $ snd $ split $ partialLine context), Slurp " ", Append (lineBreak context), Append (snd $ split $ partialLine context), Append $ string], lineBreak context ++ (snd $ split $ partialLine context) ++ string)
+                    then ( [ Delete (length $ snd $ split $ partialLine context)
+                           , Slurp " "
+                           , Append (lineBreak context)
+                           , Append (snd $ split $ partialLine context)
+                           , Append $ string
+                           ]
+                          , lineBreak context ++ (snd $ split $ partialLine context) ++ string
+                          )
                     else ([Append string], partialLine context ++ string)
   put (Context (lineBreak context) (end line))
   return ops
index cc5a20da636a4beaf65f3a771bf9dd77deebf60f..e2a258da12faddd2fbf49da8fa0969a55a16d6fc 100644 (file)
@@ -200,7 +200,7 @@ Note that including quotes will not do what you intend.
 >
      " Search for '"foo' in the 'bar"' directory:
      :Ack "foo bar"
-    
+
      " Search for "'foo' in the "bar'" directory:
      :Ack 'foo bar'
 <