예제 #1
0
        /// <summary>
        /// Closes the document
        /// </summary>
        public void Close()
        {
            if (IsClosed)
            {
                return;
            }

            IsClosed = true;
            Closing?.Invoke(this, null);

            EditorTree?.Dispose(); // this will also remove event handlers
            EditorTree = null;

            if (Closing != null)
            {
                foreach (var eh in Closing.GetInvocationList())
                {
                    var closingHandler = eh as EventHandler <EventArgs>;
                    if (closingHandler != null)
                    {
                        Debug.Fail(Invariant($"There are still listeners in the EditorDocument.OnDocumentClosing event list: {eh.Target}"));
                        Closing -= closingHandler;
                    }
                }
            }

            EditorBuffer?.Services?.RemoveService(this);
            EditorBuffer = null;
        }
예제 #2
0
 public RIntellisenseContext(IEditorIntellisenseSession session, IEditorBuffer editorBuffer, IREditorTree editorTree, int position, bool autoShown = true, bool isRHistoryRequest = false) :
     base(session, editorBuffer, position)
 {
     _editorTree         = editorTree;
     AutoShownCompletion = autoShown;
     IsRHistoryRequest   = isRHistoryRequest;
 }
예제 #3
0
        public TreeValidator(IREditorTree editorTree, IServiceContainer services)
        {
#if DEBUG
            TraceValidation.Enabled = false;
#endif

            _editorTree = editorTree;
            _editorTree.NodesRemoved    += OnNodesRemoved;
            _editorTree.UpdateCompleted += OnTreeUpdateCompleted;
            _editorTree.Closing         += OnTreeClose;

            _settings = services.GetService <IREditorSettings>();
            _idleTime = services.GetService <IIdleTimeService>();

            // Advise to settings changed *after* accessing the RSettings,
            // since accessing the host application (VS) settings object may
            // cause it fire Changed notification in some cases.
            _settings.SettingsChanged += OnSettingsChanged;
            _syntaxCheckEnabled        = IsSyntaxCheckEnabled(_editorTree.EditorBuffer, _settings);

            // We don't want to start validation right away since it may
            // interfere with the editor perceived startup performance.

            StartValidationNextIdle();
            ValidationResults = new ConcurrentQueue <IValidationError>();

            editorTree.EditorBuffer.AddService(this);
        }
예제 #4
0
        public ErrorTagCollection(IREditorTree editorTree)
        {
            RemovedTags = new ConcurrentQueue <EditorErrorTag>();

            _editorTree = editorTree;

            _editorTree.Closing         += OnTreeClosing;
            _editorTree.NodesRemoved    += OnNodesRemoved;
            _editorTree.UpdateCompleted += OnUpdateCompleted;
        }
예제 #5
0
        public ROutlineRegionBuilder(IREditorDocument document, IServiceContainer services)
            : base(document.EditorTree.TextBuffer(), services, services.GetService <IREditorSettings>().EnableOutlining)
        {
            EditorDocument          = document;
            EditorDocument.Closing += OnDocumentClosing;

            EditorTree = document.EditorTree;
            EditorTree.UpdateCompleted += OnTreeUpdateCompleted;
            EditorTree.Closing         += OnEditorTreeClosing;
        }
예제 #6
0
        private void OnTreeClosing(object sender, EventArgs e)
        {
            if (_editorTree != null)
            {
                _editorTree.Closing         -= OnTreeClosing;
                _editorTree.NodesRemoved    -= OnNodesRemoved;
                _editorTree.UpdateCompleted -= OnUpdateCompleted;

                _editorTree = null;
            }
        }
예제 #7
0
        private void OnTreeClose(object sender, EventArgs e)
        {
            _editorTree.EditorBuffer.RemoveService(this);

            StopValidation();

            _editorTree.NodesRemoved    -= OnNodesRemoved;
            _editorTree.UpdateCompleted -= OnTreeUpdateCompleted;
            _editorTree.Closing         -= OnTreeClose;
            _editorTree = null;

            _settings.SettingsChanged -= OnSettingsChanged;
            _idleTime.Idle            -= OnIdle;
        }
예제 #8
0
        public RSectionsCollection(IREditorTree tree, IReadOnlyList <ITextRange> sections)
        {
            _tree = tree;
            _tree.EditorBuffer.Changed += OnTextBufferChanged;

            foreach (var s in sections)
            {
                var span = s.ToSpan();
                _spans.Add(new SpanContent()
                {
                    TrackingSpan   = _tree.TextSnapshot().CreateTrackingSpan(span, SpanTrackingMode.EdgePositive),
                    OriginalLength = s.Length
                });
            }
        }
예제 #9
0
        public EditorErrorTag(IREditorTree editorTree, IValidationError error)
            : base(GetErrorType(error), error.Message)
        {
            _textBuffer = editorTree.EditorBuffer.As <ITextBuffer>();

            var document = _textBuffer.GetEditorDocument <IREditorDocument>();

            FileName = document?.FilePath;

            Description = error.Message;
            TaskType    = GetTaskType(error);

            _range = error;

            if (_range == null || _range.Start < 0)
            {
                _range = TextRange.EmptyRange;
            }
        }
예제 #10
0
        public TextChangeContext(IREditorTree editorTree, TreeTextChange change, TreeTextChange pendingChanges)
        {
            EditorTree = editorTree;

            TreeTextChange ttc;

            if (change.OldTextProvider == null || change.NewTextProvider == null)
            {
                var oldTextProvider = change.OldTextProvider ?? editorTree.AstRoot.TextProvider;
                var newTextProvider = change.NewTextProvider ?? editorTree.AstRoot.TextProvider;
                ttc = new TreeTextChange(change.Start, change.OldLength, change.NewLength, oldTextProvider, newTextProvider);
            }
            else
            {
                ttc = change;
            }

            PendingChanges = pendingChanges;
            PendingChanges.Combine(ttc);
        }
예제 #11
0
 public EditorDocumentMock(IREditorTree tree)
 {
     EditorTree = tree;
     tree.EditorBuffer.AddService(this);
 }
예제 #12
0
 /// <summary>
 /// Retrieves (or creates) the validator (syntax checker)
 /// for the document that is associated with the text buffer
 /// </summary>
 /// <param name="editorTree"></param>
 /// <param name="services"></param>
 public static TreeValidator FromEditorBuffer(IREditorTree editorTree, IServiceContainer services)
 => editorTree.EditorBuffer.GetService <TreeValidator>() ?? new TreeValidator(editorTree, services);
예제 #13
0
 public static ITextBuffer TextBuffer(this IREditorTree tree) => tree.EditorBuffer.As <ITextBuffer>();
예제 #14
0
 public static ITextSnapshot TextSnapshot(this IREditorTree tree) => tree.BufferSnapshot.As <ITextSnapshot>();