예제 #1
0
        protected override int GetDataTipTextImpl(TextSpan[] pSpan, AbstractLanguageService <TPackage, TLanguageService> .VsLanguageDebugInfo debugInfo, out string pbstrText)
        {
            var textViewModel = WpfTextView.TextViewModel;

            if (textViewModel == null)
            {
                Debug.Assert(WpfTextView.IsClosed);
                pbstrText = null;
                return(VSConstants.E_FAIL);
            }

            // We need to map the TextSpan from the DataBuffer to our subject buffer.
            var span         = textViewModel.DataBuffer.CurrentSnapshot.GetSpan(pSpan[0]);
            var subjectSpans = WpfTextView.BufferGraph.MapDownToBuffer(span, SpanTrackingMode.EdgeInclusive, _subjectBuffer);

            // The following loop addresses the case where the position is on a seam and maps to multiple source spans.
            // In these cases, we assume it's okay to return the first span that successfully returns a DataTip.
            // It's most likely that either only one will succeed or both with fail.
            var expectedSpanLength = span.Length;

            foreach (var candidateSpan in subjectSpans)
            {
                // First, we'll only consider spans whose length matches our input span.
                if (candidateSpan.Length != expectedSpanLength)
                {
                    continue;
                }

                // Next, we'll check to see if there is actually a DataTip for this candidate.
                // If there is, we'll map this span back to the DataBuffer and return it.
                pSpan[0] = candidateSpan.ToVsTextSpan();
                var hr = base.GetDataTipTextImpl(_subjectBuffer, pSpan, debugInfo, out pbstrText);
                if (ErrorHandler.Succeeded(hr))
                {
                    var subjectSpan = _subjectBuffer.CurrentSnapshot.GetSpan(pSpan[0]);

                    // When mapping back up to the surface buffer, if we get more than one span,
                    // take the span that intersects with the input span, since that's probably
                    // the one we care about.
                    // If there are no such spans, just return.
                    var surfaceSpan = WpfTextView.BufferGraph.MapUpToBuffer(subjectSpan, SpanTrackingMode.EdgeInclusive, textViewModel.DataBuffer)
                                      .SingleOrDefault(x => x.IntersectsWith(span));

                    if (surfaceSpan == default)
                    {
                        pbstrText = null;
                        return(VSConstants.E_FAIL);
                    }

                    // pSpan is an in/out parameter
                    pSpan[0] = surfaceSpan.ToVsTextSpan();

                    return(hr);
                }
            }

            pbstrText = null;
            return(VSConstants.E_FAIL);
        }
 protected AbstractVsTextViewFilter(
     AbstractLanguageService <TPackage, TLanguageService> languageService,
     IWpfTextView wpfTextView,
     IVsEditorAdaptersFactoryService editorAdaptersFactoryService)
     : base(wpfTextView, editorAdaptersFactoryService, languageService.SystemServiceProvider)
 {
     LanguageService = languageService;
 }
 protected AbstractVsTextViewFilter(
     AbstractLanguageService <TPackage, TLanguageService, TProject> languageService,
     IWpfTextView wpfTextView,
     IVsEditorAdaptersFactoryService editorAdaptersFactoryService,
     ICommandHandlerServiceFactory commandHandlerServiceFactory)
     : base(wpfTextView, commandHandlerServiceFactory, editorAdaptersFactoryService, languageService.SystemServiceProvider)
 {
     _languageService = languageService;
 }
예제 #4
0
 public DebuggerIntelliSenseFilter(
     AbstractLanguageService <TPackage, TLanguageService> languageService,
     IWpfTextView wpfTextView,
     IVsEditorAdaptersFactoryService adapterFactory,
     IFeatureServiceFactory featureServiceFactory)
     : base(languageService, wpfTextView, adapterFactory)
 {
     _featureServiceFactory = featureServiceFactory;
 }
 public DebuggerIntelliSenseFilter(
     AbstractLanguageService <TPackage, TLanguageService, TProject> languageService,
     IWpfTextView wpfTextView,
     IVsEditorAdaptersFactoryService adapterFactory,
     ICommandHandlerServiceFactory commandFactory)
     : base(languageService, wpfTextView, adapterFactory, commandFactory)
 {
     _wpfTextView    = wpfTextView;
     _commandFactory = commandFactory;
 }
예제 #6
0
        protected virtual int GetDataTipTextImpl(TextSpan[] pSpan, AbstractLanguageService <TPackage, TLanguageService> .VsLanguageDebugInfo debugInfo, out string pbstrText)
        {
            var subjectBuffer = WpfTextView.GetBufferContainingCaret();

            if (subjectBuffer == null)
            {
                pbstrText = null;
                return(VSConstants.E_FAIL);
            }

            return(GetDataTipTextImpl(subjectBuffer, pSpan, debugInfo, out pbstrText));
        }
예제 #7
0
        protected int GetDataTipTextImpl(ITextBuffer subjectBuffer, TextSpan[] pSpan, AbstractLanguageService <TPackage, TLanguageService> .VsLanguageDebugInfo debugInfo, out string pbstrText)
        {
            pbstrText = null;

            var vsBuffer = EditorAdaptersFactory.GetBufferAdapter(subjectBuffer);

            // TODO: broken in REPL
            if (vsBuffer == null)
            {
                return(VSConstants.E_FAIL);
            }

            return(debugInfo.GetDataTipText(vsBuffer, pSpan, out pbstrText));
        }