A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

Usage no npm install needed!

<script type="module">
  import decaffeinateParserClassdojoFork from '';


decaffeinate-parser Build Status

This project uses the official CoffeeScript parser to parse CoffeeScript source code, then maps the AST generated by the parser to one more suitable for the decaffeinate project based on the AST generated by CoffeeScriptRedux.

This project might be useful to anyone who wants to work with a CoffeeScript AST and prefers the AST generated by CoffeeScriptRedux, but wants to avoid the source compatibility issues introduced by using that project. Note that it is not 100% compatible with CoffeeScriptRedux:

  • Single-line functions, if statements, etc. have blocks for bodies.
  • String interpolation nodes are modeled after TemplateLiteral from ES6 rather than being a series of nested ConcatOp nodes.
  • Triple-quoted strings have the node type Herestring rather than String.
  • Virtual nodes (such as the LogicalNotOp generated by an unless) are marked as such with a virtual: true property.
  • do is handled with the DoOp node type.
  • for-in loops do not have an implicit step property.
  • Ranges of programs with indented blocks are correct.
  • super is supported in classes.
  • extends is usable as a binary operator and in class declarations.
  • // (floor division) is supported.


$ npm install --save-dev decaffeinate-parser


This example gets the names of the parameters in the add function:

import { parse } from 'decaffeinate-parser';
const program = parse('add = (a, b) -> a + b');
const assignment = program.body.statements[0];
const fn = assignment.expression;
console.log( =>; // [ 'a', 'b' ]