InlineParamNameHintsDataTaggerProvider.cs 2.7 KB
Newer Older
1 2 3 4 5 6
using System.ComponentModel.Composition;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.CodeAnalysis.Editor.Shared.Tagging;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Editor.Tagging;
7
using Microsoft.CodeAnalysis.InlineParameterNameHints;
8 9 10 11 12 13 14 15
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Text.Shared.Extensions;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Tagging;
using Microsoft.VisualStudio.Utilities;

16
namespace Microsoft.CodeAnalysis.Editor.InlineParamNameHints
17
{
A
Ankita Khera 已提交
18 19 20
    /// <summary>
    /// The TaggerProvider that calls upon the service in order to locate the spans and names
    /// </summary>
21 22 23 24 25 26 27 28 29 30 31
    [Export(typeof(ITaggerProvider))]
    [ContentType("csharp")]
    [TagType(typeof(InlineParamNameHintDataTag))]
    [Name(nameof(InlineParamNameHintsDataTaggerProvider))]
    internal class InlineParamNameHintsDataTaggerProvider : AsynchronousTaggerProvider<InlineParamNameHintDataTag>
    {
        [ImportingConstructor]
        public InlineParamNameHintsDataTaggerProvider(
            IThreadingContext threadingContext,
            IAsynchronousOperationListenerProvider listenerProvider,
            IForegroundNotificationService notificationService)
A
Ankita Khera 已提交
32
            : base(threadingContext, listenerProvider.GetListener(FeatureAttribute.InlineParameterNameHints), notificationService)
33 34 35 36 37 38 39 40 41 42 43 44 45 46
        {
        }

        protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer)
        {
            return TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.NearImmediate);
        }

        protected override async Task ProduceTagsAsync(TaggerContext<InlineParamNameHintDataTag> context, DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition)
        {
            var cancellationToken = context.CancellationToken;
            var document = documentSnapshotSpan.Document;

            var snapshotSpan = documentSnapshotSpan.SnapshotSpan;
47
            var paramNameHintsService = document.GetLanguageService<IInlineParamNameHintsService>();
48 49 50 51 52
            var paramNameHintSpans = await paramNameHintsService.GetInlineParameterNameHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false);
            cancellationToken.ThrowIfCancellationRequested();

            foreach (var span in paramNameHintSpans)
            {
53
                context.AddTag(new TagSpan<InlineParamNameHintDataTag>(span._span.ToSnapshotSpan(snapshotSpan.Snapshot), new InlineParamNameHintDataTag(span._name))); //span.Item1.Length + 1, _format); //));
54 55 56 57
            }
        }
    }
}