public async Task <RunCodeActionResponse> Handle(RunCodeActionRequest request) { var actions = await CodeActionHelper.GetActions(_workspace, _codeActionProviders, _logger, request); var action = actions.FirstOrDefault(a => a.GetIdentifier().Equals(request.Identifier)); if (action == null) { return(new RunCodeActionResponse()); } _logger.LogInformation("Applying " + action); var operations = await action.GetOperationsAsync(CancellationToken.None); var solution = _workspace.CurrentSolution; foreach (var o in operations) { o.Apply(_workspace, CancellationToken.None); } var response = new RunCodeActionResponse(); var directoryName = Path.GetDirectoryName(request.FileName); var changes = await FileChanges.GetFileChangesAsync(_workspace.CurrentSolution, solution, directoryName, request.WantsTextChanges); response.Changes = changes; _workspace.TryApplyChanges(_workspace.CurrentSolution); return(response); }
public async Task <RunCodeActionResponse> Handle(RunCodeActionRequest request) { var response = new RunCodeActionResponse(); var actions = await CodeActionHelper.GetActions(_workspace, _codeActionProviders, _logger, request); var action = actions.FirstOrDefault(a => a.GetIdentifier().Equals(request.Identifier)); if (action == null) { return(new RunCodeActionResponse()); } _logger.LogInformation("Applying " + action); var operations = await action.GetOperationsAsync(CancellationToken.None); var solution = _workspace.CurrentSolution; var changes = Enumerable.Empty <OmniSharp.Models.ModifiedFileResponse>(); var directoryName = Path.GetDirectoryName(request.FileName); foreach (var o in operations) { var applyChangesOperation = o as ApplyChangesOperation; if (applyChangesOperation != null) { changes = changes.Concat(await FileChanges.GetFileChangesAsync(applyChangesOperation.ChangedSolution, solution, directoryName, request.WantsTextChanges)); solution = applyChangesOperation.ChangedSolution; } } if (request.ApplyTextChanges) { _workspace.TryApplyChanges(solution); } response.Changes = changes; return(response); }