Babylon is a JavaScript parser used in Babel.
- The latest ECMAScript version enabled by default (ES2017).
- Comment attachment.
- Support for JSX and Flow.
- Support for experimental language proposals (accepting PRs for anything at least stage-0).
Credits
Heavily based on acorn and acorn-jsx,
thanks to the awesome work of @RReverser and @marijnh.
Significant diversions are expected to occur in the future such as streaming, EBNF definitions, sweet.js integration, interspatial parsing and more.
API
babylon.parse(code, [options])
babylon.parseExpression(code, [options])
parse()
parses the provided code
as an entire ECMAScript program, while
parseExpression()
tries to parse a single Expression with performance in
mind. When in doubt, use .parse()
.
Options
-
allowImportExportEverywhere: By default, import
and export
declarations can only appear at a program's top level. Setting this
option to true
allows them anywhere where a statement is allowed.
-
allowReturnOutsideFunction: By default, a return statement at
the top level raises an error. Set this to true
to accept such
code.
-
allowSuperOutsideMethod: TODO
-
sourceType: Indicate the mode the code should be parsed in. Can be
either "script"
or "module"
.
-
sourceFilename: Correlate output AST nodes with their source filename. Useful when generating code and source maps from the ASTs of multiple input files.
-
startLine: By default, the first line of code parsed is treated as line 1. You can provide a line number to alternatively start with. Useful for integration with other source tools.
-
plugins: Array containing the plugins that you want to enable.
-
strictMode: TODO
Output
Babylon generates AST according to Babel AST format.
It is based on ESTree spec with the following deviations:
There is now an estree
plugin which reverts these deviations
AST for JSX code is based on Facebook JSX AST with the addition of one node type:
Semver
Babylon follows semver in most situations. The only thing to note is that some spec-compliancy bug fixes may be released under patch versions.
For example: We push a fix to early error on something like #107 - multiple default exports per file. That would be considered a bug fix even though it would cause a build to fail.
Example
require("babylon").parse("code", {
sourceType: "module",
plugins: [
"jsx",
"flow"
]
});
Plugins
estree
jsx
flow
doExpressions
objectRestSpread
decorators
(Based on an outdated version of the Decorators proposal. Will be removed in a future version of Babylon
)classProperties
exportExtensions
asyncGenerators
functionBind
functionSent
dynamicImport
templateInvalidEscapes