Summary - Build system
- Dart course
- Expert
- Lesson 30/47
- 5 min
Combine build_runner, Builder and source_gen to write a code generator.
Summary - Build system
This group covered the Dart build system: build_runner (runner), Builder (generator interface), source_gen (annotation-based generation), analyzer (AST parsing), custom_lint (custom checks).
Core: build_runner runs Builder classes and produces .g.dart. source_gen automates this with annotations. analyzer turns source code into an AST.
These tools work together: analyzer parses, source_gen generates, Builder wraps, build_runner runs. custom_lint adds a separate check layer.
Practice Summary: config + builder + lint
Define a BuildConfig class with final String outputExtension; BuildConfig(this.outputExtension);. Define a Builder class with String build(String input) => '// generated from $input';. Define a LintRule class with final String name; LintRule(this.name); void report() => print('lint: $name');. In main create one of each; print via config.outputExtension, builder.build('user.dart') and rule.report().
Starter code
void main() {
// define BuildConfig, Builder and LintRule classes
// create one of each; print output extension, generated code and lint warning
}Sample solution
class BuildConfig {
final String outputExtension;
BuildConfig(this.outputExtension);
}
class Builder {
String build(String input) => '// generated from $input';
}
class LintRule {
final String name;
LintRule(this.name);
void report() => print('lint: $name');
}
void main() {
final config = BuildConfig('.g.dart');
final builder = Builder();
final rule = LintRule('avoid_print');
print(config.outputExtension);
print(builder.build('user.dart'));
rule.report();
}Expected output
.g.dart // generated from user.dart lint: avoid_print
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 Which tool produces .g.dart files?
- pub publish
- dartfmt
- build_runner Correct answer
- dart analyze
Explanation: build_runner runs Builders and produces .g.dart.
2 Match the tools
| Term | Meaning |
|---|---|
build_runner |
Runner |
Builder |
Generator |
source_gen |
Source gen |
analyzer |
AST parser |
custom_lint |
Rule engine |
3 Generated file extension
part 'user____';
part 'user.g.dart';
Explanation: .g.dart marks a generated file.