summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorLangston Barrett <langston.barrett@gmail.com>2016-07-07 15:20:27 +0100
committerLangston Barrett <langston.barrett@gmail.com>2016-07-07 16:19:15 +0100
commitf5b2adc9a371345da9f2e9a19b67851afc248889 (patch)
tree72108bd5b03a15a389caa919514974d5939b6a32 /lib
parentabc92ea4778ac25b7944b9f4c7f82eb95f0238c2 (diff)
downloadstylish-haskell-f5b2adc9a371345da9f2e9a19b67851afc248889.tar.gz
Add a set of default language extensions for parsing
See the comment for a detailed explanation. Fixes jaspervdj/stylish-haskell#117
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish/Parse.hs21
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/Language/Haskell/Stylish/Parse.hs b/lib/Language/Haskell/Stylish/Parse.hs
index 3118380..2b16b30 100644
--- a/lib/Language/Haskell/Stylish/Parse.hs
+++ b/lib/Language/Haskell/Stylish/Parse.hs
@@ -7,12 +7,29 @@ module Language.Haskell.Stylish.Parse
--------------------------------------------------------------------------------
import Data.Maybe (fromMaybe, listToMaybe)
import qualified Language.Haskell.Exts.Annotated as H
-import Data.List (isPrefixOf)
+import Data.List (isPrefixOf, nub)
--------------------------------------------------------------------------------
import Language.Haskell.Stylish.Config
import Language.Haskell.Stylish.Step
+--------------------------------------------------------------------------------
+-- | Syntax-related language extensions are always enabled for parsing. Since we
+-- can't authoritatively know which extensions are enabled at compile-time, we
+-- should try not to throw errors when parsing any GHC-accepted code.
+defaultExtensions :: [H.Extension]
+defaultExtensions = map H.EnableExtension
+ [ H.GADTs
+ , H.HereDocuments
+ , H.KindSignatures
+ , H.MagicHash
+ , H.NewQualifiedOperators
+ , H.PatternGuards
+ , H.StandaloneDeriving
+ , H.UnicodeSyntax
+ , H.XmlSyntax
+ ]
+
--------------------------------------------------------------------------------
-- | Filter out lines which use CPP macros
@@ -50,7 +67,7 @@ parseModule extraExts mfp string = do
let noPrefixes = unShebang . dropBom $ string
extraExts' = map H.classifyExtension extraExts
(lang, fileExts) = fromMaybe (Nothing, []) $ H.readExtensions noPrefixes
- exts = fileExts ++ extraExts'
+ exts = nub $ fileExts ++ extraExts' ++ defaultExtensions
-- Parsing options...
fp = fromMaybe "<unknown>" mfp