Skip to content

Commit 7e0f30f

Browse files
committed
Update to Ionide.LanguageServerProtocol 0.7.0
1 parent 432ddb3 commit 7e0f30f

39 files changed

+239
-327
lines changed

Directory.Packages.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.4" />
1919
<PackageVersion Include="ICSharpCode.Decompiler" Version="8.2.0.7535" />
2020
<PackageVersion Include="Ionide.KeepAChangelog.Tasks" Version="0.1.8" />
21-
<PackageVersion Include="Ionide.LanguageServerProtocol" Version="0.6.0" />
21+
<PackageVersion Include="Ionide.LanguageServerProtocol" Version="0.7.0" />
2222
<PackageVersion Include="Microsoft.Build" Version="$(MSBuildPackageVersion)" />
2323
<PackageVersion Include="Microsoft.Build.Framework" Version="$(MSBuildPackageVersion)" />
2424
<PackageVersion Include="Microsoft.Build.Locator" Version="$(MSBuildLocatorPackageVersion)" />

src/CSharpLanguageServer/Handlers/CSharpMetadata.fs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace CSharpLanguageServer.Handlers
22

33
open Ionide.LanguageServerProtocol.Types
4+
open Ionide.LanguageServerProtocol.JsonRpc
45

56
open CSharpLanguageServer.Types
67
open CSharpLanguageServer.State

src/CSharpLanguageServer/Handlers/CallHierarchy.fs

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ open Microsoft.CodeAnalysis
66
open Microsoft.CodeAnalysis.FindSymbols
77
open Ionide.LanguageServerProtocol.Server
88
open Ionide.LanguageServerProtocol.Types
9-
open Ionide.LanguageServerProtocol.Types.LspResult
9+
open Ionide.LanguageServerProtocol.JsonRpc
1010

1111
open CSharpLanguageServer.Types
1212
open CSharpLanguageServer.State
@@ -58,8 +58,8 @@ module CallHierarchy =
5858
itemList
5959
|> List.toArray
6060
|> Some
61-
|> success
62-
| _ -> return None |> success
61+
|> LspResult.success
62+
| _ -> return None |> LspResult.success
6363
}
6464

6565
let incomingCalls
@@ -81,7 +81,7 @@ module CallHierarchy =
8181
FromRanges = fromRanges })
8282

8383
match! context.FindSymbol p.Item.Uri p.Item.Range.Start with
84-
| None -> return None |> success
84+
| None -> return None |> LspResult.success
8585
| Some symbol ->
8686
let! callers = context.FindCallers symbol
8787
// TODO: If we remove info.IsDirect, then we will get lots of false positive. But if we keep it,
@@ -93,7 +93,7 @@ module CallHierarchy =
9393
|> Seq.distinct
9494
|> Seq.toArray
9595
|> Some
96-
|> success
96+
|> LspResult.success
9797
}
9898

9999
let outgoingCalls
@@ -102,5 +102,5 @@ module CallHierarchy =
102102
: AsyncLspResult<CallHierarchyOutgoingCall[] option> = async {
103103
// TODO: There is no memthod of SymbolFinder which can find all outgoing calls of a specific symbol.
104104
// Then how can we implement it? Parsing AST manually?
105-
return None |> success
105+
return None |> LspResult.success
106106
}

src/CSharpLanguageServer/Handlers/CodeAction.fs

+11-9
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ open Microsoft.CodeAnalysis.CodeFixes
1414
open Microsoft.CodeAnalysis.Text
1515
open Ionide.LanguageServerProtocol.Server
1616
open Ionide.LanguageServerProtocol.Types
17-
open Ionide.LanguageServerProtocol.Types.LspResult
17+
open Ionide.LanguageServerProtocol.JsonRpc
1818

1919
open CSharpLanguageServer.Logging
2020
open CSharpLanguageServer.Conversions
@@ -324,7 +324,7 @@ module CodeAction =
324324
(p: CodeActionParams)
325325
: AsyncLspResult<TextDocumentCodeActionResult option> = async {
326326
match context.GetDocument p.TextDocument.Uri with
327-
| None -> return None |> success
327+
| None -> return None |> LspResult.success
328328
| Some doc ->
329329
let! ct = Async.CancellationToken
330330
let! docText = doc.GetTextAsync(ct) |> Async.AwaitTask
@@ -384,16 +384,17 @@ module CodeAction =
384384
|> Seq.map U2<Command, CodeAction>.C2
385385
|> Array.ofSeq
386386
|> Some
387-
|> success
387+
|> LspResult.success
388388
}
389389

