Fixing a bug of TH expansion for GHC 7.6 (#92).
This commit is contained in:
parent
33986fb1b5
commit
4a5f5441f3
22
ErrMsg.hs
22
ErrMsg.hs
@ -1,3 +1,5 @@
|
|||||||
|
{-# LANGUAGE BangPatterns #-}
|
||||||
|
|
||||||
module ErrMsg (
|
module ErrMsg (
|
||||||
LogReader
|
LogReader
|
||||||
, setLogger
|
, setLogger
|
||||||
@ -32,7 +34,9 @@ setLogger True df = do
|
|||||||
let newdf = Gap.setLogAction df $ appendLog ref
|
let newdf = Gap.setLogAction df $ appendLog ref
|
||||||
return (newdf, reverse <$> readIORef ref)
|
return (newdf, reverse <$> readIORef ref)
|
||||||
where
|
where
|
||||||
appendLog ref _ sev src _ msg = modifyIORef ref (\ls -> ppMsg src sev df msg : ls)
|
appendLog ref _ sev src _ msg = do
|
||||||
|
let !l = ppMsg src sev df msg
|
||||||
|
modifyIORef ref (\ls -> l : ls)
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
@ -54,15 +58,17 @@ ppErrMsg dflag err = ppMsg spn SevError dflag msg ++ ext
|
|||||||
ext = showMsg dflag (errMsgExtraInfo err)
|
ext = showMsg dflag (errMsgExtraInfo err)
|
||||||
|
|
||||||
ppMsg :: SrcSpan -> Severity-> DynFlags -> SDoc -> String
|
ppMsg :: SrcSpan -> Severity-> DynFlags -> SDoc -> String
|
||||||
ppMsg spn sev dflag msg = fromMaybe def $ do
|
ppMsg spn sev dflag msg = prefix ++ cts ++ "\0"
|
||||||
(line,col,_,_) <- Gap.getSrcSpan spn
|
|
||||||
file <- normalise <$> Gap.getSrcFile spn
|
|
||||||
let severityCaption = Gap.showSeverityCaption sev
|
|
||||||
return $ file ++ ":" ++ show line ++ ":"
|
|
||||||
++ show col ++ ":" ++ severityCaption ++ cts ++ "\0"
|
|
||||||
where
|
where
|
||||||
def = "ghc-mod:0:0:Probably mutual module import occurred\0"
|
|
||||||
cts = showMsg dflag msg
|
cts = showMsg dflag msg
|
||||||
|
defaultPrefix
|
||||||
|
| dopt Opt_D_dump_splices dflag = ""
|
||||||
|
| otherwise = "Dummy:0:0:"
|
||||||
|
prefix = fromMaybe defaultPrefix $ do
|
||||||
|
(line,col,_,_) <- Gap.getSrcSpan spn
|
||||||
|
file <- normalise <$> Gap.getSrcFile spn
|
||||||
|
let severityCaption = Gap.showSeverityCaption sev
|
||||||
|
return $ file ++ ":" ++ show line ++ ":" ++ show col ++ ":" ++ severityCaption
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
4
Info.hs
4
Info.hs
@ -144,13 +144,13 @@ inModuleContext opt cradle fileName modstr action errmsg =
|
|||||||
withGHCDummyFile (valid ||> invalid ||> return errmsg)
|
withGHCDummyFile (valid ||> invalid ||> return errmsg)
|
||||||
where
|
where
|
||||||
valid = do
|
valid = do
|
||||||
void $ initializeFlagsWithCradle opt cradle ["-w"] False
|
void $ initializeFlagsWithCradle opt cradle ["-w:"] False
|
||||||
setTargetFile fileName
|
setTargetFile fileName
|
||||||
checkSlowAndSet
|
checkSlowAndSet
|
||||||
void $ load LoadAllTargets
|
void $ load LoadAllTargets
|
||||||
doif setContextFromTarget action
|
doif setContextFromTarget action
|
||||||
invalid = do
|
invalid = do
|
||||||
void $ initializeFlagsWithCradle opt cradle ["-w"] False
|
void $ initializeFlagsWithCradle opt cradle ["-w:"] False
|
||||||
setTargetBuffer
|
setTargetBuffer
|
||||||
checkSlowAndSet
|
checkSlowAndSet
|
||||||
void $ load LoadAllTargets
|
void $ load LoadAllTargets
|
||||||
|
@ -3,7 +3,7 @@ module CheckSpec where
|
|||||||
import CabalApi
|
import CabalApi
|
||||||
import Check
|
import Check
|
||||||
import Cradle
|
import Cradle
|
||||||
import Data.List (isSuffixOf)
|
import Data.List (isSuffixOf, isInfixOf)
|
||||||
import Expectation
|
import Expectation
|
||||||
import Test.Hspec
|
import Test.Hspec
|
||||||
import Types
|
import Types
|
||||||
@ -23,3 +23,11 @@ spec = do
|
|||||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||||
res <- checkSyntax defaultOptions cradle "test/Bar/Baz.hs"
|
res <- checkSyntax defaultOptions cradle "test/Bar/Baz.hs"
|
||||||
res `shouldSatisfy` ("test/Foo.hs:3:1:Warning: Top-level binding with no type signature: foo :: [Char]\NUL\n" `isSuffixOf`)
|
res `shouldSatisfy` ("test/Foo.hs:3:1:Warning: Top-level binding with no type signature: foo :: [Char]\NUL\n" `isSuffixOf`)
|
||||||
|
|
||||||
|
it "can detect mutually imported modules" $ do
|
||||||
|
withDirectory_ "test/data" $ do
|
||||||
|
(strVer,_) <- getGHCVersion
|
||||||
|
cradle <- findCradle Nothing strVer
|
||||||
|
res <- checkSyntax defaultOptions cradle "Mutual1.hs"
|
||||||
|
res `shouldSatisfy` ("Module imports form a cycle" `isInfixOf`)
|
||||||
|
|
3
test/data/Mutual1.hs
Normal file
3
test/data/Mutual1.hs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module Mutual1 where
|
||||||
|
|
||||||
|
import Mutual2
|
3
test/data/Mutual2.hs
Normal file
3
test/data/Mutual2.hs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module Mutual2 where
|
||||||
|
|
||||||
|
import Mutual1
|
Loading…
Reference in New Issue
Block a user