dart_code

A package for creating valid and formatted code, e.g. when writing code builders.

Usage

The dart_code package provides a Dart code model that can be converted to code using the toString() method.

Example of a main function with a print statement:

import 'package:dart_code/dart_code.dart';

main() {
  print(Function.main(Statement.print(Expression.ofString('Hello World.'))));
}

Outputs:

main() {
  print('Hello World.');
}

Use the CodeFormatter class for alternative formatting. It uses the official (dartfmt)https://github.com/dart-lang/dart_style/wiki/Formatting-Rules with the dart_style package You can use the following CodeFormatter constructor parameters:

  • String lineEnding
  • int pageWidth
  • int indent

Note that this formatter may throw parsing exceptions. You can use the CodeFormatter.unFormatted method when you need a partial code that can not be parsed by the Dart formatter

Alternative formatting example:

import 'package:dart_code/dart_code.dart';

main() {
  print(CodeFormatter(pageWidth: 20).format(
      Function.main(Statement.print(Expression.ofString('Hello World.')))));
}

Outputs:

main() {
  print(
      'Hello World.');
}

An example of a library with unique imports:

import 'package:dart_code/dart_code.dart';

main() {
   print(Library(classes: [
     Class(
       'Employee',
       superClass: Type('Person', libraryUri: 'package:my_package/person.dart'),
       implements: [
         Type('Skills', libraryUri: 'package:my_package/skills.dart')
       ],
       abstract: true,
     )
   ]));
}

Outputs:

import 'package:my_package/person.dart' as i1;
import 'package:my_package/skills.dart' as i2;

abstract class Employee extends i1.Person implements i2.Skills {}

For more examples see: https://github.com/efficientyboosters/dart_code/tree/main/test

Most important classes to use

You will probably be using the following code modeling classes:

  • Library
    • Function
    • Class
      • Field
      • Constructor
      • Method
  • Expressions (for code that results in a value)
  • Statement (for code that does something)
  • Comment
  • DocComment
  • Annotation
  • Code (for anything else)

Inspiration

This package was inspired by the code_builder package.

  • dart_code is simpler and likely less complete
  • dart_code classes can be extended (no fluent builders used) so that code model logic can be written inside the constructor of the extended classes.
  • dart_code allows you to directly use the toString() method on the code classes or use the CodeFormatter class for alternative formatting settings.

Libraries

dart_code