diff options
author | Langston Barrett <langston.barrett@gmail.com> | 2016-07-07 15:20:27 +0100 |
---|---|---|
committer | Langston Barrett <langston.barrett@gmail.com> | 2016-07-07 16:19:15 +0100 |
commit | f5b2adc9a371345da9f2e9a19b67851afc248889 (patch) | |
tree | 72108bd5b03a15a389caa919514974d5939b6a32 /lib | |
parent | abc92ea4778ac25b7944b9f4c7f82eb95f0238c2 (diff) | |
download | stylish-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.hs | 21 |
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 |