private async Task AssertTextChanges(string source, string expected) { var testFile = new TestFile("dummy.cs", source); SharedOmniSharpTestHost.AddFilesToWorkspace(testFile); var span = testFile.Content.GetSpans().Single(); var range = testFile.Content.GetRangeFromSpan(span); var request = new FormatRangeRequest() { Buffer = testFile.Content.Code, FileName = testFile.FileName, Line = range.Start.Line, Column = range.Start.Offset, EndLine = range.End.Line, EndColumn = range.End.Offset }; var requestHandler = SharedOmniSharpTestHost.GetRequestHandler <FormatRangeService>(OmniSharpEndpoints.FormatRange); var response = await requestHandler.Handle(request); var actual = response.Changes.ToArray(); var oldText = testFile.Content.Text; var textChanges = GetTextChanges(oldText, response.Changes); var actualText = oldText.WithChanges(textChanges).ToString(); Assert.Equal(expected.Replace("\r\n", "\n"), actualText.Replace("\r\n", "\n")); }
private async Task AssertTextChanges(string source, params LinePositionSpanTextChange[] expected) { var testFile = new TestFile("dummy.cs", source); SharedOmniSharpTestHost.AddFilesToWorkspace(testFile); var span = testFile.Content.GetSpans().Single(); var range = testFile.Content.GetRangeFromSpan(span); var request = new FormatRangeRequest() { Buffer = testFile.Content.Code, FileName = testFile.FileName, Line = range.Start.Line, Column = range.Start.Offset, EndLine = range.End.Line, EndColumn = range.End.Offset }; var requestHandler = SharedOmniSharpTestHost.GetRequestHandler <FormatRangeService>(OmniSharpEndpoints.FormatRange); var response = await requestHandler.Handle(request); var actual = response.Changes.ToArray(); Assert.Equal(expected.Length, actual.Length); for (var i = 0; i < expected.Length; i++) { Assert.Equal(expected[i].NewText, actual[i].NewText); Assert.Equal(expected[i].StartLine, actual[i].StartLine); Assert.Equal(expected[i].StartColumn, actual[i].StartColumn); Assert.Equal(expected[i].EndLine, actual[i].EndLine); Assert.Equal(expected[i].EndColumn, actual[i].EndColumn); } }
public async override Task <TextEditContainer> Handle(DocumentRangeFormattingParams request, CancellationToken cancellationToken) { var omnisharpRequest = new FormatRangeRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Line = Convert.ToInt32(request.Range.Start.Line), Column = Convert.ToInt32(request.Range.Start.Character), EndLine = Convert.ToInt32(request.Range.End.Line), EndColumn = Convert.ToInt32(request.Range.End.Character), }; var omnisharpResponse = await _formatRangeHandler.Handle(omnisharpRequest); return(omnisharpResponse.Changes.Select(change => new TextEdit() { NewText = change.NewText, Range = new Range(new Position(change.StartLine, change.StartColumn), new Position(change.EndLine, change.EndColumn)) }).ToArray()); }
public async Task <FormatRangeResponse> FormatRange(FormatRangeRequest request) { var document = _workspace.GetDocument(request.FileName); if (document == null) { return(null); } var lines = (await document.GetSyntaxTreeAsync()).GetText().Lines; var start = lines.GetPosition(new LinePosition(request.Line - 1, request.Column - 1)); var end = lines.GetPosition(new LinePosition(request.EndLine - 1, request.EndColumn - 1)); var changes = await Formatting.GetFormattingChangesForRange(_workspace, Options, document, start, end); return(new FormatRangeResponse() { Changes = changes }); }
private static async Task <IEnumerable <LinePositionSpanTextChange> > FormattingChangesForRange(FormatRangeRequest req) { var workspace = TestHelpers.CreateSimpleWorkspace(req.Buffer, req.FileName); var controller = new OmnisharpController(workspace, null); return((await controller.FormatRange(req)).Changes); }
private static async Task <IEnumerable <LinePositionSpanTextChange> > FormattingChangesForRange(FormatRangeRequest req) { var workspace = await TestHelpers.CreateSimpleWorkspace(req.Buffer, req.FileName); RequestHandler <FormatRangeRequest, FormatRangeResponse> controller = new FormatRangeService(workspace, new FormattingOptions()); return((await controller.Handle(req)).Changes); }