@@ -12,24 +12,30 @@ import Development.IDE.Types.Location
12
12
import qualified HIE.Bios.Cradle as HieBios
13
13
import HIE.Bios.Types hiding (Log )
14
14
import System.FilePath
15
+ import Control.Applicative
15
16
16
17
{- | Takes a cradle error, the corresponding cradle and the file path where
17
18
the cradle error occurred (of the file we attempted to load).
18
19
Depicts the cradle error in a user-friendly way.
19
20
-}
20
21
renderCradleError :: CradleError -> Cradle a -> NormalizedFilePath -> FileDiagnostic
21
22
renderCradleError (CradleError deps _ec ms) cradle nfp
22
- | HieBios. isCabalCradle cradle && any (isInfixOf " Error: cabal: Failed extracting script block: " ) ms =
23
+ | HieBios. isCabalCradle cradle =
23
24
let (fp, showDiag, diag) = ideErrorWithSource (Just " cradle" ) (Just DiagnosticSeverity_Error ) nfp $ T. unlines $ map T. pack userFriendlyMessage in
24
25
(fp, showDiag, diag{_data_ = Just (Aeson. Array $ Vector. fromList $ map (Aeson. String . T. pack) absDeps)})
25
26
| otherwise = ideErrorWithSource (Just " cradle" ) (Just DiagnosticSeverity_Error ) nfp $ T. unlines $ map T. pack userFriendlyMessage
26
27
where
27
28
absDeps = fmap (cradleRootDir cradle </> ) deps
28
29
userFriendlyMessage :: [String ]
29
30
userFriendlyMessage
30
- | HieBios. isCabalCradle cradle = fromMaybe ms fileMissingMessage
31
+ | HieBios. isCabalCradle cradle = fromMaybe ms $ fileMissingMessage <|> mkUnknownModuleMessage
31
32
| otherwise = ms
32
33
34
+ mkUnknownModuleMessage :: Maybe [String ]
35
+ mkUnknownModuleMessage
36
+ | any (isInfixOf " Error: cabal: Failed extracting script block:" ) ms = Just $ unknownModuleMessage (fromNormalizedFilePath nfp) Nothing
37
+ | otherwise = Nothing
38
+
33
39
fileMissingMessage :: Maybe [String ]
34
40
fileMissingMessage =
35
41
multiCradleErrMessage <$> parseMultiCradleErr ms
@@ -73,14 +79,20 @@ parseMultiCradleErr ms = do
73
79
74
80
multiCradleErrMessage :: MultiCradleErr -> [String ]
75
81
multiCradleErrMessage e =
76
- [ " Loading the module '" <> moduleFileName <> " ' failed. It may not be listed in your .cabal file!"
77
- , " Perhaps you need to add `" <> moduleName <> " ` to other-modules or exposed-modules."
78
- , " For more information, visit: https://cabal.readthedocs.io/en/3.4/developing-packages.html#modules-included-in-the-package"
79
- , " "
80
- ] <> map prefix (mcPrefixes e)
82
+ unknownModuleMessage moduleFileName (Just moduleName)
83
+ <> [" " ]
84
+ <> map prefix (mcPrefixes e)
81
85
where
82
86
localFilePath f = dropWhile (== pathSeparator) $ dropPrefix (mcPwd e) f
83
87
moduleFileName = localFilePath $ mcFilePath e
84
88
moduleName = intercalate " ." $ map dropExtension $ dropWhile isSourceFolder $ splitDirectories moduleFileName
85
89
isSourceFolder p = all isLower $ take 1 p
86
90
prefix (f, r) = f <> " - " <> r
91
+
92
+ unknownModuleMessage :: String -> Maybe String -> [String ]
93
+ unknownModuleMessage moduleFileName moduleNameM =
94
+ [ " Loading the module '" <> moduleFileName <> " ' failed."
95
+ , " It may not be listed in your .cabal file!"
96
+ , " Perhaps you need to add `" <> fromMaybe (takeFileName moduleFileName) moduleNameM <> " ` to other-modules or exposed-modules."
97
+ , " For more information, visit: https://cabal.readthedocs.io/en/3.4/developing-packages.html#modules-included-in-the-package"
98
+ ]
0 commit comments