protectEnumItemsNames function
Protect enum items names from incorrect symbols, keywords, etc.
Implementation
Set<UniversalEnumItem> protectEnumItemsNames(Iterable<String> names) {
var counter = 0;
final items = <UniversalEnumItem>{};
String uniqueEnumItemName() {
final newName = 'undefined $counter';
counter++;
return newName;
}
String numberEnumItemName(String name) {
final startsWithMinus = name.startsWith('-');
final newName = 'value ${startsWithMinus ? 'minus' : ''} $name';
return newName;
}
String leadingDashToMinus(String name) {
if (name.startsWith('-')) {
return 'minus ${name.substring(1)}';
}
return name;
}
for (final name in names) {
final (newName, renameDescription) = switch (name) {
_
when _startWithNumberRegExp.hasMatch(name) &&
_enumNameRegExp.hasMatch(numberEnumItemName(name).toCamel) =>
(numberEnumItemName(name), null),
_ when !_enumNameRegExp.hasMatch(name) => (
uniqueEnumItemName(),
'Incorrect name has been replaced. Original name: `$name`.',
),
_ when dartEnumMemberKeywords.contains(name.toCamel) => (
'$_valueConst ${leadingDashToMinus(name)}',
'The name has been replaced because it contains a keyword. Original name: `$name`.',
),
_ => (leadingDashToMinus(name), null),
};
items.add(
UniversalEnumItem(
name: newName,
jsonKey: name,
description: renameDescription,
),
);
}
return items;
}