390-
let resolve (context: ServerRequestContext) (p: CodeAction) : AsyncLspResult<CodeAction option> = async {
390+
let resolve (context: ServerRequestContext) (p: CodeAction) : AsyncLspResult<CodeAction> = async {
391391
let resolutionData =
392392
p.Data
393393
|> Option.map deserialize<CSharpCodeActionResolutionData>
394394

395395
match context.GetDocument resolutionData.Value.TextDocumentUri with
396-
| None -> return None |> success
396+
| None ->
397+
return raise (Exception(sprintf "no document for uri %s" resolutionData.Value.TextDocumentUri))
397398
| Some doc ->
398399
let! ct = Async.CancellationToken
399400
let! docText = doc.GetTextAsync(ct) |> Async.AwaitTask
@@ -412,7 +413,7 @@ module CodeAction =
412413
doc
413414
ct
414415

415-
let! maybeLspCodeAction =
416+
let! lspCodeAction =
416417
match selectedCodeAction with
417418
| Some ca -> async {
418419
let! resolvedCA = toResolvedLspCodeAction ca
@@ -423,9 +424,10 @@ module CodeAction =
423424
>> Log.addContext "action" (string ca)
424425
)
425426

426-
return resolvedCA
427+
return resolvedCA.Value
427428
}
428-
| None -> async { return None }
429+
| None ->
430+
raise (Exception("no CodeAction resolved"))
429431

430-
return maybeLspCodeAction |> success
432+
return lspCodeAction |> LspResult.success
431433
}

src/CSharpLanguageServer/Handlers/CodeLens.fs

+8-7
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ open Microsoft.CodeAnalysis.CSharp.Syntax
88
open Microsoft.CodeAnalysis.Text
99
open Ionide.LanguageServerProtocol.Server
1010
open Ionide.LanguageServerProtocol.Types
11-
open Ionide.LanguageServerProtocol.Types.LspResult
12-
open Newtonsoft.Json.Linq
11+
open Ionide.LanguageServerProtocol.JsonRpc
1312

1413
open CSharpLanguageServer.State
1514
open CSharpLanguageServer.Conversions
@@ -124,7 +123,8 @@ module CodeLens =
124123
let handle (context: ServerRequestContext) (p: CodeLensParams): AsyncLspResult<CodeLens[] option> = async {
125124
let docMaybe = context.GetDocument p.TextDocument.Uri
126125
match docMaybe with
127-
| None -> return None |> success
126+
| None ->
127+
return None |> LspResult.success
128128
| Some doc ->
129129
let! ct = Async.CancellationToken
130130
let! semanticModel = doc.GetSemanticModelAsync(ct) |> Async.AwaitTask
@@ -144,11 +144,11 @@ module CodeLens =
144144

145145
{ Range = nameSpan |> Range.fromTextSpan docText.Lines
146146
Command = None
147-
Data = lensData |> JToken.FromObject |> Some }
147+
Data = lensData |> serialize |> Some }
148148

149149
let codeLens = collector.GetSymbols() |> Seq.map makeCodeLens
150150

151-
return codeLens |> Array.ofSeq |> Some |> success
151+
return codeLens |> Array.ofSeq |> Some |> LspResult.success
152152
}
153153

154154
let resolve (context: ServerRequestContext)
@@ -160,7 +160,8 @@ module CodeLens =
160160
|> Option.defaultValue CodeLensData.Default
161161

162162
match! context.FindSymbol lensData.DocumentUri lensData.Position with
163-
| None -> return p |> success
163+
| None ->
164+
return p |> LspResult.success
164165
| Some symbol ->
165166
let! locations = context.FindReferences symbol false
166167
// FIXME: refNum is wrong. There are lots of false positive even if we distinct locations by
@@ -183,5 +184,5 @@ module CodeLens =
183184
Command = "textDocument/references"
184185
Arguments = Some [| arg |> serialize |] }
185186

186-
return { p with Command = Some command } |> success
187+
return { p with Command = Some command } |> LspResult.success
187188
}

src/CSharpLanguageServer/Handlers/Color.fs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace CSharpLanguageServer.Handlers
22

33
open Ionide.LanguageServerProtocol.Types
4+
open Ionide.LanguageServerProtocol.JsonRpc
45

56
open CSharpLanguageServer.State
67

src/CSharpLanguageServer/Handlers/Completion.fs

+12-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ open System.Reflection
55

66
open Ionide.LanguageServerProtocol.Server
77
open Ionide.LanguageServerProtocol.Types
8-
open Ionide.LanguageServerProtocol.Types.LspResult
8+
open Ionide.LanguageServerProtocol.JsonRpc
99

