@@ -11,62 +11,69 @@ open Serilog.Events
11
11
open CSharpLanguageServer.Types
12
12
open CSharpLanguageServer.Lsp
13
13
14
+
14
15
type CLIArguments =
15
16
| [<AltCommandLine( " -v" ) >] Version
16
17
| [<AltCommandLine( " -l" ) >] LogLevel of level : string
17
18
| [<AltCommandLine( " -s" ) >] Solution of solution : string
19
+ | Diagnose
18
20
with
19
21
interface IArgParserTemplate with
20
22
member s.Usage =
21
23
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
+
25
29
26
30
[<EntryPoint>]
27
31
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
31
46
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 @>)
33
71
|> Option.iter ( fun _ -> printfn " csharp-ls, %s "
34
72
( Assembly.GetExecutingAssembly() .GetName() .Version |> string)
35
73
exit 0 )
36
74
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" )
70
77
71
78
Server.start settings
72
79
with
0 commit comments