Fix false editor compare warnings

This commit is contained in:
2026-03-15 13:08:00 +01:00
parent 7b07477133
commit ea328e65bd
4 changed files with 186 additions and 65 deletions

View File

@@ -667,26 +667,29 @@
return ["Generated comparison is unavailable."];
}
var comparisonSourceModel = GetComparisonSourceModel(model, comparisonBaseline);
var comparisonSourceEffects = BuildPreviewEffects(comparisonSourceModel);
var comparisonSourceBranches = BuildPreviewBranches(comparisonSourceModel);
var items = new List<string>();
if (DescriptionDiffers(model, comparisonBaseline))
if (CriticalCellComparisonEvaluator.DescriptionDiffers(comparisonSourceModel.DescriptionText, model.GeneratedState.DescriptionText))
{
items.Add("Result text differs");
}
if (EffectsDiffer(model, comparisonBaseline))
if (CriticalCellComparisonEvaluator.EffectsDiffer(comparisonSourceEffects, model.GeneratedState.Effects))
{
items.Add("Base effects differ");
}
if (BranchesDiffer(model, comparisonBaseline))
if (CriticalCellComparisonEvaluator.BranchesDiffer(comparisonSourceBranches, model.GeneratedState.Branches))
{
items.Add("Conditions differ");
}
if (items.Count == 0)
{
items.Add("Current card matches the fresh parse");
items.Add("Current card matches the fresh generation");
}
if (model.GeneratedState.ValidationMessages.Count > 0)
@@ -699,75 +702,22 @@
private static int GetComparisonDifferenceCount(CriticalCellEditorModel model, CriticalCellEditorModel? comparisonBaseline)
{
var count = 0;
if (DescriptionDiffers(model, comparisonBaseline))
if (model.GeneratedState is null)
{
count++;
return 0;
}
if (EffectsDiffer(model, comparisonBaseline))
{
count++;
}
if (BranchesDiffer(model, comparisonBaseline))
{
count++;
}
return count;
var comparisonSourceModel = GetComparisonSourceModel(model, comparisonBaseline);
return CriticalCellComparisonEvaluator.GetDifferenceCount(
comparisonSourceModel.DescriptionText,
BuildPreviewEffects(comparisonSourceModel),
BuildPreviewBranches(comparisonSourceModel),
model.GeneratedState);
}
private static bool HasComparisonDifferences(CriticalCellEditorModel? model, CriticalCellEditorModel? comparisonBaseline) =>
model is not null && GetComparisonDifferenceCount(model, comparisonBaseline) > 0;
private static bool DescriptionDiffers(CriticalCellEditorModel model, CriticalCellEditorModel? comparisonBaseline) =>
model.GeneratedState is not null &&
!string.Equals(
NormalizeDisplayText(GetComparisonSourceModel(model, comparisonBaseline).DescriptionText),
NormalizeDisplayText(model.GeneratedState.DescriptionText),
StringComparison.Ordinal);
private static bool EffectsDiffer(CriticalCellEditorModel model, CriticalCellEditorModel? comparisonBaseline) =>
model.GeneratedState is not null &&
SerializeComparisonValue(BuildPreviewEffects(GetComparisonSourceModel(model, comparisonBaseline)).Select(ProjectEffectForComparison).ToList()) !=
SerializeComparisonValue(model.GeneratedState.Effects.Select(ProjectEffectForComparison).ToList());
private static bool BranchesDiffer(CriticalCellEditorModel model, CriticalCellEditorModel? comparisonBaseline) =>
model.GeneratedState is not null &&
SerializeComparisonValue(BuildPreviewBranches(GetComparisonSourceModel(model, comparisonBaseline)).Select(ProjectBranchForComparison).ToList()) !=
SerializeComparisonValue(model.GeneratedState.Branches.Select(ProjectBranchForComparison).ToList());
private static string NormalizeDisplayText(string? value) =>
value?.Trim() ?? string.Empty;
private static string SerializeComparisonValue<TValue>(TValue value) =>
JsonSerializer.Serialize(value, DiagnosticJsonOptions);
private static object ProjectEffectForComparison(CriticalEffectLookupResponse effect) => new
{
effect.EffectCode,
effect.Target,
effect.ValueInteger,
effect.ValueExpression,
effect.DurationRounds,
effect.PerRound,
effect.Modifier,
effect.BodyPart,
effect.IsPermanent,
SourceText = NormalizeDisplayText(effect.SourceText)
};
private static object ProjectBranchForComparison(CriticalBranchLookupResponse branch) => new
{
Condition = NormalizeDisplayText(branch.ConditionText),
Description = NormalizeDisplayText(branch.Description),
Effects = branch.Effects
.Select(ProjectEffectForComparison)
.ToList()
};
private static CriticalCellEditorModel GetComparisonSourceModel(
CriticalCellEditorModel model,
CriticalCellEditorModel? comparisonBaseline) =>