@@ -6,7 +6,9 @@ module GHC.All(
6
6
CppFlags (.. ), ParseFlags (.. ), defaultParseFlags ,
7
7
parseFlagsAddFixities , parseFlagsSetLanguage ,
8
8
ParseError (.. ), ModuleEx (.. ),
9
- parseModuleEx , createModuleEx , createModuleExWithFixities , ghcComments , modComments , firstDeclComments ,
9
+ parseModuleEx , createModuleEx , createModuleExWithFixities ,
10
+ createModuleExWithFixitiesAndExtensions , ghcComments , modComments ,
11
+ firstDeclComments ,
10
12
parseExpGhcWithMode , parseImportDeclGhcWithMode , parseDeclGhcWithMode ,
11
13
) where
12
14
@@ -89,8 +91,9 @@ data ParseError = ParseError
89
91
}
90
92
91
93
-- | Result of 'parseModuleEx', representing a parsed module.
92
- newtype ModuleEx = ModuleEx {
93
- ghcModule :: Located (HsModule GhcPs )
94
+ data ModuleEx = ModuleEx {
95
+ ghcModule :: Located (HsModule GhcPs ),
96
+ configuredExtensions :: [Extension ]
94
97
}
95
98
96
99
-- | Extract a complete list of all the comments in a module.
@@ -163,8 +166,14 @@ createModuleEx :: Located (HsModule GhcPs) -> ModuleEx
163
166
createModuleEx = createModuleExWithFixities (map toFixity defaultFixities)
164
167
165
168
createModuleExWithFixities :: [(String , Fixity )] -> Located (HsModule GhcPs ) -> ModuleEx
166
- createModuleExWithFixities fixities ast =
167
- ModuleEx (applyFixities (fixitiesFromModule ast ++ fixities) ast)
169
+ createModuleExWithFixities = createModuleExWithFixitiesAndExtensions []
170
+
171
+ -- | Create a 'ModuleEx' from a GHC module. Provide a list of custom operator
172
+ -- fixities and a list of GHC extensions that should be used when parsing the module
173
+ -- (if there are any extensions required other than those explicitly enabled in the module).
174
+ createModuleExWithFixitiesAndExtensions :: [Extension ] -> [(String , Fixity )] -> Located (HsModule GhcPs ) -> ModuleEx
175
+ createModuleExWithFixitiesAndExtensions extensions fixities ast =
176
+ ModuleEx (applyFixities (fixitiesFromModule ast ++ fixities) ast) extensions
168
177
169
178
impliedEnables :: Extension -> [Extension ]
170
179
impliedEnables ext = case Data.List. lookup ext extensionImplications of
@@ -214,7 +223,7 @@ parseModuleEx flags file str = timedIO "Parse" file $ runExceptT $ do
214
223
ExceptT $ parseFailureErr dynFlags str file str $ NE. fromList errs
215
224
else do
216
225
let fixes = fixitiesFromModule a ++ ghcFixitiesFromParseFlags flags
217
- pure $ ModuleEx (applyFixities fixes a)
226
+ pure $ ModuleEx (applyFixities fixes a) (enabledExtensions flags)
218
227
PFailed s ->
219
228
ExceptT $ parseFailureErr dynFlags str file str $ NE. fromList . bagToList . getMessages $ GhcPsMessage <$> snd (getPsMessages s)
220
229
where
0 commit comments