Skip to content

Commit

Permalink
feat: Add provider_name_prefix and provider_family_name_prefix to bui…
Browse files Browse the repository at this point in the history
…ld.yaml
  • Loading branch information
ValentinVignal committed Feb 13, 2024
1 parent 64a4dbf commit aecda02
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 4 deletions.
13 changes: 13 additions & 0 deletions packages/riverpod_generator/lib/src/models.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
class BuildYamlOptions {
BuildYamlOptions({
this.providerNamePrefix,
this.providerFamilyNamePrefix,
this.providerNameSuffix,
this.providerFamilyNameSuffix,
});

factory BuildYamlOptions.fromMap(Map<String, dynamic> map) {
return BuildYamlOptions(
providerNamePrefix: map['provider_name_prefix'] as String?,
providerFamilyNamePrefix: map['provider_family_name_prefix'] as String?,
providerNameSuffix: map['provider_name_suffix'] as String?,
providerFamilyNameSuffix: map['provider_family_name_suffix'] as String?,
);
}

final String? providerNamePrefix;
final String? providerFamilyNamePrefix;
final String? providerNameSuffix;
final String? providerFamilyNameSuffix;
}
Expand All @@ -30,6 +36,13 @@ extension CaseChangeExtension on String {
);
}

String get upperFirst {
return replaceFirstMapped(
RegExp('[a-zA-Z]'),
(match) => match.group(0)!.toUpperCase(),
);
}

String get public {
if (startsWith('_')) return substring(1);
return this;
Expand Down
10 changes: 8 additions & 2 deletions packages/riverpod_generator/lib/src/riverpod_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ String _hashFnIdentifier(String hashFnName) {
'null : $hashFnName';
}

const _defaultProviderNamePrefix = '';
const _defaultProviderNameSuffix = 'Provider';

/// May be thrown by generators during [Generator.generate].
Expand Down Expand Up @@ -94,6 +95,8 @@ class _RiverpodGeneratorVisitor extends RecursiveRiverpodAstVisitor {
final StringBuffer buffer;
final BuildYamlOptions options;

String get prefix => options.providerNamePrefix ?? _defaultProviderNamePrefix;
String get familyPrefix => options.providerFamilyNamePrefix ?? prefix;
String get suffix => options.providerNameSuffix ?? _defaultProviderNameSuffix;
String get familySuffix => options.providerFamilyNameSuffix ?? suffix;

Expand Down Expand Up @@ -140,7 +143,9 @@ class _SystemHash {
buffer.write(_hashFn(provider, hashFunctionName));

if (parameters.isEmpty) {
final providerName = '${provider.providerElement.name.lowerFirst}$suffix';
final rawProviderName = provider.providerElement.name;
final providerName =
'$prefix${prefix.isEmpty ? rawProviderName.lowerFirst : rawProviderName.upperFirst}$suffix';
final notifierTypedefName = providerName.startsWith('_')
? '_\$${provider.providerElement.name.substring(1)}'
: '_\$${provider.providerElement.name}';
Expand All @@ -152,8 +157,9 @@ class _SystemHash {
hashFn: hashFn,
).run(buffer);
} else {
final rawProviderName = provider.providerElement.name;
final providerName =
'${provider.providerElement.name.lowerFirst}$familySuffix';
'$prefix${prefix.isEmpty ? rawProviderName.lowerFirst : rawProviderName.upperFirst}$suffix';
final notifierTypedefName = providerName.startsWith('_')
? '_\$${provider.providerElement.name.substring(1)}'
: '_\$${provider.providerElement.name}';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:riverpod_analyzer_utils/riverpod_analyzer_utils.dart';

import '../models.dart';
import '../riverpod_generator.dart';
import '../validation.dart';
Expand All @@ -8,7 +9,10 @@ String providerNameFor(
ProviderDeclarationElement provider,
BuildYamlOptions options,
) {
return '${provider.name.lowerFirst}${options.providerNameSuffix ?? 'Provider'}';
final prefix = options.providerNamePrefix ?? '';
final rawProviderName = provider.name;
final suffix = options.providerNameSuffix ?? 'Provider';
return '$prefix${prefix.isEmpty ? rawProviderName.lowerFirst : rawProviderName.upperFirst}$suffix';
}

String? serializeDependencies(
Expand Down
8 changes: 7 additions & 1 deletion packages/riverpod_generator/lib/src/templates/family.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ String providerFamilyNameFor(
ProviderDeclarationElement provider,
BuildYamlOptions options,
) {
return '${provider.name.lowerFirst}${options.providerFamilyNameSuffix ?? options.providerNameSuffix ?? 'Provider'}';
final prefix =
options.providerFamilyNamePrefix ?? options.providerNamePrefix ?? '';
final rawProviderName = provider.name;
final suffix = options.providerFamilyNameSuffix ??
options.providerNameSuffix ??
'Provider';
return '$prefix${prefix.isEmpty ? rawProviderName.lowerFirst : rawProviderName.upperFirst}$suffix';
}

class FamilyTemplate extends Template {
Expand Down

0 comments on commit aecda02

Please sign in to comment.