コード例 #1
0
ファイル: PythonLanguageClient.cs プロジェクト: int19h/PTVS
        private bool TryGetOpenedDocumentData(RunningDocumentInfo info, out ITextBuffer textBuffer, out string filePath)
        {
            textBuffer = null;
            filePath   = string.Empty;

            if (!info.IsDocumentInitialized)
            {
                return(false);
            }

            IVsUserData vsUserData = info.DocData as IVsUserData;

            if (vsUserData == null)
            {
                return(false);
            }

            // Acquire the text buffer and snapshot from the document
            vsUserData.GetData(Microsoft.VisualStudio.Editor.DefGuidList.guidDocumentTextSnapshot, out object snapshot);
            textBuffer = (snapshot as ITextSnapshot)?.TextBuffer;
            if (textBuffer == null)
            {
                return(false);
            }

            if (!TextDocumentFactoryService.TryGetTextDocument(textBuffer, out ITextDocument textDocument))
            {
                return(false);
            }

            filePath = textDocument.FilePath;

            return(true);
        }
コード例 #2
0
            public int OnBeforeSave(uint docCookie)
            {
                RunningDocumentInfo runningDocumentInfo = autoCheckoutOnSave._rdt.Value.GetDocumentInfo(docCookie);

                autoCheckoutOnSave.OnBeforeSave(runningDocumentInfo.Moniker);
                return(VSConstants.S_OK);
            }
コード例 #3
0
        public int OnBeforeSave(uint docCookie)
        {
            if (_package.optionPage.FormatOnSave)
            {
                RunningDocumentInfo docInfo = _package._runningDocTable.GetDocumentInfo(docCookie);
                Document            doc     = _package._dte.Documents.OfType <Document>().SingleOrDefault(x => x.FullName == docInfo.Moniker);

                if (doc != null)
                {
                    IVsTextView vsTextView = GetIVsTextView(doc.FullName);
                    if (vsTextView == null)
                    {
                        return(VSConstants.S_OK);
                    }

                    IWpfTextView wpfTextView = GetWpfTextView(vsTextView);
                    if (wpfTextView == null)
                    {
                        return(VSConstants.S_OK);
                    }

                    PrettierCommand cmd;
                    if (wpfTextView.Properties.TryGetProperty <PrettierCommand>("prettierCommand", out cmd))
                    {
                        ThreadHelper.JoinableTaskFactory.Run(() => cmd.MakePrettierAsync());
                    }
                }
            }
            return(VSConstants.S_OK);
        }
コード例 #4
0
        private ITextDocument GetTextDocument(RunningDocumentInfo info)
        {
            // Get vs buffer
            IVsTextBuffer docData;

            try {
                docData = info.DocData as IVsTextBuffer;
            }
            catch (Exception e) {
                Logger.LogWarn(e, "Error getting IVsTextBuffer for document {0}, skipping document", info.Moniker);
                return(null);
            }
            if (docData == null)
            {
                return(null);
            }

            // Get ITextDocument
            var textBuffer = _vsEditorAdaptersFactoryService.GetDocumentBuffer(docData);

            if (textBuffer == null)
            {
                return(null);
            }

            ITextDocument document;

            if (!_textDocumentFactoryService.TryGetTextDocument(textBuffer, out document))
            {
                return(null);
            }

            return(document);
        }
コード例 #5
0
        int IVsRunningDocTableEvents.OnAfterDocumentWindowHide(uint docCookie, IVsWindowFrame pFrame)
        {
            RunningDocumentTable rdt = new RunningDocumentTable(this);
            RunningDocumentInfo  doc = rdt.GetDocumentInfo(docCookie);

            return(0);
        }
コード例 #6
0
 public DocumentInfo(RunningDocumentInfo info)
 {
     this.ItemId        = info.ItemId;
     this.DocCookie     = info.DocCookie;
     this.HierarchyItem = new VSHierarchyItem(info.Hierarchy, info.ItemId, 0);
     this.DocumentName  = info.Moniker;
     this.InternalInfo  = info;
 }
コード例 #7
0
ファイル: Event.cs プロジェクト: Konctantin/VS_SDK_samples
        /// <summary>
        /// Base class for all other RDT event wrappers.  Each event wrapper 
        /// stores event-specific information and formats it for display
        /// in the Properties window.
        /// </summary>
        /// <param name="rdt">Running Document Table instance</param>
        /// <param name="message">Message to be displayed in the grid</param>
        /// <param name="cookie">Cookie to unadvise RDT events</param>
        public GenericEvent(RunningDocumentTable rdt, string message, uint cookie)
        {
            this.message = message;
            if (rdt == null || cookie == 0) return;

            rdi = rdt.GetDocumentInfo(cookie);
            docNameShort = GetShortDocName(rdi.Moniker);
        }
