makeEnumValueName function

String makeEnumValueName(
  1. String value,
  2. String? classname,
  3. Set<String> usedNames,
  4. Iterable<String> suffixes,
)

Converts an UPPER_SNAKE_CASED name to a proper Dart enum camelCasedName.

Implementation

String makeEnumValueName(
  String value,
  String? classname,
  Set<String> usedNames,
  Iterable<String> suffixes,
) {
  final underscoreAvoided = avoidInitialUnderscore(value);
  int underscores = 0;
  for (int i = underscoreAvoided.length - 1; i >= 0; i--) {
    if (underscoreAvoided[i] != '_') {
      break;
    }
    underscores++;
  }
  final prefix = classname?.toLowerCase();
  final camelCased = underscoreAvoided.camelCase;
  // final constantCased = camelCased.constantCase;
  final lowerCased = camelCased.toLowerCase();
  final removePrefix =
      prefix != null && prefix != lowerCased && lowerCased.startsWith(prefix);
  // stderr.write('----------------------------\n');
  // stderr.write('underscoreAvoided: $underscoreAvoided\n');
  // stderr.write('constantCased: $constantCased\n');
  // stderr.write('prefix: $prefix\n');
  // stderr.write('camelCased: $camelCased\n');
  // stderr.write('removePrefix: $removePrefix\n');
  final prefixRemoved =
      removePrefix ? camelCased.substring(prefix.length).camelCase : camelCased;
  // stderr.write('prefixRemoved: $prefixRemoved\n');
  final underscored = prefixRemoved + '_' * underscores;
  final disambiguated = disambiguateName(underscored, usedNames, suffixes);
  // stderr.write('$value -> $disambiguated\n');
  return disambiguated;
}