public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { if (pguidCmdGroup == _vSStd97CmdIDGuid && nCmdID == (uint)VSConstants.VSStd97CmdID.GotoDefn) { TextView.TextBuffer.Properties.TryGetProperty <ITextDocument>(typeof(ITextDocument), out ITextDocument textDoc); if (PackageCompletionSource.IsInRangeForPackageCompletion(TextView.TextSnapshot, TextView.Caret.Position.BufferPosition.Position, out Span targetSpan, out string packageName, out string packageVersion, out string completionType)) { if (PackageExistsOnNuGet(packageName, packageVersion, out string url)) { System.Diagnostics.Process.Start(url); return(VSConstants.S_OK); } } IWorkspace workspace = _workspaceManager.GetWorkspace(textDoc.FilePath); List <Definition> definitions = workspace.ResolveDefinition(textDoc.FilePath, TextView.TextSnapshot.GetText(), TextView.Caret.Position.BufferPosition.Position); if (definitions.Count == 1) { DTE dte = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE; dte.MainWindow.Activate(); using (var state = new NewDocumentStateScope(Microsoft.VisualStudio.Shell.Interop.__VSNEWDOCUMENTSTATE.NDS_Provisional, Guid.Parse(ProjectFileToolsPackage.PackageGuidString))) { EnvDTE.Window w = dte.ItemOperations.OpenFile(definitions[0].File, EnvDTE.Constants.vsViewKindTextView); if (definitions[0].Line.HasValue) { ((EnvDTE.TextSelection)dte.ActiveDocument.Selection).GotoLine(definitions[0].Line.Value, true); } } return(VSConstants.S_OK); } else if (definitions.Count > 1) { IFindAllReferencesService farService = (IFindAllReferencesService)Package.GetGlobalService(typeof(SVsFindAllReferences)); FarDataSource dataSource = new FarDataSource(1); dataSource.Snapshots[0] = new FarDataSnapshot(definitions); IFindAllReferencesWindow farWindow = farService.StartSearch(definitions[0].Type); ITableManager _farManager = farWindow.Manager; _farManager.AddSource(dataSource); dataSource.Sink.IsStable = false; dataSource.Sink.AddSnapshot(dataSource.Snapshots[0]); dataSource.Sink.IsStable = true; return(VSConstants.S_OK); } } return(Next?.Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut) ?? (int)Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED); }
private static int ShowInFar(string title, List <Definition> definitions) { IFindAllReferencesService farService = ServiceUtil.GetService <SVsFindAllReferences, IFindAllReferencesService>(); FarDataSource dataSource = new FarDataSource(1); dataSource.Snapshots[0] = new FarDataSnapshot(definitions); IFindAllReferencesWindow farWindow = farService.StartSearch(title); ITableManager _farManager = farWindow.Manager; _farManager.AddSource(dataSource); dataSource.Sink.IsStable = false; dataSource.Sink.AddSnapshot(dataSource.Snapshots[0]); dataSource.Sink.IsStable = true; return(VSConstants.S_OK); }