private async Task <(CodeStructureResponse, TestFile)> GetCodeStructureAsync(string contents) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var testFile = new TestFile(Path.Combine(testProject.Directory, "build.cake"), contents); var request = new CodeStructureRequest { FileName = testFile.FileName }; var updateBufferRequest = new UpdateBufferRequest { Buffer = testFile.Content.Code, FileName = testFile.FileName, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var requestHandler = GetRequestHandler(host); return(await requestHandler.Handle(request), testFile); } }
void RequestUpdateBuffer(ChunkVertexBuilder vertexBuilder, ChunkMeshUpdatePriority priority) { for (int z = 0; z < MeshSegments.Z; z++) { for (int y = 0; y < MeshSegments.Y; y++) { for (int x = 0; x < MeshSegments.X; x++) { var opaqueRequest = new UpdateBufferRequest { VertexBuilder = vertexBuilder, Segment = new IntVector3(x, y, z), Translucece = false, Priority = priority, RequestTime = TimeSpan.FromTicks(Environment.TickCount) }; updateBufferRequests.Enqueue(opaqueRequest); var translucentRequest = new UpdateBufferRequest { VertexBuilder = vertexBuilder, Segment = new IntVector3(x, y, z), Translucece = true, Priority = priority, RequestTime = TimeSpan.FromTicks(Environment.TickCount) }; updateBufferRequests.Enqueue(translucentRequest); } } } }
private async Task <QuickFixResponse> FindDiagnostics(string contents, bool includeFileName) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var testFile = new TestFile(Path.Combine(testProject.Directory, "build.cake"), contents); var request = new CodeCheckRequest { FileName = includeFileName ? testFile.FileName : string.Empty, }; var updateBufferRequest = new UpdateBufferRequest { Buffer = testFile.Content.Code, Column = request.Column, FileName = testFile.FileName, Line = request.Line, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var requestHandler = GetRequestHandler(host); return(await requestHandler.Handle(request)); } }
public async Task UpdateBufferReadsFromDisk() { const string newCode = "public class MyClass {}"; var fileName = Path.GetTempPath() + Guid.NewGuid().ToString() + ".cs"; var testFile = new TestFile(fileName, string.Empty); using (var host = CreateOmniSharpHost(testFile)) { File.WriteAllText(fileName, newCode); var request = new UpdateBufferRequest { FileName = fileName, FromDisk = true }; await host.Workspace.BufferManager.UpdateBufferAsync(request); var document = host.Workspace.GetDocument(fileName); var text = await document.GetTextAsync(); Assert.Equal(newCode, text.ToString()); } }
private async Task RefreshAsync(OutputRefresh refresh) { // Re-evaluate project instance so we can determine compile items properly. var projectInstance = _projectInstanceEvaluator.Evaluate(refresh.ProjectInstance); foreach (var documentChangeInfo in refresh.DocumentChangeInfos.Values) { try { // Force update the OmniSharp Workspace for component declaration changes. var componentDeclarationLocation = documentChangeInfo.FilePath; var isCompileItem = IsCompileItem(documentChangeInfo.RelativeFilePath, projectInstance); var wasACompileItem = false; lock (_lastSeenCompileItems) { _lastSeenCompileItems.TryGetValue(documentChangeInfo.FilePath, out wasACompileItem); _lastSeenCompileItems[documentChangeInfo.FilePath] = isCompileItem; } if (!isCompileItem && wasACompileItem) { // Output document should no longer be considered as a compile item, clear the workspace content for it. var request = new Request() { FileName = componentDeclarationLocation, Buffer = string.Empty, }; await _updateBufferDispatcher.UpdateBufferAsync(request); } else if (isCompileItem) { // Force update the OmniSharp Workspace for component declaration changes. var request = new UpdateBufferRequest() { FileName = componentDeclarationLocation, FromDisk = true, }; await _updateBufferDispatcher.UpdateBufferAsync(request); } } catch (Exception ex) { _logger.LogError("Unexpected error when updating workspace representation of '" + documentChangeInfo.FilePath + "': " + ex); } } OnRefreshWorkCompleting(); }
private async Task <CompletionResponse> FindCompletionsAsync(string filename, string source, OmniSharpTestHost host, char?triggerChar = null, TestFile[] additionalFiles = null) { var testFile = new TestFile(filename, source); var files = new[] { testFile }; if (additionalFiles is object) { files = files.Concat(additionalFiles).ToArray(); } host.AddFilesToWorkspace(files); var point = testFile.Content.GetPointFromPosition(); var request = new CompletionRequest { Line = point.Line, Column = point.Offset, FileName = testFile.FileName, Buffer = testFile.Content.Code, CompletionTrigger = triggerChar is object?CompletionTriggerKind.TriggerCharacter : CompletionTriggerKind.Invoked, TriggerCharacter = triggerChar }; var updateBufferRequest = new UpdateBufferRequest { Buffer = request.Buffer, Column = request.Column, FileName = request.FileName, Line = request.Line, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var requestHandler = GetRequestHandler(host); return(await requestHandler.Handle(request)); }
private async Task <RunCodeActionResponse> RunRefactoringsAsync(string code, string identifier) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var testFile = new TestFile(Path.Combine(testProject.Directory, "build.cake"), code); var requestHandler = GetRunCodeActionsHandler(host); var span = testFile.Content.GetSpans().Single(); var range = testFile.Content.GetRangeFromSpan(span); var request = new RunCodeActionRequest { Line = range.Start.Line, Column = range.Start.Offset, Selection = GetSelection(range), FileName = testFile.FileName, Buffer = testFile.Content.Code, Identifier = identifier, WantsTextChanges = true, WantsAllCodeActionOperations = true }; var updateBufferRequest = new UpdateBufferRequest { Buffer = request.Buffer, Column = request.Column, FileName = request.FileName, Line = request.Line, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); return(await requestHandler.Handle(request)); } }
private async Task <IEnumerable <OmniSharpCodeAction> > FindRefactoringsAsync(string code) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var testFile = new TestFile(Path.Combine(testProject.Directory, "build.cake"), code); var requestHandler = GetGetCodeActionsHandler(host); var span = testFile.Content.GetSpans().Single(); var range = testFile.Content.GetRangeFromSpan(span); var request = new GetCodeActionsRequest { Line = range.Start.Line, Column = range.Start.Offset, FileName = testFile.FileName, Buffer = testFile.Content.Code, Selection = GetSelection(range), }; var updateBufferRequest = new UpdateBufferRequest { Buffer = request.Buffer, Column = request.Column, FileName = request.FileName, Line = request.Line, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var response = await requestHandler.Handle(request); return(response.CodeActions); } }
private async Task <IEnumerable <AutoCompleteResponse> > FindCompletionsAsync(string source, bool wantSnippet = false) { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var testFile = new TestFile(Path.Combine(testProject.Directory, "build.cake"), source); var point = testFile.Content.GetPointFromPosition(); var request = new AutoCompleteRequest { Line = point.Line, Column = point.Offset, FileName = testFile.FileName, Buffer = testFile.Content.Code, WordToComplete = GetPartialWord(testFile.Content), WantMethodHeader = true, WantSnippet = wantSnippet, WantReturnType = true }; var updateBufferRequest = new UpdateBufferRequest { Buffer = request.Buffer, Column = request.Column, FileName = request.FileName, Line = request.Line, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var requestHandler = GetRequestHandler(host); return(await requestHandler.Handle(request)); } }
public async Task <ObjectResult> UpdateBuffer(UpdateBufferRequest request) { await _workspace.BufferManager.UpdateBuffer(request); return(new ObjectResult(true)); }
public async Task ShouldSupportIncrementalChanges() { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var fileName = Path.Combine(testProject.Directory, "build.cake"); var updateBufferRequest = new UpdateBufferRequest { FileName = fileName, Buffer = CakeBuildSrc, FromDisk = false }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); updateBufferRequest = new UpdateBufferRequest { FileName = fileName, FromDisk = false, Changes = new[] { new LinePositionSpanTextChange { StartLine = 0, StartColumn = 33, EndLine = 0, EndColumn = 40, NewText = "Foobar" }, new LinePositionSpanTextChange { StartLine = 2, StartColumn = 6, EndLine = 2, EndColumn = 13, NewText = "Foobar" }, new LinePositionSpanTextChange { StartLine = 5, StartColumn = 2, EndLine = 5, EndColumn = 13, NewText = "Verbose" } } }; await GetUpdateBufferHandler(host).Handle(updateBufferRequest); var sourceText = await host.Workspace.GetDocument(fileName).GetTextAsync(); var fullPath = Path.GetFullPath(fileName).Replace('\\', '/'); var startIndex = 0; for (var i = sourceText.Lines.Count - 1; i >= 0; i--) { var text = sourceText.Lines[i].ToString(); if (text.Equals($"#line 1 \"{fullPath}\"", StringComparison.OrdinalIgnoreCase)) { startIndex = i + 1; break; } } var expectedLines = CakeBuildModified.Split('\n').ToList(); for (var i = 0; i < expectedLines.Count; i++) { Assert.Equal(sourceText.Lines[startIndex + i].ToString(), expectedLines[i].TrimEnd('\r', '\n')); } } }