public async Task ParameterTest_ComputeCurrentParameter02()
        {
            await PackageIndexUtility.GetFunctionInfoAsync(FunctionIndex, "legend");

            REditorSettings.PartialArgumentNameMatch = true;

            ITextBuffer              textBuffer = new TextBufferMock("legend(bty=1, lt=3)", RContentTypeDefinition.ContentType);
            SignatureHelpSource      source     = new SignatureHelpSource(textBuffer, EditorShell);
            SignatureHelpSessionMock session    = new SignatureHelpSessionMock(textBuffer, 0);
            TextViewMock             textView   = session.TextView as TextViewMock;
            List <ISignature>        signatures = new List <ISignature>();

            using (var tree = new EditorTree(textBuffer, EditorShell)) {
                tree.Build();
                using (var document = new EditorDocumentMock(tree)) {
                    session.TrackingPoint = new TrackingPointMock(textBuffer, 7, PointTrackingMode.Positive, TrackingFidelityMode.Forward);

                    tree.TakeThreadOwnerShip();
                    await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot);

                    signatures.Should().ContainSingle();

                    textView.Caret = new TextCaretMock(textView, 8);
                    SignatureHelp sh    = signatures[0] as SignatureHelp;
                    int           index = sh.ComputeCurrentParameter(tree.TextSnapshot, tree.AstRoot, 8);
                    index.Should().Be(11);

                    textView.Caret = new TextCaretMock(textView, 15);
                    index          = sh.ComputeCurrentParameter(tree.TextSnapshot, tree.AstRoot, 15);
                    index.Should().Be(6);
                }
            }
        }
        internal static Task AugmentSignatureHelpSessionAsync(this SignatureHelpSource signatureHelpSource, ISignatureHelpSession session, IList <ISignature> signatures, AstRoot ast)
        {
            var tcs = new TaskCompletionSource <object>();

            var ready = signatureHelpSource.AugmentSignatureHelpSession(session, signatures, ast, (o, p) => {
                signatureHelpSource.AugmentSignatureHelpSession(session, signatures, ast, null, p);
                tcs.TrySetResult(null);
            }, null);

            if (ready)
            {
                tcs.TrySetResult(null);
            }

            return(tcs.Task);
        }
Beispiel #3
0
        public async Task ParameterTest_ComputeCurrentParameter01()
        {
            ITextBuffer              textBuffer = new TextBufferMock("aov(", RContentTypeDefinition.ContentType);
            SignatureHelpSource      source     = new SignatureHelpSource(textBuffer);
            SignatureHelpSessionMock session    = new SignatureHelpSessionMock(textBuffer, 0);
            TextViewMock             textView   = session.TextView as TextViewMock;
            List <ISignature>        signatures = new List <ISignature>();

            EditorTree tree = new EditorTree(textBuffer);

            tree.Build();
            var document = new EditorDocumentMock(tree);

            session.TrackingPoint = new TrackingPointMock(textBuffer, 4, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
            await FunctionIndexUtility.GetFunctionInfoAsync("aov");

            tree.TakeThreadOwnerShip();
            await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot);

            signatures.Should().ContainSingle();

            int index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);

            index.Should().Be(0);

            textView.Caret = new TextCaretMock(textView, 5);
            TextBufferUtility.ApplyTextChange(textBuffer, 4, 0, 1, "a");
            index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
            index.Should().Be(0);

            textView.Caret = new TextCaretMock(textView, 6);
            TextBufferUtility.ApplyTextChange(textBuffer, 5, 0, 1, ",");
            tree.EnsureTreeReady();
            index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
            index.Should().Be(1);

            textView.Caret = new TextCaretMock(textView, 7);
            TextBufferUtility.ApplyTextChange(textBuffer, 6, 0, 1, ",");
            tree.EnsureTreeReady();
            index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
            index.Should().Be(2);
        }
Beispiel #4
0
        public async Task SignatureHelpSourceTest01()
        {
            string content = @"x <- as.matrix(x)";

            AstRoot                  ast                  = RParser.Parse(content);
            int                      caretPosition        = 15;
            ITextBuffer              textBuffer           = new TextBufferMock(content, RContentTypeDefinition.ContentType);
            SignatureHelpSource      signatureHelpSource  = new SignatureHelpSource(textBuffer, EditorShell);
            SignatureHelpSessionMock signatureHelpSession = new SignatureHelpSessionMock(textBuffer, caretPosition);
            List <ISignature>        signatures           = new List <ISignature>();

            signatureHelpSession.TrackingPoint = new TrackingPointMock(textBuffer, caretPosition, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
            await signatureHelpSource.AugmentSignatureHelpSessionAsync(signatureHelpSession, signatures, ast);

            signatures.Should().ContainSingle();
            signatures[0].Parameters.Should().HaveCount(8);
            signatures[0].CurrentParameter.Name.Should().Be("x");
            signatures[0].Content.Should().Be("as.matrix(x, ..., data, nrow, ncol, byrow, dimnames, rownames.force)");
            signatures[0].Documentation.Should().NotBeEmpty();
        }
Beispiel #5
0
        public async Task SignatureHelpSourceTest02()
        {
            string content =
                @"
x <- function(a, b = TRUE, c = 12/7) { }
x( )
";

            AstRoot                  ast                  = RParser.Parse(content);
            int                      caretPosition        = content.IndexOf("( )") + 1;
            ITextBuffer              textBuffer           = new TextBufferMock(content, RContentTypeDefinition.ContentType);
            SignatureHelpSource      signatureHelpSource  = new SignatureHelpSource(textBuffer, EditorShell);
            SignatureHelpSessionMock signatureHelpSession = new SignatureHelpSessionMock(textBuffer, caretPosition);
            List <ISignature>        signatures           = new List <ISignature>();

            signatureHelpSession.TrackingPoint = new TrackingPointMock(textBuffer, caretPosition, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
            await signatureHelpSource.AugmentSignatureHelpSessionAsync(signatureHelpSession, signatures, ast);

            signatures.Should().ContainSingle();
            signatures[0].Parameters.Should().HaveCount(3);
            signatures[0].CurrentParameter.Name.Should().Be("a");
            signatures[0].Content.Should().Be("x(a, b = TRUE, c = 12/7)");
            signatures[0].Documentation.Should().BeEmpty();
        }