예제 #1
0
        public override void OnSubscribed(VisualStudioDocumentTracker tracker)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }

            _foregroundDispatcher.AssertForegroundThread();

            var imports = GetImportItems(tracker);

            foreach (var import in imports)
            {
                var importFilePath = import.PhysicalPath;
                Debug.Assert(importFilePath != null);

                if (!_importTrackerCache.TryGetValue(importFilePath, out var importTracker))
                {
                    // First time seeing this import. Start tracking it.
                    importTracker = new ImportTracker(importFilePath);
                    _importTrackerCache[importFilePath] = importTracker;

                    StartListeningForChanges(importTracker);
                }

                importTracker.AssociatedDocuments.Add(tracker.FilePath);
            }
        }
예제 #2
0
        public override void OnUnsubscribed(VisualStudioDocumentTracker tracker)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }

            _foregroundDispatcher.AssertForegroundThread();

            var imports = GetImportItems(tracker);

            foreach (var import in imports)
            {
                var importFilePath = import.PhysicalPath;
                Debug.Assert(importFilePath != null);

                if (_importTrackerCache.TryGetValue(importFilePath, out var importTracker))
                {
                    importTracker.AssociatedDocuments.Remove(tracker.FilePath);

                    if (importTracker.AssociatedDocuments.Count == 0)
                    {
                        // There are no open documents that care about this import. We no longer need to track it.
                        StopListeningForChanges(importTracker);
                        _importTrackerCache.Remove(importFilePath);
                    }
                }
            }
        }
        private void OnBeforeDocumentWindowShow(IVsWindowFrame frame)
        {
            var vsTextView = VsShellUtilities.GetTextView(frame);

            if (vsTextView == null)
            {
                return;
            }

            var textView = _adapterFactory.GetWpfTextView(vsTextView);

            if (textView != null && textView != _textView)
            {
                _textView = textView;

                if (_documentTracker != null)
                {
                    _documentTracker.ContextChanged -= DocumentTracker_ContextChanged;
                }

                _documentTracker = _documentTrackerService.GetTracker(textView);
                _documentTracker.ContextChanged += DocumentTracker_ContextChanged;

                ((FrameworkElement)Content).DataContext = new RazorDocumentInfoViewModel(_documentTracker);
            }
        }
예제 #4
0
        private IEnumerable <RazorProjectItem> GetImportItems(VisualStudioDocumentTracker tracker)
        {
            var projectDirectory = Path.GetDirectoryName(tracker.ProjectPath);
            var templateEngine   = _templateEngineFactoryService.Create(projectDirectory, _ => { });
            var imports          = templateEngine.GetImportItems(tracker.FilePath);

            return(imports);
        }
예제 #5
0
        public RazorDocumentInfoViewModel(VisualStudioDocumentTracker documentTracker)
        {
            if (documentTracker == null)
            {
                throw new ArgumentNullException(nameof(documentTracker));
            }

            _documentTracker = documentTracker;
        }
예제 #6
0
        private void OnAfterDocumentWindowHide(IVsWindowFrame frame)
        {
            var vsTextView = VsShellUtilities.GetTextView(frame);

            var textView = _adapterFactory.GetWpfTextView(vsTextView);

            if (textView == _textView)
            {
                ((FrameworkElement)Content).DataContext = null;
                _documentTracker.ContextChanged        -= DocumentTracker_ContextChanged;

                _textView        = null;
                _documentTracker = null;
            }
        }
예제 #7
0
 public abstract BraceSmartIndenter Create(VisualStudioDocumentTracker documentTracker);
 public abstract VisualStudioRazorParser Create(VisualStudioDocumentTracker documentTracker);