use pattern matching

This commit is contained in:
Jesse Plamondon-Willard
2025-03-09 11:42:32 -04:00
parent de6ccb0d01
commit 2c019f82b3
8 changed files with 16 additions and 19 deletions
@@ -76,7 +76,7 @@ public class ModDataRecord
/// <summary>Get the default update key for this mod, if any.</summary>
public string? GetDefaultUpdateKey()
{
string? updateKey = this.Fields.FirstOrDefault(p => p.Key == ModDataFieldKey.UpdateKey && p.IsDefault)?.Value;
string? updateKey = this.Fields.FirstOrDefault(p => p is { Key: ModDataFieldKey.UpdateKey, IsDefault: true })?.Value;
return !string.IsNullOrWhiteSpace(updateKey)
? updateKey
: null;
@@ -17,10 +17,8 @@ internal class InternalControllerFeatureProvider : ControllerFeatureProvider
protected override bool IsController(TypeInfo type)
{
return
type.IsClass
&& !type.IsAbstract
&& (/*type.IsPublic &&*/ !type.ContainsGenericParameters)
&& (!type.IsDefined(typeof(NonControllerAttribute))
&& (type.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) || type.IsDefined(typeof(ControllerAttribute))));
type is { IsClass: true, IsAbstract: false, /*IsPublic: true,*/ ContainsGenericParameters: false }
&& !type.IsDefined(typeof(NonControllerAttribute))
&& (type.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) || type.IsDefined(typeof(ControllerAttribute)));
}
}
@@ -62,7 +62,7 @@ else if (Model.ParseError != null)
<small v-pre>Error details: @Model.ParseError</small>
</div>
}
else if (!Model.IsEditView && Model.PasteId != null)
else if (Model is { IsEditView: false, PasteId: not null })
{
<div class="banner success">
<strong>Share this link to let someone else see this page:</strong> <code>@curPageUrl</code><br />
+5 -5
View File
@@ -15,9 +15,9 @@
// detect suggested fixes
LogModInfo[] outdatedMods = log?.Mods.Where(mod => mod.HasUpdate).ToArray() ?? [];
bool isPyTkCompatibilityMode = log?.ApiVersionParsed?.IsBetween("3.15.0", "3.19.0") is true && log.Mods.Any(p => p.IsCodeMod && p.Name == "PyTK" && p.GetParsedVersion()?.IsOlderThan("1.24.0") is true);
bool isPyTkCompatibilityMode = log?.ApiVersionParsed?.IsBetween("3.15.0", "3.19.0") is true && log.Mods.Any(p => p is { IsCodeMod: true, Name: "PyTK" } && p.GetParsedVersion()?.IsOlderThan("1.24.0") is true);
LogModInfo? errorHandler = log?.Mods.FirstOrDefault(p => p.IsCodeMod && p.Name == "Error Handler");
LogModInfo? errorHandler = log?.Mods.FirstOrDefault(p => p is { IsCodeMod: true, Name: "Error Handler" });
bool errorHandlerNeeded = log?.ApiVersionParsed?.IsOlderThan("4.0.0-alpha") == true && log.OperatingSystem?.Contains("Android Unix", StringComparison.OrdinalIgnoreCase) != true;
bool missingErrorHandler = errorHandlerNeeded && errorHandler is null;
bool hasOlderErrorHandler = errorHandlerNeeded && errorHandler?.GetParsedVersion() is not null && log?.ApiVersionParsed is not null && log.ApiVersionParsed.IsNewerThan(errorHandler.GetParsedVersion());
@@ -86,7 +86,7 @@
logStarted: new Date(@this.ForJson(log?.Timestamp)),
dataElement: "script#serializedData",
showPopup: @this.ForJson(log == null),
showMods: @this.ForJson(log?.Mods.Where(p => p.Loaded && !p.IsContentPack).Select(p => Model.GetSlug(p.Name)).Distinct().ToDictionary(slug => slug, _ => true)),
showMods: @this.ForJson(log?.Mods.Where(p => p is { Loaded: true, IsContentPack: false }).Select(p => Model.GetSlug(p.Name)).Distinct().ToDictionary(slug => slug, _ => true)),
showSections: @this.ForJson(Enum.GetNames(typeof(LogSection)).ToDictionary(section => section, _ => false)),
showLevels: @this.ForJson(defaultFilters),
enableFilters: @this.ForJson(!Model.ShowRaw),
@@ -288,7 +288,7 @@ else if (log?.IsValid == true)
Consider updating these mods to fix problems:
<table id="updates" class="table">
@foreach (LogModInfo mod in log.Mods.Where(mod => (mod.HasUpdate && !mod.IsContentPack) || (contentPacks.TryGetValue(mod.Name, out LogModInfo[]? contentPackList) && contentPackList.Any(pack => pack.HasUpdate))))
@foreach (LogModInfo mod in log.Mods.Where(mod => mod is { HasUpdate: true, IsContentPack: false } || (contentPacks.TryGetValue(mod.Name, out LogModInfo[]? contentPackList) && contentPackList.Any(pack => pack.HasUpdate))))
{
<tr class="mod-entry">
<td>
@@ -388,7 +388,7 @@ else if (log?.IsValid == true)
@{
var modsWithContentPacks = log.Mods
.Where(mod => mod.Loaded && !mod.IsContentPack)
.Where(mod => mod is { Loaded: true, IsContentPack: false })
.Select(mod => (
Mod: mod,
ContentPacks: contentPacks?.TryGetValue(mod.Name, out LogModInfo[]? contentPackList) == true ? contentPackList : []
@@ -163,7 +163,7 @@ internal class ModResolver
{
foreach (IModMetadata mod in group)
{
if (mod.Status == ModMetadataStatus.Failed && mod.FailReason is not (ModFailReason.InvalidManifest or ModFailReason.LoadFailed or ModFailReason.MissingDependencies))
if (mod is { Status: ModMetadataStatus.Failed, FailReason: not (ModFailReason.InvalidManifest or ModFailReason.LoadFailed or ModFailReason.MissingDependencies) })
continue;
string folderList = string.Join(", ", group.Select(p => p.GetRelativePathWithRoot()).OrderBy(p => p));
@@ -307,8 +307,7 @@ internal class ModResolver
(
from entry in dependencies
where
entry.Mod != null
&& entry.MinVersion != null
entry is { Mod: not null, MinVersion: not null }
&& entry.MinVersion.IsNewerThan(entry.Mod.Manifest.Version)
select $"{entry.Mod!.DisplayName} (needs {entry.MinVersion} or later)"
)
@@ -269,7 +269,7 @@ internal class ReplaceReferencesRewriter : BaseInstructionHandler
}
// map constructor to static methods
if (method.IsStatic && method.Name == "Constructor")
if (method is { IsStatic: true, Name: "Constructor" })
{
string fromFullName = $"System.Void {fromTypeName}::.ctor({this.FormatCecilParameterList(method.GetParameters())})";
this.MapMember(fromFullName, method, "method");
@@ -40,10 +40,10 @@ public class BushFacade : Bush, IRewriteFacade
switch (season)
{
case "spring":
return dayOfMonth > 14 && dayOfMonth < 19;
return dayOfMonth is > 14 and < 19;
case "fall":
return dayOfMonth > 7 && dayOfMonth < 12;
return dayOfMonth is > 7 and < 12;
default:
return false;
+1 -1
View File
@@ -209,7 +209,7 @@ internal class SGame : Game1
bool isCreating =
(Game1.currentMinigame is Intro) // creating save with intro
|| (Game1.activeClickableMenu is TitleMenu menu && menu.transitioningCharacterCreationMenu); // creating save, skipped intro
|| Game1.activeClickableMenu is TitleMenu { transitioningCharacterCreationMenu: true }; // creating save, skipped intro
if (isCreating)
this.OnLoadStageChanged(LoadStage.CreatedLocations);