Releases: dart-archive/code_builder
v3.0.0
3.0.0
- Also infer
Constructor.lambdaforfactoryconstructors.
v3.0.0-alpha
3.0.0-alpha
-
Using
equalsDartno longer formats automatically withdartfmt. -
Removed deprecated
AnnotationandFileclasses. -
Method.lambdais inferred based onMethod.bodywhere possible and now
defaults tonull.
v2.4.0
2.4.0
- Add
equalTo,notEqualTo,greaterThan,lessThan,greateOrEqualTo, and
lessOrEqualTotoExpression.
v2.3.0
- Using
equalsDartand expectingdartfmtby default is deprecated. This
requires this package to have a direct dependency on specific versions of
dart_style(and transitivelyanalyzer), which is problematic just for
testing infrastructure. To future proof, we've exposed theEqualsDartclass
with aformatoverride:
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';
final DartFormatter _dartfmt = new DartFormatter();
String _format(String source) {
try {
return _dartfmt.format(source);
} on FormatException catch (_) {
return _dartfmt.formatStatement(source);
}
}
/// Should be invoked in `main()` of every test in `test/**_test.dart`.
void useDartfmt() => EqualsDart.format = _format;- Added
Expression.isAandExpression.isNotA:
void main() {
test('should emit an is check', () {
expect(
refer('foo').isA(refer('String')),
equalsDart('foo is String'),
);
});
}- Deprecated
Annotation. It is now legal to simply pass anyExpressionas
a metadata annotation toClass,Method,Field,andParameter. In
3.0.0, theAnnotationclass will be completely removed:
void main() {
test('should create a class with a annotated constructor', () {
expect(
new Class((b) => b
..name = 'Foo'
..constructors.add(
new Constructor((b) => b..annotations.add(refer('deprecated'))))),
equalsDart(r'''
class Foo {
@deprecated
Foo();
}
'''),
);
});
}- Added inference support for
Method.lambdaandConstructor.lambda. If not
explicitly provided and the body of the function originated from an
Expressionthenlambdais inferred to be true. This is not a breaking
change yet, as it requires an explicitnullvalue. In3.0.0this will be
the default:
void main() {
final animal = new Class((b) => b
..name = 'Animal'
..extend = refer('Organism')
..methods.add(new Method.returnsVoid((b) => b
..name = 'eat'
// In 3.0.0, this may be omitted and still is inferred.
..lambda = null
..body = refer('print').call([literalString('Yum!')]).code)));
final emitter = new DartEmitter();
print(new DartFormatter().format('${animal.accept(emitter)}'));
}- Added
nullSafePropertytoExpressionto access properties with?. - Added
conditionaltoExpressionto use the ternary operator? : - Methods taking
positionalArgumentsacceptIterable<Expression> - BUG FIX: Parameters can take a
FunctionTypeas atype.
Reference.typenow returns aReference. Note that this change is
technically breaking but should not impacts most clients.
v2.2.0
-
Imports are prefixed with
_i1rather than_1which satisfies the lint
lowercase_with_underscores. While not a strictly breaking change you may
have to fix/regenerate golden file-like tests. We added documentation that
the specific prefix is not considered stable. -
Added
Expression.indexfor accessing the[]operator:
void main() {
test('should emit an index operator', () {
expect(
refer('bar').index(literalTrue).assignVar('foo').statement,
equalsDart('var foo = bar[true];'),
);
} );
test('should emit an index operator set', () {
expect(
refer('bar')
.index(literalTrue)
.assign(literalFalse)
.assignVar('foo')
.statement,
equalsDart('var foo = bar[true] = false;'),
);
});
}-
literalListaccepts anIterableargument. -
Fixed an NPE when a method had a return type of a
FunctionType:
void main() {
test('should create a method with a function type return type', () {
expect(
new Method((b) => b
..name = 'foo'
..returns = new FunctionType((b) => b
..returnType = refer('String')
..requiredParameters.addAll([
refer('int'),
]))),
equalsDart(r'''
String Function(int) foo();
'''),
);
});
}v2.1.0
We now require the Dart 2.0-dev branch SDK (>= 2.0.0-dev).
- Added support for raw
Stringliterals. - Automatically escapes single quotes in now-raw
Stringliterals. - Deprecated
File, which is now a redirect to the preferred class,Library.
This helps avoid symbol clashes when used with dart:io, a popular library. It
is now safe to do the following and get full access to the code_builder API:
import 'dart:io';
import 'package:code_builder/code_builder.dart' hide File;We will remove File in 3.0.0, so use Library instead.
v2.0.0
Re-released without a direct dependency on package:analyzer!
For users of the 1.x branch of code_builder, this is a pretty big breaking
change but ultimately is for the better - it's easier to evolve this library
now and even add your own builders on top of the library.
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';
void main() {
final animal = new Class((b) => b
..name = 'Animal'
..extend = refer('Organism')
..methods.add(new Method.returnsVoid((b) => b
..name = 'eat'
..lambda = true
..body = const Code('print(\'Yum\')'))));
final emitter = new DartEmitter();
print(new DartFormatter().format('${animal.accept(emitter)}'));
}...outputs...
class Animal extends Organism {
void eat() => print('Yum!');
}Major changes:
- Builders now use
built_value, and have a more consistent, friendly API. - Builders are now consistent - they don't any work until code is emitted.
- It's possible to overwrite the built-in code emitting, formatting, etc by
providing your own visitors. SeeDartEmitteras an example of the built-in
visitor/emitter. - Most of the expression and statement level helpers were removed; in practice
they were difficult to write and maintain, and many users commonly asked for
opt-out type APIs. See theCodeexample below:
void main() {
var code = new Code('x + y = z');
code.expression;
code.statement;
}See the commit log, examples, and tests for full details. While we want to try
and avoid breaking changes, suggestions, new features, and incremental updates
are welcome!
2.0.0-beta
2.0.0-alpha+3
2.0.0-alpha+3
-
Added
Expression.annotationandExpression.annotationNamed. -
Added
Method.closureto create anExpression. -
Added
FunctionType. -
Added
{new|const}InstanceNamedtoExpression#135.- Also added a
typeArgumentsoption to all invocations.
- Also added a
-
Added
assign{...}variants toExpression#137. -
Added
.awaitedand.returnedtoExpression#138. -
BUG FIX:
Blocknow implementsCode#136. -
BUG FIX:
new DartEmitter.scoped()applies prefixing #139. -
Renamed many of the
.asFoo(...)and.toFoo(...)methods to single getter:asCode()tocodeasStatement()tostatementtoExpression()toexpression
-
Moved
{new|const}Instance{[Named]}fromExpressiontoReference.
2.0.0-alpha+2
2.0.0-alpha+2
-
Upgraded
build_runnerfrom^0.3.0to>=0.4.0 <0.6.0. -
Upgraded
build_value{_generator}from^1.0.0to>=2.0.0 <5.0.0. -
Upgraded
source_genfrom>=0.5.0 <0.7.0to^0.7.0. -
Added
MethodModifierto allow emit aMethodwithasync|async*|sync*. -
Added
show|hidetoDirective. -
Added
Directive.importDeferredAs. -
Added a new line character after emitting some types (class, method, etc).
-
Added
referas a short-hand fornew Reference(...).Referencenow implementsExpression.
-
Added many classes/methods for writing bodies of
Codefluently:ExpressionLiteralExpressionliteralliteralNullliteralBoolliteralTrueliteralFalseliteralNumliteralStringliteralListandliteralConstListliteralMapandliteralConstMap
const Code(staticString)const Code.scope((allocate) => '')
-
Removed
SimpleSpecVisitor(it was unused). -
Removed
implements ReferencefromMethodandField; not a lot of value. -
SpecVisitor<T>'s methods all have an optional[T context]parameter now.- This makes it much easier to avoid allocating extra
StringBuffers.
- This makes it much easier to avoid allocating extra
-
equalsDartremoves insignificant white space before comparing results.