code_builder 2.0.0-alpha+1 copy "code_builder: ^2.0.0-alpha+1" to clipboard
code_builder: ^2.0.0-alpha+1 copied to clipboard

outdatedDart 1 only

A fluent API for generating Dart code

2.0.0-alpha+1 #

  • Removed Reference.localScope. Just use Reference(symbol) now.
  • Allow Reference instead of an explicit TypeReference in 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\')'))));
copied to clipboard
  • We now support the Dart 2.0 pre-release SDKs (<2.0.0-dev.infinity)
  • Removed the ability to treat Class as a TypeReference.
    • Was required for compilation to dart2js, which is now tested on travis.

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 isInstanceOf to ExpressionBuilder, which performs an is check:
expect(
  reference('foo').isInstanceOf(_barType), 
  equalsSource('foo is Bar'),
);
copied to clipboard

1.0.3 #

  • Support latest pkg/analyzer and pkg/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 uri in ImportBuilder, ExportBuilder, and Part[Of]Builder.

1.0.0-beta+7 #

  • Added ExpressionBuilder#ternary.

1.0.0-beta+6 #

  • Added TypeDefBuilder.
  • Added FunctionParameterBuilder.
  • Added asAbstract to various MethodBuilder constructors.

1.0.0-beta+5 #

  • Re-published the package without merge conflicts.

1.0.0-beta+4 #

  • Renamed PartBuilder to PartOfBuilder.
  • Added a new class, PartBuilder, to represent part '...dart' directives.
  • Added the HasAnnotations interface to all library/part/directive builders.
  • Added asFactory and asConst to ConstructorBuilder.
  • Added ConstructorBuilder.redirectTo for a redirecting factory constructor.
  • Added a name getter to ReferenceBuilder.
  • Supplying an empty constructor name ('') is equivalent to null (default).
  • Automatically encodes string literals with multiple lines as '''.
  • Added asThrow to ExpressionBuilder.
  • Fixed a bug that prevented FieldBuilder from being used at the top-level.

1.0.0-beta+3 #

  • Added support for genericTypes parameter for ExpressionBuilder#invoke:
expect(
  explicitThis.invoke('doThing', [literal(true)], genericTypes: [
    lib$core.bool,
  ]),
  equalsSource(r'''
    this.doThing<bool>(true)
  '''),
);
copied to clipboard
  • Added a castAs method to ExpressionBuilder:
expect(
  literal(1.0).castAs(lib$core.num),
  equalsSource(r'''
    1.0 as num
  '''),
);
copied to clipboard

BREAKING CHANGES #

  • Removed namedNewInstance and namedConstInstance, replaced with constructor: :
expect(
  reference('Foo').newInstance([], constructor: 'other'),
  equalsSource(r'''
    new Foo.other()
  '''),
);
copied to clipboard
  • Renamed named parameter to namedArguments:
expect(
  reference('doThing').call(
    [literal(true)],
    namedArguments: {
      'otherFlag': literal(false),
    },
  ),
  equalsSource(r'''
    doThing(true, otherFlag: false)
  '''),
);
copied to clipboard

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 and TypeBuilder as an expression
  • Add support for accessing the index [] operator on an expression

BREAKING CHANGES #

  • Changed ExpressionBuilder.asAssign to always take an ExpressionBuilder as target and removed the value property. Most changes are pretty simple, and involve just using reference(...). For example:
literal(true).asAssign(reference('flag'))
copied to clipboard

... emits flag = true.

1.0.0-beta #

  • Add support for async, sync, sync* functions
  • Add support for expression asAwait, asYield, asYieldStar
  • Add toExportBuilder and toImportBuilder to types and references
  • Fix an import scoping bug in return statements and named constructor invocations.
  • Added constructor initializer support
  • Add while and do {} while loop support
  • Add for and for-in support
  • Added a name getter for ParameterBuilder

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')
copied to clipboard
  • Fix lambdas and closures to not include a trailing semicolon when used as an expression.
 // () => false
 new MethodBuilder.closure(returns: literal(false));
copied to clipboard

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')])
copied to clipboard
  • Added generic support to ReferenceBuilder:
// List<String>
reference('List').toTyped([reference('String')])
copied to clipboard
  • Fixed a bug where ReferenceBuilder.buildAst was not implemented
  • Added and and or methods to ExpressionBuilder:
// true || false
literal(true).or(literal(false));

// true && false
literal(true).and(literal(false));
copied to clipboard
  • Added support for creating closures - MethodBuilder.closure:
// () => true
new MethodBuilder.closure(
  returns: literal(true),
  returnType: lib$core.bool,
)
copied to clipboard

1.0.0-alpha+2 #

  • Added returnVoid to well, return;
  • Added support for top-level field assignments:
new LibraryBuilder()..addMember(literal(false).asConst('foo'))
copied to clipboard
  • Added support for specifying a target when using asAssign:
// Outputs bank.bar = goldBar
reference('goldBar').asAssign('bar', target: reference('bank'))
copied to clipboard
  • Added support for the cascade operator:
// Outputs foo..doThis()..doThat()
reference('foo').cascade((c) => <ExpressionBuilder> [
  c.invoke('doThis', []),
  c.invoke('doThat', []),
]);
copied to clipboard
  • Added support for accessing a property
// foo.bar
reference('foo').property('bar');
copied to clipboard

1.0.0-alpha+1 #

  • Slight updates to confusing documentation.
  • Added support for null-aware assignments.
  • Added show and hide support to ImportBuilder
  • Added deferred support to ImportBuilder
  • Added ExportBuilder
  • Added list and map 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 change toAst 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
238
likes
0
points
4.22M
downloads

Publisher

verified publishertools.dart.dev

Weekly Downloads

2024.08.16 - 2025.02.28

A fluent API for generating Dart code

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

built_collection, built_value, dart_style, matcher, meta

More

Packages that depend on code_builder