private static void TestQuickInfo(PythonEditor view, int start, int end, params string[] expected) { var snapshot = view.CurrentSnapshot; for (int i = start; i < end; i++) { var analysis = snapshot.AnalyzeExpression( view.VS.ServiceProvider, snapshot.CreateTrackingSpan(i, i == snapshot.Length ? 0 : 1, SpanTrackingMode.EdgeInclusive), false ); List <object> quickInfo = new List <object>(); ITrackingSpan span; QuickInfoSource.AugmentQuickInfoWorker( analysis, quickInfo, out span ); Assert.AreEqual(expected.Length, quickInfo.Count); for (int j = 0; j < expected.Length; j++) { Assert.AreEqual(expected[j], quickInfo[j]); } } }
private async Task <Session> TriggerSessionAsync(string content, int caretPosition) { var s = new Session(); s.Ast = RParser.Parse(content); s.TextBuffer = new TextBufferMock(content, RContentTypeDefinition.ContentType); QuickInfoSource quickInfoSource = new QuickInfoSource(s.TextBuffer, EditorShell); QuickInfoSessionMock quickInfoSession = new QuickInfoSessionMock(s.TextBuffer, caretPosition); s.QuickInfoContent = new List <object>(); quickInfoSession.TriggerPoint = new SnapshotPoint(s.TextBuffer.CurrentSnapshot, caretPosition); s.ApplicableSpan = await quickInfoSource.AugmentQuickInfoSessionAsync(s.Ast, caretPosition, quickInfoSession, s.QuickInfoContent); return(s); }
internal static Task <ITrackingSpan> AugmentQuickInfoSessionAsync(this QuickInfoSource quickInfoSource, AstRoot ast, int caretPosition, IQuickInfoSession quickInfoSession, IList <object> quickInfoContent) { var tcs = new TaskCompletionSource <ITrackingSpan>(); ITrackingSpan applicableSpan; var ready = quickInfoSource.AugmentQuickInfoSession(ast, caretPosition, quickInfoSession, quickInfoContent, out applicableSpan, (o, p) => { ITrackingSpan result; quickInfoSource.AugmentQuickInfoSession(ast, caretPosition, quickInfoSession, quickInfoContent, out result, null, p); tcs.TrySetResult(result); }, null); if (ready) { tcs.TrySetResult(applicableSpan); } return(tcs.Task); }
private async Task <Session> TriggerSessionAsync(string content, int position) { var s = new Session { Ast = RParser.Parse(content), EditorBuffer = new TextBufferMock(content, RContentTypeDefinition.ContentType).ToEditorBuffer() }; var tree = new EditorTreeMock(s.EditorBuffer, s.Ast); var document = new EditorDocumentMock(tree); var textBuffer = s.EditorBuffer.As <ITextBuffer>(); var quickInfoSource = new QuickInfoSource(textBuffer, Services); var quickInfoSession = new QuickInfoSessionMock(textBuffer, position); s.QuickInfoContent = new List <object>(); quickInfoSession.TriggerPoint = new SnapshotPoint(s.EditorBuffer.TextSnapshot(), position); s.ApplicableSpan = await quickInfoSource.AugmentQuickInfoSessionAsync(s.Ast, textBuffer, position, quickInfoSession, s.QuickInfoContent); return(s); }
public async Task QuickInfoSourceTest01() { string content = @"x <- as.matrix(x)"; AstRoot ast = RParser.Parse(content); int caretPosition = 15; // in arguments ITextBuffer textBuffer = new TextBufferMock(content, RContentTypeDefinition.ContentType); QuickInfoSource quickInfoSource = new QuickInfoSource(textBuffer); QuickInfoSessionMock quickInfoSession = new QuickInfoSessionMock(textBuffer, caretPosition); List <object> quickInfoContent = new List <object>(); quickInfoSession.TriggerPoint = new SnapshotPoint(textBuffer.CurrentSnapshot, caretPosition); var applicableSpan = await quickInfoSource.AugmentQuickInfoSessionAsync(ast, caretPosition, quickInfoSession, quickInfoContent); ParameterInfo parametersInfo = SignatureHelp.GetParametersInfoFromBuffer(ast, textBuffer.CurrentSnapshot, 10); applicableSpan.Should().NotBeNull(); quickInfoContent.Should().ContainSingle() .Which.ToString().Should().StartWith("as.matrix(x, data, nrow, ncol, byrow, dimnames, rownames.force, ...)"); }
internal static Task <ITrackingSpan> AugmentQuickInfoSessionAsync( this QuickInfoSource quickInfoSource , AstRoot ast , ITextBuffer textBuffer , int position , IQuickInfoSession quickInfoSession , IList <object> quickInfoContent) { var tcs = new TaskCompletionSource <ITrackingSpan>(); var ready = quickInfoSource.AugmentQuickInfoSession(ast, textBuffer, position, quickInfoSession, quickInfoContent, out ITrackingSpan applicableSpan, (infos, o) => { QuickInfoSource.GetCachedSignatures(quickInfoContent, textBuffer, position, infos, out ITrackingSpan result); tcs.TrySetResult(result); }); if (ready) { tcs.TrySetResult(applicableSpan); } return(tcs.Task); }
public async Task QuickInfoSourceTest02() { // 'as.Date.character' RD contains no function info for 'as.Date.character', but the one for 'as.Date' // then, the current code expects to add 'as.Date' quick info, which is the first function info for as.Date.character string content = @"x <- as.Date.character(x)"; AstRoot ast = RParser.Parse(content); int caretPosition = 23; // in arguments ITextBuffer textBuffer = new TextBufferMock(content, RContentTypeDefinition.ContentType); QuickInfoSource quickInfoSource = new QuickInfoSource(textBuffer, EditorShell); QuickInfoSessionMock quickInfoSession = new QuickInfoSessionMock(textBuffer, caretPosition); List <object> quickInfoContent = new List <object>(); quickInfoSession.TriggerPoint = new SnapshotPoint(textBuffer.CurrentSnapshot, caretPosition); var applicableSpan = await quickInfoSource.AugmentQuickInfoSessionAsync(ast, caretPosition, quickInfoSession, quickInfoContent); ParameterInfo parametersInfo = SignatureHelp.GetParametersInfoFromBuffer(ast, textBuffer.CurrentSnapshot, 10); applicableSpan.Should().NotBeNull(); quickInfoContent.Should().ContainSingle() .Which.ToString().Should().StartWith("as.Date(x, ...)"); }
public bool GoToDefinition(int position) { var result = _compilerService.LatestResult?.GetFile(_document.FilePath); if (result == null) { return(false); } var span = new NSpan(position, position); var quickInfoContent = new List <object>(); bool foundSomething; var symbol = QuickInfoSource.SpanToSymbol(quickInfoContent, span, result.Ast, out foundSomething); var declaration = symbol?.FirstDeclarationOrDefault; var source = declaration?.Source; if (source != null && source != SourceSnapshot.Default) { return(Utils.MoveToLocation(declaration.Location)); } return(false); }
private static void TestQuickInfo(PythonEditor view, int start, int end, params string[] expected) { var snapshot = view.CurrentSnapshot; for (int i = start; i < end; i++) { List <object> quickInfo = new List <object>(); ITrackingSpan span; QuickInfoSource.AugmentQuickInfoWorker( quickInfo, VsProjectAnalyzer.GetQuickInfoAsync( new SnapshotPoint(snapshot, start) ).Result, out span ); Assert.AreEqual(expected.Length, quickInfo.Count); for (int j = 0; j < expected.Length; j++) { Assert.AreEqual(expected[j], quickInfo[j]); } } }