1010
open CSharpLanguageServer
1111
open CSharpLanguageServer.State
@@ -16,7 +16,7 @@ open CSharpLanguageServer.Logging
1616

1717
[<RequireQualifiedAccess>]
1818
module Completion =
19-
let private logger = LogProvider.getLoggerByName "Completion"
19+
let private _logger = LogProvider.getLoggerByName "Completion"
2020

2121
let emptyRoslynOptionSet: Microsoft.CodeAnalysis.Options.OptionSet =
2222
let osType = typeof<Microsoft.CodeAnalysis.Options.OptionSet>
@@ -134,9 +134,10 @@ module Completion =
134134

135135
let private cache = new LruCache<(Microsoft.CodeAnalysis.Document * Microsoft.CodeAnalysis.Completion.CompletionList)>(5)
136136

137-
let handle (context: ServerRequestContext) (p: CompletionParams) : AsyncLspResult<Ionide.LanguageServerProtocol.Types.CompletionList option> = async {
137+
let handle (context: ServerRequestContext) (p: CompletionParams) : Async<LspResult<U2<CompletionItem array, CompletionList> option>> = async {
138138
match context.GetDocument p.TextDocument.Uri with
139-
| None -> return None |> success
139+
| None ->
140+
return None |> LspResult.success
140141
| Some doc ->
141142
let! ct = Async.CancellationToken
142143
let! sourceText = doc.GetTextAsync(ct) |> Async.AwaitTask
@@ -162,7 +163,7 @@ module Completion =
162163
completionService.GetCompletionsAsync(doc, position, completionOptions, completionTrigger, ct)
163164
|> Async.map Option.ofObj
164165
else
165-
async.Return Option.None
166+
async.Return None
166167

167168
return
168169
completions
@@ -175,7 +176,8 @@ module Completion =
175176
{ IsIncomplete = true
176177
Items = items
177178
ItemDefaults = None })
178-
|> success
179+
|> Option.map U2.C2
180+
|> LspResult.success
179181
}
180182

181183
let resolve (_context: ServerRequestContext) (item: CompletionItem) : AsyncLspResult<CompletionItem> = async {
@@ -188,7 +190,6 @@ module Completion =
188190
|> Seq.tryFind (fun x -> x.DisplayText = item.Label && (item.SortText.IsNone || x.SortText = item.SortText.Value))
189191
|> Option.map (fun x -> (doc, x)))
190192
with
191-
| None -> return item |> success
192193
| Some (doc, cachedItem) ->
193194
let completionService = Microsoft.CodeAnalysis.Completion.CompletionService.GetService(doc)
194195
let! ct = Async.CancellationToken
@@ -198,5 +199,8 @@ module Completion =
198199
|> Async.map Option.ofObj
199200
// TODO: make the doc as a markdown string instead of a plain text
200201
let itemDocumentation = description |> Option.map Documentation.fromCompletionDescription
201-
return { item with Documentation = itemDocumentation |> Option.map U2.C2 } |> success
202+
return { item with Documentation = itemDocumentation |> Option.map U2.C2 }
203+
|> LspResult.success
204+
| None ->
205+
return item |> LspResult.success
202206
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace CSharpLanguageServer.Handlers
22

33
open Ionide.LanguageServerProtocol.Types
4+
open Ionide.LanguageServerProtocol.JsonRpc
45

56
open CSharpLanguageServer.State
67

@@ -10,5 +11,5 @@ module Declaration =
1011

1112
let registration (_cc: ClientCapabilities) : Registration option = None
1213

13-
let handle (_context: ServerRequestContext) (_p: TextDocumentPositionParams) : AsyncLspResult<Declaration option> =
14-
LspResult.notImplemented<Declaration option> |> async.Return
14+
let handle (_context: ServerRequestContext) (_p: DeclarationParams) : AsyncLspResult<U2<Declaration,DeclarationLink array> option> =
15+
LspResult.notImplemented<U2<Declaration,DeclarationLink array> option> |> async.Return

src/CSharpLanguageServer/Handlers/Definition.fs

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ open System
44

55
open Ionide.LanguageServerProtocol.Server
66
open Ionide.LanguageServerProtocol.Types
7-
open Ionide.LanguageServerProtocol.Types.LspResult
7+
open Ionide.LanguageServerProtocol.JsonRpc
88

99
open CSharpLanguageServer.State
1010
open CSharpLanguageServer.Types
@@ -34,15 +34,17 @@ module Definition =
3434
Method = "textDocument/definition"
3535
RegisterOptions = registerOptions |> serialize |> Some }
3636

