Skip to content

Commit c0fb4aa

Browse files
committed
chore(Lsp.Workspace): add LspWorkspace.OpenDocs (move from ServerState.OpenDocs)
1 parent 20802c2 commit c0fb4aa

File tree

4 files changed

+29
-26
lines changed

4 files changed

+29
-26
lines changed

src/CSharpLanguageServer/Handlers/Rename.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,10 @@ module Rename =
164164
)
165165
|> Async.AwaitTask
166166

167-
let! docTextEdit =
168-
lspDocChangesFromSolutionDiff ct originalSolution updatedSolution (fun uri ->
169-
context.State.OpenDocs.TryFind uri |> Option.map _.Version)
167+
let documentVersionForUri =
168+
context.Workspace.OpenDocs.TryFind >> Option.map _.Version
169+
170+
let! docTextEdit = lspDocChangesFromSolutionDiff ct originalSolution updatedSolution documentVersionForUri
170171

171172
return
172173
WorkspaceEdit.Create(docTextEdit, context.ClientCapabilities)

src/CSharpLanguageServer/Lsp/Workspace.fs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ type LspWorkspaceFolder =
1919
Solution: Solution option
2020
DecompiledMetadata: Map<string, LspWorkspaceDecompiledMetadataDocument> }
2121

22+
static member Empty =
23+
{ Uri = Directory.GetCurrentDirectory() |> Uri.fromPath
24+
Name = None
25+
RoslynWorkspace = None
26+
Solution = None
27+
DecompiledMetadata = Map.empty }
28+
2229
type LspWorkspaceDocumentType =
2330
| UserDocument // user Document from solution, on disk
2431
| DecompiledDocument // Document decompiled from metadata, readonly
@@ -30,10 +37,13 @@ let workspaceFolderWithDecompiledMetadataAdded uri md folder =
3037
{ folder with
3138
DecompiledMetadata = newDecompiledMd }
3239

40+
type LspWorkspaceOpenDocInfo = { Version: int; Touched: DateTime }
41+
3342
type LspWorkspace =
34-
{ Folders: LspWorkspaceFolder list }
43+
{ Folders: LspWorkspaceFolder list
44+
OpenDocs: Map<string, LspWorkspaceOpenDocInfo> }
3545

36-
static member Empty = { Folders = [] }
46+
static member Empty = { Folders = []; OpenDocs = Map.empty }
3747

3848
member this.SingletonFolder = this.Folders |> Seq.exactlyOne
3949

@@ -42,17 +52,10 @@ type LspWorkspace =
4252
member this.Solution = this.Folders |> Seq.tryExactlyOne |> Option.bind _.Solution
4353

4454
member this.WithSingletonFolderUpdated(update: LspWorkspaceFolder -> LspWorkspaceFolder) =
45-
let emptyFolder =
46-
{ Uri = Directory.GetCurrentDirectory() |> Uri.fromPath
47-
Name = None
48-
RoslynWorkspace = None
49-
Solution = None
50-
DecompiledMetadata = Map.empty }
51-
5255
let updatedFolders =
5356
this.Folders
5457
|> Seq.tryExactlyOne
55-
|> Option.defaultValue emptyFolder
58+
|> Option.defaultValue LspWorkspaceFolder.Empty
5659
|> update
5760
|> List.singleton
5861

src/CSharpLanguageServer/State/ServerRequestContext.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,4 +283,4 @@ type ServerRequestContext(requestId: int, state: ServerState, emitServerEvent) =
283283
}
284284

285285
member this.GetDocumentVersion(uri: DocumentUri) : int option =
286-
Uri.unescape uri |> this.State.OpenDocs.TryFind |> Option.map _.Version
286+
Uri.unescape uri |> this.Workspace.OpenDocs.TryFind |> Option.map _.Version

src/CSharpLanguageServer/State/ServerState.fs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ type ServerRequestMode =
2222
| ReadOnly
2323
| ReadWrite
2424

25-
type ServerOpenDocInfo = { Version: int; Touched: DateTime }
26-
2725
type RequestMetrics =
2826
{ Count: int
2927
TotalDuration: TimeSpan
@@ -53,7 +51,6 @@ and ServerState =
5351
LspClient: ILspClient option
5452
ClientCapabilities: ClientCapabilities
5553
Workspace: LspWorkspace
56-
OpenDocs: Map<string, ServerOpenDocInfo>
5754
LastRequestId: int
5855
PendingRequests: ServerRequest list
5956
RunningRequests: Map<int, ServerRequest>
@@ -68,7 +65,6 @@ and ServerState =
6865
LspClient = None
6966
ClientCapabilities = emptyClientCapabilities
7067
Workspace = LspWorkspace.Empty
71-
OpenDocs = Map.empty
7268
LastRequestId = 0
7369
PendingRequests = []
7470
RunningRequests = Map.empty
@@ -348,32 +344,35 @@ let processServerEvent (logger: ILogger) state postSelf msg : Async<ServerState>
348344
postSelf PushDiagnosticsDocumentBacklogUpdate
349345

350346
let openDocInfo = { Version = ver; Touched = timestamp }
351-
let newOpenDocs = state.OpenDocs |> Map.add uri openDocInfo
352-
return { state with OpenDocs = newOpenDocs }
347+
let newOpenDocs = state.Workspace.OpenDocs |> Map.add uri openDocInfo
348+
349+
return
350+
{ state with
351+
Workspace.OpenDocs = newOpenDocs }
353352

354353
| DocumentClosed uri ->
355354
postSelf PushDiagnosticsDocumentBacklogUpdate
356355

357-
let newOpenDocVersions = state.OpenDocs |> Map.remove uri
356+
let newOpenDocVersions = state.Workspace.OpenDocs |> Map.remove uri
358357

359358
return
360359
{ state with
361-
OpenDocs = newOpenDocVersions }
360+
Workspace.OpenDocs = newOpenDocVersions }
362361

363362
| DocumentTouched(uri, timestamp) ->
364363
postSelf PushDiagnosticsDocumentBacklogUpdate
365364

366-
let openDocInfo = state.OpenDocs |> Map.tryFind uri
365+
let openDocInfo = state.Workspace.OpenDocs |> Map.tryFind uri
367366

368367
match openDocInfo with
369368
| None -> return state
370369
| Some openDocInfo ->
371370
let updatedOpenDocInfo = { openDocInfo with Touched = timestamp }
372-
let newOpenDocVersions = state.OpenDocs |> Map.add uri updatedOpenDocInfo
371+
let newOpenDocVersions = state.Workspace.OpenDocs |> Map.add uri updatedOpenDocInfo
373372

374373
return
375374
{ state with
376-
OpenDocs = newOpenDocVersions }
375+
Workspace.OpenDocs = newOpenDocVersions }
377376

378377
| WorkspaceReloadRequested reloadNoLaterThanIn ->
379378
// we need to wait a bit before starting this so we
@@ -398,7 +397,7 @@ let processServerEvent (logger: ILogger) state postSelf msg : Async<ServerState>
398397
// which will consider documents by their last modification date
399398
// for processing first
400399
let newBacklog =
401-
state.OpenDocs
400+
state.Workspace.OpenDocs
402401
|> Seq.sortByDescending (fun kv -> kv.Value.Touched)
403402
|> Seq.map (fun kv -> kv.Key)
404403
|> List.ofSeq

0 commit comments

Comments
 (0)