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)));
        }
Example #3
0
 public Task <bool> HasSuggestedActionsAsync(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken)
 {
     if (TextView != null && !TextView.Caret.InVirtualSpace)
     {
         var rPosition = TextView.MapDownToR(TextView.Caret.Position.BufferPosition);
         if (rPosition.HasValue && SuggestedActionProviders.Any(actionProvider => actionProvider.HasSuggestedActions(TextView, TextBuffer, rPosition.Value.Position)))
         {
             return(Task.FromResult(true));
         }
     }
     return(Task.FromResult(false));
 }
 public Task <bool> HasSuggestedActionsAsync(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken)
 => Task.FromResult(
     TextView != null &&
     SuggestedActionProviders.Any(a => a.HasSuggestedActions(TextView, TextBuffer, PositionFromRange(range))));