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