Skip to content

Commit 46bac37

Browse files
committed
Refactor: simplify
1 parent 7914b10 commit 46bac37

File tree

3 files changed

+30
-36
lines changed

3 files changed

+30
-36
lines changed

src/Stack/Build/FileTargets.hs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ import Stack.Package
4242
import Stack.PackageFile ( getPackageFile )
4343
import Stack.Prelude
4444
import Stack.Types.BuildOpts ( BuildOpts (..) )
45-
import Stack.Types.BuildOptsCLI
46-
( ApplyCLIFlag (..), BuildOptsCLI (..) )
45+
import Stack.Types.BuildOptsCLI ( ApplyCLIFlag (..) )
4746
import Stack.Types.Config ( Config (..), HasConfig (..), buildOptsL )
4847
import Stack.Types.EnvConfig
4948
( EnvConfig (..), HasEnvConfig (..), actualCompilerVersionL )
@@ -74,7 +73,11 @@ findFileTargets ::
7473
-- ^ All project packages
7574
-> [Path Abs File]
7675
-- ^ File targets to find
77-
-> RIO env (Map PackageName Target, Map PackageName [Path Abs File], [Path Abs File])
76+
-> RIO
77+
env
78+
( Map PackageName Target
79+
, Maybe (Map PackageName [Path Abs File], [Path Abs File])
80+
)
7881
findFileTargets locals fileTargets = do
7982
filePackages <- forM locals $ \lp -> do
8083
PackageComponentFile _ compFiles _ _ <- getPackageFile lp.package lp.cabalFP
@@ -126,7 +129,7 @@ findFileTargets locals fileTargets = do
126129
foldl' (M.unionWith (<>)) M.empty $
127130
map (\(fp, (name, _)) -> M.singleton name [fp])
128131
associatedFiles
129-
pure (targetMap, infoMap, extraFiles)
132+
pure (targetMap, Just (infoMap, extraFiles))
130133

131134
-- | Yields all of the targets that are local, those that are directly wanted
132135
-- and those that are extra dependencies to load.
@@ -175,23 +178,25 @@ getAllNonLocalTargets targets = do
175178
-- v'GhciPkgDesc'.
176179
loadGhciPkgDescs ::
177180
HasEnvConfig env
178-
=> BuildOptsCLI
181+
=> Map ApplyCLIFlag (Map FlagName Bool)
182+
-- ^ Flags specified on the command line.
179183
-> [(PackageName, (Path Abs File, Target))]
180184
-- ^ Local targets.
181185
-> RIO env [GhciPkgDesc]
182-
loadGhciPkgDescs buildOptsCLI localTargets =
186+
loadGhciPkgDescs cliFlags localTargets =
183187
forM localTargets $ \(name, (cabalFP, target)) ->
184-
loadGhciPkgDesc buildOptsCLI name cabalFP target
188+
loadGhciPkgDesc cliFlags name cabalFP target
185189

186190
-- | Load package description information for a ghci target.
187191
loadGhciPkgDesc ::
188192
HasEnvConfig env
189-
=> BuildOptsCLI
193+
=> Map ApplyCLIFlag (Map FlagName Bool)
194+
-- ^ Flags specified on the command line.
190195
-> PackageName
191196
-> Path Abs File
192197
-> Target
193198
-> RIO env GhciPkgDesc
194-
loadGhciPkgDesc buildOptsCLI name cabalFP target = do
199+
loadGhciPkgDesc cliFlags name cabalFP target = do
195200
econfig <- view envConfigL
196201
compilerVersion <- view actualCompilerVersionL
197202
let sm = econfig.sourceMap
@@ -242,7 +247,6 @@ loadGhciPkgDesc buildOptsCLI name cabalFP target = do
242247
, target
243248
}
244249
where
245-
cliFlags = buildOptsCLI.flags
246250
-- | All CLI Cabal flags for a package.
247251
getCliFlags :: Map FlagName Bool
248252
getCliFlags = Map.unions

