diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Language/Haskell/Stylish/Parse.hs | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/src/Language/Haskell/Stylish/Parse.hs b/src/Language/Haskell/Stylish/Parse.hs index d9e0c9b..ac5aafb 100644 --- a/src/Language/Haskell/Stylish/Parse.hs +++ b/src/Language/Haskell/Stylish/Parse.hs @@ -36,43 +36,28 @@ dropBom str = str -------------------------------------------------------------------------------- --- | If --- --- > {-# LANGUAGE Haskell2010 #-} --- --- is specified, we need to add a number of extra extensions -addHaskell2010Extensions :: [H.Extension] -> [H.Extension] -addHaskell2010Extensions exts - -- For some reason Haskell2010 is not supported yet in haskell-src-exts - | H.UnknownExtension "Haskell2010" `elem` exts = exts ++ extra - | otherwise = exts - where - extra = - [ H.PatternGuards - , H.RelaxedPolyRec - , H.EmptyDataDecls - , H.ForeignFunctionInterface - , H.UnknownExtension "NoNPlusKPatterns" -- Not supported yet in HSE - ] - - --------------------------------------------------------------------------------- -- | Abstraction over HSE's parsing parseModule :: Extensions -> Maybe FilePath -> String -> Either String Module parseModule extraExts mfp string = do -- Determine the extensions: those specified in the file and the extra ones - let noBom = dropBom string - extraExts' = map H.classifyExtension extraExts - fileExts = fromMaybe [] $ H.readExtensions noBom - exts = addHaskell2010Extensions $ fileExts ++ extraExts' + let noBom = dropBom string + extraExts' = map H.classifyExtension extraExts + (lang, fileExts) = fromMaybe (Nothing, []) $ H.readExtensions noBom + exts = fileExts ++ extraExts' -- Parsing options... fp = fromMaybe "<unknown>" mfp mode = H.defaultParseMode - {H.extensions = exts, H.fixities = Nothing} + { H.extensions = exts + , H.fixities = Nothing + , H.baseLanguage = case lang of + Nothing -> H.baseLanguage H.defaultParseMode + Just l -> l + } -- Preprocessing - noCpp = if H.CPP `elem` exts then unCpp noBom else noBom + noCpp = + if H.EnableExtension H.CPP `elem` exts then unCpp noBom else noBom case H.parseModuleWithComments mode noCpp of H.ParseOk md -> return md |