Helpers and utilities for developing macros.

Log information in into the augmenting library as code comments

builder.log('Got here.');

Output:

// Got here.

Introspect all fields of a type

final map = await builder.introspectFields(clazz);
final type = map['fieldName']!.typeDeclaration;

Indent the generated code

builder.declareInLibrary(
  DeclarationCode.fromParts([
    'augment class Foo {\n',
    ..._getMyMethodParts().indent(), // Adds 2 spaces before each line of the code.
    '}\n',
  ]),
);

Report errors with 5 less lines of code

builder.reportError('Error message', target: target);

...instead of

builder.report(
  Diagnostic(
    DiagnosticMessage('Error message', target: target),
    Severity.error,
  ),
);

Libraries

macro_util