code_builder 1.0.0-beta+5 code_builder: ^1.0.0-beta+5 copied to clipboard
A fluent API for generating Dart code
1.0.0-beta+5 #
- Re-published the package without merge conflicts.
1.0.0-beta+4 #
- Renamed
PartBuilder
toPartOfBuilder
. - Added a new class,
PartBuilder
, to representpart '...dart'
directives. - Added the
HasAnnotations
interface to all library/part/directive builders. - Added
asFactory
andasConst
toConstructorBuilder
. - Added
ConstructorBuilder.redirectTo
for a redirecting factory constructor. - Added a
name
getter toReferenceBuilder
. - Supplying an empty constructor name (
''
) is equivalent tonull
(default). - Automatically encodes string literals with multiple lines as
'''
. - Added
asThrow
toExpressionBuilder
. - Fixed a bug that prevented
FieldBuilder
from being used at the top-level.
1.0.0-beta+3 #
- Added support for
genericTypes
parameter forExpressionBuilder#invoke
:
expect(
explicitThis.invoke('doThing', [literal(true)], genericTypes: [
lib$core.bool,
]),
equalsSource(r'''
this.doThing<bool>(true)
'''),
);
- Added a
castAs
method toExpressionBuilder
:
expect(
literal(1.0).castAs(lib$core.num),
equalsSource(r'''
1.0 as num
'''),
);
BREAKING CHANGES #
- Removed
namedNewInstance
andnamedConstInstance
, replaced withconstructor:
:
expect(
reference('Foo').newInstance([], constructor: 'other'),
equalsSource(r'''
new Foo.other()
'''),
);
- Renamed
named
parameter 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.asAsync
MethodModifier.asyncStar
->MethodModifier.asAsyncStar
MethodModifier.syncStar
->MethodModifier.asSyncStar
1.0.0-beta+1 #
- Add support for
switch
statements - 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
ClassBuilder
andTypeBuilder
as an expression - Add support for accessing the index
[]
operator on an expression
BREAKING CHANGES #
- Changed
ExpressionBuilder.asAssign
to always take anExpressionBuilder
as target and removed thevalue
property. 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
toExportBuilder
andtoImportBuilder
to types and references - Fix an import scoping bug in
return
statements and named constructor invocations. - Added constructor initializer support
- Add
while
anddo {} while
loop support - Add
for
andfor-in
support - Added a
name
getter 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.closure
emits 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.buildAst
was not implemented - Added
and
andor
methods 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
returnVoid
to well,return;
- Added support for top-level field assignments:
new LibraryBuilder()..addMember(literal(false).asConst('foo'))
- Added support for specifying a
target
when 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
show
andhide
support toImportBuilder
- Added
deferred
support toImportBuilder
- Added
ExportBuilder
- Added
list
andmap
literals that support generic types
1.0.0-alpha #
- Large refactor that makes the library more feature complete.
0.1.1 #
- Add concept of
Scope
and changetoAst
to 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