[Git][ghc/ghc][wip/T23996] prevent GHCi (and runghc) from suggesting other symbols when not finding main
Jade (@Jade)
gitlab at gitlab.haskell.org
Sat Jan 27 09:44:33 UTC 2024
Jade pushed to branch wip/T23996 at Glasgow Haskell Compiler / GHC
Commits:
4d22d6b8 by Jade at 2024-01-27T10:48:05+01:00
prevent GHCi (and runghc) from suggesting other symbols when not finding main
Fixes: #23996
- - - - -
2 changed files:
- ghc/GHCi/UI.hs
- testsuite/tests/ghc-e/should_fail/T18441fail18.stderr
Changes:
=====================================
ghc/GHCi/UI.hs
=====================================
@@ -1622,13 +1622,24 @@ pprInfo (thing, fixity, cls_insts, fam_insts, docs)
runMain :: GhciMonad m => String -> m ()
runMain s = case toArgsNoLoc s of
- Left err -> liftIO (hPutStrLn stderr err)
- Right args ->
- do dflags <- getDynFlags
- let main = fromMaybe "main" (mainFunIs dflags)
- -- Wrap the main function in 'void' to discard its value instead
- -- of printing it (#9086). See Haskell 2010 report Chapter 5.
- doWithArgs args $ "Control.Monad.void (" ++ main ++ ")"
+ Left err -> liftIO (hPutStrLn stderr err)
+ Right args -> doWithMain (doWithArgs args)
+ where
+ doWithMain fun = do
+ dflags <- getDynFlags
+ let main = fromMaybe "main" (mainFunIs dflags)
+ handleSourceError printErrAndMaybeExit $ do
+ -- doing this will prevent the main to run when it is not in scope
+ -- this might seem useless, but it doesn't suggest other functions
+ -- to be used, which is exactly what we want here. See #23996.
+ _ <- GHC.parseName main
+
+ -- Wrap the main function in 'void' to discard its value instead
+ -- of printing it (#9086). See Haskell 2010 report Chapter 5.
+ fun $ "Control.Monad.void (" ++ main ++ ")"
+
+
+
-----------------------------------------------------------------------------
-- :run
=====================================
testsuite/tests/ghc-e/should_fail/T18441fail18.stderr
=====================================
@@ -1,5 +1,4 @@
-<interactive>:0:53: error: [GHC-88464]
- Variable not in scope: main :: IO a0
- Suggested fix: Perhaps use ‘min’ (imported from Prelude)
+<interactive>:1:1: error: [GHC-76037]
+ Not in scope: ‘main’
1
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4d22d6b83200eb9ee96e6c6d6db831e58c548934
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4d22d6b83200eb9ee96e6c6d6db831e58c548934
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240127/203ee52f/attachment-0001.html>
More information about the ghc-commits
mailing list