@@ -9,12 +9,12 @@ import Control.Exception (SomeException, catch, throwIO)
9
9
import Control.Monad.Extra
10
10
import Data.Default
11
11
import Data.Foldable
12
+ import Data.Text (Text )
12
13
import qualified Data.Text as Text
13
14
import Data.Void
14
15
import 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 )
18
18
import qualified HIE.Bios.Environment as HieBios
19
19
import HIE.Bios.Types
20
20
import Ide.Arguments
@@ -23,10 +23,56 @@ import System.Directory
23
23
import System.Environment
24
24
import System.Exit
25
25
import System.FilePath
26
- import System.IO
27
26
import System.Info
28
27
import System.Process
29
28
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
30
76
-- ---------------------------------------------------------------------
31
77
32
78
main :: IO ()
@@ -39,7 +85,8 @@ main = do
39
85
Ghcide GhcideArguments { argsLogFile } -> argsLogFile
40
86
_ -> Nothing
41
87
42
- withLogMessageRecorder logFilePath $ \ recorder ->
88
+ withDefaultTextRecorder logFilePath $ \ textRecorder -> do
89
+ let logRecorder = cmap logToText textRecorder
43
90
catch
44
91
(do
45
92
hlsVer <- haskellLanguageServerVersion
@@ -57,69 +104,64 @@ main = do
57
104
putStrLn haskellLanguageServerNumericVersion
58
105
59
106
BiosMode PrintCradleType ->
60
- print =<< findProjectCradle recorder
107
+ print =<< findProjectCradle mempty
61
108
62
- _ -> launchHaskellLanguageServer recorder args
109
+ _ -> launchHaskellLanguageServer logRecorder args
63
110
)
64
- (\ e -> logException recorder (e :: SomeException ) *> throwIO e)
111
+ (\ e -> logWith logRecorder ( LogException e ) *> throwIO e)
65
112
66
- launchHaskellLanguageServer :: Recorder LogMessage -> Arguments -> IO ()
113
+ launchHaskellLanguageServer :: Recorder Log -> Arguments -> IO ()
67
114
launchHaskellLanguageServer recorder parsedArgs = do
115
+ let ghcVersionRecorder = cmap LogGhcVersion recorder
116
+
68
117
case parsedArgs of
69
118
Ghcide GhcideArguments {.. } -> whenJust argsCwd setCurrentDirectory
70
119
_ -> pure ()
71
120
72
121
d <- getCurrentDirectory
122
+ logWith recorder $ LogCurrentDirectory d
73
123
74
124
-- search for the project cradle type
75
125
cradle <- findProjectCradle recorder
126
+ logWith recorder $ LogCradle cradle
76
127
77
128
-- Get the root directory from the cradle
78
129
setCurrentDirectory $ cradleRootDir cradle
79
130
80
131
case parsedArgs of
81
132
Ghcide GhcideArguments {.. } ->
82
- when argsProjectGhcVersion $ getRuntimeGhcVersion' cradle >>= putStrLn >> exitSuccess
133
+ when argsProjectGhcVersion $ getRuntimeGhcVersion' ghcVersionRecorder cradle >>= putStrLn >> exitSuccess
83
134
_ -> pure ()
84
135
85
136
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
90
137
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
94
140
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
99
142
-- 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
103
144
104
145
let
105
146
hlsBin = " haskell-language-server-" <> Text. pack ghcVersion
106
147
candidates' = [hlsBin, " haskell-language-server" ]
107
148
candidates = map (<> Text. pack exeExtension) candidates'
108
149
109
- logInfo recorder $ " haskell-language-server exe candidates: " <> ( Text. pack . show ) candidates
150
+ logWith recorder $ LogExeCandidates candidates
110
151
111
152
mexes <- traverse (findExecutable . Text. unpack) candidates
112
153
113
154
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
115
157
Just e -> do
116
- logInfo recorder $ " Launching haskell-language-server exe at: " <> Text. pack e
158
+ logWith recorder $ LogExeFound e
117
159
callProcess e args
118
160
119
161
-- | Version of 'getRuntimeGhcVersion' that dies if we can't get it, and also
120
162
-- 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
123
165
124
166
-- See if the tool is installed
125
167
case actionName (cradleOptsProg cradle) of
@@ -132,19 +174,24 @@ getRuntimeGhcVersion' cradle = do
132
174
ghcVersionRes <- HieBios. getRuntimeGhcVersion cradle
133
175
case ghcVersionRes of
134
176
CradleSuccess ver -> do
177
+ logWith recorder $ LogGhcVersionCradleSuccess ver
135
178
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
138
185
where
139
186
checkToolExists exe = do
140
187
exists <- findExecutable exe
141
188
case exists of
142
189
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
146
193
147
- findProjectCradle :: Recorder LogMessage -> IO (Cradle Void )
194
+ findProjectCradle :: Recorder Log -> IO (Cradle Void )
148
195
findProjectCradle recorder = do
149
196
d <- getCurrentDirectory
150
197
@@ -153,7 +200,7 @@ findProjectCradle recorder = do
153
200
154
201
-- Some log messages
155
202
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
158
205
159
- Session. loadCradle def recorder hieYaml d
206
+ Session. loadCradle def (cmap LogHieBios recorder) hieYaml d
0 commit comments