validateFeatureName static method

ValidationResult<String> validateFeatureName(
  1. String? name
)

Validates feature name format.

Ensures feature names follow proper naming conventions and don't conflict with reserved words.

Parameters:

  • name: Feature name to validate

Returns: ValidationResult with the normalized name or error details

Example:

final result = ArgumentValidator.validateFeatureName('user_profile');
if (result.isValid) {
  print('Valid feature name: ${result.value}');
} else {
  print('Invalid feature name: ${result.error}');
}

Implementation

static ValidationResult<String> validateFeatureName(String? name) {
  if (name == null || name.isEmpty) {
    return ValidationResult.error(
      'Feature name is required',
      suggestion: 'Provide a feature name as an argument',
      examples: ['morpheme feature user_profile'],
    );
  }

  if (!RegExp(r'^[a-z][a-z0-9_]*$').hasMatch(name)) {
    return ValidationResult.error(
      'Feature name must use snake_case format',
      suggestion: 'Use lowercase letters, numbers, and underscores only',
      examples: ['user_profile', 'shopping_cart', 'payment_system'],
    );
  }

  // Reserved feature names
  const reservedNames = ['core', 'shared', 'common', 'base'];
  if (reservedNames.contains(name.toLowerCase())) {
    return ValidationResult.error(
      'Feature name "$name" is reserved',
      suggestion: 'Choose a different feature name that is not reserved',
      examples: ['user_$name', '${name}_feature', 'custom_$name'],
    );
  }

  return ValidationResult.success(name.toLowerCase());
}