예제 #1
0
 void DictTreeDeferrer_Idle(object sender, BackgroundDeferrer.IdleEventArgs e)
 {
     try
     {
         ApplyDictTreeFilter();
     }
     catch (Exception ex)
     {
         this.ShowError(ex);
     }
 }
예제 #2
0
		void _defer_Idle(object sender, BackgroundDeferrer.IdleEventArgs e)
		{
			ThreadHelper.JoinableTaskFactory.RunAsync(async () =>
			{
				await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

				Reparse();

				var ev = TagsChanged;
				if (ev != null) ev(this, new SnapshotSpanEventArgs(new SnapshotSpan(_snapshot, 0, _snapshot.Length)));
			});
		}
예제 #3
0
        private void _backgroundFecDeferrer_Idle(object sender, BackgroundDeferrer.IdleEventArgs e)
        {
            ThreadHelper.JoinableTaskFactory.RunAsync(async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                try
                {
                    if (_model != null &&
                        _model.FileContext != FileContext.Include &&
                        ProbeEnvironment.CurrentAppSettings.FileExistsInApp(_model.FileName))
                    {
                        if (ProbeToolsPackage.Instance.EditorOptions.RunBackgroundFecOnSave)
                        {
                            Compiler.BackgroundFec.Run(_model.FileName, _model.Snapshot.TextBuffer.CurrentSnapshot);
                        }
                        else
                        {
                            ErrorTaskProvider.Instance.RemoveAllForSource(ErrorTaskSource.BackgroundFec, _model.FileName);
                        }

                        if (ProbeToolsPackage.Instance.EditorOptions.RunCodeAnalysisOnSave)
                        {
                            var textBuffer = _model.Snapshot.TextBuffer;
                            var fileStore  = CodeModel.FileStore.GetOrCreateForTextBuffer(textBuffer);
                            if (fileStore == null)
                            {
                                return;
                            }

                            var fileName          = VsTextUtil.TryGetDocumentFileName(textBuffer);
                            var preprocessedModel = fileStore.CreatePreprocessedModel(_model.AppSettings, fileName, textBuffer.CurrentSnapshot, false, "Background Code Analysis");

                            var ca = new CodeAnalysis.CodeAnalyzer(null, preprocessedModel);
                            ca.Run();
                        }
                        else
                        {
                            ErrorTaskProvider.Instance.RemoveAllForSource(ErrorTaskSource.CodeAnalysis, _model.FileName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteEx(ex);
                }
            });
        }
예제 #4
0
        private void WordSelectDeferrer_Idle(object sender, BackgroundDeferrer.IdleEventArgs e)
        {
            ThreadHelper.JoinableTaskFactory.RunAsync(async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var snapPt = (SnapshotPoint)e.Value;
                if (_sourceBuffer.CurrentSnapshot != snapPt.Snapshot)
                {
                    Update(snapPt, null);
                    return;
                }

                var snapshot = snapPt.Snapshot;

                var fileStore = CodeModel.FileStore.GetOrCreateForTextBuffer(_sourceBuffer);
                if (fileStore != null)
                {
                    var appSettings = ProbeEnvironment.CurrentAppSettings;
                    var fileName    = VsTextUtil.TryGetDocumentFileName(_sourceBuffer);
                    var model       = fileStore.GetCurrentModel(appSettings, fileName, _sourceBuffer.CurrentSnapshot, "Word select idle");
                    var modelPos    = model.AdjustPosition(snapPt);
                    var caretToken  = model.File.FindDownwardTouching(modelPos).LastOrDefault(t => t.SourceDefinition != null);
                    if (caretToken == null)
                    {
                        Update(snapPt, null);
                        return;
                    }

                    var sourceDef      = caretToken.SourceDefinition;
                    var file           = model.File;
                    var matchingTokens = file.FindDownward(t => t.SourceDefinition == sourceDef);

                    var wordSpans = new NormalizedSnapshotSpanCollection(from t in matchingTokens select new SnapshotSpan(snapshot, VsTextUtil.ModelSpanToVsSnapshotSpan(model.Snapshot, t.Span, snapshot)));
                    if (!wordSpans.Any())
                    {
                        wordSpans = null;
                    }

                    Update(snapPt, wordSpans);
                }
            });
        }