public IEnumerable <SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken)
        {
            if (IsDisposed || cancellationToken.IsCancellationRequested || _settings.AutomaticSync)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            if (!range.Snapshot.TextBuffer.ContentType.TypeName.EqualsOrdinal(MdContentTypeDefinition.ContentType))
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var codeBlock = TextView.GetCurrentRCodeBlock();

            if (codeBlock == null)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var caretPosition  = TextView.Caret.Position.BufferPosition;
            var applicableSpan = codeBlock.ToSpan();

            return(SuggestedActionProviders
                   .Where(ap => ap.HasSuggestedActions(TextView, TextBuffer, caretPosition))
                   .Select(ap => new SuggestedActionSet(ap.GetSuggestedActions(TextView, TextBuffer, caretPosition), applicableToSpan: applicableSpan)));
        }
Example #2
0
        public IEnumerable <SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken)
        {
            if (IsDisposed ||
                cancellationToken.IsCancellationRequested ||
                !range.Snapshot.TextBuffer.ContentType.TypeName.EqualsOrdinal(RContentTypeDefinition.ContentType))
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var caretPosition = TextView.Caret.Position.BufferPosition;
            var bufferPoint   = TextView.MapDownToR(caretPosition);

            if (!bufferPoint.HasValue)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var ast            = _document?.EditorTree?.AstRoot;
            var bufferPosition = bufferPoint.Value.Position;

            _lastNode = ast?.GetNodeOfTypeFromPosition <TokenNode>(bufferPosition);
            if (_lastNode == null)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var applicableSpan = _lastNode.ToSpan();

            return(SuggestedActionProviders
                   .Where(ap => ap.HasSuggestedActions(TextView, TextBuffer, bufferPosition))
                   .Select(ap => new SuggestedActionSet(ap.GetSuggestedActions(TextView, TextBuffer, bufferPosition), applicableToSpan: applicableSpan)));
        }