public async Task <GetCodeActionsResponse> GetCodeActions(CodeActionRequest request) { var actions = new List <CodeAction>(); var context = await GetContext(request, actions); await GetContextualCodeActions(context); return(new GetCodeActionsResponse() { CodeActions = actions.Select(a => a.Title) }); }
private async Task <CodeRefactoringContext?> GetContext(CodeActionRequest request, List <CodeAction> actionsDestination) { var document = _workspace.GetDocument(request.FileName); if (document != null) { var sourceText = await document.GetTextAsync(); var position = sourceText.Lines.GetPosition(new LinePosition(request.Line, request.Column)); var location = new TextSpan(position, 1); return(new CodeRefactoringContext(document, location, (a) => actionsDestination.Add(a), CancellationToken.None)); } //todo, handle context creation issues return(null); }
public async Task <RunCodeActionResponse> RunCodeAction(CodeActionRequest request) { var actions = new List <CodeAction>(); var context = await GetContext(request, actions); await GetContextualCodeActions(context); if (request.CodeAction > actions.Count()) { return(new RunCodeActionResponse()); } var action = actions.ElementAt(request.CodeAction); var operations = await action.GetOperationsAsync(CancellationToken.None); foreach (var o in operations) { o.Apply(_workspace, CancellationToken.None); } var originalDocument = context.Value.Document; var response = new RunCodeActionResponse(); if (!request.WantsTextChanges) { // return the new document var sourceText = await _workspace.CurrentSolution.GetDocument(originalDocument.Id).GetTextAsync(); response.Text = sourceText.ToString(); } else { // return the text changes var changes = await _workspace.CurrentSolution.GetDocument(originalDocument.Id).GetTextChangesAsync(originalDocument); response.Changes = await LinePositionSpanTextChange.Convert(originalDocument, changes); } return(response); }