User/ryanbod/shell plugin fxcop (#6043)

* Enabling FxCop static analysis.

* Fixes for CA2227 Change 'Count' to be read-only by removing the property setter.
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2227?view=vs-2019

* Fix for:  CA1822: Mark members as static
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1822?view=vs-2019

* Fix for CA1805: Do not initialize unnecessarily.
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1805?view=vs-2019

* Fix for: Error CA1724 The type name Settings conflicts in whole or in part with the namespace name 'Microsoft.PowerToys.Settings'. Change either name to eliminate the conflict. Microsoft.Plugin.Shell C:\repos\powertoys\src\modules\launcher\Plugins\Microsoft.Plugin.Shell\Settings.cs 9 Active

* Severity Code Description Project File Line Suppression State
Error CA1724 The type name Settings conflicts in whole or in part with the namespace name 'Microsoft.PowerToys.Settings'. Change either name to eliminate the conflict. Microsoft.Plugin.Shell C:\repos\powertoys\src\modules\launcher\Plugins\Microsoft.Plugin.Shell\Settings.cs 9 Active

* Fix for CA1307: Specify StringComparison & CA1305: Specify IFormatProvider
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1307?view=vs-2019
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1305?view=vs-2019

* Fix for CA1062: Validate arguments of public methods
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1062?view=vs-2019

* Suppressing CA1031 Modify 'Query' to catch a more specific allowed exception type, or rethrow the exception'
This commit is contained in:
ryanbodrug-microsoft
2020-08-21 12:10:41 -07:00
committed by GitHub
parent 976116a012
commit 79bb68d784
4 changed files with 32 additions and 22 deletions

View File

@@ -22,8 +22,8 @@ namespace Microsoft.Plugin.Shell
{
public class Main : IPlugin, ISettingProvider, IPluginI18n, IContextMenu, ISavable
{
private readonly Settings _settings;
private readonly PluginJsonStorage<Settings> _storage;
private readonly ShellPluginSettings _settings;
private readonly PluginJsonStorage<ShellPluginSettings> _storage;
private string IconPath { get; set; }
@@ -31,7 +31,7 @@ namespace Microsoft.Plugin.Shell
public Main()
{
_storage = new PluginJsonStorage<Settings>();
_storage = new PluginJsonStorage<ShellPluginSettings>();
_settings = _storage.Load();
}
@@ -40,8 +40,14 @@ namespace Microsoft.Plugin.Shell
_storage.Save();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Keeping the process alive, but logging the exception")]
public List<Result> Query(Query query)
{
if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
List<Result> results = new List<Result>();
string cmd = query.Search;
if (string.IsNullOrEmpty(cmd))
@@ -71,20 +77,20 @@ namespace Microsoft.Plugin.Shell
private List<Result> GetHistoryCmds(string cmd, Result result)
{
IEnumerable<Result> history = _settings.Count.Where(o => o.Key.Contains(cmd))
IEnumerable<Result> history = _settings.Count.Where(o => o.Key.Contains(cmd, StringComparison.CurrentCultureIgnoreCase))
.OrderByDescending(o => o.Value)
.Select(m =>
{
if (m.Key == cmd)
{
result.SubTitle = "Shell: " + string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value);
result.SubTitle = "Shell: " + string.Format(CultureInfo.CurrentCulture, _context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value);
return null;
}
var ret = new Result
{
Title = m.Key,
SubTitle = "Shell: " + string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
SubTitle = "Shell: " + string.Format(CultureInfo.CurrentCulture, _context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
IcoPath = IconPath,
Action = c =>
{
@@ -121,7 +127,7 @@ namespace Microsoft.Plugin.Shell
.Select(m => new Result
{
Title = m.Key,
SubTitle = "Shell: " + string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
SubTitle = "Shell: " + string.Format(CultureInfo.CurrentCulture, _context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
IcoPath = IconPath,
Action = c =>
{
@@ -140,13 +146,13 @@ namespace Microsoft.Plugin.Shell
var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? string.Empty : "runas";
ProcessStartInfo info;
if (_settings.Shell == Shell.Cmd)
if (_settings.Shell == ExecutionShell.Cmd)
{
var arguments = _settings.LeaveShellOpen ? $"/k \"{command}\"" : $"/c \"{command}\" & pause";
info = ShellCommand.SetProcessStartInfo("cmd.exe", workingDirectory, arguments, runAsAdministratorArg);
}
else if (_settings.Shell == Shell.Powershell)
else if (_settings.Shell == ExecutionShell.Powershell)
{
string arguments;
if (_settings.LeaveShellOpen)
@@ -160,7 +166,7 @@ namespace Microsoft.Plugin.Shell
info = ShellCommand.SetProcessStartInfo("powershell.exe", workingDirectory, arguments, runAsAdministratorArg);
}
else if (_settings.Shell == Shell.RunCommand)
else if (_settings.Shell == ExecutionShell.RunCommand)
{
// Open explorer if the path is a file or directory
if (Directory.Exists(command) || File.Exists(command))
@@ -221,7 +227,7 @@ namespace Microsoft.Plugin.Shell
}
}
private bool ExistInPath(string filename)
private static bool ExistInPath(string filename)
{
if (File.Exists(filename))
{

View File

@@ -101,6 +101,10 @@
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2020.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="System.Runtime" Version="4.3.1" />
</ItemGroup>

View File

@@ -6,19 +6,19 @@ using System.Collections.Generic;
namespace Microsoft.Plugin.Shell
{
public class Settings
public class ShellPluginSettings
{
public Shell Shell { get; set; } = Shell.RunCommand;
public ExecutionShell Shell { get; set; } = ExecutionShell.RunCommand;
// not overriding Win+R
// crutkas we need to earn the right for Win+R override
public bool ReplaceWinR { get; set; } = false;
public bool ReplaceWinR { get; set; }
public bool LeaveShellOpen { get; set; }
public bool RunAsAdministrator { get; set; } = false;
public bool RunAsAdministrator { get; set; }
public Dictionary<string, int> Count { get; set; } = new Dictionary<string, int>();
public Dictionary<string, int> Count { get; } = new Dictionary<string, int>();
public void AddCmdHistory(string cmdName)
{
@@ -33,7 +33,7 @@ namespace Microsoft.Plugin.Shell
}
}
public enum Shell
public enum ExecutionShell
{
Cmd = 0,
Powershell = 1,

View File

@@ -9,9 +9,9 @@ namespace Microsoft.Plugin.Shell
{
public partial class CMDSetting : UserControl
{
private readonly Settings _settings;
private readonly ShellPluginSettings _settings;
public CMDSetting(Settings settings)
public CMDSetting(ShellPluginSettings settings)
{
InitializeComponent();
_settings = settings;
@@ -22,7 +22,7 @@ namespace Microsoft.Plugin.Shell
ReplaceWinR.IsChecked = _settings.ReplaceWinR;
LeaveShellOpen.IsChecked = _settings.LeaveShellOpen;
AlwaysRunAsAdministrator.IsChecked = _settings.RunAsAdministrator;
LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand;
LeaveShellOpen.IsEnabled = _settings.Shell != ExecutionShell.RunCommand;
LeaveShellOpen.Checked += (o, e) =>
{
@@ -56,8 +56,8 @@ namespace Microsoft.Plugin.Shell
ShellComboBox.SelectedIndex = (int)_settings.Shell;
ShellComboBox.SelectionChanged += (o, e) =>
{
_settings.Shell = (Shell)ShellComboBox.SelectedIndex;
LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand;
_settings.Shell = (ExecutionShell)ShellComboBox.SelectedIndex;
LeaveShellOpen.IsEnabled = _settings.Shell != ExecutionShell.RunCommand;
};
}
}