Workaround for #340

This commit is contained in:
Daniel Gröber 2014-09-12 03:48:22 +02:00
parent b9890a90ed
commit 1c8d1edb4d
7 changed files with 56 additions and 5 deletions

View File

@ -6,6 +6,9 @@ UNRELEASED v5.1.0.0
* Make `loadSymbolDb` polimorphic in the return types's monad.
* Add `hoistGhcModT` to Language.Haskell.GhcMod.Internal
UNRELEASED v5.0.1.3
* Fix `check` command for modules using `-XPatternSynonyms`
2014-08-29 v5.0.1.2
* Merge #345, Try fixing duplicate errors
* Merge #344, elisp: Use advice to check syntax on save-buffer

View File

@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
module Language.Haskell.GhcMod.Target (
setTargetFiles
) where
@ -5,7 +6,7 @@ module Language.Haskell.GhcMod.Target (
import Control.Applicative ((<$>))
import Control.Monad (forM, void, (>=>))
import DynFlags (ExtensionFlag(..), xopt)
import GHC (DynFlags(..), LoadHowMuch(..))
import GHC (LoadHowMuch(..))
import qualified GHC as G
import Language.Haskell.GhcMod.DynFlags
import Language.Haskell.GhcMod.Monad
@ -50,7 +51,10 @@ setTargetFiles files = do
setCompilerMode Intelligent
needsFallback :: G.ModuleGraph -> Bool
needsFallback = any (hasTHorQQ . G.ms_hspp_opts)
where
hasTHorQQ :: DynFlags -> Bool
hasTHorQQ dflags = any (`xopt` dflags) [Opt_TemplateHaskell, Opt_QuasiQuotes]
needsFallback = any $ \ms ->
let df = G.ms_hspp_opts ms in
Opt_TemplateHaskell `xopt` df
|| Opt_QuasiQuotes `xopt` df
#if __GLASGOW_HASKELL__ >= 708
|| (Opt_PatternSynonyms `xopt` df)
#endif

View File

@ -31,6 +31,11 @@ spec = do
res <- runID $ checkSyntax ["Baz.hs"]
res `shouldSatisfy` ("Baz.hs:5:1:Warning:" `isPrefixOf`)
it "works with modules using PatternSynonyms" $ do
withDirectory_ "test/data/pattern-synonyms" $ do
res <- runID $ checkSyntax ["B.hs"]
res `shouldSatisfy` ("B.hs:6:9:Warning:" `isPrefixOf`)
it "works with foreign exports" $ do
withDirectory_ "test/data" $ do
res <- runID $ checkSyntax ["ForeignExport.hs"]

View File

@ -0,0 +1,6 @@
{-# LANGUAGE PatternSynonyms #-}
module A where
data SomeType a b = SomeType (a,b)
pattern MyPat x y <- SomeType (x,y)

View File

@ -0,0 +1,7 @@
{-# LANGUAGE PatternSynonyms #-}
module B where
import A
foo :: SomeType Int Char -> String
foo x = case x of
MyPat a b -> show a ++ " " ++ [b]

View File

@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain

View File

@ -0,0 +1,24 @@
-- Initial pattern-synonyms.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: pattern-synonyms
version: 0.1.0.0
-- synopsis:
-- description:
-- license:
license-file: LICENSE
author: Daniel Gröber
maintainer: dxld@darkboxed.org
-- copyright:
-- category:
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
library
exposed-modules: A, B
-- other-modules:
other-extensions: PatternSynonyms
build-depends: base >=4.7 && <4.8
-- hs-source-dirs:
default-language: Haskell2010