9
9
10
10
module Arguments
11
11
( Arguments (.. )
12
+ , LspArguments (.. )
13
+ , PrintVersion (.. )
12
14
, getArguments
13
15
, haskellLanguageServerVersion
16
+ , haskellLanguageServerNumericVersion
14
17
) where
15
18
16
19
import Data.Version
@@ -21,11 +24,15 @@ import System.Environment
21
24
22
25
-- ---------------------------------------------------------------------
23
26
24
- data Arguments = Arguments
27
+ data Arguments
28
+ = VersionMode PrintVersion
29
+ | LspMode LspArguments
30
+ deriving Show
31
+
32
+ data LspArguments = LspArguments
25
33
{ argLSP :: Bool
26
34
,argsCwd :: Maybe FilePath
27
35
,argFiles :: [FilePath ]
28
- ,argsVersion :: Bool
29
36
,argsShakeProfiling :: Maybe FilePath
30
37
,argsTesting :: Bool
31
38
,argsExamplePlugin :: Bool
@@ -37,22 +44,36 @@ data Arguments = Arguments
37
44
, argsProjectGhcVersion :: Bool
38
45
} deriving Show
39
46
47
+ data PrintVersion
48
+ = PrintVersion
49
+ | PrintNumericVersion
50
+ deriving (Show , Eq , Ord )
51
+
40
52
getArguments :: String -> IO Arguments
41
53
getArguments exeName = execParser opts
42
54
where
43
- opts = info (arguments exeName <**> helper)
55
+ opts = info ((
56
+ VersionMode <$> printVersionParser exeName
57
+ <|> LspMode <$> arguments)
58
+ <**> helper)
44
59
( fullDesc
45
60
<> progDesc " Used as a test bed to check your IDE Client will work"
46
61
<> header (exeName ++ " - GHC Haskell LSP server" ))
47
62
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
50
73
<$> switch (long " lsp" <> help " Start talking to an LSP server" )
51
74
<*> optional (strOption $ long " cwd" <> metavar " DIR"
52
75
<> help " Change to this directory" )
53
76
<*> many (argument str (metavar " FILES/DIRS..." ))
54
- <*> switch (long " version"
55
- <> help (" Show " ++ exeName ++ " and GHC versions" ))
56
77
<*> optional (strOption $ long " shake-profiling" <> metavar " DIR"
57
78
<> help " Dump profiling reports to this directory" )
58
79
<*> switch (long " test"
@@ -83,13 +104,16 @@ arguments exeName = Arguments
83
104
84
105
-- ---------------------------------------------------------------------
85
106
107
+ haskellLanguageServerNumericVersion :: String
108
+ haskellLanguageServerNumericVersion = showVersion version
109
+
86
110
haskellLanguageServerVersion :: IO String
87
111
haskellLanguageServerVersion = do
88
112
path <- getExecutablePath
89
113
let gitHashSection = case $ (gitHash) of
90
114
x | x == " UNKNOWN" -> " "
91
115
x -> " (GIT hash: " <> x <> " )"
92
- return $ " haskell-language-server version: " <> showVersion version
116
+ return $ " haskell-language-server version: " <> haskellLanguageServerNumericVersion
93
117
<> " (GHC: " <> VERSION_ghc
94
118
<> " ) (PATH: " <> path <> " )"
95
119
<> gitHashSection
0 commit comments