Skip to content

Commit 2106146

Browse files
committed
Add "Diagnose" argument
1 parent fe25a73 commit 2106146

File tree

1 file changed

+47
-40
lines changed

1 file changed

+47
-40
lines changed

src/CSharpLanguageServer/Program.fs

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,62 +11,69 @@ open Serilog.Events
1111
open CSharpLanguageServer.Types
1212
open CSharpLanguageServer.Lsp
1313

14+
1415
type CLIArguments =
1516
| [<AltCommandLine("-v")>] Version
1617
| [<AltCommandLine("-l")>] LogLevel of level:string
1718
| [<AltCommandLine("-s")>] Solution of solution:string
19+
| Diagnose
1820
with
1921
interface IArgParserTemplate with
2022
member s.Usage =
2123
match s with
22-
| Version -> "display versioning information"
23-
| Solution _ -> ".sln file to load (relative to CWD)"
24-
| LogLevel _ -> "log level, <log|info|warning|error>; default is `log`"
24+
| Version -> "Display versioning information"
25+
| Solution _ -> "Specify .sln file to load (relative to CWD)"
26+
| LogLevel _ -> "Set log level, <log|info|warning|error>; default is `log`"
27+
| Diagnose -> "Run diagnostics"
28+
2529

2630
[<EntryPoint>]
2731
let entry args =
28-
try
29-
let argParser = ArgumentParser.Create<CLIArguments>(programName = "csharp-ls")
30-
let serverArgs = argParser.Parse args
32+
let argParser = ArgumentParser.Create<CLIArguments>(programName = "csharp-ls")
33+
let serverArgs = argParser.Parse args
34+
35+
let logLevelArg =
36+
serverArgs.TryGetResult(<@ LogLevel @>)
37+
|> Option.defaultValue "log"
38+
39+
let logLevel =
40+
match logLevelArg with
41+
| "error" -> LogEventLevel.Error
42+
| "warning" -> LogEventLevel.Warning
43+
| "info" -> LogEventLevel.Information
44+
| "log" -> LogEventLevel.Verbose
45+
| _ -> LogEventLevel.Information
3146

32-
serverArgs.TryGetResult(<@ CLIArguments.Version @>)
47+
let logConfig =
48+
LoggerConfiguration()
49+
.MinimumLevel.ControlledBy(LoggingLevelSwitch(logLevel))
50+
.Enrich.FromLogContext()
51+
.WriteTo.Async(fun conf ->
52+
conf.Console(
53+
outputTemplate =
54+
"[{Timestamp:HH:mm:ss.fff} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}",
55+
// Redirect all logs to stderr since stdout is used to communicate with client.
56+
standardErrorFromLevel = Nullable<_>(LogEventLevel.Verbose),
57+
theme = Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme.Code
58+
)
59+
|> ignore)
60+
61+
Log.Logger <- logConfig.CreateLogger()
62+
63+
let settings = {
64+
ServerSettings.Default with
65+
SolutionPath = serverArgs.TryGetResult(<@ Solution @>)
66+
LogLevel = logLevelArg
67+
}
68+
69+
try
70+
serverArgs.TryGetResult(<@ Version @>)
3371
|> Option.iter (fun _ -> printfn "csharp-ls, %s"
3472
(Assembly.GetExecutingAssembly().GetName().Version |> string)
3573
exit 0)
3674

37-
let logLevelArg =
38-
serverArgs.TryGetResult(<@ CLIArguments.LogLevel @>)
39-
|> Option.defaultValue "log"
40-
41-
let logLevel =
42-
match logLevelArg with
43-
| "error" -> LogEventLevel.Error
44-
| "warning" -> LogEventLevel.Warning
45-
| "info" -> LogEventLevel.Information
46-
| "log" -> LogEventLevel.Verbose
47-
| _ -> LogEventLevel.Information
48-
49-
let logConfig =
50-
LoggerConfiguration()
51-
.MinimumLevel.ControlledBy(LoggingLevelSwitch(logLevel))
52-
.Enrich.FromLogContext()
53-
.WriteTo.Async(fun conf ->
54-
conf.Console(
55-
outputTemplate =
56-
"[{Timestamp:HH:mm:ss.fff} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}",
57-
// Redirect all logs to stderr since stdout is used to communicate with client.
58-
standardErrorFromLevel = Nullable<_>(LogEventLevel.Verbose),
59-
theme = Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme.Code
60-
)
61-
|> ignore)
62-
63-
Log.Logger <- logConfig.CreateLogger()
64-
65-
let settings = {
66-
ServerSettings.Default with
67-
SolutionPath = serverArgs.TryGetResult(<@ CLIArguments.Solution @>)
68-
LogLevel = logLevelArg
69-
}
75+
serverArgs.TryGetResult(<@ Diagnose @>)
76+
|> Option.iter (fun _ -> failwith "not implemented")
7077

7178
Server.start settings
7279
with

0 commit comments

Comments
 (0)