コード例 #8
0
        public static bool IsDirty(this RunningDocumentInfo rdi)
        {
            if (pIsDirty == null)
            {
                return(false);
            }

            return((bool)pIsDirty.GetValue(rdi));
        }
コード例 #9
0
        /// <summary>
        /// Base class for all other RDT event wrappers.  Each event wrapper
        /// stores event-specific information and formats it for display
        /// in the Properties window.
        /// </summary>
        /// <param name="rdt">Running Document Table instance</param>
        /// <param name="message">Message to be displayed in the grid</param>
        /// <param name="cookie">Cookie to unadvise RDT events</param>
        public GenericEvent(RunningDocumentTable rdt, string message, uint cookie)
        {
            this.message = message;
            if (rdt == null || cookie == 0)
            {
                return;
            }

            rdi          = rdt.GetDocumentInfo(cookie);
            docNameShort = GetShortDocName(rdi.Moniker);
        }
コード例 #10
0
        private void OnDocumentClosed(uint docCookie)
        {
            RunningDocumentInfo info = _rdt.Value.GetDocumentInfo(docCookie);

            if (info.Hierarchy != null && _xamlProjects.TryGetValue(info.Hierarchy, out VisualStudioProject project))
            {
                if (project.ContainsSourceFile(info.Moniker))
                {
                    project.RemoveSourceFile(info.Moniker);
                }
            }
        }
コード例 #11
0
        public int OnAfterSave(uint docCookie)
        {
            if (_stillLoading)
            {
                return(VSConstants.S_OK);
            }

            RunningDocumentInfo document = _runningDocumentTable.GetDocumentInfo(docCookie);
            string fileName = Path.GetFileName(document.Moniker);

            if (fileName.EndsWith(".scss", StringComparison.OrdinalIgnoreCase))
            {
                Compile(document.Moniker, document.Hierarchy);
            }
            return(VSConstants.S_OK);
        }
コード例 #12
0
 public int OnBeforeSave(uint docCookie)
 {
     if (_pkg.RemoveOnSave())
     {
         RunningDocumentInfo runningDocumentInfo = new RunningDocumentInfo(_pkg.rdt, docCookie);
         EnvDTE.Document     document            = _pkg.dte.Documents.OfType <EnvDTE.Document>().SingleOrDefault(x => x.FullName == runningDocumentInfo.Moniker);
         if (document == null)
         {
             return(VSConstants.S_OK);
         }
         if (document.Object("TextDocument") is TextDocument textDoc)
         {
             _pkg.RemoveTrailingWhiteSpaces(textDoc);
         }
     }
     return(VSConstants.S_OK);
 }
コード例 #13
0
 public int OnBeforeSave(uint docCookie)
 {
     if (_pkg.removeOnSave())
     {
         RunningDocumentInfo runningDocumentInfo = _pkg.rdt.GetDocumentInfo(docCookie);
         EnvDTE.Document     document            = _pkg.dte.Documents.OfType <EnvDTE.Document>().SingleOrDefault(x => x.FullName == runningDocumentInfo.Moniker);
         if (document == null)
         {
             return(VSConstants.S_OK);
         }
         var textDoc = document.Object("TextDocument") as TextDocument;
         if (textDoc != null)
         {
             RemoveTrailingWhitespacesPackage.removeTrailingWhiteSpaces(textDoc);
         }
     }
     return(VSConstants.S_OK);
 }
コード例 #14
0
        private void OnDocumentClosed(uint docCookie)
        {
            RunningDocumentInfo info    = _rdt.Value.GetDocumentInfo(docCookie);
            AbstractProject     project = GetXamlProject(info.Hierarchy);

            if (project == null)
            {
                return;
            }

            IVisualStudioHostDocument document = project.GetCurrentDocumentFromPath(info.Moniker);

            if (document == null)
            {
                return;
            }

            project.RemoveDocument(document);
        }
コード例 #15
0
ファイル: FileOpener.cs プロジェクト: NuGet/NuGet.Client
        public void OpenFile(string filePath, bool isReadOnly)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            var rdt = new RunningDocumentTable(_serviceProvider);

            IVsWindowFrame?windowFrame = null;

            try
            {
                // Open the document.
                VsShellUtilities.OpenDocument(
                    _serviceProvider,
                    filePath,
                    VSConstants.LOGVIEWID_Primary,
                    out _,
                    out _,
                    out windowFrame);

                // Set it as read only if necessary.
                if (isReadOnly)
                {
                    RunningDocumentInfo rdtInfo = rdt.GetDocumentInfo(filePath);

                    // Set it as read only if necessary.
                    if (rdtInfo.DocData is IVsTextBuffer textBuffer)
                    {
                        textBuffer.GetStateFlags(out uint flags);
                        textBuffer.SetStateFlags(flags | (uint)BUFFERSTATEFLAGS.BSF_USER_READONLY);
                    }
                }

                // Show the document window
                if (windowFrame != null)
                {
                    ErrorHandler.ThrowOnFailure(windowFrame.Show());
                }
            }
            catch (Exception ex) when(!ex.IsCritical())
            {
                windowFrame?.CloseFrame(0);
            }
        }
