Skip to content

Commit 4788343

Browse files
committed
more
more Integrate CSharpLanguageServer.Options into .Program Add "Diagnose" argument more initial code
1 parent afefba4 commit 4788343

File tree

6 files changed

+108
-35
lines changed

6 files changed

+108
-35
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<MSBuildLocatorPackageVersion>1.9.1</MSBuildLocatorPackageVersion>
1111
</PropertyGroup>
1212
<ItemGroup>
13-
<PackageVersion Include="Argu" Version="6.2.3" />
13+
<PackageVersion Include="Argu" Version="6.2.5" />
1414
<PackageVersion Include="Castle.Core" Version="5.1.1" />
1515
<PackageVersion Include="coverlet.collector" Version="3.0.3" />
1616
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.25" />

src/CSharpLanguageServer/CSharpLanguageServer.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<Compile Include="ProgressReporter.fs" />
3030
<Compile Include="RoslynHelpers.fs" />
3131
<Compile Include="DocumentationUtil.fs" />
32+
<Compile Include="Diagnostics.fs" />
3233
<Compile Include="Lsp/Client.fs" />
3334
<Compile Include="State/ServerState.fs" />
3435
<Compile Include="State/ServerRequestContext.fs" />
@@ -67,7 +68,6 @@
6768
<Compile Include="Handlers/Workspace.fs" />
6869
<Compile Include="Handlers/WorkspaceSymbol.fs" />
6970
<Compile Include="Lsp/Server.fs" />
70-
<Compile Include="Options.fs" />
7171
<Compile Include="Program.fs" />
7272
</ItemGroup>
7373

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
namespace CSharpLanguageServer
2+
3+
open System.IO
4+
open Microsoft.Extensions.Logging
5+
open Ionide.LanguageServerProtocol
6+
open Ionide.LanguageServerProtocol.Server
7+
open Ionide.LanguageServerProtocol.Types
8+
open Ionide.LanguageServerProtocol.JsonRpc
9+
10+
open CSharpLanguageServer.Types
11+
open CSharpLanguageServer.Logging
12+
open CSharpLanguageServer.RoslynHelpers
13+
14+
module Diagnostics =
15+
let private logger = Logging.getLoggerByName "Diagnostics"
16+
17+
type LspClientStub() =
18+
interface System.IDisposable with
19+
member _.Dispose() = ()
20+
21+
interface ILspClient with
22+
member _.WindowShowMessage(p: ShowMessageParams) = async { logger.LogDebug("WindowShowMessage: {message}", p.Message); return () }
23+
member _.WindowLogMessage(p: LogMessageParams) = async { logger.LogDebug("WindowLogMessage: {message}", p.Message); return () }
24+
member _.TelemetryEvent(_: LSPAny) = async { return () }
25+
member _.TextDocumentPublishDiagnostics(_: PublishDiagnosticsParams) = async { return () }
26+
member _.LogTrace(_: LogTraceParams) = async { return () }
27+
member _.CancelRequest(_: CancelParams) = async { return () }
28+
member _.Progress(_: ProgressParams) = async { return () }
29+
member _.WorkspaceWorkspaceFolders() = async { return LspResult.Ok None }
30+
member _.WorkspaceConfiguration(_: ConfigurationParams) = async { return LspResult.Ok [||] }
31+
member _.WindowWorkDoneProgressCreate(_: WorkDoneProgressCreateParams) = async { return LspResult.Ok () }
32+
member _.WorkspaceSemanticTokensRefresh() = async { return LspResult.Ok () }
33+
member _.WindowShowDocument(_: ShowDocumentParams) = async { return LspResult.Ok { Success = false } }
34+
member _.WorkspaceInlineValueRefresh() = async { return LspResult.Ok () }
35+
member _.WorkspaceInlayHintRefresh() = async { return LspResult.Ok () }
36+
member _.WorkspaceDiagnosticRefresh() = async { return LspResult.Ok () }
37+
member _.ClientRegisterCapability(_: RegistrationParams) = async { return LspResult.Ok () }
38+
member _.ClientUnregisterCapability(_: UnregistrationParams) = async { return LspResult.Ok () }
39+
member _.WindowShowMessageRequest(_: ShowMessageRequestParams) = async { return LspResult.Ok None }
40+
member _.WorkspaceCodeLensRefresh() = async { return LspResult.Ok () }
41+
member _.WorkspaceApplyEdit(_: ApplyWorkspaceEditParams) = async { return LspResult.Ok { Applied = false; FailureReason = None; FailedChange = None } }
42+
43+
let diagnoseSolution (settings: ServerSettings): Async<int> = async {
44+
logger.LogDebug("diagnoseSolution: settings={settings}", settings)
45+
46+
logger.LogDebug("diagnoseSolution: loading solution..")
47+
48+
let lspClient = new LspClientStub()
49+
//let cwd = (string (Directory.GetCurrentDirectory())
50+
let cwd = "/Users/bob/src/test-csharp-net8"
51+
let! sln = loadSolutionOnSolutionPathOrDir lspClient logger None cwd
52+
53+
let exitCode = 0
54+
55+
return exitCode
56+
}

