11module CSharpLanguageServer.Program
22
3+ open System
34open System.Reflection
45
56open Argu
@@ -8,20 +9,34 @@ open Microsoft.Extensions.Logging
89open CSharpLanguageServer.Types
910open CSharpLanguageServer.Lsp
1011open CSharpLanguageServer.Logging
12+ open CSharpLanguageServer.Diagnostics
13+
1114
1215type CLIArguments =
1316 | [<AltCommandLine( " -v" ) >] Version
1417 | [<AltCommandLine( " -l" ) >] LogLevel of level : string
1518 | [<AltCommandLine( " -s" ) >] Solution of solution : string
1619 | Debug
20+ | Diagnose
1721
1822 interface IArgParserTemplate with
1923 member s.Usage =
2024 match s with
21- | Version -> " display versioning information"
22- | Solution _ -> " .sln file to load (relative to CWD)"
23- | LogLevel _ -> " log level, <trace|debug|info|warning|error>; default is `info`"
24- | Debug -> " enable debug mode"
25+ | Version -> " Display versioning information"
26+ | Solution _ -> " Specify .sln file to load (relative to CWD)"
27+ | LogLevel _ -> " Set log level, <trace|debug|info|warning|error>; default is `info`"
28+ | Debug -> " Enable debug mode"
29+ | Diagnose -> " Run diagnostics"
30+
31+
32+ let parseLogLevel ( debugMode : bool ) ( logLevelArg : string option ) =
33+ match logLevelArg with
34+ | Some " error" -> LogLevel.Error
35+ | Some " warning" -> LogLevel.Warning
36+ | Some " info" -> LogLevel.Information
37+ | Some " debug" -> LogLevel.Debug
38+ | Some " trace" -> LogLevel.Trace
39+ | _ -> if debugMode then LogLevel.Debug else LogLevel.Information
2540
2641
2742[<EntryPoint>]
@@ -39,27 +54,24 @@ let entry args =
3954 exit 0 )
4055
4156 let debugMode : bool = serverArgs.Contains Debug
42-
43- let logLevelArg = serverArgs.TryGetResult <@ LogLevel @>
44-
45- let logLevel =
46- match logLevelArg with
47- | Some " error" -> LogLevel.Error
48- | Some " warning" -> LogLevel.Warning
49- | Some " info" -> LogLevel.Information
50- | Some " debug" -> LogLevel.Debug
51- | Some " trace" -> LogLevel.Trace
52- | _ -> if debugMode then LogLevel.Debug else LogLevel.Information
57+ let logLevel = serverArgs.TryGetResult(<@ LogLevel @>) |> parseLogLevel debugMode
5358
5459 let settings =
5560 { ServerSettings.Default with
61+ DebugMode = debugMode
5662 SolutionPath = serverArgs.TryGetResult <@ Solution @>
57- LogLevel = logLevel
58- DebugMode = debugMode }
59-
60- Logging.setupLogging settings.LogLevel
61-
62- Server.start settings
63+ LogLevel = logLevel }
64+
65+ let exitCode =
66+ match serverArgs.TryGetResult <@ Diagnose @> with
67+ | Some _ ->
68+ Logging.setupLogging LogLevel.Trace
69+ diagnose settings |> Async.RunSynchronously
70+ | _ ->
71+ Logging.setupLogging settings.LogLevel
72+ Server.start settings
73+
74+ exitCode
6375 with
6476 | :? ArguParseException as ex ->
6577 eprintfn " %s " ex.Message
0 commit comments