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

            if (document == null)
            {
                return;
            }

            var service = document.GetLanguageService <IInlineHintsService>();

            if (service == null)
            {
                return;
            }

            var options = GlobalOptions.GetInlineHintsOptions(document.Project.Language);

            var snapshotSpan = documentSnapshotSpan.SnapshotSpan;
            var hints        = await service.GetInlineHintsAsync(document, snapshotSpan.Span.ToTextSpan(), options, cancellationToken).ConfigureAwait(false);

            foreach (var hint in hints)
            {
                // If we don't have any text to actually show the user, then don't make a tag.
                if (hint.DisplayParts.Sum(p => p.ToString().Length) == 0)
                {
                    continue;
                }

                context.AddTag(new TagSpan <InlineHintDataTag>(
                                   hint.Span.ToSnapshotSpan(snapshotSpan.Snapshot),
                                   new InlineHintDataTag(hint)));
            }
        }