src/CSharpLanguageServer/Options.fs

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/CSharpLanguageServer/Program.fs

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,54 @@ open Microsoft.Extensions.Logging
99
open CSharpLanguageServer.Types
1010
open CSharpLanguageServer.Lsp
1111
open CSharpLanguageServer.Logging
12+
open CSharpLanguageServer.Diagnostics
13+
14+
15+
type CLIArguments =
16+
| [<AltCommandLine("-v")>] Version
17+
| [<AltCommandLine("-l")>] LogLevel of level:string
18+
| [<AltCommandLine("-s")>] Solution of solution:string
19+
| Diagnose
20+
with
21+
interface IArgParserTemplate with
22+
member s.Usage =
23+
match s with
24+
| Version -> "Display versioning information"
25+
| Solution _ -> "Specify .sln file to load (relative to CWD)"
26+
| LogLevel _ -> "Set log level, <trace|debug|info|warning|error>; default is `info`"
27+
| Diagnose -> "Run diagnostics"
1228

1329
[<EntryPoint>]
1430
let entry args =
15-
try
16-
let argParser = ArgumentParser.Create<Options.CLIArguments>(programName = "csharp-ls")
17-
let serverArgs = argParser.Parse args
31+
let argParser = ArgumentParser.Create<CLIArguments>(programName = "csharp-ls")
32+
let serverArgs = argParser.Parse args
33+
34+
let parseLogLevel logLevelArg =
35+
match logLevelArg with
36+
| "error" -> LogLevel.Error
37+
| "warning" -> LogLevel.Warning
38+
| "info" -> LogLevel.Information
39+
| "debug" -> LogLevel.Debug
40+
| "trace" -> LogLevel.Trace
41+
| _ -> LogLevel.Information
1842

19-
serverArgs.TryGetResult(<@ Options.CLIArguments.Version @>)
43+
let settings = {
44+
ServerSettings.Default with
45+
SolutionPath = serverArgs.TryGetResult <@ Solution @>
46+
LogLevel =
47+
serverArgs.TryGetResult(<@ LogLevel @>)
48+
|> Option.map parseLogLevel
49+
|> Option.defaultValue LogLevel.Information
50+
}
51+
52+
try
53+
serverArgs.TryGetResult <@ Version @>
2054
|> Option.iter (fun _ -> printfn "csharp-ls, %s"
2155
(Assembly.GetExecutingAssembly().GetName().Version |> string)
2256
exit 0)
2357

2458
let logLevelArg =
25-
serverArgs.TryGetResult(<@ Options.CLIArguments.LogLevel @>)
59+
serverArgs.TryGetResult(<@ CLIArguments.LogLevel @>)
2660

2761
let logLevel =
2862
match logLevelArg with
@@ -37,11 +71,20 @@ let entry args =
3771

3872
let settings = {
3973
ServerSettings.Default with
40-
SolutionPath = serverArgs.TryGetResult(<@ Options.CLIArguments.Solution @>)
74+
SolutionPath = serverArgs.TryGetResult(<@ CLIArguments.Solution @>)
4175
LogLevel = logLevel
4276
}
4377

44-
Server.start settings
78+
match serverArgs.TryGetResult <@ Diagnose @> with
79+
| Some _ ->
80+
Logging.setupLogging LogLevel.Trace
81+
let exitCode = diagnoseSolution settings |> Async.RunSynchronously
82+
exitCode
83+
84+
| _ ->
85+
Logging.setupLogging settings.LogLevel
86+
Server.start settings
87+
4588
with
4689
| :? ArguParseException as ex ->
4790
eprintfn "%s" ex.Message

tests/CSharpLanguageServer.Tests/CSharpLanguageServer.Tests.fsproj

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@
99

1010
<ItemGroup>
1111
<Compile Include="Tooling.fs" />
12-
<Compile Include="CodeActionTests.fs" />
13-
<Compile Include="DiagnosticTests.fs" />
14-
<Compile Include="DocumentationTests.fs" />
15-
<Compile Include="HoverTests.fs" />
16-
<Compile Include="InitializationTests.fs" />
17-
<Compile Include="ReferenceTests.fs" />
18-
<Compile Include="DefinitionTests.fs" />
19-
<Compile Include="DocumentFormattingTests.fs" />
20-
<Compile Include="InternalTests.fs" />
2112
<Compile Include="CompletionTests.fs" />
22-
<Compile Include="WorkspaceSymbolTests.fs" />
2313
</ItemGroup>
2414

2515
<ItemGroup>

0 commit comments

Comments
 (0)