protected override ITaggerEventSource CreateEventSource( ITextView textView, ITextBuffer subjectBuffer ) { this.AssertIsForeground(); const TaggerDelay Delay = TaggerDelay.Short; // Note: we don't listen for OnTextChanged. They'll get reported by the ViewSpan changing and also the // SemanticChange notification. // // Note: when the user scrolls, we will try to reclassify as soon as possible. That way we appear // semantically unclassified for a very short amount of time. // // Note: because we use frozen-partial documents for semantic classification, we may end up with incomplete // semantics (esp. during solution load). Because of this, we also register to hear when the full // compilation is available so that reclassify and bring ourselves up to date. return(new CompilationAvailableTaggerEventSource( subjectBuffer, Delay, ThreadingContext, AsyncListener, TaggerEventSources.OnViewSpanChanged( ThreadingContext, textView, textChangeDelay: Delay, scrollChangeDelay: TaggerDelay.NearImmediate ), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, Delay, this.AsyncListener), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, Delay) )); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnSemanticChanged(subjectBuffer, TaggerDelay.Short, _semanticChangeNotificationService), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, TaggerDelay.Short), TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.Short, reportChangedSpans: true))); }
protected override ITaggerEventSource CreateEventSource( ITextView textView, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( new EditorFormatMapChangedEventSource(_editorFormatMap), TaggerEventSources.OnTextChanged(subjectBuffer))); }
public Tagger( CopyPasteAndPrintingClassificationBufferTaggerProvider owner, ITextBuffer subjectBuffer, IAsynchronousOperationListener asyncListener ) : base(owner.ThreadingContext) { _owner = owner; _subjectBuffer = subjectBuffer; const TaggerDelay Delay = TaggerDelay.Short; // Note: because we use frozen-partial documents for semantic classification, we may end up with incomplete // semantics (esp. during solution load). Because of this, we also register to hear when the full // compilation is available so that reclassify and bring ourselves up to date. _eventSource = new CompilationAvailableTaggerEventSource( subjectBuffer, Delay, owner.ThreadingContext, asyncListener, TaggerEventSources.OnWorkspaceChanged(subjectBuffer, Delay, asyncListener), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, Delay) ); ConnectToEventSource(); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // TaggerDelay is NearImmediate because we want the renaming and tag creation to be instantaneous return(TaggerEventSources.Compose( TaggerEventSources.OnViewSpanChanged(ThreadingContext, textViewOpt, textChangeDelay: TaggerDelay.Short, scrollChangeDelay: TaggerDelay.NearImmediate), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, TaggerDelay.NearImmediate, _listener))); }
private ITaggerEventSource CreateEventSource() { var eventSource = _dataSource.CreateEventSource(_textViewOpt, _subjectBuffer); // If there are any options specified for this tagger, then also hook up event // notifications for when those options change. var optionChangedEventSources = _dataSource.Options .Concat <IOption>(_dataSource.PerLanguageOptions) .Select( o => TaggerEventSources.OnOptionChanged( _subjectBuffer, o, TaggerDelay.NearImmediate ) ) .ToList(); if (optionChangedEventSources.Count == 0) { // No options specified for this tagger. So just keep the event source as is. return(eventSource); } optionChangedEventSources.Add(eventSource); return(TaggerEventSources.Compose(optionChangedEventSources)); }
protected sealed override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // We listen to the following events: // 1) Text changes. These can obviously affect outlining, so we need to recompute when // we hear about them. // 2) Parse option changes. These can affect outlining when, for example, we change from // DEBUG to RELEASE (affecting the inactive/active regions). // 3) When we hear about a workspace being registered. Outlining may run before a // we even know about a workspace. This can happen, for example, in the TypeScript // case. With TypeScript a file is opened, but the workspace is not generated until // some time later when they have examined the file system. As such, initially, // the file will not have outline spans. When the workspace is created, we want to // then produce the right outlining spans. return(TaggerEventSources.Compose( TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.OnIdle), TaggerEventSources.OnParseOptionChanged(subjectBuffer, TaggerDelay.OnIdle), TaggerEventSources.OnWorkspaceRegistrationChanged(subjectBuffer, TaggerDelay.OnIdle), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowBlockStructureGuidesForCodeLevelConstructs, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowBlockStructureGuidesForDeclarationLevelConstructs, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowBlockStructureGuidesForCommentsAndPreprocessorRegions, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForCodeLevelConstructs, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForDeclarationLevelConstructs, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForCommentsAndPreprocessorRegions, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource( ITextView textView, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnEditorFormatMapChanged(_editorFormatMap, TaggerDelay.NearImmediate), TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, TaggerDelay.Medium), TaggerEventSources.OnWorkspaceRegistrationChanged(subjectBuffer, TaggerDelay.Medium), TaggerEventSources.OnDiagnosticsChanged(subjectBuffer, _diagnosticService, TaggerDelay.Short))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.NearImmediate), TaggerEventSources.OnCaretPositionChanged(textView, subjectBuffer, TaggerDelay.NearImmediate), TaggerEventSources.OnParseOptionChanged(subjectBuffer, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.OnIdle, reportChangedSpans: true), TaggerEventSources.OnCaretPositionChanged(textView, subjectBuffer, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, FeatureOnOffOptions.KeywordHighlighting, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // Note: we don't listen for OnTextChanged. Text changes to this this buffer will get // reported by OnSemanticChanged. return(TaggerEventSources.Compose( TaggerEventSources.OnSemanticChanged(subjectBuffer, TaggerDelay.Short, _semanticChangeNotificationService), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, TaggerDelay.Short))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { // Note: we don't listen for OnTextChanged. Text changes to this buffer will get // reported by OnSemanticChanged. return(TaggerEventSources.Compose( TaggerEventSources.OnCaretPositionChanged(textView, textView.TextBuffer, TaggerDelay.Short), TaggerEventSources.OnSemanticChanged(subjectBuffer, TaggerDelay.OnIdle, _semanticChangeNotificationService))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { // Note: we don't listen for OnTextChanged. Text changes to this buffer will get // reported by OnSemanticChanged. return(TaggerEventSources.Compose( TaggerEventSources.OnCaretPositionChanged(textView, textView.TextBuffer), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, AsyncListener), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer))); }
protected override ITaggerEventSource CreateEventSource(ITextView?textView, ITextBuffer subjectBuffer) { this.ThreadingContext.ThrowIfNotOnUIThread(); return(TaggerEventSources.Compose( new EventSource(subjectBuffer), TaggerEventSources.OnTextChanged(subjectBuffer), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // We act as a source of events ourselves. When the diagnostics service tells // us about new diagnostics, we'll use that to kick of the asynchronous tagging // work. return(TaggerEventSources.Compose( TaggerEventSources.OnWorkspaceRegistrationChanged(subjectBuffer, TaggerDelay.Medium), this)); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { AssertIsForeground(); return(TaggerEventSources.Compose( new EventSource(subjectBuffer), TaggerEventSources.OnTextChanged(subjectBuffer), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer))); }
public CompilationAvailableTaggerEventSource( ITextBuffer subjectBuffer, IAsynchronousOperationListener asyncListener, params ITaggerEventSource[] eventSources) { _subjectBuffer = subjectBuffer; _eventSource = new CompilationAvailableEventSource(asyncListener); _underlyingSource = TaggerEventSources.Compose(eventSources); _onCompilationAvailable = () => this.Changed?.Invoke(this, TaggerEventArgs.Empty); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // The options we check here just affect the set of results we return if we run. return(TaggerEventSources.Compose( TaggerEventSources.OnViewSpanChanged(ThreadingContext, textViewOpt, textChangeDelay: TaggerDelay.Short, scrollChangeDelay: TaggerDelay.NearImmediate), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, TaggerDelay.NearImmediate, _listener), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForLiteralParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForObjectCreationParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForOtherParameters, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { // PERF: use a longer delay for OnTextChanged to minimize the impact of GCs while typing return(TaggerEventSources.Compose( TaggerEventSources.OnTextChanged(subjectBuffer, TaggerDelay.OnIdle), TaggerEventSources.OnCaretPositionChanged(textView, textView.TextBuffer, TaggerDelay.Short), TaggerEventSources.OnSemanticChanged(subjectBuffer, TaggerDelay.OnIdle, _semanticChangeNotificationService), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, TaggerDelay.Short), TaggerEventSources.OnOptionChanged(subjectBuffer, FeatureOnOffOptions.ReferenceHighlighting, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) // Because we use frozen-partial documents for semantic classification, we may end up with incomplete // semantics (esp. during solution load). Because of this, we also register to hear when the full // compilation is available so that reclassify and bring ourselves up to date. => new CompilationAvailableTaggerEventSource( subjectBuffer, AsyncListener, TaggerEventSources.OnWorkspaceChanged(subjectBuffer, AsyncListener), TaggerEventSources.OnViewSpanChanged(ThreadingContext, textViewOpt), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer), TaggerEventSources.OnOptionChanged(subjectBuffer, FeatureOnOffOptions.ShowInheritanceMargin));
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnViewSpanChanged(ThreadingContext, textViewOpt, textChangeDelay: TaggerDelay.Short, scrollChangeDelay: TaggerDelay.NearImmediate), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, TaggerDelay.NearImmediate, _listener), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.DisplayAllOverride, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.EnabledForParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForLiteralParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForObjectCreationParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForOtherParameters, TaggerDelay.NearImmediate))); }
public CompilationAvailableTaggerEventSource( ITextBuffer subjectBuffer, IThreadingContext threadingContext, IAsynchronousOperationListener asyncListener, params ITaggerEventSource[] eventSources) { _subjectBuffer = subjectBuffer; _asyncListener = asyncListener; _underlyingSource = TaggerEventSources.Compose(eventSources); _workQueue = new AsynchronousSerialWorkQueue(threadingContext, asyncListener); }
public Tagger(SemanticClassificationBufferTaggerProvider owner, ITextBuffer subjectBuffer) { _owner = owner; _subjectBuffer = subjectBuffer; const TaggerDelay Delay = TaggerDelay.Short; _eventSource = TaggerEventSources.Compose( TaggerEventSources.OnSemanticChanged(subjectBuffer, Delay, _owner._semanticChangeNotificationService), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, Delay)); ConnectToEventSource(); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { this.AssertIsForeground(); const TaggerDelay Delay = TaggerDelay.Short; // Note: we don't listen for OnTextChanged. They'll get reported by the ViewSpan changing // and also the SemanticChange nodification. // // Note: when the user scrolls, we will try to reclassify as soon as possible. That way // we appear semantically unclassified for a very short amount of time. return(TaggerEventSources.Compose( TaggerEventSources.OnViewSpanChanged(textView, textChangeDelay: Delay, scrollChangeDelay: TaggerDelay.NearImmediate), TaggerEventSources.OnSemanticChanged(subjectBuffer, Delay, _semanticChangeNotificationService))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { return(TaggerEventSources.Compose( TaggerEventSources.OnViewSpanChanged(ThreadingContext, textViewOpt, textChangeDelay: TaggerDelay.Short, scrollChangeDelay: TaggerDelay.NearImmediate), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, TaggerDelay.NearImmediate, _listener), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.DisplayAllOverride, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.EnabledForParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForLiteralParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForObjectCreationParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForOtherParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.SuppressForParametersThatMatchMethodIntent, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.EnabledForTypes, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForImplicitVariableTypes, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForLambdaParameterTypes, TaggerDelay.NearImmediate))); }
protected override ITaggerEventSource CreateEventSource(ITextView textView, ITextBuffer subjectBuffer) { this.AssertIsForeground(); // Note: we don't listen for OnTextChanged. They'll get reported by the ViewSpan changing and also the // SemanticChange notification. // // Note: because we use frozen-partial documents for semantic classification, we may end up with incomplete // semantics (esp. during solution load). Because of this, we also register to hear when the full // compilation is available so that reclassify and bring ourselves up to date. return(new CompilationAvailableTaggerEventSource( subjectBuffer, AsyncListener, TaggerEventSources.OnViewSpanChanged(ThreadingContext, textView), TaggerEventSources.OnWorkspaceChanged(subjectBuffer, this.AsyncListener), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer))); }
protected override ITaggerEventSource CreateEventSource(ITextView?textView, ITextBuffer subjectBuffer) { Contract.ThrowIfNull(textView); // Because we use frozen-partial documents for semantic classification, we may end up with incomplete // semantics (esp. during solution load). Because of this, we also register to hear when the full // compilation is available so that reclassify and bring ourselves up to date. // Note: Also generate tags when FeatureOnOffOptions.InheritanceMarginCombinedWithIndicatorMargin is changed, // because we want to refresh the glyphs in indicator margin. return(new CompilationAvailableTaggerEventSource( subjectBuffer, AsyncListener, TaggerEventSources.OnWorkspaceChanged(subjectBuffer, AsyncListener), TaggerEventSources.OnViewSpanChanged(ThreadingContext, textView), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer), TaggerEventSources.OnOptionChanged(subjectBuffer, FeatureOnOffOptions.ShowInheritanceMargin), TaggerEventSources.OnOptionChanged(subjectBuffer, FeatureOnOffOptions.InheritanceMarginCombinedWithIndicatorMargin))); }
protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, ITextBuffer subjectBuffer) { // We act as a source of events ourselves. When the diagnostics service tells // us about new diagnostics, we'll use that to kick of the asynchronous tagging // work. var eventSource = TaggerEventSources.Compose( TaggerEventSources.OnWorkspaceRegistrationChanged(subjectBuffer, TaggerDelay.Medium), this); // See if our owner has any additional events for us to listen to. var ownerEventSource = _owner.GetTaggerEventSource(); return(ownerEventSource == null ? eventSource : TaggerEventSources.Compose(ownerEventSource, eventSource)); }
public Tagger( SemanticClassificationBufferTaggerProvider owner, ITextBuffer subjectBuffer, IAsynchronousOperationListener asyncListener) : base(owner.ThreadingContext) { _owner = owner; _subjectBuffer = subjectBuffer; const TaggerDelay Delay = TaggerDelay.Short; _eventSource = TaggerEventSources.Compose( TaggerEventSources.OnWorkspaceChanged(subjectBuffer, Delay, asyncListener), TaggerEventSources.OnDocumentActiveContextChanged(subjectBuffer, Delay)); ConnectToEventSource(); }