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); } }
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); } }
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); }
public RazorDocumentInfoViewModel(VisualStudioDocumentTracker documentTracker) { if (documentTracker == null) { throw new ArgumentNullException(nameof(documentTracker)); } _documentTracker = documentTracker; }
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; } }
public abstract BraceSmartIndenter Create(VisualStudioDocumentTracker documentTracker);
public abstract VisualStudioRazorParser Create(VisualStudioDocumentTracker documentTracker);