Beispiel #1
0
        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]);
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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]);
                }
            }
        }