private void OnRemoveUnusedReferencesForSelectedProjectStatus(object sender, EventArgs e) { var command = (OleMenuCommand)sender; // If the option hasn't been expicitly set then fallback to whether this is enabled as part of an experiment. var isOptionEnabled = _globalOptions.GetOption(FeatureOnOffOptions.OfferRemoveUnusedReferences) ?? _globalOptions.GetOption(FeatureOnOffOptions.OfferRemoveUnusedReferencesFeatureFlag); var isDotNetCpsProject = VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy(_serviceProvider, out var hierarchy) && hierarchy.IsCapabilityMatch("CPS") && hierarchy.IsCapabilityMatch(".NET"); // Only show the "Remove Unused Reference" menu commands for CPS based managed projects. var visible = isOptionEnabled && isDotNetCpsProject; var enabled = false; if (visible) { enabled = !VisualStudioCommandHandlerHelpers.IsBuildActive(); } if (command.Visible != visible) { command.Visible = visible; } if (command.Enabled != enabled) { command.Enabled = enabled; } }
private void OnRemoveUnusedReferencesForSelectedProject(object sender, EventArgs args) { if ( VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy( _serviceProvider, out var hierarchy ) ) { Solution?solution = null; string? projectFilePath = null; ImmutableArray <ReferenceUpdate> referenceUpdates = default; var status = _threadOperationExecutor.Execute( ServicesVSResources.Remove_Unused_References, ServicesVSResources.Analyzing_project_references, allowCancellation: true, showProgress: true, (operationContext) => { (solution, projectFilePath, referenceUpdates) = GetUnusedReferencesForProjectHierarchy( hierarchy, operationContext.UserCancellationToken ); } ); if (status == UIThreadOperationStatus.Canceled) { return; } if ( solution is null || projectFilePath is not string { Length : > 0 } ||
private void OnSyncNamespacesForSelectedProjectStatus(object sender, EventArgs e) { var command = (OleMenuCommand)sender; var visible = false; if (VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy(_serviceProvider, out var projectHierarchy)) { // Is a project node. Are we C# project node? visible = projectHierarchy.IsCapabilityMatch(".NET & CSharp"); } else { // Is a solution node. Do we contain any C# projects? visible = _workspace.CurrentSolution.Projects .Any(project => project.Language.Equals(LanguageNames.CSharp, StringComparison.OrdinalIgnoreCase)); } var enabled = visible && !VisualStudioCommandHandlerHelpers.IsBuildActive(); if (command.Visible != visible) { command.Visible = visible; } if (command.Enabled != enabled) { command.Enabled = enabled; } }
private void OnRemoveUnusedReferencesForSelectedProject(object sender, EventArgs args) { if (VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy(_serviceProvider, out var hierarchy)) { Project?project = null; ImmutableArray <ReferenceUpdate> referenceUpdates = default; var status = _threadOperationExecutor.Execute(ServicesVSResources.Remove_Unused_References, ServicesVSResources.Analyzing_project_references, allowCancellation: true, showProgress: true, (operationContext) => { (project, referenceUpdates) = GetUnusedReferencesForProjectHierarchy(hierarchy, operationContext.UserCancellationToken); }); if (status == UIThreadOperationStatus.Canceled) { return; } if (project is null || referenceUpdates.IsEmpty) { MessageDialog.Show(ServicesVSResources.Remove_Unused_References, ServicesVSResources.No_unused_references_were_found, MessageDialogCommandSet.Ok); return; } var dialog = _unusedReferenceDialogProvider.CreateDialog(); if (dialog.ShowModal(project, referenceUpdates) == false) { return; } // If we are removing, then that is a change or if we are newly marking a reference as TreatAsUsed, // then that is a change. var referenceChanges = referenceUpdates .Where(update => update.Action != UpdateAction.TreatAsUsed || !update.ReferenceInfo.TreatAsUsed) .ToImmutableArray(); // If there are no changes, then we can return if (referenceChanges.IsEmpty) { return; } // Since undo/redo is not supported, get confirmation that we should apply these changes. var result = MessageDialog.Show(ServicesVSResources.Remove_Unused_References, ServicesVSResources.This_action_cannot_be_undone_Do_you_wish_to_continue, MessageDialogCommandSet.YesNo); if (result == MessageDialogCommand.No) { return; } _threadOperationExecutor.Execute(ServicesVSResources.Remove_Unused_References, ServicesVSResources.Updating_project_references, allowCancellation: false, showProgress: true, (operationContext) => { ApplyUnusedReferenceUpdates(project, referenceChanges, CancellationToken.None); }); } return; }
private void OnRunCodeAnalysisForSelectedProject(object sender, EventArgs args) { if ( VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy( _serviceProvider, out var hierarchy ) ) { RunAnalyzers(hierarchy); } }
public void Initialize(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; // Hook up the "Run Code Analysis" menu command for CPS based managed projects. var menuCommandService = (IMenuCommandService)_serviceProvider.GetService(typeof(IMenuCommandService)); if (menuCommandService != null) { VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, RunCodeAnalysisForSelectedProjectCommandId, VSConstants.VSStd2K, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.RunCodeAnalysisForProject, Guids.RoslynGroupId, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); } }
public void Initialize(IServiceProvider serviceProvider) { Contract.ThrowIfNull(serviceProvider); _serviceProvider = serviceProvider; // Hook up the "Remove Unused References" menu command for CPS based managed projects. var menuCommandService = (IMenuCommandService)_serviceProvider.GetService(typeof(IMenuCommandService)); if (menuCommandService != null) { VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.RemoveUnusedReferences, Guids.RoslynGroupId, OnRemoveUnusedReferencesForSelectedProject, OnRemoveUnusedReferencesForSelectedProjectStatus); } }
public async Task InitializeAsync(IAsyncServiceProvider serviceProvider, CancellationToken cancellationToken) { Contract.ThrowIfNull(serviceProvider); _serviceProvider = (IServiceProvider)serviceProvider; // Hook up the "Remove Unused References" menu command for CPS based managed projects. var menuCommandService = await serviceProvider.GetServiceAsync <IMenuCommandService, IMenuCommandService>(_threadingContext.JoinableTaskFactory, throwOnFailure : false).ConfigureAwait(false); if (menuCommandService != null) { await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.RemoveUnusedReferences, Guids.RoslynGroupId, OnRemoveUnusedReferencesForSelectedProject, OnRemoveUnusedReferencesForSelectedProjectStatus); } }
public void Initialize(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; // Hook up the "Run Code Analysis" menu command for CPS based managed projects. var menuCommandService = (IMenuCommandService)_serviceProvider.GetService(typeof(IMenuCommandService)); if (menuCommandService != null) { VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, RunCodeAnalysisForSelectedProjectCommandId, VSConstants.VSStd2K, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.RunCodeAnalysisForProject, Guids.RoslynGroupId, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeDefault, Guids.RoslynGroupId, OnSetAnalysisScopeDefault, OnSetAnalysisScopeDefaultStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeCurrentDocument, Guids.RoslynGroupId, OnSetAnalysisScopeCurrentDocument, OnSetAnalysisScopeCurrentDocumentStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeOpenDocuments, Guids.RoslynGroupId, OnSetAnalysisScopeOpenDocuments, OnSetAnalysisScopeOpenDocumentsStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeEntireSolution, Guids.RoslynGroupId, OnSetAnalysisScopeEntireSolution, OnSetAnalysisScopeEntireSolutionStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeNone, Guids.RoslynGroupId, OnSetAnalysisScopeNone, OnSetAnalysisScopeNoneStatus); } }
private void OnSyncNamespacesForSelectedProject(object sender, EventArgs args) { if (VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy(_serviceProvider, out var projectHierarchy)) { // The project node is selected, so get projects that this node represents. var projects = GetProjectsForHierarchy(projectHierarchy); SyncNamespaces(projects); } else { // The solution node is selected, so collect all the C# projects for update. var projects = _workspace.CurrentSolution.Projects .Where(project => project.Language.Equals(LanguageNames.CSharp, StringComparison.OrdinalIgnoreCase)) .ToImmutableArray(); SyncNamespaces(projects); } }
private void OnRunCodeAnalysisForSelectedProjectStatus(object sender, EventArgs e) { var command = (OleMenuCommand)sender; // We hook up the "Run Code Analysis" menu commands for CPS based managed projects. // These commands are already hooked up for csproj based projects in StanCore, but those will eventually go away. var visible = VisualStudioCommandHandlerHelpers.TryGetSelectedProjectHierarchy( _serviceProvider, out var hierarchy ) && hierarchy.IsCapabilityMatch("CPS") && hierarchy.IsCapabilityMatch(".NET"); var enabled = false; if (visible) { if ( command.CommandID.ID == RunCodeAnalysisForSelectedProjectCommandId && hierarchy !.TryGetProject(out var project) ) { // Change to show the name of the project as part of the menu item display text. command.Text = string.Format( ServicesVSResources.Run_Code_Analysis_on_0, project.Name ); } enabled = !VisualStudioCommandHandlerHelpers.IsBuildActive(); } if (command.Visible != visible) { command.Visible = visible; } if (command.Enabled != enabled) { command.Enabled = enabled; } }
public async Task InitializeAsync(IAsyncServiceProvider serviceProvider, CancellationToken cancellationToken) { _serviceProvider = (IServiceProvider)serviceProvider; // Hook up the "Run Code Analysis" menu command for CPS based managed projects. var menuCommandService = await serviceProvider.GetServiceAsync <IMenuCommandService, IMenuCommandService>(_threadingContext.JoinableTaskFactory, throwOnFailure : false).ConfigureAwait(false); if (menuCommandService != null) { await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, RunCodeAnalysisForSelectedProjectCommandId, VSConstants.VSStd2K, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.RunCodeAnalysisForProject, Guids.RoslynGroupId, OnRunCodeAnalysisForSelectedProject, OnRunCodeAnalysisForSelectedProjectStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeDefault, Guids.RoslynGroupId, OnSetAnalysisScopeDefault, OnSetAnalysisScopeDefaultStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeCurrentDocument, Guids.RoslynGroupId, OnSetAnalysisScopeCurrentDocument, OnSetAnalysisScopeCurrentDocumentStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeOpenDocuments, Guids.RoslynGroupId, OnSetAnalysisScopeOpenDocuments, OnSetAnalysisScopeOpenDocumentsStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeEntireSolution, Guids.RoslynGroupId, OnSetAnalysisScopeEntireSolution, OnSetAnalysisScopeEntireSolutionStatus); VisualStudioCommandHandlerHelpers.AddCommand(menuCommandService, ID.RoslynCommands.AnalysisScopeNone, Guids.RoslynGroupId, OnSetAnalysisScopeNone, OnSetAnalysisScopeNoneStatus); } }