HaRe 0.8.4.0 → 0.8.4.1
raw patch · 22 files changed
+117/−70 lines, 22 filesdep ~HaRedep ~basedep ~ghc-modPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: HaRe, base, ghc-mod, optparse-applicative
API changes (from Hackage documentation)
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Env.GmEnv Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut GHC.Types.IO
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Types.MonadIO (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Types.MonadIO Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.HaRe: [optStackBuildDeps] :: Options -> Bool
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Env.GmEnv Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut GHC.Types.IO
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Types.MonadIO (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Types.MonadIO Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.API: getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (HsBind RdrName)
+ Language.Haskell.Refact.API: getHsBind :: (Data a) => SimpPos -> a -> Maybe (HsBind RdrName)
- Language.Haskell.Refact.HaRe: Options :: OutputOpts -> Programs -> [GHCOption] -> [(FilePath, Maybe FilePath)] -> String -> Options
+ Language.Haskell.Refact.HaRe: Options :: OutputOpts -> Programs -> [GHCOption] -> [(FilePath, Maybe FilePath)] -> String -> Bool -> Options
- Language.Haskell.Refact.HaRe: compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]
+ Language.Haskell.Refact.HaRe: compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]
- Language.Haskell.Refact.HaRe: genApplicative :: RefactSettings -> Options -> FilePath -> String -> SimpPos -> IO [FilePath]
+ Language.Haskell.Refact.HaRe: genApplicative :: RefactSettings -> Options -> FilePath -> SimpPos -> IO [FilePath]
- Language.Haskell.Refact.Refactoring.GenApplicative: compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]
+ Language.Haskell.Refact.Refactoring.GenApplicative: compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]
- Language.Haskell.Refact.Refactoring.GenApplicative: genApplicative :: RefactSettings -> Options -> FilePath -> String -> SimpPos -> IO [FilePath]
+ Language.Haskell.Refact.Refactoring.GenApplicative: genApplicative :: RefactSettings -> Options -> FilePath -> SimpPos -> IO [FilePath]
- Language.Haskell.Refact.Utils.Query: getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (HsBind RdrName)
+ Language.Haskell.Refact.Utils.Query: getHsBind :: (Data a) => SimpPos -> a -> Maybe (HsBind RdrName)
Files
- ChangeLog +2/−0
- HaRe.cabal +11/−11
- app/MainHaRe.hs +5/−11
- src/Language/Haskell/Refact/HaRe.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/AddRmParam.hs +2/−2
- src/Language/Haskell/Refact/Refactoring/Case.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/DeleteDef.hs +3/−3
- src/Language/Haskell/Refact/Refactoring/DupDef.hs +3/−3
- src/Language/Haskell/Refact/Refactoring/GenApplicative.hs +19/−15
- src/Language/Haskell/Refact/Refactoring/MoveDef.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/Renaming.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/RoundTrip.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/Simple.hs +1/−1
- src/Language/Haskell/Refact/Refactoring/SwapArgs.hs +1/−1
- src/Language/Haskell/Refact/Utils/Monad.hs +5/−4
- src/Language/Haskell/Refact/Utils/Query.hs +2/−2
- src/Language/Haskell/Refact/Utils/TypeUtils.hs +12/−4
- src/Language/Haskell/Refact/Utils/Utils.hs +3/−2
- test/Main.hs +2/−2
- test/TestUtils.hs +2/−2
- test/TypeUtilsSpec.hs +38/−0
- test/UtilsSpec.hs +1/−2
ChangeLog view
@@ -1,3 +1,5 @@+2017-06-12 v0.8.4.1+ * Update for ghc-mod 5.8.0.0 2017-02-11 v0.8.4.0 * Update for GHC 8.0.2 * Use ghc-mod version to 5.7
HaRe.cabal view
@@ -1,5 +1,5 @@ Name: HaRe-Version: 0.8.4.0+Version: 0.8.4.1 Author: Chris Brown, Huiqing Li, Simon Thompson, Alan Zimmerman, Stephen Adams@@ -125,8 +125,8 @@ , directory , filepath , ghc- , ghc-exactprint == 0.5.3.*- , ghc-mod == 5.7.0.*+ , ghc-exactprint >= 0.5.3.0+ , ghc-mod == 5.8.0.* , ghc-syb-utils , hslogger , monad-control@@ -146,7 +146,7 @@ -- real 0m36.427s -- user 0m41.448s -- sys 0m2.544s- GHC-Options: -O0+ GHC-Options: -O0 -Wall Hs-Source-Dirs: src -- Other-Modules: Paths_HaRe Exposed-modules:@@ -188,17 +188,17 @@ Executable ghc-hare Main-Is: MainHaRe.hs -- Other-Modules: Paths_HaRe- GHC-Options: -O0+ GHC-Options: -O0 -Wall -- GHC-Options: -prof -fprof-auto -rtsopts -caf-all Hs-Source-Dirs: ./app -- GHC 7.10.2 ships with base 4.8.1.0 Build-Depends: base >= 4.8.1.0 && < 5- , ghc-mod+ , ghc-mod == 5.8.0.* , gitrev >= 1.1 , mtl- , optparse-applicative+ , optparse-applicative == 0.13.2.* , optparse-simple , Cabal -- , Paths_HaRe@@ -213,7 +213,7 @@ ghc-options: -O0 -- reinstate these later -Wall- -- -Wall+ -Wall -- reinstate these later -Werror -- -fhpc -- -fhpc -hpcdir dist/hpc/app-1.0@@ -270,8 +270,8 @@ , directory , foldl , ghc- , ghc-exactprint == 0.5.3.*- , ghc-mod == 5.7.0.*+ , ghc-exactprint >= 0.5.3.0+ , ghc-mod == 5.8.0.* , ghc-syb-utils , hslogger , hspec@@ -286,7 +286,7 @@ , conversion-text , parsec , case-insensitive- , HaRe >= 0.8.2.1+ , HaRe Extensions: CPP if impl (ghc < 7.10.2) buildable: False
app/MainHaRe.hs view
@@ -12,12 +12,10 @@ import Language.Haskell.Refact.API import Language.Haskell.Refact.HaRe import Options.Applicative.Simple-import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod as GM import qualified Paths_HaRe as Meta --- temporary until exposed by ghc-mod--- import Options-import Language.Haskell.GhcMod.Options.Options+import GhcMod.Options.Options main :: IO () main = do@@ -110,7 +108,7 @@ | RenameCmd FilePath String Row Col | AddOneParam FilePath String Row Col | RmOneParam FilePath Row Col- | GenApplicative FilePath String Row Col+ | GenApplicative FilePath Row Col | DeleteDef FilePath Row Col deriving Show @@ -139,8 +137,8 @@ runCmd (RmOneParam fileName r c) (opt, gOpt) = runFunc $ rmOneParameter opt gOpt fileName (r,c) -runCmd (GenApplicative fileName funNm r c) (opt, gOpt)- = runFunc $ genApplicative opt gOpt fileName funNm (r,c)+runCmd (GenApplicative fileName r c) (opt, gOpt)+ = runFunc $ genApplicative opt gOpt fileName (r,c) runCmd (DeleteDef fileName r c) (opt, gOpt) = runFunc $ deleteDef opt gOpt fileName (r,c)@@ -295,10 +293,6 @@ ( metavar "FILE" <> help "Specify Haskell file to process" )- <*> strArgument- ( metavar "FUNNAME"- <> help "The name of the function to be refactored"- ) <*> argument auto ( metavar "line" <> help "The line the definition is on")
src/Language/Haskell/Refact/HaRe.hs view
@@ -41,4 +41,4 @@ import Language.Haskell.Refact.Refactoring.RoundTrip import Language.Haskell.Refact.Utils.Monad import Language.Haskell.Refact.Utils.Types-import qualified Language.Haskell.GhcMod as GM (Options(..),defaultOptions)+import qualified GhcMod as GM (Options(..),defaultOptions)
src/Language/Haskell/Refact/Refactoring/AddRmParam.hs view
@@ -12,8 +12,8 @@ import qualified Name as GHC import qualified Outputable as GHC -import qualified Language.Haskell.GhcMod as GM-import Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.API import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/Case.hs view
@@ -11,7 +11,7 @@ import qualified BasicTypes as GHC import qualified GHC as GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API -- To be moved into HaRe API
src/Language/Haskell/Refact/Refactoring/DeleteDef.hs view
@@ -9,11 +9,11 @@ import qualified GHC import Control.Monad import Control.Monad.State-import Language.Haskell.GhcMod+import GhcMod import Language.Haskell.Refact.API import Data.Generics.Strafunski.StrategyLib.StrategyLib-import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod as GM+import qualified GhcMod.Types as GM import System.Directory import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/DupDef.hs view
@@ -11,13 +11,13 @@ import qualified GHC.SYB.Utils as SYB import qualified GHC-import qualified RdrName as GHC+import qualified RdrName as GHC import Data.List import Data.Maybe -import qualified Language.Haskell.GhcMod as GM-import Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.API import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/GenApplicative.hs view
@@ -4,7 +4,8 @@ (genApplicative, compGenApplicative) where import Language.Haskell.Refact.API-import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod as GM+import qualified GhcMod.Types as GM import qualified GHC as GHC import qualified RdrName as GHC import System.Directory@@ -19,14 +20,14 @@ import Language.Haskell.GHC.ExactPrint.Print import Language.Haskell.GHC.ExactPrint.Parsers -genApplicative :: RefactSettings -> GM.Options -> FilePath -> String -> SimpPos -> IO [FilePath]-genApplicative settings cradle fileName funNm pos = do+genApplicative :: RefactSettings -> GM.Options -> FilePath -> SimpPos -> IO [FilePath]+genApplicative settings cradle fileName pos = do absFileName <- canonicalizePath fileName- runRefacSession settings cradle (compGenApplicative absFileName funNm pos)+ runRefacSession settings cradle (compGenApplicative absFileName pos) -compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]-compGenApplicative fileName funNm pos = do- (refRes@((_fp,ismod),_), ()) <- applyRefac (doGenApplicative fileName funNm pos) (RSFile fileName)+compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]+compGenApplicative fileName pos = do+ (refRes@((_fp,ismod),_), ()) <- applyRefac (doGenApplicative fileName pos) (RSFile fileName) case ismod of RefacUnmodifed -> error "Generalise to Applicative failed" RefacModified -> return ()@@ -36,16 +37,19 @@ -- to an (OpApp :: HsExpr) -- The function begins by constructing the beginning of the applicative chain by looking at the construction of the return statement -doGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc ()-doGenApplicative fileName funNm pos = do+doGenApplicative :: FilePath -> SimpPos -> RefactGhc ()+doGenApplicative fileName pos = do parsed <- getRefactParsed- let Just funBind = getHsBind pos funNm parsed- (Just retRhs) = getReturnRhs funBind- (Just doStmts) = getDoStmts funBind+ let funBind = case getHsBind pos parsed of+ (Just fb) -> fb+ Nothing -> error "That location is not the start of a function"+ (retRhs, doStmts) = case (getReturnRhs funBind, getDoStmts funBind) of+ ((Just rets), (Just stmt)) -> (rets, stmt)+ _ -> error "The function needs to consist of set of do statements with a return value." boundVars = findBoundVars doStmts checkPreconditions retRhs doStmts boundVars appChain <- constructAppChain retRhs doStmts- replaceFunRhs funNm pos appChain+ replaceFunRhs pos appChain checkPreconditions :: ParsedExpr -> [GHC.ExprLStmt GHC.RdrName] -> [GHC.RdrName] -> RefactGhc ()@@ -87,8 +91,8 @@ gContains :: (Data t, Eq a, Data a) => a -> t -> Bool gContains item t = SYB.everything (||) (False `SYB.mkQ` (\b -> item == b)) t -replaceFunRhs :: String -> SimpPos -> ParsedLExpr -> RefactGhc ()-replaceFunRhs funNm pos newRhs = do+replaceFunRhs :: SimpPos -> ParsedLExpr -> RefactGhc ()+replaceFunRhs pos newRhs = do parsed <- getRefactParsed let rdrNm = locToRdrName pos parsed case rdrNm of
src/Language/Haskell/Refact/Refactoring/MoveDef.hs view
@@ -31,7 +31,7 @@ import Data.List import Data.Maybe -import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod as GM import Language.Haskell.Refact.API import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/Renaming.hs view
@@ -21,7 +21,7 @@ import Language.Haskell.GHC.ExactPrint.Utils import Language.Haskell.Refact.API import System.Directory-import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import qualified Data.Map as Map {-# ANN module "HLint: ignore Redunant do" #-}
src/Language/Haskell/Refact/Refactoring/RoundTrip.hs view
@@ -1,6 +1,6 @@ module Language.Haskell.Refact.Refactoring.RoundTrip(roundTrip) where -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API import System.Directory
src/Language/Haskell/Refact/Refactoring/Simple.hs view
@@ -6,7 +6,7 @@ import qualified GHC as GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API -- To be moved into HaRe API
src/Language/Haskell/Refact/Refactoring/SwapArgs.hs view
@@ -8,7 +8,7 @@ import qualified Name as GHC import qualified GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API import Data.Generics.Schemes
src/Language/Haskell/Refact/Utils/Monad.hs view
@@ -49,10 +49,11 @@ --import Data.Time.Clock import Distribution.Helper import Exception-import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Internal as GM-import qualified Language.Haskell.GhcMod.Monad.Out as GM-import qualified Language.Haskell.GhcMod.Monad.Types as GM+import qualified GhcMod as GM+import qualified GhcMod.Monad.Out as GM+import qualified GhcMod.Monad.Types as GM+import qualified GhcMod.Target as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.Utils.Types import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint.Utils
src/Language/Haskell/Refact/Utils/Query.hs view
@@ -25,8 +25,8 @@ varPat _ = Nothing --Looks up the function binding at the given position. Returns nothing if the position does not contain a binding.-getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (GHC.HsBind GHC.RdrName)-getHsBind pos funNm a =+getHsBind :: (Data a) => SimpPos -> a -> Maybe (GHC.HsBind GHC.RdrName)+getHsBind pos a = let rdrNm = locToRdrName pos a in case rdrNm of Nothing -> Nothing
src/Language/Haskell/Refact/Utils/TypeUtils.hs view
@@ -258,8 +258,8 @@ -- So ignore the packagekey for now -- See https://github.com/DanielG/ghc-mod/issues/811 -- TODO: revisit this- -- let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2- let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2 && pk1 == pk2+ let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2+ -- let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2 && pk1 == pk2 gnames <- GHC.getNamesInScope -- logm $ "equivalentNameInNewMod:gnames=" ++ showGhcQual (map (\n -> (GHC.nameModule n,n)) gnames)@@ -855,7 +855,8 @@ impDecl <- mkImpDecl newSpan <- liftT uniqueSrcSpanT let newImp = GHC.L newSpan impDecl- liftT $ addSimpleAnnT newImp (DP (1,0)) [((G GHC.AnnImport),DP (0,0))]+ qAnns = getQualAnns alias qualify+ liftT $ addSimpleAnnT newImp (DP (1,0)) ([((G GHC.AnnImport),DP (0,0))]++qAnns) return (GHC.L l p { GHC.hsmodImports = (imp++[newImp])}) where @@ -869,7 +870,10 @@ newEnts <- mkNewEntList idNames let lNewEnts = GHC.L newSpan2 newEnts -- logm $ "addImportDecl.mkImpDecl:adding anns for:" ++ showGhc lNewEnts- liftT $ addSimpleAnnT lNewEnts (DP (0,1)) [((G GHC.AnnHiding),DP (0,0)),((G GHC.AnnOpenP),DP (0,1)),((G GHC.AnnCloseP),DP (0,0))]+ newEntsAnns = if hide+ then [((G GHC.AnnHiding),DP (0,0)),((G GHC.AnnOpenP),DP (0,1)),((G GHC.AnnCloseP),DP (0,0))]+ else [((G GHC.AnnOpenP),DP (0,0)),((G GHC.AnnCloseP),DP (0,0))]+ liftT $ addSimpleAnnT lNewEnts (DP (0,1)) newEntsAnns let lmodname = GHC.L newSpan1 modName liftT $ addSimpleAnnT lmodname (DP (0,1)) [((G GHC.AnnVal),DP (0,0))] return $ GHC.ImportDecl@@ -887,6 +891,10 @@ else (Just (hide, lNewEnts))) }+ getQualAnns Nothing _ = []+ getQualAnns (Just _) q = let cond = if q then [((G GHC.AnnQualified), DP (0,1))] else [] in+ [((G GHC.AnnAs), DP (0,1)),((G GHC.AnnVal), (DP (0,1)))] ++ cond+ -- ---------------------------------------------------------------------
src/Language/Haskell/Refact/Utils/Utils.hs view
@@ -48,8 +48,9 @@ import Language.Haskell.GHC.ExactPrint.Print import Language.Haskell.GHC.ExactPrint.Utils -import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod as GM+import qualified GhcMod.Target as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.Utils.GhcModuleGraph import Language.Haskell.Refact.Utils.GhcVersionSpecific
test/Main.hs view
@@ -4,7 +4,7 @@ module Main where import Control.Monad-import TestUtils+-- import TestUtils import qualified Turtle as Tu import qualified Control.Foldl as Fold @@ -45,7 +45,7 @@ resolver :: String resolver = #if __GLASGOW_HASKELL__ > 710- "resolver: nightly-2016-08-25"+ "resolver: nightly-2017-05-23" #else "resolver: lts-6.13" #endif
test/TestUtils.hs view
@@ -53,8 +53,8 @@ import Language.Haskell.GHC.ExactPrint.Parsers import Language.Haskell.GHC.ExactPrint.Types import Language.Haskell.GHC.ExactPrint.Utils-import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Types as GM+import qualified GhcMod as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.Utils.Monad import Language.Haskell.Refact.Utils.MonadFunctions import Language.Haskell.Refact.Utils.Types
test/TypeUtilsSpec.hs view
@@ -3666,6 +3666,44 @@ -- --------------------------------------- + it "adds an import entry that only imports a single name" $ do+ t <- ct $ parsedFileGhc "./TypeUtils/Empty.hs"+ let+ comp = do+ renamed1 <- getRefactRenamed+ parsed <- getRefactParsed+ let listModName = GHC.mkModuleName "Data.List"+ rdr = mkRdrName "head"+ res <- addImportDecl parsed listModName Nothing False False False Nothing False [rdr]+ putRefactParsed res emptyAnns++ return (res,renamed1)+ ((_r,_r2),s) <- runRefactGhc comp (initialState { rsModule = initRefactModule [] t }) testOptions++ (sourceFromState s) `shouldBe` "module Empty where\nimport Data.List (head)\n\n"+++ -- ---------------------------------------++ it "adds a qualified import" $ do+ t <- ct $ parsedFileGhc "./TypeUtils/Empty.hs"+ let+ comp = do+ renamed1 <- getRefactRenamed+ parsed <- getRefactParsed+ let listModName = GHC.mkModuleName "Data.List"+ qual = Just "List"+ res <- addImportDecl parsed listModName Nothing False False True qual False []+ putRefactParsed res emptyAnns++ return (res,renamed1)+ ((_r,_r2),s) <- runRefactGhc comp (initialState { rsModule = initRefactModule [] t }) testOptions++ (sourceFromState s) `shouldBe` "module Empty where\nimport qualified Data.List as List\n\n"+++ -- ---------------------------------------+ describe "addItemsToImport" $ do it "adds an item to an import entry with no items" $ do t <- ct $ parsedFileGhc "./TypeUtils/JustImports.hs"
test/UtilsSpec.hs view
@@ -11,9 +11,8 @@ import Control.Exception import Control.Monad.State import Data.List-import Data.Maybe -import qualified Language.Haskell.GhcMod.Internal as GM (mpModule)+import qualified GhcMod.Types as GM (mpModule) import Language.Haskell.GHC.ExactPrint.Utils import Language.Haskell.Refact.Refactoring.Renaming