Skip to content

Commit 5271f63

Browse files
Improve wrapper cradle errors (#2711)
* Improve wrapper cradle errors * Refactor cradle result unpacking * Fix runGhcCmd when NoImplicitPrelude is on Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent fc8cc9e commit 5271f63

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

exe/Wrapper.hs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,22 @@ launchHaskellLanguageServer parsedArgs = do
114114
callProcess e args
115115
#else
116116
let Cradle { cradleOptsProg = CradleAction { runGhcCmd } } = cradle
117-
(CradleSuccess ghcBinary) <- fmap trim <$> runGhcCmd ["-v0", "-package-env=-", "-e", "putStr =<< System.Environment.getExecutablePath"]
118-
(CradleSuccess libdir) <- HieBios.getRuntimeGhcLibDir cradle
117+
-- we need to be compatible with NoImplicitPrelude
118+
ghcBinary <- (fmap trim <$> runGhcCmd ["-v0", "-package-env=-", "-e", "do e <- System.Environment.getExecutablePath ; System.IO.putStr e"])
119+
>>= cradleResult "Failed to get project GHC executable path"
120+
libdir <- HieBios.getRuntimeGhcLibDir cradle
121+
>>= cradleResult "Failed to get project GHC libdir path"
119122
env <- Map.fromList <$> getEnvironment
120123
let newEnv = Map.insert "GHC_BIN" ghcBinary $ Map.insert "GHC_LIBDIR" libdir env
121124
executeFile e True args (Just (Map.toList newEnv))
122125
#endif
123126

127+
128+
cradleResult :: String -> CradleLoadResult a -> IO a
129+
cradleResult _ (CradleSuccess a) = pure a
130+
cradleResult str (CradleFail e) = die $ str ++ ": " ++ show e
131+
cradleResult str CradleNone = die $ str ++ ": no cradle"
132+
124133
-- | Version of 'getRuntimeGhcVersion' that dies if we can't get it, and also
125134
-- checks to see if the tool is missing if it is one of
126135
getRuntimeGhcVersion' :: Show a => Cradle a -> IO String
@@ -134,12 +143,7 @@ getRuntimeGhcVersion' cradle = do
134143
Direct -> checkToolExists "ghc"
135144
_ -> pure ()
136145

137-
ghcVersionRes <- HieBios.getRuntimeGhcVersion cradle
138-
case ghcVersionRes of
139-
CradleSuccess ver -> do
140-
return ver
141-
CradleFail error -> die $ "Failed to get project GHC version:" ++ show error
142-
CradleNone -> die "Failed get project GHC version, since we have a none cradle"
146+
HieBios.getRuntimeGhcVersion cradle >>= cradleResult "Failed to get project GHC version"
143147
where
144148
checkToolExists exe = do
145149
exists <- findExecutable exe

0 commit comments

Comments
 (0)