UNPKG

decaffeinate-parser

Version:

A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

38 lines (37 loc) 1.33 kB
import lex from 'coffee-lex'; import { patchCoffeeScript } from './ext/coffee-script'; import mapProgram from './mappers/mapProgram'; import parseCS1AsCS2 from './parseCS1AsCS2'; import parseCS2 from './parseCS2'; import fixLocations from './util/fixLocations'; import ParseContext from './util/ParseContext'; export var DEFAULT_OPTIONS = { useCS2: false }; export function parse(source, options) { if (options === void 0) { options = DEFAULT_OPTIONS; } patchCoffeeScript(); var parse = options.useCS2 ? parseCS2 : parseCS1AsCS2; var sourceLex = function (s) { return lex(s, { useCS2: options.useCS2 }); }; var context = ParseContext.fromSource(source, sourceLex, parse); fixLocations(context, context.ast); var program = mapProgram(context); traverse(program, function (node, parent) { node.parentNode = parent; }); return program; } export function traverse(node, callback) { function traverseRec(currentNode, currentParent) { var shouldDescend = callback(currentNode, currentParent); if (shouldDescend !== false) { for (var _i = 0, _a = currentNode.getChildren(); _i < _a.length; _i++) { var child = _a[_i]; traverseRec(child, currentNode); } } } traverseRec(node, null); }