// convert protocol edits into editor actions while rejecting stale versions. function convertCodeActions(vscode, results, document, expectedVersion = document.version) { return (Array.isArray(results) ? results : []).flatMap(result => { if (!result.edit) return []; const changes = result.edit.documentChanges || Object.entries(result.edit.changes || {}).map(([uri, edits]) => ({ textDocument: { uri }, edits })); if (changes.some(change => change.textDocument?.uri === document.uri.toString() && change.textDocument.version != null && change.textDocument.version !== expectedVersion)) return []; const edit = new vscode.WorkspaceEdit(); let count = 0; for (const change of changes) { if (!change.textDocument || !Array.isArray(change.edits)) continue; const uri = vscode.Uri.parse(change.textDocument.uri); for (const replacement of change.edits) { const range = replacement.range; if (!range || typeof replacement.newText !== 'string') continue; edit.replace(uri, new vscode.Range(range.start.line, range.start.character, range.end.line, range.end.character), replacement.newText); count++; } } if (!count) return []; const action = new vscode.CodeAction(result.title, vscode.CodeActionKind.QuickFix); action.edit = edit; action.isPreferred = !!result.isPreferred; return [action]; }); } module.exports = { convertCodeActions };