@@ -21,6 +21,7 @@ import Extension
2121import FastString
2222
2323import GHC.Hs
24+ import qualified BasicTypes as GHC
2425import SrcLoc
2526import ErrUtils
2627import Outputable
@@ -112,6 +113,14 @@ ghcExtensionsFromParseFlags ParseFlags{enabledExtensions=es, disabledExtensions=
112113ghcFixitiesFromParseFlags :: ParseFlags -> [(String , Fixity )]
113114ghcFixitiesFromParseFlags = map toFixity . fixities
114115
116+ ghcFixitiesFromModule :: Located (HsModule GhcPs ) -> [(String , Fixity )]
117+ ghcFixitiesFromModule (L _ (HsModule _ _ _ decls _ _)) = concatMap f decls
118+ where
119+ f :: LHsDecl GhcPs -> [(String , Fixity )]
120+ f (L _ (SigD _ (FixSig _ (FixitySig _ ops (GHC. Fixity _ p dir))))) =
121+ fixity dir p (map rdrNameStr' ops)
122+ f _ = []
123+
115124-- These next two functions get called frorm 'Config/Yaml.hs' for user
116125-- defined hint rules.
117126
@@ -141,11 +150,10 @@ parseDeclGhcWithMode parseMode s =
141150
142151-- | Create a 'ModuleEx' from GHC annotations and module tree. It
143152-- is assumed the incoming parse module has not been adjusted to
144- -- account for operator fixities.
153+ -- account for operator fixities (it uses the HLint default fixities) .
145154createModuleEx :: ApiAnns -> Located (HsModule GhcPs ) -> ModuleEx
146155createModuleEx anns ast =
147- -- Use builtin fixities.
148- ModuleEx (applyFixities [] ast) anns
156+ ModuleEx (applyFixities (ghcFixitiesFromModule ast ++ map toFixity defaultFixities) ast) anns
149157
150158-- | Parse a Haskell module. Applies the C pre processor, and uses
151159-- best-guess fixity resolution if there are ambiguities. The
@@ -161,7 +169,6 @@ parseModuleEx flags file str = timedIO "Parse" file $ do
161169 str <- pure $ dropPrefix " \65279" str -- remove the BOM if it exists, see #130
162170 ppstr <- runCpp (cppFlags flags) file str
163171 let enableDisableExts = ghcExtensionsFromParseFlags flags
164- fixities = ghcFixitiesFromParseFlags flags
165172 dynFlags <- parsePragmasIntoDynFlags baseDynFlags enableDisableExts file ppstr
166173 case dynFlags of
167174 Right ghcFlags -> do
@@ -176,7 +183,8 @@ parseModuleEx flags file str = timedIO "Parse" file $ do
176183 ( Map. fromListWith (++) $ annotations s
177184 , Map. fromList ((noSrcSpan, comment_q s) : annotations_comments s)
178185 )
179- pure $ Right (ModuleEx (applyFixities fixities a) anns)
186+ let fixes = ghcFixitiesFromModule a ++ ghcFixitiesFromParseFlags flags
187+ pure $ Right (ModuleEx (applyFixities fixes a) anns)
180188 PFailed s ->
181189 handleParseFailure ghcFlags ppstr file str $ bagToList . snd $ getMessages s ghcFlags
182190 Left msg -> do
0 commit comments