Skip to content

Commit f2384e1

Browse files
authored
Merge pull request #241 from fendor/numeric-version
Add numeric-version option for wrapper and server
2 parents 4e6082f + 5c10247 commit f2384e1

File tree

3 files changed

+61
-14
lines changed

3 files changed

+61
-14
lines changed

Diff for: exe/Arguments.hs

+32-8
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99

1010
module Arguments
1111
( Arguments(..)
12+
, LspArguments(..)
13+
, PrintVersion(..)
1214
, getArguments
1315
, haskellLanguageServerVersion
16+
, haskellLanguageServerNumericVersion
1417
) where
1518

1619
import Data.Version
@@ -21,11 +24,15 @@ import System.Environment
2124

2225
-- ---------------------------------------------------------------------
2326

24-
data Arguments = Arguments
27+
data Arguments
28+
= VersionMode PrintVersion
29+
| LspMode LspArguments
30+
deriving Show
31+
32+
data LspArguments = LspArguments
2533
{argLSP :: Bool
2634
,argsCwd :: Maybe FilePath
2735
,argFiles :: [FilePath]
28-
,argsVersion :: Bool
2936
,argsShakeProfiling :: Maybe FilePath
3037
,argsTesting :: Bool
3138
,argsExamplePlugin :: Bool
@@ -37,22 +44,36 @@ data Arguments = Arguments
3744
, argsProjectGhcVersion :: Bool
3845
} deriving Show
3946

47+
data PrintVersion
48+
= PrintVersion
49+
| PrintNumericVersion
50+
deriving (Show, Eq, Ord)
51+
4052
getArguments :: String -> IO Arguments
4153
getArguments exeName = execParser opts
4254
where
43-
opts = info (arguments exeName <**> helper)
55+
opts = info ((
56+
VersionMode <$> printVersionParser exeName
57+
<|> LspMode <$> arguments)
58+
<**> helper)
4459
( fullDesc
4560
<> progDesc "Used as a test bed to check your IDE Client will work"
4661
<> header (exeName ++ " - GHC Haskell LSP server"))
4762

48-
arguments :: String -> Parser Arguments
49-
arguments exeName = Arguments
63+
printVersionParser :: String -> Parser PrintVersion
64+
printVersionParser exeName =
65+
flag' PrintVersion
66+
(long "version" <> help ("Show " ++ exeName ++ " and GHC versions"))
67+
<|>
68+
flag' PrintNumericVersion
69+
(long "numeric-version" <> help ("Show numeric version of " ++ exeName))
70+
71+
arguments :: Parser LspArguments
72+
arguments = LspArguments
5073
<$> switch (long "lsp" <> help "Start talking to an LSP server")
5174
<*> optional (strOption $ long "cwd" <> metavar "DIR"
5275
<> help "Change to this directory")
5376
<*> many (argument str (metavar "FILES/DIRS..."))
54-
<*> switch (long "version"
55-
<> help ("Show " ++ exeName ++ " and GHC versions"))
5677
<*> optional (strOption $ long "shake-profiling" <> metavar "DIR"
5778
<> help "Dump profiling reports to this directory")
5879
<*> switch (long "test"
@@ -83,13 +104,16 @@ arguments exeName = Arguments
83104

84105
-- ---------------------------------------------------------------------
85106

107+
haskellLanguageServerNumericVersion :: String
108+
haskellLanguageServerNumericVersion = showVersion version
109+
86110
haskellLanguageServerVersion :: IO String
87111
haskellLanguageServerVersion = do
88112
path <- getExecutablePath
89113
let gitHashSection = case $(gitHash) of
90114
x | x == "UNKNOWN" -> ""
91115
x -> " (GIT hash: " <> x <> ")"
92-
return $ "haskell-language-server version: " <> showVersion version
116+
return $ "haskell-language-server version: " <> haskellLanguageServerNumericVersion
93117
<> " (GHC: " <> VERSION_ghc
94118
<> ") (PATH: " <> path <> ")"
95119
<> gitHashSection

Diff for: exe/Main.hs

+15-4
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,23 @@ main :: IO ()
125125
main = do
126126
-- WARNING: If you write to stdout before runLanguageServer
127127
-- then the language server will not work
128-
args@Arguments{..} <- getArguments "haskell-language-server"
128+
args <- getArguments "haskell-language-server"
129129

130130
hlsVer <- haskellLanguageServerVersion
131-
if argsVersion then putStrLn hlsVer
132-
else hPutStrLn stderr hlsVer {- see WARNING above -}
131+
case args of
132+
VersionMode PrintVersion ->
133+
putStrLn hlsVer
133134

135+
VersionMode PrintNumericVersion ->
136+
putStrLn haskellLanguageServerNumericVersion
137+
138+
LspMode lspArgs -> do
139+
{- see WARNING above -}
140+
hPutStrLn stderr hlsVer
141+
runLspMode lspArgs
142+
143+
runLspMode :: LspArguments -> IO ()
144+
runLspMode lspArgs@LspArguments {..} = do
134145
LSP.setupLogger argsLogFile ["hls", "hie-bios"]
135146
$ if argsDebugOn then L.DEBUG else L.INFO
136147

@@ -157,7 +168,7 @@ main = do
157168
if argLSP then do
158169
t <- offsetTime
159170
hPutStrLn stderr "Starting (haskell-language-server)LSP server..."
160-
hPutStrLn stderr $ " with arguments: " <> show args
171+
hPutStrLn stderr $ " with arguments: " <> show lspArgs
161172
hPutStrLn stderr $ " with plugins: " <> show (Map.keys $ ipMap idePlugins')
162173
hPutStrLn stderr $ " in directory: " <> dir
163174
hPutStrLn stderr "If you are seeing this in a terminal, you probably should have run ghcide WITHOUT the --lsp option!"

Diff for: exe/Wrapper.hs

+14-2
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,28 @@ main :: IO ()
2626
main = do
2727
-- WARNING: If you write to stdout before runLanguageServer
2828
-- then the language server will not work
29-
Arguments{..} <- getArguments "haskell-language-server-wrapper"
29+
args <- getArguments "haskell-language-server-wrapper"
3030

31+
hlsVer <- haskellLanguageServerVersion
32+
case args of
33+
VersionMode PrintVersion ->
34+
putStrLn hlsVer
35+
36+
VersionMode PrintNumericVersion ->
37+
putStrLn haskellLanguageServerNumericVersion
38+
39+
LspMode lspArgs ->
40+
launchHaskellLanguageServer lspArgs
41+
42+
launchHaskellLanguageServer :: LspArguments -> IO ()
43+
launchHaskellLanguageServer LspArguments{..} = do
3144
d <- getCurrentDirectory
3245

3346
-- Get the cabal directory from the cradle
3447
cradle <- findLocalCradle (d </> "a")
3548
setCurrentDirectory $ cradleRootDir cradle
3649

3750
when argsProjectGhcVersion $ getRuntimeGhcVersion' cradle >>= putStrLn >> exitSuccess
38-
when argsVersion $ haskellLanguageServerVersion >>= putStrLn >> exitSuccess
3951

4052
whenJust argsCwd setCurrentDirectory
4153

0 commit comments

Comments
 (0)