コード例 #16
0
ファイル: TypescriptWatcher.cs プロジェクト: Ackara/TSBuild
        public int OnAfterSave(uint docCookie)
        {
            if (_stillLoading)
            {
                return(VSConstants.S_OK);
            }
            if (!ConfigurationPage.ShouldCompileOnSave)
            {
                return(VSConstants.S_OK);
            }
            ThreadHelper.ThrowIfNotOnUIThread();

            _vsOutWindow?.Clear();
            RunningDocumentInfo document = _runningDocumentTable.GetDocumentInfo(docCookie);

            if (string.Equals(Path.GetExtension(document.Moniker), ".ts", StringComparison.OrdinalIgnoreCase) && document.Hierarchy != null)
            {
                RunCompiler(document.Moniker, document.Hierarchy);
            }

            System.Diagnostics.Debug.WriteLine($"{nameof(OnAfterSave)} -> {document.Moniker}");
            return(VSConstants.S_OK);
        }
コード例 #17
0
        public Task <bool> TryHandleCommandAsync(IImmutableSet <IProjectTree> items, long commandId, bool focused, long commandExecuteOptions, IntPtr variantArgIn, IntPtr variantArgOut)
        {
            if (IsOpenCommand(commandId) && items.All(CanOpenFile))
            {
                OpenItems();

                return(TaskResult.True);
            }

            return(TaskResult.False);

            void OpenItems()
            {
                Assumes.NotNull(_configuredProject.UnconfiguredProject.Services.HostObject);
                var hierarchy = (IVsUIHierarchy)_configuredProject.UnconfiguredProject.Services.HostObject;
                var rdt       = new RunningDocumentTable(_serviceProvider);

                // Open all items.
                RunAllAndAggregateExceptions(items, OpenItem);

                void OpenItem(IProjectTree item)
                {
                    IVsWindowFrame?windowFrame = null;

                    try
                    {
                        // Open the document.
                        Guid   logicalView = IsOpenWithCommand(commandId) ? LOGVIEWID_UserChooseView : LOGVIEWID.Primary_guid;
                        IntPtr docData     = IntPtr.Zero;

                        ErrorHandler.ThrowOnFailure(
                            _uiShellOpenDocument.Value.OpenStandardEditor(
                                (uint)__VSOSEFLAGS.OSE_ChooseBestStdEditor,
                                item.FilePath,
                                ref logicalView,
                                item.Caption,
                                hierarchy,
                                item.GetHierarchyId(),
                                docData,
                                _oleServiceProvider.Value,
                                out windowFrame));

                        RunningDocumentInfo rdtInfo = rdt.GetDocumentInfo(item.FilePath);

                        // Set it as read only if necessary.
                        bool isReadOnly = item.Flags.Contains(ImportTreeProvider.ProjectImportImplicit);

                        if (isReadOnly && rdtInfo.DocData is IVsTextBuffer textBuffer)
                        {
                            textBuffer.GetStateFlags(out uint flags);
                            textBuffer.SetStateFlags(flags | (uint)BUFFERSTATEFLAGS.BSF_USER_READONLY);
                        }

                        // Detach the document from this project.
                        // Ignore failure. It may be that we've already transferred the item to Miscellaneous Files.
                        _externalFilesManager.Value.TransferDocument(item.FilePath, item.FilePath, windowFrame);

                        // Show the document window
                        if (windowFrame != null)
                        {
                            ErrorHandler.ThrowOnFailure(windowFrame.Show());
                        }
                    }
                    catch
                    {
                        windowFrame?.CloseFrame(0);
                        throw;
                    }
                }
            }
        }
コード例 #18
0
 private static RunningDocumentInfo GetDocumentInfo(IVsRunningDocumentTable rdt, uint docCookie)
 {
     RunningDocumentInfo info = new RunningDocumentInfo();
     IntPtr docData;
     int hr = rdt.GetDocumentInfo(docCookie, out info.Flags, out info.ReadLocks, out info.EditLocks, out info.Moniker, out info.Hierarchy, out info.ItemId, out docData);
     //if (hr == VSConstants.S_OK)
     //{
     //    try
     //    {
     //        if (docData != IntPtr.Zero)
     //            info.DocData = Marshal.GetObjectForIUnknown(docData);
     //        return info;
     //    }
     //    finally
     //    {
     //        Marshal.Release(docData);
     //    }
     //}
     return info;
 }
コード例 #19
0
 public RunningDocumentInfoWrapper(RunningDocumentInfo info)
 {
     this.info = info;
 }