feat(dart/transform): Support part directives

Allow users to split libraries using the `part` directive.

Closes #1817
This commit is contained in:
Tim Blasi
2015-08-04 16:50:31 -07:00
parent b6ee20846b
commit aa480fee72
13 changed files with 335 additions and 115 deletions

View File

@ -12,6 +12,7 @@ import 'package:code_transformers/messages/build_logger.dart';
import 'package:dart_style/dart_style.dart';
import 'package:guinness/guinness.dart';
import 'package:path/path.dart' as path;
import 'package:source_span/source_span.dart';
import '../common/read_file.dart';
var formatter = new DartFormatter();
@ -24,6 +25,14 @@ void allTests() {
_testProcessor('should preserve parameter annotations as const instances.',
'parameter_metadata/soup.dart');
_testProcessor('should handle `part` directives.', 'part_files/main.dart');
_testProcessor('should handle multiple `part` directives.',
'multiple_part_files/main.dart');
_testProcessor('should not generate .ng_deps.dart for `part` files.',
'part_files/part.dart');
_testProcessor('should recognize custom annotations with package: imports',
'custom_metadata/package_soup.dart',
customDescriptors: [
@ -166,8 +175,9 @@ void _testProcessor(String name, String inputPath,
if (output == null) {
expect(await reader.hasInput(expectedNgDepsId)).toBeFalse();
} else {
var input = await reader.readAsString(expectedNgDepsId);
expect(formatter.format(output)).toEqual(formatter.format(input));
var expectedOutput = await reader.readAsString(expectedNgDepsId);
expect(formatter.format(output))
.toEqual(formatter.format(expectedOutput));
}
if (ngMeta.isEmpty) {
expect(await reader.hasInput(expectedAliasesId)).toBeFalse();

View File

@ -0,0 +1,25 @@
library main.ng_deps.dart;
import 'main.dart';
export 'main.dart';
import 'package:angular2/src/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/annotations_impl/annotations.dart';
var _visited = false;
void initReflector() {
if (_visited) return;
_visited = true;
_ngRef.reflector
..registerType(
Part1Component,
new _ngRef.ReflectionInfo(const [const Component(selector: '[part1]')],
const [], () => new Part1Component()))
..registerType(
Part2Component,
new _ngRef.ReflectionInfo(const [const Component(selector: '[part2]')],
const [], () => new Part2Component()))
..registerType(
MainComponent,
new _ngRef.ReflectionInfo(const [const Component(selector: '[main]')],
const [], () => new MainComponent()));
}

View File

@ -0,0 +1,11 @@
library main;
import 'package:angular2/src/core/annotations_impl/annotations.dart';
part 'part1.dart';
part 'part2.dart';
@Component(selector: '[main]')
class MainComponent {
MainComponent();
}

View File

@ -0,0 +1,6 @@
part of main;
@Component(selector: '[part1]')
class Part1Component {
Part1Component();
}

View File

@ -0,0 +1,6 @@
part of main;
@Component(selector: '[part2]')
class Part2Component {
Part2Component();
}

View File

@ -0,0 +1,21 @@
library main.ng_deps.dart;
import 'main.dart';
export 'main.dart';
import 'package:angular2/src/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/annotations_impl/annotations.dart';
var _visited = false;
void initReflector() {
if (_visited) return;
_visited = true;
_ngRef.reflector
..registerType(
PartComponent,
new _ngRef.ReflectionInfo(const [const Component(selector: '[part]')],
const [], () => new PartComponent()))
..registerType(
MainComponent,
new _ngRef.ReflectionInfo(const [const Component(selector: '[main]')],
const [], () => new MainComponent()));
}

View File

@ -0,0 +1,10 @@
library main;
import 'package:angular2/src/core/annotations_impl/annotations.dart';
part 'part.dart';
@Component(selector: '[main]')
class MainComponent {
MainComponent();
}

View File

@ -0,0 +1,6 @@
part of main;
@Component(selector: '[part]')
class PartComponent {
PartComponent();
}