@@ -8,53 +8,81 @@ open Microsoft.Extensions.Logging
8
8
9
9
open CSharpLanguageServer.Types
10
10
open CSharpLanguageServer.Lsp
11
+ <<<<<<< HEAD
11
12
open CSharpLanguageServer.Logging
13
+ =======
14
+ open CSharpLanguageServer.Diagnostics
15
+
16
+ >>>>>>> 756634 c ( Add " Diagnose" argument)
12
17
13
18
type CLIArguments =
14
19
| [<AltCommandLine( " -v" ) >] Version
15
20
| [<AltCommandLine( " -l" ) >] LogLevel of level : string
16
21
| [<AltCommandLine( " -s" ) >] Solution of solution : string
22
+ | Diagnose
17
23
with
18
24
interface IArgParserTemplate with
19
25
member s.Usage =
20
26
match s with
21
- | Version -> " display versioning information"
22
- | Solution _ -> " .sln file to load (relative to CWD)"
23
- | LogLevel _ -> " log level, <log|info|warning|error>; default is `log`"
27
+ | Version -> " Display versioning information"
28
+ | Solution _ -> " Specify .sln file to load (relative to CWD)"
29
+ | LogLevel _ -> " Set log level, <log|info|warning|error>; default is `log`"
30
+ | Diagnose -> " Run diagnostics"
31
+
32
+
33
+ let configureLogger ( logLevelArg : string ): unit =
34
+ System.Console.Error.WriteLine( " configureLogger; logLevelArg={0}" , logLevelArg)
35
+ let logLevel =
36
+ match logLevelArg with
37
+ | " error" -> LogEventLevel.Error
38
+ | " warning" -> LogEventLevel.Warning
39
+ | " info" -> LogEventLevel.Information
40
+ | " log" -> LogEventLevel.Verbose
41
+ | _ -> LogEventLevel.Information
42
+
43
+ let logConfig =
44
+ LoggerConfiguration()
45
+ .MinimumLevel.ControlledBy( LoggingLevelSwitch( logLevel))
46
+ .Enrich.FromLogContext()
47
+ .WriteTo.Async( fun conf ->
48
+ conf.Console(
49
+ outputTemplate =
50
+ " [{Timestamp:HH:mm:ss.fff} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}" ,
51
+ // Redirect all logs to stderr since stdout is used to communicate with client.
52
+ standardErrorFromLevel = Nullable<_>( LogEventLevel.Verbose),
53
+ theme = Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme.Code
54
+ )
55
+ |> ignore)
56
+
57
+ Log.Logger <- logConfig.CreateLogger()
58
+
24
59
25
60
[<EntryPoint>]
26
61
let entry args =
27
- try
28
- let argParser = ArgumentParser.Create< CLIArguments>( programName = " csharp-ls" )
29
- let serverArgs = argParser.Parse args
62
+ let argParser = ArgumentParser.Create< CLIArguments>( programName = " csharp-ls" )
63
+ let serverArgs = argParser.Parse args
64
+
65
+ let settings = {
66
+ ServerSettings.Default with
67
+ SolutionPath = serverArgs.TryGetResult <@ Solution @>
68
+ LogLevel = serverArgs.TryGetResult(<@ LogLevel @>) |> Option.defaultValue " log"
69
+ }
30
70
31
- serverArgs.TryGetResult(<@ CLIArguments.Version @>)
71
+ try
72
+ serverArgs.TryGetResult <@ Version @>
32
73
|> Option.iter ( fun _ -> printfn " csharp-ls, %s "
33
74
( Assembly.GetExecutingAssembly() .GetName() .Version |> string)
34
75
exit 0 )
35
76
36
- let logLevelArg =
37
- serverArgs.TryGetResult(<@ CLIArguments.LogLevel @>)
38
- |> Option.defaultValue " log"
39
-
40
- let logLevel =
41
- match logLevelArg with
42
- | " error" -> LogLevel.Error
43
- | " warning" -> LogLevel.Warning
44
- | " info" -> LogLevel.Information
45
- | " debug" -> LogLevel.Debug
46
- | " trace" -> LogLevel.Trace
47
- | _ -> LogLevel.Information
48
-
49
- Logging.setupLogging logLevel
77
+ match serverArgs.TryGetResult <@ Diagnose @> with
78
+ | Some _ ->
79
+ configureLogger " log"
80
+ diagnoseSolution settings
50
81
51
- let settings = {
52
- ServerSettings.Default with
53
- SolutionPath = serverArgs.TryGetResult(<@ CLIArguments.Solution @>)
54
- LogLevel = logLevelArg
55
- }
82
+ | _ ->
83
+ configureLogger settings.LogLevel
84
+ Server.start settings
56
85
57
- Server.start settings
58
86
with
59
87
| :? ArguParseException as ex ->
60
88
eprintfn " %s " ex.Message
0 commit comments