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; }
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; }
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)); }
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)); }