code_builder 2.0.0-alpha+1
code_builder: ^2.0.0-alpha+1 copied to clipboard
A fluent API for generating Dart code
2.0.0-alpha+1 #
- Removed
Reference.localScope. Just useReference(symbol)now. - Allow
Referenceinstead of an explicitTypeReferencein most APIs.toType()is performed for you as part the emitter process
final animal = new Class((b) => b
..name = 'Animal'
// Used to need a suffix of .toType().
..extend = const Reference('Organism')
..methods.add(new Method.returnsVoid((b) => b
..name = 'eat'
..lambda = true
..body = new Code((b) => b..code = 'print(\'Yum\')'))));
- We now support the Dart 2.0 pre-release SDKs (
<2.0.0-dev.infinity) - Removed the ability to treat
Classas aTypeReference.- Was required for compilation to
dart2js, which is now tested on travis.
- Was required for compilation to
2.0.0-alpha #
- Complete re-write to not use
package:analyzer. - Code generation now properly uses the builder pattern (via
built_value). - See examples and tests for details.
1.0.4 #
- Added
isInstanceOftoExpressionBuilder, which performs anischeck:
expect(
reference('foo').isInstanceOf(_barType),
equalsSource('foo is Bar'),
);
1.0.3 #
- Support latest
pkg/analyzerandpkg/func.
1.0.2 #
- Update internals to use newer analyzer API
1.0.1 #
- Support the latest version of
package:dart_style.
1.0.0 #
First full release. At this point all changes until 2.0.0 will be backwards
compatible (new features) or bug fixes that are not breaking. This doesn't mean
that the entire Dart language is buildable with our API, though.
Contributions are welcome.
- Exposed
uriinImportBuilder,ExportBuilder, andPart[Of]Builder.
1.0.0-beta+7 #
- Added
ExpressionBuilder#ternary.
1.0.0-beta+6 #
- Added
TypeDefBuilder. - Added
FunctionParameterBuilder. - Added
asAbstractto variousMethodBuilderconstructors.
1.0.0-beta+5 #
- Re-published the package without merge conflicts.
1.0.0-beta+4 #
- Renamed
PartBuildertoPartOfBuilder. - Added a new class,
PartBuilder, to representpart '...dart'directives. - Added the
HasAnnotationsinterface to all library/part/directive builders. - Added
asFactoryandasConsttoConstructorBuilder. - Added
ConstructorBuilder.redirectTofor a redirecting factory constructor. - Added a
namegetter toReferenceBuilder. - Supplying an empty constructor name (
'') is equivalent tonull(default). - Automatically encodes string literals with multiple lines as
'''. - Added
asThrowtoExpressionBuilder. - Fixed a bug that prevented
FieldBuilderfrom being used at the top-level.
1.0.0-beta+3 #
- Added support for
genericTypesparameter forExpressionBuilder#invoke:
expect(
explicitThis.invoke('doThing', [literal(true)], genericTypes: [
lib$core.bool,
]),
equalsSource(r'''
this.doThing<bool>(true)
'''),
);
- Added a
castAsmethod toExpressionBuilder:
expect(
literal(1.0).castAs(lib$core.num),
equalsSource(r'''
1.0 as num
'''),
);
BREAKING CHANGES #
- Removed
namedNewInstanceandnamedConstInstance, replaced withconstructor::
expect(
reference('Foo').newInstance([], constructor: 'other'),
equalsSource(r'''
new Foo.other()
'''),
);
- Renamed
namedparameter tonamedArguments:
expect(
reference('doThing').call(
[literal(true)],
namedArguments: {
'otherFlag': literal(false),
},
),
equalsSource(r'''
doThing(true, otherFlag: false)
'''),
);
1.0.0-beta+2 #
BREAKING CHANGES #
Avoid creating symbols that can collide with the Dart language:
MethodModifier.async->MethodModifier.asAsyncMethodModifier.asyncStar->MethodModifier.asAsyncStarMethodModifier.syncStar->MethodModifier.asSyncStar
1.0.0-beta+1 #
- Add support for
switchstatements - Add support for a raw expression and statement
new ExpressionBuilder.raw(...)new StatemnetBuilder.raw(...)
This should help cover any cases not covered with builders today.
- Allow referring to a
ClassBuilderandTypeBuilderas an expression - Add support for accessing the index
[]operator on an expression
BREAKING CHANGES #
- Changed
ExpressionBuilder.asAssignto always take anExpressionBuilderas target and removed thevalueproperty. Most changes are pretty simple, and involve just usingreference(...). For example:
literal(true).asAssign(reference('flag'))
... emits flag = true.
1.0.0-beta #
- Add support for
async,sync,sync*functions - Add support for expression
asAwait,asYield,asYieldStar - Add
toExportBuilderandtoImportBuilderto types and references - Fix an import scoping bug in
returnstatements and named constructor invocations. - Added constructor initializer support
- Add
whileanddo {} whileloop support - Add
forandfor-insupport - Added a
namegetter forParameterBuilder
1.0.0-alpha+7 #
- Make use of new analyzer API in preparation for analyzer version 0.30.
1.0.0-alpha+6 #
MethodBuilder.closureemits properly as a top-level function
1.0.0-alpha+5 #
- MethodBuilder with no statements will create an empty block instead of a semicolon.
// main() {}
method('main')
- Fix lambdas and closures to not include a trailing semicolon when used as an expression.
// () => false
new MethodBuilder.closure(returns: literal(false));
1.0.0-alpha+4 #
- Add support for latest
pkg/analyzer.
1.0.0-alpha+3 #
- BREAKING CHANGE: Added generics support to
TypeBuilder:
importFrom becomes a named, not positional argument, and the named
argument genericTypes is added (Iterable<TypeBuilder>).
// List<String>
new TypeBuilder('List', genericTypes: [reference('String')])
- Added generic support to
ReferenceBuilder:
// List<String>
reference('List').toTyped([reference('String')])
- Fixed a bug where
ReferenceBuilder.buildAstwas not implemented - Added
andandormethods toExpressionBuilder:
// true || false
literal(true).or(literal(false));
// true && false
literal(true).and(literal(false));
- Added support for creating closures -
MethodBuilder.closure:
// () => true
new MethodBuilder.closure(
returns: literal(true),
returnType: lib$core.bool,
)
1.0.0-alpha+2 #
- Added
returnVoidto well,return; - Added support for top-level field assignments:
new LibraryBuilder()..addMember(literal(false).asConst('foo'))
- Added support for specifying a
targetwhen usingasAssign:
// Outputs bank.bar = goldBar
reference('goldBar').asAssign('bar', target: reference('bank'))
- Added support for the cascade operator:
// Outputs foo..doThis()..doThat()
reference('foo').cascade((c) => <ExpressionBuilder> [
c.invoke('doThis', []),
c.invoke('doThat', []),
]);
- Added support for accessing a property
// foo.bar
reference('foo').property('bar');
1.0.0-alpha+1 #
- Slight updates to confusing documentation.
- Added support for null-aware assignments.
- Added
showandhidesupport toImportBuilder - Added
deferredsupport toImportBuilder - Added
ExportBuilder - Added
listandmapliterals that support generic types
1.0.0-alpha #
- Large refactor that makes the library more feature complete.
0.1.1 #
- Add concept of
Scopeand changetoAstto support it
Now your entire AST tree can be scoped and import directives
automatically added to a LibraryBuilder for you if you use
LibraryBuilder.scope.
0.1.0 #
- Initial version