public async Task <QuickInfoItem> GetQuickInfoItemAsync(IAsyncQuickInfoSession session, CancellationToken cancellationToken) { await Task.Yield().ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { return(null); } var syntaxTreeAndSnapshot = ParserService.SyntaxTreeAndSnapshot; if (syntaxTreeAndSnapshot == null) { return(null); } // Map the trigger point down to our buffer. SnapshotPoint?triggerPoint = session.GetTriggerPoint(syntaxTreeAndSnapshot.Snapshot); if (triggerPoint == null) { return(null); } var triggerToken = syntaxTreeAndSnapshot.SyntaxTree.Root.FindToken(triggerPoint.Value.Position); if (triggerToken.IsMissing || triggerToken.Parent == null) { return(null); } var applicableToSpan = syntaxTreeAndSnapshot.Snapshot.CreateTrackingSpan( triggerToken.Extent.Start, triggerToken.Extent.Length, SpanTrackingMode.EdgeExclusive); var location = triggerToken.GetLocation(); var qiContent = $"{triggerToken.GetText()}\r\n{triggerToken.Kind} Ln {location?.StartLine + 1} Ch {location?.StartCharacter + 1}\r\n{triggerToken.Parent?.GetType().Name}"; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var modifier = ModifierKeys.Control | ModifierKeys.Shift; if ((Keyboard.Modifiers & modifier) != modifier) { return(null); } var controlControl = new SymbolQuickInfoControl { CrispImage = { Moniker = ImageMonikers.StatusInformation }, TextContent = { Content = qiContent } }; var qiItem = new QuickInfoItem(applicableToSpan: applicableToSpan, item: controlControl ); return(qiItem); }
public async Task <QuickInfoItem> GetQuickInfoItemAsync(IAsyncQuickInfoSession session, CancellationToken cancellationToken) { await Task.Yield().ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { return(null); } var syntaxTreeAndSnapshot = ParserService.SyntaxTreeAndSnapshot; if (syntaxTreeAndSnapshot == null) { return(null); } // Map the trigger point down to our buffer. SnapshotPoint?triggerPoint = session.GetTriggerPoint(syntaxTreeAndSnapshot.Snapshot); if (triggerPoint == null) { return(null); } var qiInfo = QuickInfoProvider.GetQuickInfoDefinition(syntaxTreeAndSnapshot.SyntaxTree, triggerPoint.Value.Position); if (qiInfo == null) { return(null); } var applicableToSpan = syntaxTreeAndSnapshot.Snapshot.CreateTrackingSpan( qiInfo.ApplicableToExtent.Start, qiInfo.ApplicableToExtent.Length, SpanTrackingMode.EdgeExclusive); await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var qiContent = _textBlockBuilderService.ToTextBlock(qiInfo.Content); var controlControl = new SymbolQuickInfoControl { CrispImage = { Moniker = GdImageMonikers.GetMoniker(qiInfo.Glyph) }, TextContent = { Content = qiContent } }; var qiItem = new QuickInfoItem(applicableToSpan: applicableToSpan, item: controlControl ); return(qiItem); }