( workspaceTextEdits: WorkspaceTextEdit[], workspace: FoamWorkspace )
| 50 | * @returns VS Code WorkspaceEdit ready for application |
| 51 | */ |
| 52 | export const toVsCodeWorkspaceEdit = ( |
| 53 | workspaceTextEdits: WorkspaceTextEdit[], |
| 54 | workspace: FoamWorkspace |
| 55 | ): WorkspaceEdit => { |
| 56 | const workspaceEdit = new WorkspaceEdit(); |
| 57 | |
| 58 | // Group edits by URI |
| 59 | const editsByUri = new Map<string, { uri: Uri; edits: TextEdit[] }>(); |
| 60 | |
| 61 | for (const workspaceTextEdit of workspaceTextEdits) { |
| 62 | const resource = workspace.get(workspaceTextEdit.uri); |
| 63 | if (!resource) { |
| 64 | Logger.warn( |
| 65 | `Could not resolve resource: ${workspaceTextEdit.uri.toString()}` |
| 66 | ); |
| 67 | continue; |
| 68 | } |
| 69 | |
| 70 | const vscodeUri = toVsCodeUri(resource.uri); |
| 71 | const uriKey = resource.uri.toString(); |
| 72 | const existingEntry = editsByUri.get(uriKey) || { |
| 73 | uri: vscodeUri, |
| 74 | edits: [], |
| 75 | }; |
| 76 | |
| 77 | const vscodeEdit = new TextEdit( |
| 78 | toVsCodeRange(workspaceTextEdit.edit.range), |
| 79 | workspaceTextEdit.edit.newText |
| 80 | ); |
| 81 | |
| 82 | existingEntry.edits.push(vscodeEdit); |
| 83 | editsByUri.set(uriKey, existingEntry); |
| 84 | } |
| 85 | |
| 86 | // Apply grouped edits to workspace |
| 87 | for (const { uri, edits } of editsByUri.values()) { |
| 88 | workspaceEdit.set(uri, edits); |
| 89 | } |
| 90 | |
| 91 | return workspaceEdit; |
| 92 | }; |
| 93 | |
| 94 | /** |
| 95 | * Converts a platform-agnostic LintIssue to a VS Code Diagnostic. |
no test coverage detected