Skip to content
This repository was archived by the owner on Apr 8, 2025. It is now read-only.

Commit e1cb247

Browse files
authored
Add ExpressionBuilder#ternary. (#97)
* Add ExpressionBuilder#ternary. * Run dartfmt. * Dartfmt and use the SDK version. * Run travis on more SDKs.
1 parent 76f7061 commit e1cb247

File tree

9 files changed

+67
-7
lines changed

9 files changed

+67
-7
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
language: dart
22

33
dart:
4-
# pkg/test is currently failing @ dev
5-
# - dev
4+
- 1.22.0
5+
- dev
66
- stable
77

88
script: ./tool/presubmit.sh

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.0-beta+7
2+
3+
- Added `ExpressionBuilder#ternary`.
4+
15
## 1.0.0-beta+6
26

37
- Added `TypeDefBuilder`.

lib/src/builders/expression.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ part 'expression/invocation.dart';
2929
part 'expression/negate.dart';
3030
part 'expression/operators.dart';
3131
part 'expression/return.dart';
32+
part 'expression/ternary.dart';
3233
part 'expression/throw.dart';
3334
part 'expression/yield.dart';
3435

@@ -322,6 +323,13 @@ abstract class AbstractExpressionMixin implements ExpressionBuilder {
322323

323324
@override
324325
ExpressionBuilder property(String name) => new _MemberExpression(this, name);
326+
327+
@override
328+
ExpressionBuilder ternary(
329+
ExpressionBuilder ifTrue,
330+
ExpressionBuilder ifFalse,
331+
) =>
332+
new _TernaryExpression(this, ifTrue, ifFalse);
325333
}
326334

327335
/// Builds an [Expression] AST when [buildExpression] is invoked.
@@ -456,6 +464,12 @@ abstract class ExpressionBuilder
456464

457465
/// Returns {{this}}.{{name}}.
458466
ExpressionBuilder property(String name);
467+
468+
/// Returns {{this}} ? {{ifTrue}} : {{ifFalse}}.
469+
ExpressionBuilder ternary(
470+
ExpressionBuilder ifTrue,
471+
ExpressionBuilder ifFalse,
472+
);
459473
}
460474

461475
/// An [AstBuilder] that can add [ExpressionBuilder].
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
part of code_builder.src.builders.expression;
6+
7+
class _TernaryExpression extends TopLevelMixin with AbstractExpressionMixin {
8+
final ExpressionBuilder _target;
9+
final ExpressionBuilder _ifTrue;
10+
final ExpressionBuilder _ifFalse;
11+
12+
_TernaryExpression(
13+
this._target,
14+
this._ifTrue,
15+
this._ifFalse,
16+
);
17+
18+
@override
19+
AstNode buildAst([Scope scope]) => buildExpression(scope);
20+
21+
@override
22+
Expression buildExpression([Scope scope]) {
23+
return astFactory.conditionalExpression(
24+
_target.buildExpression(scope),
25+
$question,
26+
_ifTrue.buildExpression(scope),
27+
$colon,
28+
_ifFalse.buildExpression(scope),
29+
);
30+
}
31+
}

lib/src/tokens.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,9 @@ final Token $var = new KeywordToken(Keyword.VAR, 0);
202202
/// The `with` token.
203203
final Token $with = new KeywordToken(Keyword.WITH, 0);
204204

205+
/// The `?` token.
206+
final Token $question = new Token(TokenType.QUESTION, 0);
207+
205208
/// Returns an int token for the given int [value].
206209
StringToken intToken(int value) => new StringToken(TokenType.INT, '$value', 0);
207210

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: code_builder
2-
version: 1.0.0-beta+6
2+
version: 1.0.0-beta+7
33
description: A fluent API for generating Dart code
44
author: Dart Team <[email protected]>
55
homepage: https://github.com/dart-lang/code_builder

test/builders/expression_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,4 +437,13 @@ void main() {
437437
throw new StateError('Hey! No!');
438438
'''));
439439
});
440+
441+
test('should create a ternary condition ? ifTrue : ifFalse', () {
442+
expect(
443+
reference('someValue').ternary(literal(true), literal(false)),
444+
equalsSource(r'''
445+
someValue ? true : false
446+
'''),
447+
);
448+
});
440449
}

test/e2e_test.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,8 @@ void main() {
8888
..addMethod(new MethodBuilder(
8989
'instantiateAndReturnNamedThing',
9090
returnType: thingRef,
91-
)
92-
..addStatement(
93-
thingRef.newInstance([], constructor: 'named').asReturn())));
91+
)..addStatement(
92+
thingRef.newInstance([], constructor: 'named').asReturn())));
9493
expect(
9594
lib,
9695
equalsSource(

tool/presubmit.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Make sure dartfmt is run on everything
44
# This assumes you have dart_style as a dev_dependency
55
echo "Checking dartfmt..."
6-
NEEDS_DARTFMT="$(find lib test -name "*.dart" | xargs pub run dart_style:format -n)"
6+
NEEDS_DARTFMT="$(find lib test -name "*.dart" | xargs dartfmt -n)"
77
if [[ ${NEEDS_DARTFMT} != "" ]]
88
then
99
echo "FAILED"

0 commit comments

Comments
 (0)