SpanData <ReferenceInfo>?GetReference(MouseEventArgs e)
        {
            var loc = MouseLocation.TryCreateTextOnly(documentViewer.TextView, e);

            if (loc == null)
            {
                return(null);
            }
            if (loc.Position.IsInVirtualSpace)
            {
                return(null);
            }
            return(GetReference(loc.Position.Position.Position));
        }
        SpanData <ReferenceInfo>?GetReferenceCore(MouseEventArgs e)
        {
            if (Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Control)
            {
                return(null);
            }

            var documentViewer = TryGetDocumentViewer();

            if (documentViewer == null)
            {
                return(null);
            }

            var loc = MouseLocation.TryCreateTextOnly(documentViewer.TextView, e);

            if (loc == null || loc.Position.IsInVirtualSpace)
            {
                return(null);
            }
            int pos      = loc.Position.Position.Position;
            var spanData = documentViewer.Content.ReferenceCollection.Find(pos, false);

            if (spanData == null)
            {
                return(null);
            }
            if (spanData.Value.Data.Reference == null)
            {
                return(null);
            }
            if (Keyboard.Modifiers != ModifierKeys.Control)
            {
                if (spanData.Value.Data.IsDefinition)
                {
                    return(null);
                }
                if (spanData.Value.Data.IsLocal)
                {
                    return(null);
                }
            }

            return(spanData);
        }