forked from razzmatazz/csharp-language-server
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProgram.fs
More file actions
72 lines (57 loc) · 2.26 KB
/
Program.fs
File metadata and controls
72 lines (57 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
module VisualBasicLanguageServer.Program
open System
open System.Reflection
open Argu
open Microsoft.Extensions.Logging
open VisualBasicLanguageServer.Types
open VisualBasicLanguageServer.Lsp
open VisualBasicLanguageServer.Logging
type CLIArguments =
| [<AltCommandLine("-v")>] Version
| [<AltCommandLine("-l")>] LogLevel of level:string
| [<AltCommandLine("-s")>] Solution of solution:string
| Debug
with
interface IArgParserTemplate with
member s.Usage =
match s with
| Version -> "display versioning information"
| Solution _ -> ".sln file to load (relative to CWD)"
| LogLevel _ -> "log level, <trace|debug|info|warning|error>; default is `info`"
| Debug -> "enable debug mode"
[<EntryPoint>]
let entry args =
try
let argParser = ArgumentParser.Create<CLIArguments>(programName = "vb-ls")
let serverArgs = argParser.Parse args
let printVersion () =
printfn "vb-ls, %s"
(Assembly.GetExecutingAssembly().GetName().Version |> string)
serverArgs.TryGetResult(<@ CLIArguments.Version @>)
|> Option.iter (fun _ -> printVersion (); exit 0)
let debugMode: bool = serverArgs.Contains Debug
let logLevelArg = serverArgs.TryGetResult(<@ CLIArguments.LogLevel @>)
let logLevel =
match logLevelArg with
| Some "error" -> LogLevel.Error
| Some "warning" -> LogLevel.Warning
| Some "info" -> LogLevel.Information
| Some "debug" -> LogLevel.Debug
| Some "trace" -> LogLevel.Trace
| _ -> if debugMode then LogLevel.Debug else LogLevel.Information
let settings = {
ServerSettings.Default with
SolutionPath = serverArgs.TryGetResult(<@ CLIArguments.Solution @>)
LogLevel = logLevel
}
Logging.setupLogging settings.LogLevel
Server.start settings
with
| :? ArguParseException as ex ->
eprintfn "%s" ex.Message
match ex.ErrorCode with
| ErrorCode.HelpText -> 0
| _ -> 1 // Unrecognised arguments
| e ->
eprintfn "Server crashing error - %s \n %s" e.Message e.StackTrace
3