コード例 #1
0
        /// <inheritdoc/>
        public ITrackingPoint Show(ITextView textView, AddInlineCommentTag tag)
        {
            Guard.ArgumentNotNull(tag, nameof(tag));

            var lineAndtrackingPoint = GetLineAndTrackingPoint(textView, tag);
            var line          = lineAndtrackingPoint.Item1;
            var trackingPoint = lineAndtrackingPoint.Item2;
            var options       = new PeekSessionCreationOptions(
                textView,
                InlineCommentPeekRelationship.Instance.Name,
                trackingPoint,
                defaultHeight: 0);

            ExpandCollapsedRegions(textView, line.Extent);

            var session = peekBroker.TriggerPeekSession(options);
            var item    = session.PeekableItems.OfType <InlineCommentPeekableItem>().FirstOrDefault();

            if (item != null)
            {
                var placeholder = item.ViewModel.Thread.Comments.Last();
                placeholder.CancelEdit.Take(1).Subscribe(_ => session.Dismiss());
            }

            return(trackingPoint);
        }
コード例 #2
0
        /// <inheritdoc/>
        public ITrackingPoint Show(ITextView textView, AddInlineCommentTag tag)
        {
            Guard.ArgumentNotNull(tag, nameof(tag));

            var line          = textView.TextSnapshot.GetLineFromLineNumber(tag.LineNumber);
            var trackingPoint = textView.TextSnapshot.CreateTrackingPoint(line.Start.Position, PointTrackingMode.Positive);

            ExpandCollapsedRegions(textView, line.Extent);

            var session = peekBroker.TriggerPeekSession(textView, trackingPoint, InlineCommentPeekRelationship.Instance.Name);
            var item    = session.PeekableItems.OfType <InlineCommentPeekableItem>().FirstOrDefault();

            if (item != null)
            {
                var placeholder = item.ViewModel.Thread.Comments.Last();
                placeholder.CancelEdit.Take(1).Subscribe(_ => session.Dismiss());
            }

            return(trackingPoint);
        }
コード例 #3
0
        /// <inheritdoc/>
        public ITrackingPoint Show(ITextView textView, DiffSide side, int lineNumber)
        {
            var lineAndtrackingPoint = GetLineAndTrackingPoint(textView, side, lineNumber);
            var line          = lineAndtrackingPoint.Item1;
            var trackingPoint = lineAndtrackingPoint.Item2;
            var options       = new PeekSessionCreationOptions(
                textView,
                relationship,
                trackingPoint,
                defaultHeight: 0);

            ExpandCollapsedRegions(textView, line.Extent);

            var session = peekBroker.TriggerPeekSession(options);
            var item    = session.PeekableItems.OfType <IClosable>().FirstOrDefault();

            item?.Closed.Take(1).Subscribe(_ => session.Dismiss());

            return(trackingPoint);
        }
コード例 #4
0
        private void HandlePeekHelp()
        {
            PeekSessionCreationOptions options = new PeekSessionCreationOptions(_textView, PeekHelpRelationship.Instance.Name);

            if (_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView))
            {
                ITextView containingTextView;
                if (_textView.Properties.TryGetProperty("PeekContainingTextView", out containingTextView) && containingTextView != null)
                {
                    IPeekSession session = _peekBroker.GetPeekSession(containingTextView);
                    if (session != null)
                    {
                        _peekBroker.TriggerNestedPeekSession(options, session);
                    }
                }
            }
            else
            {
                _peekBroker.TriggerPeekSession(options);
            }

            _telemetrySession.PostEvent("VS/PPT-PeekHelp/PeekF1CommandInvoked");
        }
