Tweaked Compiler error messages, made some in def cast_csv_value show if trying to cast nil

This commit is contained in:
Maruno17
2023-10-01 17:51:13 +01:00
parent d9c3898124
commit e96f16c484
3 changed files with 97 additions and 104 deletions

View File

@@ -112,11 +112,11 @@ module Compiler
else
if sectionname.nil?
FileLineData.setLine(line, lineno)
raise _INTL("Expected a section at the beginning of the file. This error may also occur if the file was not saved in UTF-8.\n{1}", FileLineData.linereport)
raise _INTL("Expected a section at the beginning of the file.\nThis error may also occur if the file was not saved in UTF-8.") + "\n" + FileLineData.linereport
end
if !line[/^\s*(\w+)\s*=\s*(.*)$/]
FileLineData.setSection(sectionname, nil, line)
raise _INTL("Bad line syntax (expected syntax like XXX=YYY)\n{1}", FileLineData.linereport)
raise _INTL("Bad line syntax (expected syntax like XXX=YYY).") + "\n" + FileLineData.linereport
end
r1 = $~[1]
r2 = $~[2]
@@ -316,7 +316,7 @@ module Compiler
end
str[0, fieldbytes] = ""
if !str[/^\s*,/] && !str[/^\s*$/]
raise _INTL("Invalid quoted field (in: {1})\n{2}", str, FileLineData.linereport)
raise _INTL("Invalid quoted field (in: {1}).", str) + "\n" + FileLineData.linereport
end
str[0, str.length] = $~.post_match
else
@@ -337,14 +337,14 @@ module Compiler
field = csvfield!(str)
return true if field[/^(?:1|TRUE|YES|Y)$/i]
return false if field[/^(?:0|FALSE|NO|N)$/i]
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a Boolean value (true, false, 1, 0).", field) + "\n" + FileLineData.linereport
end
# Unused
def csvInt!(str, _line = -1)
ret = csvfield!(str)
if !ret[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\n{2}", ret, FileLineData.linereport)
raise _INTL("Field '{1}' is not an integer.", ret) + "\n" + FileLineData.linereport
end
return ret.to_i
end
@@ -353,7 +353,7 @@ module Compiler
def csvPosInt!(str, _line = -1)
ret = csvfield!(str)
if !ret[/^\d+$/]
raise _INTL("Field {1} is not a positive integer\n{2}", ret, FileLineData.linereport)
raise _INTL("Field '{1}' is not a positive integer.", ret) + "\n" + FileLineData.linereport
end
return ret.to_i
end
@@ -361,7 +361,7 @@ module Compiler
# Unused
def csvFloat!(str, _line = -1)
ret = csvfield!(str)
return Float(ret) rescue raise _INTL("Field {1} is not a number\n{2}", ret, FileLineData.linereport)
return Float(ret) rescue raise _INTL("Field '{1}' is not a number.", ret) + "\n" + FileLineData.linereport
end
# Unused
@@ -384,52 +384,52 @@ module Compiler
def cast_csv_value(value, schema, enumer = nil)
case schema.downcase
when "i" # Integer
if !value[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\n{2}", value, FileLineData.linereport)
if !value || !value[/^\-?\d+$/]
raise _INTL("Field '{1}' is not an integer.", value) + "\n" + FileLineData.linereport
end
return value.to_i
when "u" # Positive integer or zero
if !value[/^\d+$/]
raise _INTL("Field {1} is not a positive integer or 0\n{2}", value, FileLineData.linereport)
if !value || !value[/^\d+$/]
raise _INTL("Field '{1}' is not a positive integer or 0.", value) + "\n" + FileLineData.linereport
end
return value.to_i
when "v" # Positive integer
if !value[/^\d+$/]
raise _INTL("Field {1} is not a positive integer\n{2}", value, FileLineData.linereport)
if !value || !value[/^\d+$/]
raise _INTL("Field '{1}' is not a positive integer.", value) + "\n" + FileLineData.linereport
end
if value.to_i == 0
raise _INTL("Field '{1}' must be greater than 0\n{2}", value, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0.", value) + "\n" + FileLineData.linereport
end
return value.to_i
when "x" # Hexadecimal number
if !value[/^[A-F0-9]+$/i]
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", value, FileLineData.linereport)
if !value || !value[/^[A-F0-9]+$/i]
raise _INTL("Field '{1}' is not a hexadecimal number.", value) + "\n" + FileLineData.linereport
end
return value.hex
when "f" # Floating point number
if !value[/^\-?^\d*\.?\d*$/]
raise _INTL("Field {1} is not a number\n{2}", value, FileLineData.linereport)
if !value || !value[/^\-?^\d*\.?\d*$/]
raise _INTL("Field '{1}' is not a number.", value) + "\n" + FileLineData.linereport
end
return value.to_f
when "b" # Boolean
return true if value[/^(?:1|TRUE|YES|Y)$/i]
return false if value[/^(?:0|FALSE|NO|N)$/i]
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\n{2}", value, FileLineData.linereport)
return true if value && value[/^(?:1|TRUE|YES|Y)$/i]
return false if value && value[/^(?:0|FALSE|NO|N)$/i]
raise _INTL("Field '{1}' is not a Boolean value (true, false, 1, 0).", value) + "\n" + FileLineData.linereport
when "n" # Name
if !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", value, FileLineData.linereport)
if !value || !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", value) + "\n" + FileLineData.linereport
end
when "s" # String
when "q" # Unformatted text
when "m" # Symbol
if !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", value, FileLineData.linereport)
if !value || !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", value) + "\n" + FileLineData.linereport
end
return value.to_sym
when "e" # Enumerable
return checkEnumField(value, enumer)
when "y" # Enumerable or integer
return value.to_i if value[/^\-?\d+$/]
return value.to_i if value && value[/^\-?\d+$/]
return checkEnumField(value, enumer)
end
return value
@@ -440,10 +440,10 @@ module Compiler
when Module
begin
if nil_or_empty?(ret) || !enumer.const_defined?(ret)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
return enumer.const_get(ret.to_sym)
when Symbol, String
@@ -451,36 +451,36 @@ module Compiler
enumer = GameData.const_get(enumer.to_sym)
begin
if nil_or_empty?(ret) || !enumer.exists?(ret.to_sym)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
return ret.to_sym
end
enumer = Object.const_get(enumer.to_sym)
begin
if nil_or_empty?(ret) || !enumer.const_defined?(ret)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}.", ret, enumer.name) + "\n" + FileLineData.linereport
end
return enumer.const_get(ret.to_sym)
when Array
idx = findIndex(enumer) { |item| ret == item }
idx = (nil_or_empty?(ret)) ? -1 : findIndex(enumer) { |item| ret == item }
if idx < 0
raise _INTL("Undefined value {1} (expected one of: {2})\n{3}", ret, enumer.inspect, FileLineData.linereport)
raise _INTL("Undefined value {1} (expected one of: {2}).", ret, enumer.inspect) + "\n" + FileLineData.linereport
end
return idx
when Hash
value = enumer[ret]
value = (nil_or_empty?(ret)) ? nil : enumer[ret]
if value.nil?
raise _INTL("Undefined value {1} (expected one of: {2})\n{3}", ret, enumer.keys.inspect, FileLineData.linereport)
raise _INTL("Undefined value {1} (expected one of: {2}).", ret, enumer.keys.inspect) + "\n" + FileLineData.linereport
end
return value
end
raise _INTL("Enumeration not defined\n{1}", FileLineData.linereport)
raise _INTL("Enumeration not defined.") + "\n" + FileLineData.linereport
end
# Unused
@@ -540,7 +540,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not an integer.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.to_i)
end
@@ -551,29 +551,29 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\d+$/]
raise _INTL("Field '{1}' must be 0 or greater\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be 0 or greater.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.to_i)
end
when "v" # Positive integer
field = csvPosInt!(rec, lineno)
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport) if field == 0
raise _INTL("Field '{1}' must be greater than 0.", field) + "\n" + FileLineData.linereport if field == 0
subrecord.push(field)
when "V" # Optional positive integer
field = csvfield!(rec)
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\d+$/]
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0.", field) + "\n" + FileLineData.linereport
elsif field.to_i == 0
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.to_i)
end
when "x" # Hexadecimal number
field = csvfield!(rec)
if !field[/^[A-Fa-f0-9]+$/]
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a hexadecimal number.", field) + "\n" + FileLineData.linereport
end
subrecord.push(field.hex)
when "X" # Optional hexadecimal number
@@ -581,7 +581,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^[A-Fa-f0-9]+$/]
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a hexadecimal number.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.hex)
end
@@ -592,7 +592,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\-?^\d*\.?\d*$/]
raise _INTL("Field {1} is not a floating point number\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a floating point number.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.to_f)
end
@@ -610,7 +610,7 @@ module Compiler
when "n" # Name
field = csvfield!(rec)
if !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", field) + "\n" + FileLineData.linereport
end
subrecord.push(field)
when "N" # Optional name
@@ -618,7 +618,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field)
end
@@ -640,7 +640,7 @@ module Compiler
when "m" # Symbol
field = csvfield!(rec)
if !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", field) + "\n" + FileLineData.linereport
end
subrecord.push(field.to_sym)
when "M" # Optional symbol
@@ -648,7 +648,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.", field) + "\n" + FileLineData.linereport
else
subrecord.push(field.to_sym)
end
@@ -854,7 +854,7 @@ module Compiler
clonitem.sub!(/\s*$/, "")
itm = GameData::Item.try_get(clonitem)
if !itm
raise _INTL("Undefined item constant name: {1}\nMake sure the item is defined in PBS/items.txt.\n{2}", item, FileLineData.linereport)
raise _INTL("Undefined item constant name: {1}.\nMake sure the item is defined in PBS/items.txt.", item) + "\n" + FileLineData.linereport
end
return itm.id
end
@@ -867,7 +867,7 @@ module Compiler
clonspecies = "NIDORANfE" if clonspecies == "NIDORANFE"
spec = GameData::Species.try_get(clonspecies)
if !spec
raise _INTL("Undefined species constant name: {1}\nMake sure the species is defined in PBS/pokemon.txt.\n{2}", species, FileLineData.linereport)
raise _INTL("Undefined species constant name: {1}.\nMake sure the species is defined in PBS/pokemon.txt.", species) + "\n" + FileLineData.linereport
end
return spec.id
end
@@ -879,7 +879,7 @@ module Compiler
mov = GameData::Move.try_get(clonmove)
if !mov
return nil if skip_unknown
raise _INTL("Undefined move constant name: {1}\nMake sure the move is defined in PBS/moves.txt.\n{2}", move, FileLineData.linereport)
raise _INTL("Undefined move constant name: {1}.\nMake sure the move is defined in PBS/moves.txt.", move) + "\n" + FileLineData.linereport
end
return mov.id
end
@@ -891,7 +891,7 @@ module Compiler
clonnature.sub!(/\s*$/, "")
nat = GameData::Nature.try_get(clonnature)
if !nat
raise _INTL("Undefined nature constant name: {1}\nMake sure the nature is defined in the scripts.\n{2}", nature, FileLineData.linereport)
raise _INTL("Undefined nature constant name: {1}.\nMake sure the nature is defined in the scripts.", nature) + "\n" + FileLineData.linereport
end
return nat.id
end
@@ -903,7 +903,7 @@ module Compiler
clontype.sub!(/\s*$/, "")
typ = GameData::TrainerType.try_get(clontype)
if !typ
raise _INTL("Undefined Trainer type constant name: {1}\nMake sure the trainer type is defined in PBS/trainer_types.txt.\n{2}", type, FileLineData.linereport)
raise _INTL("Undefined trainer type constant name: {1}.\nMake sure the trainer type is defined in PBS/trainer_types.txt.", type) + "\n" + FileLineData.linereport
end
return typ.id
end