Skip to content

Commit

Permalink
Improve error message for factory to mention generated config
Browse files Browse the repository at this point in the history
  • Loading branch information
greglittlefield-wf committed Sep 16, 2020
1 parent 75f3a05 commit 8d12008
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
4 changes: 3 additions & 1 deletion lib/src/builder/parsing/ast_util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:over_react/src/builder/codegen/names.dart';
import 'package:source_span/source_span.dart';
import 'package:transformer_utils/transformer_utils.dart';

Expand Down Expand Up @@ -44,9 +45,10 @@ extension InitializerHelperTopLevel on TopLevelVariableDeclaration {

/// Returns whether or not there is a generated config being used.
bool get usesAGeneratedConfig {
final generatedConfigName = FactoryNames(firstVariable.name.name).configName;
return firstInitializer != null &&
anyDescendantIdentifiers(firstInitializer, (identifier) {
return identifier.nameWithoutPrefix == '\$${firstVariable.name.name}Config';
return identifier.nameWithoutPrefix == generatedConfigName;
});
}
}
Expand Down
1 change: 1 addition & 0 deletions lib/src/builder/parsing/members.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import 'package:analyzer/dart/ast/ast.dart';
import 'package:meta/meta.dart';
import 'package:over_react/src/builder/codegen/names.dart';
import 'package:over_react/src/component_declaration/annotations.dart' as annotations;
import 'package:over_react/src/util/pretty_print.dart';
import 'package:over_react/src/util/string_util.dart';
Expand Down
15 changes: 12 additions & 3 deletions lib/src/builder/parsing/members/factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,10 @@ class BoilerplateFactory extends BoilerplateMember {

final variable = node.variables.variables.first;
final factoryName = variable.name.name;
final generatedFactoryName = '$privateSourcePrefix$factoryName';

final names = FactoryNames(factoryName);
final generatedFactoryName = names.implName;
final generatedConfigName = names.configName;

final initializer = variable.initializer;
final referencesGeneratedFactory = initializer != null &&
Expand All @@ -93,8 +96,14 @@ class BoilerplateFactory extends BoilerplateMember {

if (!referencesGeneratedFactory && !shouldGenerateConfig) {
errorCollector.addError(
'Factory variables are stubs for the generated factories, and must '
'be initialized with or otherwise reference the generated factory. Should be: `$factoryName = $generatedFactoryName`',
'Factory variables are stubs for generated code, and must'
' be initialized with an expression containing either '
' the generated factory ($generatedFactoryName) or'
' the generated factory config ($generatedConfigName).'
'\nExamples:'
'\n\n $factoryName = $generatedFactoryName;'
'\n\n $factoryName = connect(...)($generatedFactoryName);'
'\n\n $factoryName = uiFunction((props) { ... }, $generatedConfigName);',
errorCollector.spanFor(variable));
}
}
Expand Down

0 comments on commit 8d12008

Please sign in to comment.