schultek/dart_mappable

syntax parsing error when declaring const hook

Opened this issue · 2 comments

If you were to declare a top level constant hook and use it. You will get a build time error.
E.G.

const myHook = ChainedHook([]);

@MappableClass(hook: hook)
class Foo with FooMappable{
  final String? bar;
  Foo(this.bar)
}
The error was:
Could not format because the source could not be parsed:

line 122, column 40 of .: Expected to find '('.

122 │         final MappingHook hook = const myHook ;
    │                                        ^^^^^^^^^^^^^^^^^

There code here is not referring to the source code, it's referring to the code that dart_mappable created, before throwing it away once it detected a syntax error.

The issue here is that const should only appear when instantiating a Hook, not when referencing a constant.
image

@schultek Seems like a simple check here should suffice:

var hook = element.hookForClass;
if (hook != null) {
output.write('''
@override
final MappingHook hook = const $hook;
''');
}

Indeed a bug, let me look into it.