chore: General rename UniqueComplianceErrorSeverity -> UniqueErrorScope.

Each error has in fact 2 determiners: What the error *severity* is (probably ok, warning, error) and what the *scope* is (error regardless of what ruleset we're in, error because of the specific ruleset)

Having the warning be as part of the scope is...problematic, but that's for phase 2, this is just a rename
This commit is contained in:
Yair Morgenstern 2023-10-30 11:45:51 +02:00
parent f9134c90dc
commit 674044a76f
7 changed files with 124 additions and 120 deletions

View File

@ -383,7 +383,7 @@ class Ruleset {
Unique(it),
false,
cityStateType,
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
UniqueType.UniqueErrorScope.RulesetSpecific
).isEmpty()
})
allyBonusUniques = ArrayList(cityStateType.allyBonusUniques.filter {
@ -391,7 +391,7 @@ class Ruleset {
Unique(it),
false,
cityStateType,
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
UniqueType.UniqueErrorScope.RulesetSpecific
).isEmpty()
})
}

View File

@ -122,7 +122,7 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
val unique = Unique(it)
val errors = UniqueValidator(ruleset).checkUnique(
unique, true, null,
UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
UniqueType.UniqueErrorScope.RulesetSpecific
)
errors.isEmpty()
}

View File

@ -41,16 +41,16 @@ enum class UniqueParameterType(
Number("amount", "3", "This indicates a whole number, possibly with a + or - sign, such as `2`, `+13`, or `-3`") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
return if (parameterText.toIntOrNull() == null) UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
UniqueType.UniqueErrorScope? {
return if (parameterText.toIntOrNull() == null) UniqueType.UniqueErrorScope.RulesetInvariant
else null
}
},
RelativeNumber("relativeAmount", "+20", "This indicates a number, usually with a + or - sign, such as `+25` (this kind of parameter is often followed by '%' which is nevertheless not part of the value)") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
return if (parameterText.toIntOrNull() == null) UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
UniqueType.UniqueErrorScope? {
return if (parameterText.toIntOrNull() == null) UniqueType.UniqueErrorScope.RulesetInvariant
else null
}
},
@ -58,13 +58,13 @@ enum class UniqueParameterType(
// todo potentially remove if OneTimeRevealSpecificMapTiles changes
KeywordAll("'all'", "All") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset) =
if (parameterText == "All") null else UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
if (parameterText == "All") null else UniqueType.UniqueErrorScope.RulesetInvariant
},
/** Implemented by [ICombatant.matchesCategory][com.unciv.logic.battle.ICombatant.matchesCategory] */
CombatantFilter("combatantFilter", "City", "This indicates a combatant, which can either be a unit or a city (when bombarding). Must either be `City` or a `mapUnitFilter`") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText == "City") return null // City also recognizes "All" but that's covered by UnitTypeFilter too
return MapUnitFilter.getErrorSeverity(parameterText, ruleset)
}
@ -74,7 +74,7 @@ enum class UniqueParameterType(
MapUnitFilter("mapUnitFilter", Constants.wounded, null, "Map Unit Filters") {
private val knownValues = setOf(Constants.wounded, Constants.barbarians, "City-State", Constants.embarked, "Non-City")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText.startsWith('{')) // "{filter} {filter}" for and logic
return parameterText.filterCompositeLogic({ getErrorSeverity(it, ruleset) }) { a, b -> maxOf(a, b) }
if (parameterText in knownValues) return null
@ -88,7 +88,7 @@ enum class UniqueParameterType(
/** Implemented by [BaseUnit.matchesFilter][com.unciv.models.ruleset.unit.BaseUnit.matchesFilter] */
BaseUnitFilter("baseUnitFilter", "Melee") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText.startsWith('{')) // "{filter} {filter}" for and logic
return parameterText.filterCompositeLogic({ getErrorSeverity(it, ruleset) }) { a, b -> maxOf(a, b) }
if (UnitName.getErrorSeverity(parameterText, ruleset) == null) return null
@ -112,12 +112,12 @@ enum class UniqueParameterType(
)
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ruleset.unitTypes.containsKey(parameterText)) return null
if (ruleset.eras.containsKey(parameterText)) return null
if (ruleset.unitTypes.values.any { it.uniques.contains(parameterText) }) return null
return UniqueType.UniqueComplianceErrorSeverity.WarningOnly
return UniqueType.UniqueErrorScope.WarningOnly
}
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
@ -129,9 +129,9 @@ enum class UniqueParameterType(
/** Used by [BaseUnitFilter] and e.g. [UniqueType.OneTimeFreeUnit] */
UnitName("unit", "Musketman") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (ruleset.units.containsKey(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific // OneTimeFreeUnitRuins crashes with a bad parameter
return UniqueType.UniqueErrorScope.RulesetSpecific // OneTimeFreeUnitRuins crashes with a bad parameter
}
},
@ -140,27 +140,27 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (ruleset.units[parameterText]?.hasUnique(UniqueType.GreatPerson) == true) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
/** Implemented in [Unique.stats][com.unciv.models.ruleset.unique.Unique.stats] */
Stats("stats", "+1 Gold, +2 Production", "For example: `+2 Production, +3 Food`. Note that the stat names need to be capitalized!") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (com.unciv.models.stats.Stats.isStats(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
}
},
/** Many UniqueTypes like [UniqueType.StatPercentBonus] */
StatName("stat", "Culture", "This is one of the 7 major stats in the game - `Gold`, `Science`, `Production`, `Food`, `Happiness`, `Culture` and `Faith`. Note that the stat names need to be capitalized!") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (Stat.isStat(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
}
},
@ -170,9 +170,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
}
},
@ -183,11 +183,11 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ruleset.nations.containsKey(parameterText)) return null
if (ruleset.nations.values.any { it.hasUnique(parameterText) }) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -214,9 +214,9 @@ enum class UniqueParameterType(
)
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in cityFilterStrings) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
}
override fun getTranslationWriterStringsForOutput() = cityFilterStrings
@ -227,9 +227,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (parameterText in ruleset.buildings) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -240,11 +240,11 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (BuildingName.getErrorSeverity(parameterText, ruleset) == null) return null
if (ruleset.buildings.values.any { it.hasUnique(parameterText) }) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
@ -257,9 +257,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
override fun getTranslationWriterStringsForOutput() = knownValues
},
@ -278,7 +278,7 @@ enum class UniqueParameterType(
in ruleset.tileResources -> null
in ruleset.terrains.values.asSequence().flatMap { it.uniques } -> null
in ruleset.tileResources.values.asSequence().flatMap { it.uniques } -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
parameterText in ruleset.terrains || parameterText != "All" && parameterText in knownValues
@ -289,7 +289,7 @@ enum class UniqueParameterType(
TileFilter("tileFilter", "Farm", "Anything that can be used either in an improvementFilter or in a terrainFilter can be used here, plus 'unimproved'", "Tile Filters") {
private val knownValues = setOf("unimproved", "All Road", "Great Improvement")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ImprovementFilter.getErrorSeverity(parameterText, ruleset) == null) return null
return TerrainFilter.getErrorSeverity(parameterText, ruleset)
@ -301,19 +301,19 @@ enum class UniqueParameterType(
SimpleTerrain("simpleTerrain", "Elevated") {
private val knownValues = setOf("Elevated", "Water", "Land")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ruleset.terrains.containsKey(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
/** Used by [NaturalWonderGenerator.trySpawnOnSuitableLocation][com.unciv.logic.map.mapgenerator.NaturalWonderGenerator.trySpawnOnSuitableLocation], only tests base terrain */
BaseTerrain("baseTerrain", Constants.grassland, "The name of any terrain that is a base terrain according to the json file") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (ruleset.terrains[parameterText]?.type?.isBaseTerrain == true) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -321,9 +321,9 @@ enum class UniqueParameterType(
* [UniqueType.ChangesTerrain] (MapGenerator.convertTerrains) */
TerrainName("terrainName", Constants.forest) {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (ruleset.terrains.containsKey(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -333,12 +333,12 @@ enum class UniqueParameterType(
RegionType("regionType", "Hybrid", null, "Region Types") {
private val knownValues = setOf("Hybrid")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ruleset.terrains[parameterText]?.hasUnique(UniqueType.RegionRequirePercentSingleType) == true ||
ruleset.terrains[parameterText]?.hasUnique(UniqueType.RegionRequirePercentTwoTypes) == true)
return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
override fun getTranslationWriterStringsForOutput() = knownValues
},
@ -347,9 +347,9 @@ enum class UniqueParameterType(
TerrainQuality("terrainQuality", "Undesirable", null, "Terrain Quality") {
private val knownValues = setOf("Undesirable", "Food", "Desirable", "Production")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
}
override fun getTranslationWriterStringsForOutput() = knownValues
},
@ -357,29 +357,29 @@ enum class UniqueParameterType(
/** [UniqueType.UnitStartingPromotions], [UniqueType.TerrainGrantsPromotion], [UniqueType.ConditionalUnitWithPromotion] and others */
Promotion("promotion", "Shock I", "The name of any promotion") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.unitPromotions -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
/** [UniqueType.OneTimeFreeTechRuins], [UniqueType.ConditionalDuringEra] and similar */
Era("era", "Ancient era", "The name of any era") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.eras -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
/** For [UniqueType.CreatesOneImprovement] */
ImprovementName("improvementName", "Trading Post", "The name of any improvement"){
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText == Constants.cancelImprovementOrder)
return UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
return UniqueType.UniqueErrorScope.RulesetInvariant
if (ruleset.tileImprovements.containsKey(parameterText)) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -387,11 +387,11 @@ enum class UniqueParameterType(
ImprovementFilter("improvementFilter", "All Road", null, "Improvement Filters") {
private val knownValues = setOf("All", "Improvement", "All Road", "Great Improvement", "Great")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
UniqueType.UniqueErrorScope? {
if (parameterText in knownValues) return null
if (ImprovementName.getErrorSeverity(parameterText, ruleset) == null) return null
if (ruleset.tileImprovements.values.any { it.hasUnique(parameterText) }) return null
return UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
return UniqueType.UniqueErrorScope.RulesetSpecific
}
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
parameterText != "All" && getErrorSeverity(parameterText, ruleset) == null
@ -401,34 +401,34 @@ enum class UniqueParameterType(
/** Used by [UniqueType.ConsumesResources] and others, implementation not centralized */
Resource("resource", "Iron", "The name of any resource") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.tileResources -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
StockpiledResource("stockpiledResource", "StockpiledResource", "The name of any stockpiled") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = if (parameterText in ruleset.tileResources && ruleset.tileResources[parameterText]!!.isStockpiled()) null
else UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
UniqueType.UniqueErrorScope? = if (parameterText in ruleset.tileResources && ruleset.tileResources[parameterText]!!.isStockpiled()) null
else UniqueType.UniqueErrorScope.RulesetSpecific
},
/** Used by [UniqueType.FreeExtraBeliefs], see ReligionManager.getBeliefsToChooseAt* functions */
BeliefTypeName("beliefType", "Follower", "'Pantheon', 'Follower', 'Founder' or 'Enhancer'") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in BeliefType.values().map { it.name } -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else -> UniqueType.UniqueErrorScope.RulesetInvariant
}
},
/** unused at the moment with vanilla rulesets */
Belief("belief", "God of War", "The name of any belief") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.beliefs -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -437,9 +437,9 @@ enum class UniqueParameterType(
// Used in FreeExtraBeliefs, FreeExtraAnyBeliefs
private val knownValues = setOf("founding", "enhancing")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in knownValues -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else -> UniqueType.UniqueErrorScope.RulesetInvariant
}
override fun getTranslationWriterStringsForOutput() = knownValues
},
@ -447,18 +447,18 @@ enum class UniqueParameterType(
/** [UniqueType.ConditionalTech] and others, no central implementation */
Technology("tech", "Agriculture", "The name of any tech") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.technologies -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
/** unused at the moment with vanilla rulesets */
Specialist("specialist", "Merchant", "The name of any specialist") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = when (parameterText) {
UniqueType.UniqueErrorScope? = when (parameterText) {
in ruleset.specialists -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
},
@ -467,10 +467,10 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
return when (parameterText) {
in ruleset.policies -> null
else -> UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
else -> UniqueType.UniqueErrorScope.RulesetSpecific
}
}
},
@ -480,9 +480,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
return if (parameterText in ruleset.victories) null
else UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else UniqueType.UniqueErrorScope.RulesetInvariant
}
},
@ -492,9 +492,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
return if (parameterText in knownValues) null
else UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else UniqueType.UniqueErrorScope.RulesetInvariant
}
},
@ -505,9 +505,9 @@ enum class UniqueParameterType(
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueComplianceErrorSeverity? {
): UniqueType.UniqueErrorScope? {
return if (parameterText in knownValues) null
else UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else UniqueType.UniqueErrorScope.RulesetInvariant
}
override fun getTranslationWriterStringsForOutput() = knownValues
},
@ -515,9 +515,9 @@ enum class UniqueParameterType(
/** Mod declarative compatibility: Behaves like [Unknown], but makes for nicer auto-generated documentation. */
ModName("modFilter", "DeCiv Redux", """A Mod name, case-sensitive _or_ a simple wildcard filter beginning and ending in an Asterisk, case-insensitive""", "Mod name filter") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? =
UniqueType.UniqueErrorScope? =
if ('-' !in parameterText && ('*' !in parameterText || parameterText.matches(Regex("""^\*[^*]+\*$""")))) null
else UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
else UniqueType.UniqueErrorScope.RulesetInvariant
override fun getTranslationWriterStringsForOutput() = scanExistingValues(this)
},
@ -525,7 +525,7 @@ enum class UniqueParameterType(
/** Behaves like [Unknown], but states explicitly the parameter is OK and its contents are ignored */
Comment("comment", "comment", null, "Unique Specials") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = null
UniqueType.UniqueErrorScope? = null
override fun getTranslationWriterStringsForOutput() = scanExistingValues(this)
},
@ -534,13 +534,13 @@ enum class UniqueParameterType(
* [isTranslationWriterGuess]() == `true` for all inputs or TranslationFileWriter will have a problem! */
Unknown("param", "Unknown") {
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? = null
UniqueType.UniqueErrorScope? = null
};
//region _Internals
/** Validate a [Unique] parameter */
abstract fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueComplianceErrorSeverity?
abstract fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueErrorScope?
/** Pick this type when [TranslationFileWriter] tries to guess for an untyped [Unique] */
open fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset): Boolean =
@ -596,5 +596,5 @@ enum class UniqueParameterType(
class UniqueComplianceError(
val parameterName: String,
val acceptableParameterTypes: List<UniqueParameterType>,
val errorSeverity: UniqueType.UniqueComplianceErrorSeverity
val errorSeverity: UniqueType.UniqueErrorScope
)

View File

@ -1169,25 +1169,29 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
val placeholderText = text.getPlaceholderText()
/** Ordinal determines severity - ordered from least to most severe, so we can use Severity >= */
enum class UniqueComplianceErrorSeverity {
enum class UniqueErrorScope {
/** This is for filters that can also potentially accept free text, like UnitFilter and TileFilter */
/** This is a warning, regardless of what ruleset we're in.
* This is for filters that can also potentially accept free text, like UnitFilter and TileFilter */
WarningOnly {
override fun getRulesetErrorSeverity(severityToReport: UniqueComplianceErrorSeverity) =
override fun getRulesetErrorSeverity(severityToReport: UniqueErrorScope) =
RulesetErrorSeverity.WarningOptionsOnly
},
/** This is a problem like "unit/resource/tech name doesn't exist in ruleset" - definite bug */
/** An error, but only because of other information in the current ruleset.
* This means that if this is an *add-on* to a different mod, it could be correct.
* This is a problem like "unit/resource/tech name doesn't exist in ruleset" - definite bug */
RulesetSpecific {
// Report Warning on the first pass of RulesetValidator only, where mods are checked standalone
// but upgrade to error when the econd pass asks, which runs only for combined or base rulesets.
override fun getRulesetErrorSeverity(severityToReport: UniqueComplianceErrorSeverity) =
override fun getRulesetErrorSeverity(severityToReport: UniqueErrorScope) =
RulesetErrorSeverity.Warning
},
/** This is a problem like "numbers don't parse", "stat isn't stat", "city filter not applicable" */
/** An error, regardless of the ruleset we're in.
* This is a problem like "numbers don't parse", "stat isn't stat", "city filter not applicable" */
RulesetInvariant {
override fun getRulesetErrorSeverity(severityToReport: UniqueComplianceErrorSeverity) =
override fun getRulesetErrorSeverity(severityToReport: UniqueErrorScope) =
RulesetErrorSeverity.Error
},
;
@ -1197,7 +1201,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
* first pass that also runs for extension mods without a base mixed in; the complex check
* runs with [severityToReport]==[RulesetSpecific].
*/
abstract fun getRulesetErrorSeverity(severityToReport: UniqueComplianceErrorSeverity): RulesetErrorSeverity
abstract fun getRulesetErrorSeverity(severityToReport: UniqueErrorScope): RulesetErrorSeverity
}
fun getDeprecationAnnotation(): Deprecated? = declaringJavaClass.getField(name)

View File

@ -32,8 +32,8 @@ class RulesetValidator(val ruleset: Ruleset) {
// Checks for ALL MODS - only those that can succeed without loading a base ruleset
// When not checking the entire ruleset, we can only really detect ruleset-invariant errors in uniques
val rulesetInvariant = UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
val rulesetSpecific = UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific
val rulesetInvariant = UniqueType.UniqueErrorScope.RulesetInvariant
val rulesetSpecific = UniqueType.UniqueErrorScope.RulesetSpecific
uniqueValidator.checkUniques(ruleset.globalUniques, lines, rulesetInvariant, tryFixUnknownUniques)
addUnitErrorsRulesetInvariant(lines, rulesetInvariant, tryFixUnknownUniques)
@ -82,7 +82,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addCityStateTypeErrors(
tryFixUnknownUniques: Boolean,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
lines: RulesetErrorList
) {
for (cityStateType in ruleset.cityStateTypes.values) {
@ -131,7 +131,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addUnitTypeErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (unitType in ruleset.unitTypes.values) {
@ -141,7 +141,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addPromotionErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (promotion in ruleset.unitPromotions.values) {
@ -165,7 +165,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addRuinsErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (reward in ruleset.ruinRewards.values) {
@ -178,7 +178,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addPolicyErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (policy in ruleset.policies.values) {
@ -202,7 +202,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addNationErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (nation in ruleset.nations.values) {
@ -217,7 +217,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addBeliefErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (belief in ruleset.beliefs.values) {
@ -236,7 +236,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addEraErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
if (ruleset.eras.isEmpty()) {
@ -294,7 +294,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addTechErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (tech in ruleset.technologies.values) {
@ -322,7 +322,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addTerrainErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
if (ruleset.terrains.values.none { it.type == TerrainType.Land && !it.impassable })
@ -351,7 +351,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addImprovementErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (improvement in ruleset.tileImprovements.values) {
@ -406,7 +406,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addResourceErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (resource in ruleset.tileResources.values) {
@ -437,7 +437,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addBuildingErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (building in ruleset.buildings.values) {
@ -460,7 +460,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addUnitErrors(
lines: RulesetErrorList,
rulesetSpecific: UniqueType.UniqueComplianceErrorSeverity,
rulesetSpecific: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
if (ruleset.units.values.none { it.isCityFounder() })
@ -474,7 +474,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addResourceErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (resource in ruleset.tileResources.values) {
@ -484,7 +484,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addPromotionErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (promotion in ruleset.unitPromotions.values) {
@ -500,7 +500,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addNationErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (nation in ruleset.nations.values) {
@ -550,7 +550,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addBuildingErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (building in ruleset.buildings.values) {
@ -594,7 +594,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addTechErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (tech in ruleset.technologies.values) {
@ -609,7 +609,7 @@ class RulesetValidator(val ruleset: Ruleset) {
private fun addUnitErrorsRulesetInvariant(
lines: RulesetErrorList,
rulesetInvariant: UniqueType.UniqueComplianceErrorSeverity,
rulesetInvariant: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (unit in ruleset.units.values) {

View File

@ -16,7 +16,7 @@ class UniqueValidator(val ruleset: Ruleset) {
fun checkUniques(
uniqueContainer: IHasUniques,
lines: RulesetErrorList,
severityToReport: UniqueType.UniqueComplianceErrorSeverity,
severityToReport: UniqueType.UniqueErrorScope,
tryFixUnknownUniques: Boolean
) {
for (unique in uniqueContainer.uniqueObjects) {
@ -34,7 +34,7 @@ class UniqueValidator(val ruleset: Ruleset) {
unique: Unique,
tryFixUnknownUniques: Boolean,
namedObj: INamed?,
severityToReport: UniqueType.UniqueComplianceErrorSeverity
severityToReport: UniqueType.UniqueErrorScope
): List<RulesetError> {
val prefix by lazy { (if (namedObj is IRulesetObject) "${namedObj.originRuleset}: " else "") +
(if (namedObj == null) "The" else "${namedObj.name}'s") }
@ -60,7 +60,7 @@ class UniqueValidator(val ruleset: Ruleset) {
}
if (severityToReport != UniqueType.UniqueComplianceErrorSeverity.RulesetSpecific)
if (severityToReport != UniqueType.UniqueErrorScope.RulesetSpecific)
// If we don't filter these messages will be listed twice as this function is called twice on most objects
// The tests are RulesetInvariant in nature, but RulesetSpecific is called for _all_ objects, invariant is not.
return rulesetErrors
@ -75,7 +75,7 @@ class UniqueValidator(val ruleset: Ruleset) {
rulesetErrors: RulesetErrorList,
prefix: String,
unique: Unique,
severityToReport: UniqueType.UniqueComplianceErrorSeverity
severityToReport: UniqueType.UniqueErrorScope
) {
if (conditional.type == null) {
rulesetErrors.add(
@ -154,8 +154,8 @@ class UniqueValidator(val ruleset: Ruleset) {
return errorList
}
private val paramTypeErrorSeverityCache = HashMap<UniqueParameterType, HashMap<String, UniqueType.UniqueComplianceErrorSeverity?>>()
private fun getParamTypeErrorSeverityCached(uniqueParameterType: UniqueParameterType, param:String): UniqueType.UniqueComplianceErrorSeverity? {
private val paramTypeErrorSeverityCache = HashMap<UniqueParameterType, HashMap<String, UniqueType.UniqueErrorScope?>>()
private fun getParamTypeErrorSeverityCached(uniqueParameterType: UniqueParameterType, param:String): UniqueType.UniqueErrorScope? {
if (!paramTypeErrorSeverityCache.containsKey(uniqueParameterType))
paramTypeErrorSeverityCache[uniqueParameterType] = hashMapOf()
val uniqueParamCache = paramTypeErrorSeverityCache[uniqueParameterType]!!

View File

@ -204,7 +204,7 @@ class ModCheckTab(
replacementUnique,
false,
null,
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
UniqueType.UniqueErrorScope.RulesetInvariant
)
for (error in modInvariantErrors)
Log.error("ModInvariantError: %s - %s", error.text, error.errorSeverityToReport)
@ -215,7 +215,7 @@ class ModCheckTab(
replacementUnique,
false,
null,
UniqueType.UniqueComplianceErrorSeverity.RulesetInvariant
UniqueType.UniqueErrorScope.RulesetInvariant
)
for (error in modSpecificErrors)
Log.error("ModSpecificError: %s - %s", error.text, error.errorSeverityToReport)