コード例 #5
0
        public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
        {
            if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
            {
                switch ((VSConstants.VSStd97CmdID)nCmdID)
                {
                case VSConstants.VSStd97CmdID.GotoDefn:
                    if (TryGoToDefinition())
                    {
                        return(VSConstants.S_OK);
                    }
                    break;
                }
            }
            else if (pguidCmdGroup == VSConstants.VsStd12)
            {
                switch ((VSConstants.VSStd12CmdID)nCmdID)
                {
                case VSConstants.VSStd12CmdID.PeekDefinition:
                    if (!_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView) &&
                        !_textView.Roles.Contains(PredefinedTextViewRoles.CodeDefinitionView))
                    {
                        _peekBroker.TriggerPeekSession(_textView, PredefinedPeekRelationships.Definitions.Name);
                        return(VSConstants.S_OK);
                    }
                    break;
                }
            }

            var res = Next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);

            if (pguidCmdGroup == VSConstants.VSStd2K && _signatureConfig != null && _signatureConfig.Enabled)
            {
                switch ((VSConstants.VSStd2KCmdID)nCmdID)
                {
                case VSConstants.VSStd2KCmdID.TYPECHAR:
                    var ch = GetTypeChar(pvaIn);
                    if (ch == _signatureConfig.TriggerInstructionSignatureChar ||
                        ch == _signatureConfig.TriggerFunctionSignatureChar)
                    {
                        StartSignatureSession();
                    }
                    else if (ch == _signatureConfig.DismissSignatureChar)
                    {
                        CancelSignatureSession();
                    }
                    else if (ch == _signatureConfig.TriggerParameterChar)
                    {
                        ChangeParameterSignatureSession();
                    }
                    break;

                case VSConstants.VSStd2KCmdID.BACKSPACE:
                case VSConstants.VSStd2KCmdID.DELETE:
                case VSConstants.VSStd2KCmdID.DELETETOEOL:
                case VSConstants.VSStd2KCmdID.DELETEWORDLEFT:
                case VSConstants.VSStd2KCmdID.LEFT:
                case VSConstants.VSStd2KCmdID.RIGHT:
                    ChangeParameterSignatureSession();
                    break;

                case VSConstants.VSStd2KCmdID.DELETELINE:
                case VSConstants.VSStd2KCmdID.DELETETOBOL:
                case VSConstants.VSStd2KCmdID.RETURN:
                case VSConstants.VSStd2KCmdID.CANCEL:
                    CancelSignatureSession();
                    break;
                }
            }

            if (_signatureConfig != null && !_signatureConfig.Enabled)
            {
                CancelSignatureSession();
            }

            return(res);
        }
コード例 #6
0
 public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg)
 {
     _peekBroker.TriggerPeekSession(TextView, PredefinedPeekRelationships.Definitions.Name);
     return(CommandResult.Executed);
 }
コード例 #7
0
 bool TryPeek()
 {
     return(peekBroker.TriggerPeekSession(wpfTextView, PredefinedPeekRelationships.Definitions.Name) != null);
 }
