@@ -9,12 +9,12 @@ import Control.Exception (SomeException, catch, throwIO)
99import Control.Monad.Extra
1010import Data.Default
1111import Data.Foldable
12+ import Data.Text (Text )
1213import qualified Data.Text as Text
1314import Data.Void
1415import qualified Development.IDE.Session as Session
15- import Development.IDE.Types.Logger (LogMessage , Recorder ,
16- logException , logInfo ,
17- withLogMessageRecorder )
16+ import Development.IDE.Types.Logger (Recorder , cmap , logWith ,
17+ withDefaultTextRecorder )
1818import qualified HIE.Bios.Environment as HieBios
1919import HIE.Bios.Types
2020import Ide.Arguments
@@ -23,10 +23,56 @@ import System.Directory
2323import System.Environment
2424import System.Exit
2525import System.FilePath
26- import System.IO
2726import System.Info
2827import System.Process
2928
29+ data Log
30+ = LogProgram { name :: ! String , arguments :: ! [String ], version :: ! String }
31+ -- logInfo recorder $ "Run entered for haskell-language-server-wrapper(" <> Text.pack progName <> ") "
32+ -- <> Text.pack hlsVersion
33+ -- logInfo recorder $ "Arguments: " <> (Text.pack . show) args
34+ | LogCurrentDirectory ! FilePath
35+ -- logInfo recorder $ "Current directory: " <> Text.pack d
36+ | LogOs ! String
37+ -- logInfo recorder $ "Operating system: " <> Text.pack os
38+ | LogCradle ! (Cradle Void )
39+ -- logInfo recorder $ "Cradle directory: " <> Text.pack (cradleRootDir cradle)
40+ -- logInfo recorder $ "Cradle type: " <> (Text.pack . show) (actionName (cradleOptsProg cradle))
41+ | LogBuildTools ! ProgramsOfInterest
42+ -- logInfo recorder ""
43+ -- logInfo recorder "Tool versions found on the $PATH"
44+ -- logInfo recorder $ Text.pack $ showProgramVersionOfInterest programsOfInterest
45+ -- logInfo recorder ""
46+ | LogGhcVersion LogGhcVersionMessage
47+ -- logInfo recorder "Consulting the cradle to get project GHC version..."
48+ | LogExeCandidates ! [Text ]
49+ -- logInfo recorder $ "haskell-language-server exe candidates: " <> (Text.pack . show) candidates
50+ | LogExeNotFound
51+ -- logInfo recorder $ "Cannot find any haskell-language-server exe, looked for: " <> Text.intercalate ", " candidates
52+ | LogExeFound ! FilePath
53+ -- logInfo recorder $ "Launching haskell-language-server exe at:" <> Text.pack e
54+ | LogException ! SomeException
55+ | LogHieYamlFound { initialPath :: ! FilePath , path :: ! FilePath }
56+ -- hPutStrLn stderr $ "Found \"" ++ yaml ++ "\" for \"" ++ initialFp ++ "\""
57+ | LogHieYamlNotFound
58+ -- hPutStrLn stderr "No 'hie.yaml' found. Try to discover the project type!"
59+ | LogHieBios ! String
60+ deriving Show
61+
62+ data LogGhcVersionMessage
63+ = LogGhcVersionCradleSuccess ! String
64+ -- logInfo recorder $ "Project GHC version: " <> Text.pack ghcVersion
65+ | LogGhcVersionCradleFail ! CradleError
66+ -- die $ "Failed to get project GHC version:" ++ show error
67+ | LogGhcVersionCradleNone
68+ -- die "Failed get project GHC version, since we have a none cradle"
69+ | LogGhcVersionToolNotFound ! FilePath
70+ -- die $ "Cradle requires " ++ exe ++ " but couldn't find it" ++ "\n"
71+ -- ++ show cradle
72+ deriving Show
73+
74+ logToText :: Log -> Text
75+ logToText = Text. pack . show
3076-- ---------------------------------------------------------------------
3177
3278main :: IO ()
@@ -39,7 +85,8 @@ main = do
3985 Ghcide GhcideArguments { argsLogFile } -> argsLogFile
4086 _ -> Nothing
4187
42- withLogMessageRecorder logFilePath $ \ recorder ->
88+ withDefaultTextRecorder logFilePath $ \ textRecorder -> do
89+ let logRecorder = cmap logToText textRecorder
4390 catch
4491 (do
4592 hlsVer <- haskellLanguageServerVersion
@@ -57,69 +104,64 @@ main = do
57104 putStrLn haskellLanguageServerNumericVersion
58105
59106 BiosMode PrintCradleType ->
60- print =<< findProjectCradle recorder
107+ print =<< findProjectCradle mempty
61108
62- _ -> launchHaskellLanguageServer recorder args
109+ _ -> launchHaskellLanguageServer logRecorder args
63110 )
64- (\ e -> logException recorder (e :: SomeException ) *> throwIO e)
111+ (\ e -> logWith logRecorder ( LogException e ) *> throwIO e)
65112
66- launchHaskellLanguageServer :: Recorder LogMessage -> Arguments -> IO ()
113+ launchHaskellLanguageServer :: Recorder Log -> Arguments -> IO ()
67114launchHaskellLanguageServer recorder parsedArgs = do
115+ let ghcVersionRecorder = cmap LogGhcVersion recorder
116+
68117 case parsedArgs of
69118 Ghcide GhcideArguments {.. } -> whenJust argsCwd setCurrentDirectory
70119 _ -> pure ()
71120
72121 d <- getCurrentDirectory
122+ logWith recorder $ LogCurrentDirectory d
73123
74124 -- search for the project cradle type
75125 cradle <- findProjectCradle recorder
126+ logWith recorder $ LogCradle cradle
76127
77128 -- Get the root directory from the cradle
78129 setCurrentDirectory $ cradleRootDir cradle
79130
80131 case parsedArgs of
81132 Ghcide GhcideArguments {.. } ->
82- when argsProjectGhcVersion $ getRuntimeGhcVersion' cradle >>= putStrLn >> exitSuccess
133+ when argsProjectGhcVersion $ getRuntimeGhcVersion' ghcVersionRecorder cradle >>= putStrLn >> exitSuccess
83134 _ -> pure ()
84135
85136 progName <- getProgName
86- logInfo recorder $ " Run entered for haskell-language-server-wrapper(" <> Text. pack progName <> " ) "
87- <> Text. pack hlsVersion
88- logInfo recorder $ " Current directory: " <> Text. pack d
89- logInfo recorder $ " Operating system: " <> Text. pack os
90137 args <- getArgs
91- logInfo recorder $ " Arguments: " <> (Text. pack . show ) args
92- logInfo recorder $ " Cradle directory: " <> Text. pack (cradleRootDir cradle)
93- logInfo recorder $ " Cradle type: " <> (Text. pack . show ) (actionName (cradleOptsProg cradle))
138+ logWith recorder $ LogProgram progName args hlsVersion
139+ logWith recorder $ LogOs os
94140 programsOfInterest <- findProgramVersions
95- logInfo recorder " "
96- logInfo recorder " Tool versions found on the $PATH"
97- logInfo recorder $ Text. pack $ showProgramVersionOfInterest programsOfInterest
98- logInfo recorder " "
141+ logWith recorder $ LogBuildTools programsOfInterest
99142 -- Get the ghc version -- this might fail!
100- logInfo recorder " Consulting the cradle to get project GHC version..."
101- ghcVersion <- getRuntimeGhcVersion' cradle
102- logInfo recorder $ " Project GHC version: " <> Text. pack ghcVersion
143+ ghcVersion <- getRuntimeGhcVersion' ghcVersionRecorder cradle
103144
104145 let
105146 hlsBin = " haskell-language-server-" <> Text. pack ghcVersion
106147 candidates' = [hlsBin, " haskell-language-server" ]
107148 candidates = map (<> Text. pack exeExtension) candidates'
108149
109- logInfo recorder $ " haskell-language-server exe candidates: " <> ( Text. pack . show ) candidates
150+ logWith recorder $ LogExeCandidates candidates
110151
111152 mexes <- traverse (findExecutable . Text. unpack) candidates
112153
113154 case asum mexes of
114- Nothing -> logInfo recorder $ " Cannot find any haskell-language-server exe, looked for: " <> Text. intercalate " , " candidates
155+ Nothing ->
156+ logWith recorder LogExeNotFound
115157 Just e -> do
116- logInfo recorder $ " Launching haskell-language-server exe at: " <> Text. pack e
158+ logWith recorder $ LogExeFound e
117159 callProcess e args
118160
119161-- | Version of 'getRuntimeGhcVersion' that dies if we can't get it, and also
120162-- checks to see if the tool is missing if it is one of
121- getRuntimeGhcVersion' :: Show a = > Cradle a -> IO String
122- getRuntimeGhcVersion' cradle = do
163+ getRuntimeGhcVersion' :: Recorder LogGhcVersionMessage - > Cradle a -> IO String
164+ getRuntimeGhcVersion' recorder cradle = do
123165
124166 -- See if the tool is installed
125167 case actionName (cradleOptsProg cradle) of
@@ -132,19 +174,24 @@ getRuntimeGhcVersion' cradle = do
132174 ghcVersionRes <- HieBios. getRuntimeGhcVersion cradle
133175 case ghcVersionRes of
134176 CradleSuccess ver -> do
177+ logWith recorder $ LogGhcVersionCradleSuccess ver
135178 return ver
136- CradleFail error -> die $ " Failed to get project GHC version:" ++ show error
137- CradleNone -> die " Failed get project GHC version, since we have a none cradle"
179+ CradleFail error -> do
180+ logWith recorder $ LogGhcVersionCradleFail error
181+ exitFailure
182+ CradleNone -> do
183+ logWith recorder LogGhcVersionCradleNone
184+ exitFailure
138185 where
139186 checkToolExists exe = do
140187 exists <- findExecutable exe
141188 case exists of
142189 Just _ -> pure ()
143- Nothing ->
144- die $ " Cradle requires " ++ exe ++ " but couldn't find it " ++ " \n "
145- ++ show cradle
190+ Nothing -> do
191+ logWith recorder $ LogGhcVersionToolNotFound exe
192+ exitFailure
146193
147- findProjectCradle :: Recorder LogMessage -> IO (Cradle Void )
194+ findProjectCradle :: Recorder Log -> IO (Cradle Void )
148195findProjectCradle recorder = do
149196 d <- getCurrentDirectory
150197
@@ -153,7 +200,7 @@ findProjectCradle recorder = do
153200
154201 -- Some log messages
155202 case hieYaml of
156- Just yaml -> hPutStrLn stderr $ " Found \" " ++ yaml ++ " \" for \" " ++ initialFp ++ " \" "
157- Nothing -> hPutStrLn stderr " No 'hie.yaml' found. Try to discover the project type! "
203+ Just yaml -> logWith recorder $ LogHieYamlFound initialFp yaml
204+ Nothing -> logWith recorder LogHieYamlNotFound
158205
159- Session. loadCradle def recorder hieYaml d
206+ Session. loadCradle def (cmap LogHieBios recorder) hieYaml d
0 commit comments