From c882fe4ea516c939e257e6066a44c97461b897bb Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 25 Aug 2024 22:43:52 +1000 Subject: [PATCH] Add official `BannedApiAnalyzers` and ban some string parsing methods --- .global.editorconfig.ini | 5 +++++ Directory.Packages.props | 1 + src/BannedSymbols.BannedApiAnalyzers.txt | 11 +++++++++++ src/BizHawk.Client.Common/movie/BasicMovieInfo.cs | 10 ++++++---- src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs | 2 +- .../tools/TAStudio/PatternsForm.cs | 6 +++--- .../tools/TAStudio/TAStudio.ListView.cs | 9 +-------- .../CPUs/FairchildF8/F3850.Registers.cs | 8 +++++--- src/MainSlnCommon.props | 2 ++ 9 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 src/BannedSymbols.BannedApiAnalyzers.txt diff --git a/.global.editorconfig.ini b/.global.editorconfig.ini index 9f7e7ba2eb..0f0125bb50 100644 --- a/.global.editorconfig.ini +++ b/.global.editorconfig.ini @@ -376,6 +376,11 @@ dotnet_diagnostic.MEN015.severity = silent # Use object-oriented methods instead of top-level statements dotnet_diagnostic.MEN016.severity = silent +## Microsoft.CodeAnalysis.BannedApiAnalyzers rules + +# Do not use banned APIs +dotnet_diagnostic.RS0030.severity = error + ## StyleCop spacing rules # Keywords should be spaced correctly diff --git a/Directory.Packages.props b/Directory.Packages.props index d9e3da72c2..0459d3107f 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,6 +9,7 @@ + diff --git a/src/BannedSymbols.BannedApiAnalyzers.txt b/src/BannedSymbols.BannedApiAnalyzers.txt new file mode 100644 index 0000000000..56c710d642 --- /dev/null +++ b/src/BannedSymbols.BannedApiAnalyzers.txt @@ -0,0 +1,11 @@ +M:System.Convert.ToByte(System.String);use byte.{Try,}Parse +M:System.Convert.ToDecimal(System.String);use decimal.{Try,}Parse +M:System.Convert.ToDouble(System.String);use double.{Try,}Parse +M:System.Convert.ToInt16(System.String);use short.{Try,}Parse +M:System.Convert.ToInt32(System.String);use int.{Try,}Parse +M:System.Convert.ToInt64(System.String);use long.{Try,}Parse +M:System.Convert.ToSByte(System.String);use sbyte.{Try,}Parse +M:System.Convert.ToSingle(System.String);use float.{Try,}Parse +M:System.Convert.ToUInt16(System.String);use ushort.{Try,}Parse +M:System.Convert.ToUInt32(System.String);use uint.{Try,}Parse +M:System.Convert.ToUInt64(System.String);use ulong.{Try,}Parse diff --git a/src/BizHawk.Client.Common/movie/BasicMovieInfo.cs b/src/BizHawk.Client.Common/movie/BasicMovieInfo.cs index f0ee477487..9363af26bb 100644 --- a/src/BizHawk.Client.Common/movie/BasicMovieInfo.cs +++ b/src/BizHawk.Client.Common/movie/BasicMovieInfo.cs @@ -48,8 +48,8 @@ namespace BizHawk.Client.Common if (Header.TryGetValue(HeaderKeys.CycleCount, out var numCyclesStr) && Header.TryGetValue(HeaderKeys.ClockRate, out var clockRateStr)) { - var numCycles = Convert.ToUInt64(numCyclesStr); - var clockRate = Convert.ToDouble(clockRateStr, CultureInfo.InvariantCulture); + var numCycles = ulong.Parse(numCyclesStr); + var clockRate = double.Parse(clockRateStr, CultureInfo.InvariantCulture); numSeconds = numCycles / clockRate; } else @@ -68,8 +68,10 @@ namespace BizHawk.Client.Common { if (SystemID == VSystemID.Raw.Arcade && Header.TryGetValue(HeaderKeys.VsyncAttoseconds, out var vsyncAttoStr)) { - const decimal attosInSec = 1000000000000000000; - return (double)(attosInSec / Convert.ToUInt64(vsyncAttoStr)); + const decimal attosInSec = 1_000_000_000_000_000_000.0M; + var m = attosInSec; + m /= ulong.Parse(vsyncAttoStr); + return checked((double) m); } else { diff --git a/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index d3e8603cce..62e935ebd1 100644 --- a/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -422,7 +422,7 @@ namespace BizHawk.Client.EmuHawk } break; case HeaderKeys.VsyncAttoseconds: - if (_emulator is MAME mame && mame.VsyncAttoseconds != Convert.ToInt64(v)) + if (_emulator is MAME mame && mame.VsyncAttoseconds != long.Parse(v)) { item.BackColor = Color.Pink; item.ToolTipText = $"Expected: {v}\n Actual: {mame.VsyncAttoseconds}"; diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs index 3ed4f51e6a..59476f2376 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/PatternsForm.cs @@ -110,7 +110,7 @@ namespace BizHawk.Client.EmuHawk return; } - _values[PatternList.SelectedIndex] = ValueNum.Value.ToString(NumberFormatInfo.InvariantInfo); + _values[PatternList.SelectedIndex] = unchecked((int) ValueNum.Value).ToString(NumberFormatInfo.InvariantInfo); UpdatePattern(); UpdateDisplay(); } @@ -217,7 +217,7 @@ namespace BizHawk.Client.EmuHawk } LagBox.Checked = _tastudio.AxisPatterns[index].SkipsLag; - ValueNum.Value = Convert.ToDecimal(_values[PatternList.SelectedIndex]); + ValueNum.Value = int.Parse(_values[PatternList.SelectedIndex]); CountNum.Value = _counts[PatternList.SelectedIndex]; } } @@ -267,7 +267,7 @@ namespace BizHawk.Client.EmuHawk { for (int c = 0; c < _counts[i]; c++) { - p.Add((int) Convert.ToSingle(_values[i])); + p.Add(int.Parse(_values[i])); } } diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs index ecb8060e02..792dec5acd 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs @@ -1323,14 +1323,7 @@ namespace BizHawk.Client.EmuHawk } _axisTypedValue = _axisTypedValue.Substring(startIndex: 0, length: _axisTypedValue.Length - 1); // drop last char - if (_axisTypedValue == "" || _axisTypedValue == "-") - { - value = 0f; - } - else - { - value = Convert.ToSingle(_axisTypedValue); - } + if (!float.TryParse(_axisTypedValue, out value)) value = 0.0f; } else if (e.KeyCode == Keys.Enter) { diff --git a/src/BizHawk.Emulation.Cores/CPUs/FairchildF8/F3850.Registers.cs b/src/BizHawk.Emulation.Cores/CPUs/FairchildF8/F3850.Registers.cs index 7dd49c228b..dfae8a6e33 100644 --- a/src/BizHawk.Emulation.Cores/CPUs/FairchildF8/F3850.Registers.cs +++ b/src/BizHawk.Emulation.Cores/CPUs/FairchildF8/F3850.Registers.cs @@ -241,6 +241,8 @@ namespace BizHawk.Emulation.Cores.Components.FairchildF8 } } + private const string PFX_SCRATCHPAD_REG = "SPR"; + public IDictionary GetCpuFlagsAndRegisters() { var res = new Dictionary @@ -266,7 +268,7 @@ namespace BizHawk.Emulation.Cores.Components.FairchildF8 for (int i = 0; i < 64; i++) { - res.Add("SPR" + i, Regs[i]); + res.Add(PFX_SCRATCHPAD_REG + i, Regs[i]); } return res; @@ -274,9 +276,9 @@ namespace BizHawk.Emulation.Cores.Components.FairchildF8 public void SetCpuRegister(string register, int value) { - if (register.StartsWithOrdinal("SPR")) + if (register.StartsWithOrdinal(PFX_SCRATCHPAD_REG)) { - var reg = Convert.ToInt32(register.Replace("SPR", "")); + var reg = int.Parse(register.Substring(startIndex: PFX_SCRATCHPAD_REG.Length)); if (reg > 63) { diff --git a/src/MainSlnCommon.props b/src/MainSlnCommon.props index c28261ab53..f361b73871 100644 --- a/src/MainSlnCommon.props +++ b/src/MainSlnCommon.props @@ -18,7 +18,9 @@ false + +