提交 6e10d458 编写于 作者: S Shyam N

Merge pull request #2508 from shyamnamboodiripad/RuleSeverityContextMenuFix

Introduce new entry named 'Default' in solution explorer context menu

Fixes #1512 
......@@ -26,6 +26,7 @@ public static class RoslynCommands
public const int SetSeverityNone = 0x0114;
public const int OpenDiagnosticHelpLink = 0x0116;
public const int SetActiveRuleSet = 0x0118;
public const int SetSeverityDefault = 0x011b;
}
}
}
......@@ -3,15 +3,12 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.ComponentModel.Design;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using EnvDTE;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Notification;
using Microsoft.Internal.VisualStudio.PlatformUI;
......@@ -46,6 +43,7 @@ internal class AnalyzersCommandHandler : IAnalyzersCommandHandler, IVsUpdateSolu
private MenuCommand _removeMenuItem;
// Diagnostic context menu items
private MenuCommand _setSeverityDefaultMenuItem;
private MenuCommand _setSeverityErrorMenuItem;
private MenuCommand _setSeverityWarningMenuItem;
private MenuCommand _setSeverityInfoMenuItem;
......@@ -89,6 +87,7 @@ public void Initialize(IMenuCommandService menuCommandService)
_removeMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.RemoveAnalyzer, RemoveAnalyzerHandler);
// Diagnostic context menu items
_setSeverityDefaultMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.SetSeverityDefault, SetSeverityHandler);
_setSeverityErrorMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.SetSeverityError, SetSeverityHandler);
_setSeverityWarningMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.SetSeverityWarning, SetSeverityHandler);
_setSeverityInfoMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.SetSeverityInfo, SetSeverityHandler);
......@@ -240,6 +239,7 @@ private void UpdateOpenHelpLinkMenuItemVisibility()
private void UpdateSeverityMenuItemsChecked()
{
_setSeverityDefaultMenuItem.Checked = false;
_setSeverityErrorMenuItem.Checked = false;
_setSeverityWarningMenuItem.Checked = false;
_setSeverityInfoMenuItem.Checked = false;
......@@ -289,6 +289,7 @@ private void UpdateSeverityMenuItemsChecked()
switch (selectedItemSeverities.Single())
{
case ReportDiagnostic.Default:
_setSeverityDefaultMenuItem.Checked = true;
break;
case ReportDiagnostic.Error:
_setSeverityErrorMenuItem.Checked = true;
......@@ -319,6 +320,7 @@ private void UpdateSeverityMenuItemsEnabled()
{
bool configurable = !_tracker.SelectedDiagnosticItems.Any(item => item.Descriptor.CustomTags.Contains(WellKnownDiagnosticTags.NotConfigurable));
_setSeverityDefaultMenuItem.Enabled = configurable;
_setSeverityErrorMenuItem.Enabled = configurable;
_setSeverityWarningMenuItem.Enabled = configurable;
_setSeverityInfoMenuItem.Enabled = configurable;
......@@ -571,6 +573,10 @@ private string GetNewRuleSetFileNameForProject(EnvDTE.Project envDteProject)
{
switch (selectedItem.CommandID.ID)
{
case ID.RoslynCommands.SetSeverityDefault:
selectedAction = ReportDiagnostic.Default;
break;
case ID.RoslynCommands.SetSeverityError:
selectedAction = ReportDiagnostic.Error;
break;
......
......@@ -2,20 +2,14 @@
using System;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Media;
using System.Xml.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.Internal.VisualStudio.PlatformUI;
using Microsoft.VisualStudio.Imaging;
using Microsoft.VisualStudio.Imaging.Interop;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem;
using Microsoft.VisualStudio.LanguageServices.Implementation.Utilities;
using Microsoft.VisualStudio.Shell.Interop;
using Roslyn.Utilities;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.SolutionExplorer
......@@ -154,15 +148,38 @@ private void UpdateRuleSetFile(string pathToRuleSet, ReportDiagnostic value)
var analyzerID = _analyzerItem.AnalyzerReference.Display;
var rules = FindOrCreateRulesElement(ruleSetDocument, analyzerID);
var rule = FindOrCreateRuleElement(rules, _descriptor.Id);
rule.Attribute("Action").Value = newAction;
if (value == ReportDiagnostic.Default)
{
// If the new severity is 'Default' we just delete the entry for the rule from the ruleset file.
// In the absence of an explicit entry in the ruleset file, the rule reverts back to its 'Default'
// severity (so far as the 'current' ruleset file is concerened - the rule's effective severity
// could still be decided by other factors such as project settings or a base ruleset file).
rule.Remove();
}
else
{
rule.Attribute("Action").Value = newAction;
}
var allMatchingRules = ruleSetDocument.Root
.Descendants("Rule")
.Where(r => r.Attribute("Id").Value.Equals(_descriptor.Id));
.Descendants("Rule")
.Where(r => r.Attribute("Id").Value.Equals(_descriptor.Id));
foreach (var matchingRule in allMatchingRules)
{
matchingRule.Attribute("Action").Value = newAction;
if (value == ReportDiagnostic.Default)
{
// If the new severity is 'Default' we just delete the entry for the rule from the ruleset file.
// In the absence of an explicit entry in the ruleset file, the rule reverts back to its 'Default'
// severity (so far as the 'current' ruleset file is concerened - the rule's effective severity
// could still be decided by other factors such as project settings or a base ruleset file).
matchingRule.Remove();
}
else
{
matchingRule.Attribute("Action").Value = newAction;
}
}
ruleSetDocument.Save(pathToRuleSet);
......
......@@ -37,15 +37,15 @@
<Group guid="guidRoslynGrpId" id="grpAnalyzerRemove" priority="0x000">
<Parent guid="guidRoslynGrpId" id="cmdidAnalyzerContextMenu"/>
</Group>
<Group guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJWIN_SCOPE" priority="0x001">
<Parent guid="guidRoslynGrpId" id="cmdidAnalyzerContextMenu"/>
</Group>
<Group guid="guidRoslynGrpId" id="grpAnalyzerProperties" priority="0x002">
<Parent guid="guidRoslynGrpId" id="cmdidAnalyzerContextMenu"/>
</Group>
<Group guid="guidRoslynGrpId" id="grpDiagnosticSeverity" priority="0x000">
<Parent guid="guidRoslynGrpId" id="cmdidDiagnosticContextMenu"/>
</Group>
......@@ -57,7 +57,7 @@
<Group guid="guidRoslynGrpId" id="grpDiagnosticProperties" priority="0x002">
<Parent guid="guidRoslynGrpId" id="cmdidDiagnosticContextMenu"/>
</Group>
<Group guid="guidRoslynGrpId" id="grpSetActiveRuleSet">
</Group>
</Groups>
......@@ -204,7 +204,16 @@
</Strings>
</Button>
<!-- Buttons to set severity of diagnostics -->
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityError" priority="100" type="Button">
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityDefault" priority="100" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;Default</ButtonText>
<CanonicalName>Default</CanonicalName>
<LocCanonicalName>Default</LocCanonicalName>
<CommandName>SetSeverityDefault</CommandName>
</Strings>
</Button>
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityError" priority="200" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;Error</ButtonText>
......@@ -213,7 +222,7 @@
<CommandName>SetSeverityError</CommandName>
</Strings>
</Button>
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityWarning" priority="200" type="Button">
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityWarning" priority="300" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;Warning</ButtonText>
......@@ -222,7 +231,7 @@
<CommandName>SetSeverityWarning</CommandName>
</Strings>
</Button>
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityInfo" priority="300" type="Button">
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityInfo" priority="400" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;Info</ButtonText>
......@@ -231,7 +240,7 @@
<CommandName>SetSeverityInfo</CommandName>
</Strings>
</Button>
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityHidden" priority="400" type="Button">
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityHidden" priority="500" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;Hidden</ButtonText>
......@@ -240,7 +249,7 @@
<CommandName>SetSeverityHidden</CommandName>
</Strings>
</Button>
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityNone" priority="500" type="Button">
<Button guid="guidRoslynGrpId" id="cmdidSetSeverityNone" priority="600" type="Button">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticSeverityItems" />
<Strings>
<ButtonText>&amp;None</ButtonText>
......@@ -293,7 +302,7 @@
<CommandName>&amp;Organize Usings</CommandName>
</Strings>
</Menu>
<Menu guid="guidRoslynGrpId" id="cmdidAnalyzerContextMenu" priority="100" type="Context">
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_SOLNEXPL_ALL" />
<Strings>
......@@ -311,7 +320,7 @@
<LocCanonicalName>Analyzers</LocCanonicalName>
</Strings>
</Menu>
<Menu guid="guidRoslynGrpId" id="cmdidDiagnosticContextMenu" priority="100" type="Context">
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_SOLNEXPL_ALL" />
<Strings>
......@@ -347,17 +356,17 @@
<CommandPlacement guid="guidVSStd97" id="cmdidPropSheetOrProperties" priority="200">
<Parent guid="guidRoslynGrpId" id="grpAnalyzerProperties" />
</CommandPlacement>
<!-- Diagnostic node entries -->
<CommandPlacement guid="guidVSStd97" id="cmdidPropSheetOrProperties" priority="200">
<Parent guid="guidRoslynGrpId" id="grpDiagnosticProperties" />
</CommandPlacement>
<!-- "Set as Active Rule Set" entries -->
<CommandPlacement guid="guidRoslynGrpId" id="grpSetActiveRuleSet" priority="0x0200">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/>
</CommandPlacement>
<CommandPlacement guid="guidRoslynGrpId" id="grpSetActiveRuleSet" priority="0x0200">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_WEBITEMNODE"/>
</CommandPlacement>
......@@ -414,6 +423,7 @@
<IDSymbol name="cmdidSetActiveRuleSet" value="0x0118" />
<IDSymbol name="cmdidSetSeveritySubMenu" value="0x0119" />
<IDSymbol name="grpDiagnosticSeverityItems" value="0x011a" />
<IDSymbol name="cmdidSetSeverityDefault" value="0x011b" />
</GuidSymbol>
</Symbols>
</CommandTable>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册