src/Stack/Ghci.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@ ghci opts = do
200200
Left rawFileTargets -> do
201201
whenJust mainIsTargets $ \_ -> prettyThrowM Can'tSpecifyFilesAndMainIs
202202
-- Figure out targets based on filepath targets
203-
(targetMap, fileInfo, extraFiles) <- findFileTargets locals rawFileTargets
204-
pure (targetMap, Just (fileInfo, extraFiles))
203+
findFileTargets locals rawFileTargets
205204
-- Get a list of all the local target packages.
206205
localTargets <- getAllLocalTargets' opts inputTargets mainIsTargets localMap
207206
-- Get a list of all the non-local target packages.
@@ -214,7 +213,7 @@ ghci opts = do
214213
-- Check if additional package arguments are sensible.
215214
addPkgs <- checkAdditionalPackages opts.additionalPackages
216215
-- Load package descriptions.
217-
pkgDescs <- loadGhciPkgDescs buildOptsCLI localTargets
216+
pkgDescs <- loadGhciPkgDescs buildOptsCLI.flags localTargets
218217
-- If necessary, ask user about which main module to load.
219218
bopts <- view buildOptsL
220219
mainFile <- if opts.noLoadModules

src/Stack/IDE.hs

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,16 +151,12 @@ ideGhcOptions rawTarget = do
151151
installMap <- toInstallMap sourceMap
152152
locals <- projectLocalPackages
153153
depLocals <- localDependencies
154-
let localMap =
155-
M.fromList [(lp.package.name, lp) | lp <- locals ++ depLocals]
154+
let localMap = M.fromList [(lp.package.name, lp) | lp <- locals ++ depLocals]
156155
-- Parse to either file targets or build targets
157-
mTarget <- preprocessTarget rawTarget
158-
(inputTargets, mfileTargets) <- case mTarget of
159-
Nothing -> pure (mempty, Nothing)
160-
Just rawFileTarget -> do
161-
-- Figure out targets based on filepath targets
162-
(targetMap, fileInfo, extraFiles) <- findFileTargets locals [rawFileTarget]
163-
pure (targetMap, Just (fileInfo, extraFiles))
156+
(inputTargets, mfileTargets) <- processRawTarget rawTarget >>= maybe
157+
(pure (mempty, Nothing))
158+
-- Figure out targets based on file target
159+
(findFileTargets locals . pure)
164160
-- Get a list of all the local target packages.
165161
(directlyWanted, extraLoadDeps) <-
166162
getAllLocalTargets True inputTargets Nothing localMap
@@ -173,7 +169,7 @@ ideGhcOptions rawTarget = do
173169
M.intersectionWith getInternalDependencies inputTargets localMap
174170
relevantDependencies = M.filter (any isCSubLib) internalDependencies
175171
-- Load package descriptions.
176-
pkgDescs <- loadGhciPkgDescs defaultBuildOptsCLI localTargets
172+
pkgDescs <- loadGhciPkgDescs mempty localTargets
177173
pkgs <- getGhciPkgInfos installMap [] (fmap fst mfileTargets) pkgDescs
178174
(omittedOpts, pkgopts, macros) <-
179175
optsAndMacros
@@ -191,18 +187,13 @@ ideGhcOptions rawTarget = do
191187
mapM_ (liftIO . putStrLn) omittedOpts
192188
outputDivider
193189

194-
preprocessTarget ::
195-
HasEnvConfig env
196-
=> Text
197-
-> RIO env (Maybe (Path Abs File))
198-
preprocessTarget rawTarget =
190+
processRawTarget :: HasEnvConfig env => Text -> RIO env (Maybe (Path Abs File))
191+
processRawTarget rawTarget =
199192
if ".hs" `T.isSuffixOf` rawTarget || ".lhs" `T.isSuffixOf` rawTarget
200-
then do
201-
fileTarget <- do
202-
let fp = T.unpack rawTarget
203-
mpath <- forgivingResolveFile' fp
204-
case mpath of
205-
Nothing -> prettyThrowM (FileTargetIsInvalidAbsFile fp)
206-
Just path -> pure path
207-
pure (Just fileTarget)
193+
then
194+
forgivingResolveFile' rawTarget' >>= maybe
195+
(prettyThrowM $ FileTargetIsInvalidAbsFile rawTarget')
196+
(pure . Just)
208197
else pure Nothing
198+
where
199+
rawTarget' = T.unpack rawTarget

0 commit comments

Comments
 (0)