kevmoo / code_builder

A fluent API for generating valid Dart source code

Home Page:https://pub.dartlang.org/packages/code_builder

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

code_builder

pub package Build Status Coverage Status

code_builder is a fluent Dart API for generating valid Dart source code.

Code generation was traditionally done through a series of package-specific string concatenations which usually results in messy and sometimes invalid Dart code that is not easily readable and is very difficult to refactor.

code_builder uses the analyzer package to create real Dart language ASTs, which, while not guaranteed to be correct, always follows the analyzer's own understood format.

Experimental

While code_builder is considered stable, the APIs are subject to frequent breaking change - a number of Dart language features are not yet implemented that make it unsuitable for all forms of code generation.

Contributions are welcome!

Usage

Code builder has a narrow and user-friendly API.

For example creating a class with a method:

var base = reference('Organism');
var clazz = new ClassBuilder('Animal', asExtends: base);
clazz.addMethod(
  new MethodBuilder.returnVoid(
    'eat',
    returns: reference('print').call([literal('Yum')]),
  ),
);

Outputs:

class Animal extends Organism {
  void eat() => print('Yum!');
}

Have a complicated set of dependencies for your generated code? code_builder supports automatic scoping of your ASTs to automatically use prefixes to avoid symbol conflicts:

var lib = new LibraryBuilder.scope()
  ..addMembers([
    new MethodBuilder(
      'doThing',
      returnType: reference('Thing', 'package:thing/thing.dart'),
    ),
    new MethodBuilder(
      'doOtherThing',
      returnType: reference('Thing', 'package:thing/alternative.dart'),
    ),
  ]);

Outputs:

import 'package:thing/thing.dart' as _i1;
import 'package:thing/alternative.dart' as _i2;

_i1.Thing doThing() {}
_i2.Thing doOtherThing() {}

About

A fluent API for generating valid Dart source code

https://pub.dartlang.org/packages/code_builder

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Dart 99.5%Language:Shell 0.5%