コード例 #8
0
ファイル: EditFilter.cs プロジェクト: mkolovic/PTVS
        private int ExecWorker(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
        {
            // preprocessing
            if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
            {
                switch ((VSConstants.VSStd97CmdID)nCmdID)
                {
                case VSConstants.VSStd97CmdID.Paste:
                    if (!_pyService.AdvancedOptions.PasteRemovesReplPrompts)
                    {
                        // Not stripping prompts, so don't use our logic
                        break;
                    }
                    var beforePaste = _textView.TextSnapshot;
                    if (_editorOps.Paste())
                    {
                        var afterPaste = _textView.TextSnapshot;
                        var um         = _undoManagerProvider.GetTextBufferUndoManager(afterPaste.TextBuffer);
                        using (var undo = um.TextBufferUndoHistory.CreateTransaction(Strings.RemoveReplPrompts)) {
                            if (ReplPromptHelpers.RemovePastedPrompts(beforePaste, afterPaste))
                            {
                                undo.Complete();
                            }
                        }
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd97CmdID.GotoDefn: GotoDefinition(); return(VSConstants.S_OK);

                case VSConstants.VSStd97CmdID.FindReferences: FindAllReferences(); return(VSConstants.S_OK);
                }
            }
            else if (pguidCmdGroup == VSConstants.VsStd12)
            {
                switch ((VSConstants.VSStd12CmdID)nCmdID)
                {
                case VSConstants.VSStd12CmdID.PeekDefinition:
                    if (_peekBroker != null &&
                        !_textView.Roles.Contains(PredefinedTextViewRoles.EmbeddedPeekTextView) &&
                        !_textView.Roles.Contains(PredefinedTextViewRoles.CodeDefinitionView))
                    {
                        _peekBroker.TriggerPeekSession(_textView, PredefinedPeekRelationships.Definitions.Name);
                        return(VSConstants.S_OK);
                    }
                    break;
                }
            }
            else if (pguidCmdGroup == CommonConstants.Std2KCmdGroupGuid)
            {
                SnapshotPoint?pyPoint;
                switch ((VSConstants.VSStd2KCmdID)nCmdID)
                {
                case VSConstants.VSStd2KCmdID.RETURN:
                    pyPoint = _textView.GetPythonCaret();
                    if (pyPoint != null)
                    {
                        // https://github.com/Microsoft/PTVS/issues/241
                        // If the current line is a full line comment and we
                        // are splitting the text, automatically insert the
                        // comment marker on the new line.
                        var line     = pyPoint.Value.GetContainingLine();
                        var lineText = pyPoint.Value.Snapshot.GetText(line.Start, pyPoint.Value - line.Start);
                        int comment  = lineText.IndexOf('#');
                        if (comment >= 0 &&
                            pyPoint.Value < line.End &&
                            line.Start + comment < pyPoint.Value &&
                            string.IsNullOrWhiteSpace(lineText.Remove(comment))
                            )
                        {
                            int extra = lineText.Skip(comment + 1).TakeWhile(char.IsWhiteSpace).Count() + 1;
                            using (var edit = line.Snapshot.TextBuffer.CreateEdit()) {
                                edit.Insert(
                                    pyPoint.Value.Position,
                                    _textView.Options.GetNewLineCharacter() + lineText.Substring(0, comment + extra)
                                    );
                                edit.Apply();
                            }

                            return(VSConstants.S_OK);
                        }
                    }
                    break;

                case VSConstants.VSStd2KCmdID.FORMATDOCUMENT:
                    pyPoint = _textView.GetPythonCaret();
                    if (pyPoint != null)
                    {
                        FormatCode(new SnapshotSpan(pyPoint.Value.Snapshot, 0, pyPoint.Value.Snapshot.Length), false);
                    }
                    return(VSConstants.S_OK);

                case VSConstants.VSStd2KCmdID.FORMATSELECTION:
                    foreach (var span in _textView.BufferGraph.MapDownToFirstMatch(
                                 _textView.Selection.StreamSelectionSpan.SnapshotSpan,
                                 SpanTrackingMode.EdgeInclusive,
                                 EditorExtensions.IsPythonContent
                                 ))
                    {
                        FormatCode(span, true);
                    }
                    return(VSConstants.S_OK);

                case VSConstants.VSStd2KCmdID.SHOWMEMBERLIST:
                case VSConstants.VSStd2KCmdID.COMPLETEWORD:
                    var controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController));
                    if (controller != null)
                    {
                        IntellisenseController.ForceCompletions = true;
                        try {
                            controller.TriggerCompletionSession(
                                (VSConstants.VSStd2KCmdID)nCmdID == VSConstants.VSStd2KCmdID.COMPLETEWORD,
                                true
                                );
                        } finally {
                            IntellisenseController.ForceCompletions = false;
                        }
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd2KCmdID.QUICKINFO:
                    controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController));
                    if (controller != null)
                    {
                        controller.TriggerQuickInfo();
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd2KCmdID.PARAMINFO:
                    controller = _textView.Properties.GetProperty <IntellisenseController>(typeof(IntellisenseController));
                    if (controller != null)
                    {
                        controller.TriggerSignatureHelp();
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd2KCmdID.OUTLN_STOP_HIDING_ALL:
                    _textView.GetOutliningTagger()?.Disable(_textView.TextSnapshot);
                    // let VS get the event as well
                    break;

                case VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING:
                    _textView.GetOutliningTagger()?.Enable(_textView.TextSnapshot);
                    // let VS get the event as well
                    break;

                case VSConstants.VSStd2KCmdID.COMMENT_BLOCK:
                case VSConstants.VSStd2KCmdID.COMMENTBLOCK:
                    if (_textView.CommentOrUncommentBlock(comment: true))
                    {
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd2KCmdID.UNCOMMENT_BLOCK:
                case VSConstants.VSStd2KCmdID.UNCOMMENTBLOCK:
                    if (_textView.CommentOrUncommentBlock(comment: false))
                    {
                        return(VSConstants.S_OK);
                    }
                    break;

                case VSConstants.VSStd2KCmdID.EXTRACTMETHOD:
                    ExtractMethod();
                    return(VSConstants.S_OK);

                case VSConstants.VSStd2KCmdID.RENAME:
                    RefactorRename();
                    return(VSConstants.S_OK);
                }
            }
            else if (pguidCmdGroup == GuidList.guidPythonToolsCmdSet)
            {
                switch (nCmdID)
                {
                case PkgCmdIDList.cmdidRefactorRenameIntegratedShell:
                    RefactorRename();
                    return(VSConstants.S_OK);

                case PkgCmdIDList.cmdidExtractMethodIntegratedShell:
                    ExtractMethod();
                    return(VSConstants.S_OK);

                case CommonConstants.StartDebuggingCmdId:
                case CommonConstants.StartWithoutDebuggingCmdId:
                    PythonToolsPackage.LaunchFile(_serviceProvider, _textView.GetFilePath(), nCmdID == CommonConstants.StartDebuggingCmdId, true);
                    return(VSConstants.S_OK);
                }
            }

            return(_next.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut));
        }