CodeBlanks Logo Icon CodeBlanks

Summary - Build system

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

main.dart
void main() {
  // define BuildConfig, Builder and LintRule classes
  // create one of each; print output extension, generated code and lint warning
}

Sample solution

main.dart
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

Question
part 'user____';
Answer
part 'user.g.dart';

Explanation: .g.dart marks a generated file.

All lessons in Expert