summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2012-06-01 09:04:32 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2012-06-01 09:04:32 +0200
commit9d695657b08638269b287cebdf7885f65d90f66b (patch)
tree0731a29d370ee5cba3ee28bd43c711072562ca1c
parent5a0f0980bbe5f816aab6d6ddae2bf0985e2cbe2f (diff)
downloadstylish-haskell-9d695657b08638269b287cebdf7885f65d90f66b.tar.gz
Can add new language pragmas if necessary
-rw-r--r--.stylish-haskell.yaml2
-rw-r--r--src/StylishHaskell/Config.hs7
-rw-r--r--src/StylishHaskell/Stylish/LanguagePragmas.hs15
-rw-r--r--src/StylishHaskell/Stylish/UnicodeSyntax.hs15
4 files changed, 32 insertions, 7 deletions
diff --git a/.stylish-haskell.yaml b/.stylish-haskell.yaml
index 8316895..66683ac 100644
--- a/.stylish-haskell.yaml
+++ b/.stylish-haskell.yaml
@@ -1,3 +1,5 @@
+unicode_syntax: {}
+
# Import cleanup
imports:
# Align import names and import lists
diff --git a/src/StylishHaskell/Config.hs b/src/StylishHaskell/Config.hs
index 2d9617f..c4eefa7 100644
--- a/src/StylishHaskell/Config.hs
+++ b/src/StylishHaskell/Config.hs
@@ -27,6 +27,7 @@ import qualified StylishHaskell.Stylish.Imports
import qualified StylishHaskell.Stylish.LanguagePragmas
import qualified StylishHaskell.Stylish.Tabs
import qualified StylishHaskell.Stylish.TrailingWhitespace
+import qualified StylishHaskell.Stylish.UnicodeSyntax
--------------------------------------------------------------------------------
@@ -100,6 +101,7 @@ parseConfig (A.Object o) = Config . catMaybes <$> sequence
, optional o "languages_pragmas" parseLanguagePragmas
, optional o "tabs" parseTabs
, optional o "trailing_whitespace" parseTrailingWhitespace
+ , optional o "unicode_syntax" parseUnicodeSyntax
]
parseConfig _ = mzero
@@ -125,3 +127,8 @@ parseTabs o = StylishHaskell.Stylish.Tabs.stylish
parseTrailingWhitespace :: A.Object -> A.Parser Stylish
parseTrailingWhitespace _ =
return StylishHaskell.Stylish.TrailingWhitespace.stylish
+
+
+--------------------------------------------------------------------------------
+parseUnicodeSyntax :: A.Object -> A.Parser Stylish
+parseUnicodeSyntax _ = return StylishHaskell.Stylish.UnicodeSyntax.stylish
diff --git a/src/StylishHaskell/Stylish/LanguagePragmas.hs b/src/StylishHaskell/Stylish/LanguagePragmas.hs
index c819050..f4da813 100644
--- a/src/StylishHaskell/Stylish/LanguagePragmas.hs
+++ b/src/StylishHaskell/Stylish/LanguagePragmas.hs
@@ -1,6 +1,9 @@
--------------------------------------------------------------------------------
module StylishHaskell.Stylish.LanguagePragmas
( stylish
+
+ -- * Utilities
+ , addLanguagePragma
) where
@@ -51,3 +54,15 @@ stylish ls (module', _)
uniques = nub $ sort $ concatMap snd pragmas'
loc = firstLocation pragmas'
changes = insert loc (prettyPragmas uniques) : deletes
+
+
+--------------------------------------------------------------------------------
+-- | Add a LANGUAGE pragma to a module if it is not present already.
+addLanguagePragma :: String -> H.Module H.SrcSpanInfo -> [Change String]
+addLanguagePragma pragma modu
+ | pragma `elem` present = []
+ | otherwise = [insert line ["{-# LANGUAGE " ++ pragma ++ "#-}"]]
+ where
+ pragmas' = pragmas (fmap linesFromSrcSpan modu)
+ present = concatMap snd pragmas'
+ line = if null pragmas' then 1 else firstLocation pragmas'
diff --git a/src/StylishHaskell/Stylish/UnicodeSyntax.hs b/src/StylishHaskell/Stylish/UnicodeSyntax.hs
index 308c15b..7ed96e3 100644
--- a/src/StylishHaskell/Stylish/UnicodeSyntax.hs
+++ b/src/StylishHaskell/Stylish/UnicodeSyntax.hs
@@ -1,22 +1,23 @@
--------------------------------------------------------------------------------
-{-# LANGUAGE UnicodeSyntax #-}
+{-# LANGUAGE ViewPatterns #-}
module StylishHaskell.Stylish.UnicodeSyntax
( stylish
) where
--------------------------------------------------------------------------------
-import Data.List (isPrefixOf, sort)
-import Data.Map (Map)
-import qualified Data.Map as M
-import Data.Maybe (maybeToList)
-import qualified Language.Haskell.Exts.Annotated as H
+import Data.List (isPrefixOf, sort)
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Maybe (maybeToList)
+import qualified Language.Haskell.Exts.Annotated as H
--------------------------------------------------------------------------------
import StylishHaskell.Block
import StylishHaskell.Editor
import StylishHaskell.Stylish
+import StylishHaskell.Stylish.LanguagePragmas (addLanguagePragma)
import StylishHaskell.Util
@@ -121,7 +122,7 @@ between (startRow, startCol) (endRow, endCol) needle =
stylish :: Stylish
stylish ls (module', _) = applyChanges changes ls
where
- changes = replaceAll perLine ls
+ changes = addLanguagePragma "UnicodeSyntax" module' ++ replaceAll perLine ls
perLine = sort $ groupPerLine $
typeSigs module' ls ++
contexts module' ls ++