示例#1
0
        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)));
 }
示例#4
0
            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();
            }
示例#5
0
 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)));
 }
示例#10
0
 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)));
 }
示例#11
0
 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)));
 }
示例#12
0
 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)));
 }
示例#14
0
 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)));
 }
示例#15
0
        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)));
        }
示例#18
0
 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);
 }
示例#19
0
 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)));
 }
示例#20
0
 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));
示例#22
0
 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)));
 }
示例#23
0
        public CompilationAvailableTaggerEventSource(
            ITextBuffer subjectBuffer,
            IThreadingContext threadingContext,
            IAsynchronousOperationListener asyncListener,
            params ITaggerEventSource[] eventSources)
        {
            _subjectBuffer    = subjectBuffer;
            _asyncListener    = asyncListener;
            _underlyingSource = TaggerEventSources.Compose(eventSources);

            _workQueue = new AsynchronousSerialWorkQueue(threadingContext, asyncListener);
        }
示例#24
0
            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();
            }
示例#25
0
        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)));
 }
示例#27
0
        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)));
        }
示例#28
0
 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));
            }
示例#30
0
            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();
            }