summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaibhav Sagar <vaibhavsagar@gmail.com>2017-08-23 22:19:51 +0800
committerJasper Van der Jeugt <jaspervdj@gmail.com>2017-08-23 16:19:51 +0200
commit3bfd8be6e1c6a5e90b1cdf9ee5723e93de26d409 (patch)
treeee569391fa3cfca664ecda5185f21c626b471985
parentb9b5330e170a680a11fb3569b7533c27dfe6abf6 (diff)
downloadstylish-haskell-3bfd8be6e1c6a5e90b1cdf9ee5723e93de26d409.tar.gz
Remove shebang lines at the beginning of file
-rw-r--r--lib/Language/Haskell/Stylish/Parse.hs8
-rw-r--r--tests/Language/Haskell/Stylish/Parse/Tests.hs11
2 files changed, 15 insertions, 4 deletions
diff --git a/lib/Language/Haskell/Stylish/Parse.hs b/lib/Language/Haskell/Stylish/Parse.hs
index 724ebe2..01def63 100644
--- a/lib/Language/Haskell/Stylish/Parse.hs
+++ b/lib/Language/Haskell/Stylish/Parse.hs
@@ -44,11 +44,11 @@ unCpp = unlines . go False . lines
--------------------------------------------------------------------------------
--- | Remove shebang from the first line
+-- | Remove shebang lines
unShebang :: String -> String
-unShebang str
- | "#!" `isPrefixOf` str = unlines $ ("" :) $ drop 1 $ lines str
- | otherwise = str
+unShebang str =
+ let (shebangs, other) = break (not . ("#!" `isPrefixOf`)) (lines str) in
+ unlines $ map (const "") shebangs ++ other
--------------------------------------------------------------------------------
diff --git a/tests/Language/Haskell/Stylish/Parse/Tests.hs b/tests/Language/Haskell/Stylish/Parse/Tests.hs
index 9806be2..a8ebf39 100644
--- a/tests/Language/Haskell/Stylish/Parse/Tests.hs
+++ b/tests/Language/Haskell/Stylish/Parse/Tests.hs
@@ -22,6 +22,7 @@ tests = testGroup "Language.Haskell.Stylish.Parse"
, testCase "Haskell2010 extension" testHaskell2010
, testCase "Shebang" testShebang
, testCase "ShebangExt" testShebangExt
+ , testCase "ShebangDouble" testShebangDouble
, testCase "GADTs extension" testGADTs
, testCase "KindSignatures extension" testKindSignatures
, testCase "StandalonDeriving extension" testStandaloneDeriving
@@ -85,6 +86,16 @@ testShebang = assert $ isRight $ parseModule [] Nothing $ unlines
--------------------------------------------------------------------------------
+testShebangDouble :: Assertion
+testShebangDouble = assert $ isRight $ parseModule [] Nothing $ unlines
+ [ "#!nix-shell"
+ , "#!nix-shell -i runhaskell -p haskellPackages.ghc"
+ , "module Main where"
+ , "main = return ()"
+ ]
+
+--------------------------------------------------------------------------------
+
-- | These tests are for syntactic language extensions that should always be
-- enabled for parsing, even when the pragma is absent.