37-
let handle (context: ServerRequestContext) (p: TextDocumentPositionParams) : AsyncLspResult<Declaration option> = async {
37+
let handle (context: ServerRequestContext) (p: DefinitionParams) : Async<LspResult<U2<Definition, DefinitionLink array> option>> = async {
3838
match! context.FindSymbol' p.TextDocument.Uri p.Position with
39-
| None -> return None |> success
39+
| None ->
40+
return None |> LspResult.success
4041
| Some (symbol, doc) ->
4142
let! locations = context.ResolveSymbolLocations symbol (Some doc.Project)
4243
return
4344
locations
4445
|> Array.ofList
45-
|> Declaration.C2
46+
|> Definition.C2
47+
|> U2.C1
4648
|> Some
47-
|> success
49+
|> LspResult.success
4850
}

src/CSharpLanguageServer/Handlers/Diagnostic.fs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ open System
44

55
open Ionide.LanguageServerProtocol.Server
66
open Ionide.LanguageServerProtocol.Types
7+
open Ionide.LanguageServerProtocol.JsonRpc
78

89
open CSharpLanguageServer.Conversions
910
open CSharpLanguageServer.State

src/CSharpLanguageServer/Handlers/DocumentFormatting.fs

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ open System
55
open Microsoft.CodeAnalysis.Formatting
66
open Ionide.LanguageServerProtocol.Server
77
open Ionide.LanguageServerProtocol.Types
8-
open Ionide.LanguageServerProtocol.Types.LspResult
8+
open Ionide.LanguageServerProtocol.JsonRpc
99

1010
open CSharpLanguageServer
1111
open CSharpLanguageServer.State
@@ -38,11 +38,11 @@ module DocumentFormatting =
3838

3939
let handle (context: ServerRequestContext) (p: DocumentFormattingParams) : AsyncLspResult<TextEdit [] option> = async {
4040
match context.GetUserDocument p.TextDocument.Uri with
41-
| None -> return None |> success
41+
| None -> return None |> LspResult.success
4242
| Some doc ->
4343
let! ct = Async.CancellationToken
4444
let! options = FormatUtil.getFormattingOptions context.State.Settings doc p.Options
4545
let! newDoc = Formatter.FormatAsync(doc, options, cancellationToken=ct) |> Async.AwaitTask
4646
let! textEdits = FormatUtil.getChanges newDoc doc
47-
return textEdits |> Some |> success
47+
return textEdits |> Some |> LspResult.success
4848
}

src/CSharpLanguageServer/Handlers/DocumentHighlight.fs

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open Microsoft.CodeAnalysis
77
open Microsoft.CodeAnalysis.FindSymbols
88
open Ionide.LanguageServerProtocol.Server
99
open Ionide.LanguageServerProtocol.Types
10-
open Ionide.LanguageServerProtocol.Types.LspResult
10+
open Ionide.LanguageServerProtocol.JsonRpc
1111

1212
open CSharpLanguageServer.Types
1313
open CSharpLanguageServer.State
@@ -45,7 +45,7 @@ module DocumentHighlight =
4545
| :? INamespaceSymbol -> false
4646
| _ -> true
4747

48-
let handle (context: ServerRequestContext) (p: TextDocumentPositionParams) : AsyncLspResult<DocumentHighlight[] option> = async {
48+
let handle (context: ServerRequestContext) (p: DocumentHighlightParams) : AsyncLspResult<DocumentHighlight[] option> = async {
4949
let! ct = Async.CancellationToken
5050
let filePath = Uri.toPath p.TextDocument.Uri
5151

@@ -74,11 +74,11 @@ module DocumentHighlight =
7474
}
7575

7676
match! context.FindSymbol' p.TextDocument.Uri p.Position with
77-
| None -> return None |> success
77+
| None -> return None |> LspResult.success
7878
| Some (symbol, doc) ->
7979
match Option.ofObj symbol with
8080
| Some symbol when shouldHighlight symbol ->
8181
let! highlights = getHighlights symbol doc
82-
return highlights |> Seq.toArray |> Some |> success
83-
| _ -> return None |> success
82+
return highlights |> Seq.toArray |> Some |> LspResult.success
83+
| _ -> return None |> LspResult.success
8484
}

src/CSharpLanguageServer/Handlers/DocumentLink.fs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace CSharpLanguageServer.Handlers
22

33
open Ionide.LanguageServerProtocol.Types
4+
open Ionide.LanguageServerProtocol.JsonRpc
45

56
open CSharpLanguageServer.State
67

0 commit comments

Comments
 (0)