@@ -6,7 +6,9 @@ module GHC.All(
66 CppFlags (.. ), ParseFlags (.. ), defaultParseFlags ,
77 parseFlagsAddFixities , parseFlagsSetLanguage ,
88 ParseError (.. ), ModuleEx (.. ),
9- parseModuleEx , createModuleEx , createModuleExWithFixities , ghcComments , modComments , firstDeclComments ,
9+ parseModuleEx , createModuleEx , createModuleExWithFixities ,
10+ createModuleExWithFixitiesAndExtensions , ghcComments , modComments ,
11+ firstDeclComments ,
1012 parseExpGhcWithMode , parseImportDeclGhcWithMode , parseDeclGhcWithMode ,
1113 ) where
1214
@@ -86,8 +88,9 @@ data ParseError = ParseError
8688 }
8789
8890-- | Result of 'parseModuleEx', representing a parsed module.
89- newtype ModuleEx = ModuleEx {
90- ghcModule :: Located (HsModule GhcPs )
91+ data ModuleEx = ModuleEx {
92+ ghcModule :: Located (HsModule GhcPs ),
93+ configuredExtensions :: [Extension ]
9194}
9295
9396-- | Extract a complete list of all the comments in a module.
@@ -160,8 +163,14 @@ createModuleEx :: Located (HsModule GhcPs) -> ModuleEx
160163createModuleEx = createModuleExWithFixities (map toFixity defaultFixities)
161164
162165createModuleExWithFixities :: [(String , Fixity )] -> Located (HsModule GhcPs ) -> ModuleEx
163- createModuleExWithFixities fixities ast =
164- ModuleEx (applyFixities (fixitiesFromModule ast ++ fixities) ast)
166+ createModuleExWithFixities = createModuleExWithFixitiesAndExtensions []
167+
168+ -- | Create a 'ModuleEx' from a GHC module. Provide a list of custom operator
169+ -- fixities and a list of GHC extensions that should be used when parsing the module
170+ -- (if there are any extensions required other than those explicitly enabled in the module).
171+ createModuleExWithFixitiesAndExtensions :: [Extension ] -> [(String , Fixity )] -> Located (HsModule GhcPs ) -> ModuleEx
172+ createModuleExWithFixitiesAndExtensions extensions fixities ast =
173+ ModuleEx (applyFixities (fixitiesFromModule ast ++ fixities) ast) extensions
165174
166175-- | Parse a Haskell module. Applies the C pre processor, and uses
167176-- best-guess fixity resolution if there are ambiguities. The
@@ -197,7 +206,7 @@ parseModuleEx flags file str = timedIO "Parse" file $ runExceptT $ do
197206 ExceptT $ parseFailureErr dynFlags str file str $ NE. fromList errs
198207 else do
199208 let fixes = fixitiesFromModule a ++ ghcFixitiesFromParseFlags flags
200- pure $ ModuleEx (applyFixities fixes a)
209+ pure $ ModuleEx (applyFixities fixes a) (enabledExtensions flags)
201210 PFailed s ->
202211 ExceptT $ parseFailureErr dynFlags str file str $ NE. fromList . bagToList . getMessages $ GhcPsMessage <$> snd (getPsMessages s)
203212 where
0 commit comments