20 KiB
Changelog
Tags:
- 💥 [Breaking Change]
- 👓 [Spec Compliancy]
- 🚀 [New Feature]
- 🐛 [Bug Fix]
- 📝 [Documentation]
- 🏠 [Internal]
- 💅 [Polish]
Semver Policy: https://github.com/babel/babylon#semver
Note: Gaps between patch versions are faulty, broken or test releases.
See the Babel Changelog for the pre-6.8.0 version Changelog.
v6.13.1 (2016-10-26)
💅 Polish
const babylon = require('babylon');
const ast = babylon.parse('var foo = "lol";');
With that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph.
- add clean command [skip ci] (#201) (Henry Zhu)
- add ForAwaitStatement (async generator already added) [skip ci] (#196) (Henry Zhu)
v6.13.0 (2016-10-21)
👓 Spec Compliancy
Property variance type annotations for Flow plugin (#161) (Sam Goldman)
See https://flowtype.org/docs/variance.html for more information
type T = { +p: T };
interface T { -p: T };
declare class T { +[k:K]: V };
class T { -[k:K]: V };
class C2 { +p: T = e };
Raise error on duplicate definition of proto (#183) (Moti Zilberman)
({ __proto__: 1, __proto__: 2 }) // Throws an error now
🐛 Bug Fix
Flow: Allow class properties to be named static
(#184) (Moti Zilberman)
declare class A {
static: T;
}
Allow "async" as identifier for object literal property shorthand (#187) (Andrew Levine)
var foo = { async, bar };
💅 Polish
Fix flowtype and add inType to state (#189) (Daniel Tschinder)
This improves the performance slightly (because of hidden classes)
🏠 Internal
Fix .gitattributes line ending setting (#191) (Moti Zilberman)
Increase test coverage (#175 (Moti Zilberman)
Readd missin .eslinignore for IDEs (Daniel Tschinder)
Error on missing expected.json fixture in CI (#188) (Moti Zilberman)
Add .gitattributes and .editorconfig for LF line endings (#179) (Moti Zilberman)
Fixes two tests that are failing after the merge of #172 (#177) (Moti Zilberman)
v6.12.0 (2016-10-14)
👓 Spec Compliancy
Implement import() syntax (#163) (Jordan Gensler)
Dynamic Import
- Proposal Repo: https://github.com/domenic/proposal-dynamic-import
- Championed by @domenic
- stage-2
- sept-28 tc39 notes
This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript
import(`./section-modules/${link.dataset.entryModule}.js`)
.then(module => {
module.loadPageInto(main);
})
Add EmptyTypeAnnotation (#171) (Sam Goldman)
EmptyTypeAnnotation
Just wasn't covered before.
type T = empty;
🐛 Bug Fix
Fix crash when exporting with destructuring and sparse array (#170) (Jeroen Engels)
// was failing due to sparse array
export const { foo: [ ,, qux7 ] } = bar;
Allow keyword in Flow object declaration property names with type parameters (#146) (Dan Harper)
declare class X {
foobar<T>(): void;
static foobar<T>(): void;
}
Allow keyword in object/class property names with Flow type parameters (#145) (Dan Harper)
class Foo {
delete<T>(item: T): T {
return item;
}
}
Allow typeAnnotations for yield expressions (#174)) (Daniel Tschinder)
function *foo() {
const x = (yield 5: any);
}
💅 Polish
Annotate more errors with expected token (#172)) (Moti Zilberman)
// Unexpected token, expected ; (1:6)
{ set 1 }
🏠 Internal
Remove kcheck (#173)) (Daniel Tschinder)
Also run flow, linting, babel tests on seperate instances (add back node 0.10)
v6.11.6 (2016-10-12)
🐛 Bug Fix/Regression
Fix crash when exporting with destructuring and sparse array (#170) (Jeroen Engels)
// was failing with `Cannot read property 'type' of null` because of null identifiers
export const { foo: [ ,, qux7 ] } = bar;
v6.11.5 (2016-10-12)
👓 Spec Compliancy
Fix: Check for duplicate named exports in exported destructuring assignments (#144) (Kai Cataldo)
// `foo` has already been exported. Exported identifiers must be unique. (2:20)
export function foo() {};
export const { a: [{foo}] } = bar;
Fix: Check for duplicate named exports in exported rest elements/properties (#164) (Kai Cataldo)
// `foo` has already been exported. Exported identifiers must be unique. (2:22)
export const foo = 1;
export const [bar, ...foo] = baz;
🐛 Bug Fix
Fix: Allow identifier async
for default param in arrow expression (#165) (Kai Cataldo)
// this is ok now
const test = ({async = true}) => {};
💅 Polish
Babylon will now print out the token it's expecting if there's a SyntaxError
(#150) (Daniel Tschinder)
# So in the case of a missing ending curly (`}`)
Module build failed: SyntaxError: Unexpected token, expected } (30:0)
28 | }
29 |
> 30 |
| ^
v6.11.4 (2016-10-03)
Temporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu)
v6.11.3 (2016-10-01)
👓 Spec Compliancy
Add static errors for object rest (#149) (@danez)
Object rest copies the rest of properties from the right hand side obj
starting from the left to right.
let { x, y, ...z } = { x: 1, y: 2, z: 3 };
// x = 1
// y = 2
// z = { z: 3 }
New Syntax Errors:
SyntaxError: The rest element has to be the last element when destructuring (1:10)
> 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3};
| ^
# Previous behavior:
# x = { x: 1, y: 2, z: 3 }
# y = 2
# z = 3
Before, this was just a more verbose way of shallow copying obj
since it doesn't actually do what you think.
SyntaxError: Cannot have multiple rest elements when destructuring (1:13)
> 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3};
| ^
# Previous behavior:
# x = 1
# y = { y: 2, z: 3 }
# z = { y: 2, z: 3 }
Before y and z would just be the same value anyway so there is no reason to need to have both.
SyntaxError: A trailing comma is not permitted after the rest element (1:16)
let { x, y, ...z, } = obj;
The rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense.
get / set are valid property names in default assignment (#142) (@jezell)
// valid
function something({ set = null, get = null }) {}
v6.11.2 (2016-09-23)
Bug Fix
- #139 Don't do the duplicate check if not an identifier (#140) @hzoo
// regression with duplicate export check
SyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13)
20 |
21 | export const { rhythm } = typography;
> 22 | export const { TypographyStyle } = typography
Bail out for now, and make a change to account for destructuring in the next release.
6.11.1 (2016-09-22)
Bug Fix
- #137 - Fix a regression with duplicate exports - it was erroring on all keys in
Object.prototype
. @danez
export toString from './toString';
`toString` has already been exported. Exported identifiers must be unique. (1:7)
> 1 | export toString from './toString';
| ^
2 |
6.11.0 (2016-09-22)
Spec Compliancy (will break CI)
- Disallow duplicate named exports (#107) @kaicataldo
// Only one default export allowed per module. (2:9)
export default function() {};
export { foo as default };
// Only one default export allowed per module. (2:0)
export default {};
export default function() {};
// `Foo` has already been exported. Exported identifiers must be unique. (2:0)
export { Foo };
export class Foo {};
New Feature (Syntax)
- Add support for computed class property names (#121) @motiz88
// AST
interface ClassProperty <: Node {
type: "ClassProperty";
key: Identifier;
value: Expression;
computed: boolean; // added
}
// with "plugins": ["classProperties"]
class Foo {
[x]
['y']
}
class Bar {
[p]
[m] () {}
}
Bug Fix
- Fix
static
property falling through in the declare class Flow AST (#135) @danharper
declare class X {
a: number;
static b: number; // static
c: number; // this was being marked as static in the AST as well
}
Polish
- Rephrase "assigning/binding to rvalue" errors to include context (#119) @motiz88
// Used to error with:
// SyntaxError: Assigning to rvalue (1:0)
// Now:
// Invalid left-hand side in assignment expression (1:0)
3 = 4
// Invalid left-hand side in for-in statement (1:5)
for (+i in {});
Internal
- Fix call to
this.parseMaybeAssign
with correct arguments (#133) @danez - Add semver note to changelog (#131) @hzoo
6.10.0 (2016-09-19)
We plan to include some spec compliancy bugs in patch versions. An example was the multiple default exports issue.
Spec Compliancy
- Implement ES2016 check for simple parameter list in strict mode (#106) (Timothy Gu)
It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors
More Context: tc39-notes
For example:
// this errors because it uses destructuring and default parameters
// in a function with a "use strict" directive
function a([ option1, option2 ] = []) {
"use strict";
}
The solution would be to use a top level "use strict" or to remove the destructuring or default parameters when using a function + "use strict" or to.
New Feature
- Exact object type annotations for Flow plugin (#104) (Basil Hosmer)
Added to flow in c710c40aa2
Looks like:
var a : {| x: number, y: string |} = { x: 0, y: 'foo' };
Bug Fixes
- Include
typeParameter
location inArrowFunctionExpression
(#126) (Daniel Tschinder) - Error on invalid flow type annotation with default assignment (#122) (Dan Harper)
- Fix Flow return types on arrow functions (#124) (Dan Harper)
Misc
- Add tests for export extensions (#127) (Daniel Tschinder)
- Fix Contributing guidelines [skip ci] (Daniel Tschinder)
6.9.2 (2016-09-09)
The only change is to remove the babel-runtime
dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller.
6.9.1 (2016-08-23)
This release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for exponentiationOperator
, asyncFunctions
and trailingFunctionCommas
which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops.
Bug Fixes
- Fix issues with default object params in async functions (#96) @danez
- Fix issues with flow-types and async function (#95) @danez
- Fix arrow functions with destructuring, types & default value (#94) @danharper
- Fix declare class with qualified type identifier (#97) @danez
- Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default (#98) @danez
6.9.0 (2016-08-16)
New syntax support
- Add JSX spread children (#42) @calebmer
(Be aware that React is not going to support this syntax)
<div>
{...todos.map(todo => <Todo key={todo.id} todo={todo}/>)}
</div>
- Add support for declare module.exports (#72) @danez
declare module "foo" {
declare module.exports: {}
}
New Features
- If supplied, attach filename property to comment node loc. (#80) @divmain
- Add identifier name to node loc field (#90) @kittens
Bug Fixes
- Fix exponential operator to behave according to spec (#75) @danez
- Fix lookahead to not add comments to arrays which are not cloned (#76) @danez
- Fix accidental fall-through in Flow type parsing. (#82) @xiemaisi
- Only allow declares inside declare module (#73) @danez
- Small fix for parsing type parameter declarations (#83) @gabelevi
- Fix arrow param locations with flow types (#57) @danez
- Fixes SyntaxError position with flow optional type (#65) @danez
Internal
- Add codecoverage to tests @danez
- Fix tests to not save expected output if we expect the test to fail @danez
- Make a shallow clone of babel for testing @danez
- chore(package): update cross-env to version 2.0.0 (#77) @greenkeeperio-bot
- chore(package): update ava to version 0.16.0 (#86) @greenkeeperio-bot
- chore(package): update babel-plugin-istanbul to version 2.0.0 (#89) @greenkeeperio-bot
- chore(package): update nyc to version 8.0.0 (#88) @greenkeeperio-bot
6.8.4 (2016-07-06)
Bug Fixes
- Fix the location of params, when flow and default value used (#68) @danez
6.8.3 (2016-07-02)
Bug Fixes
- Fix performance regression introduced in 6.8.2 with conditionals (#63) @danez
6.8.2 (2016-06-24)
Bug Fixes
- Fix parse error with yielding jsx elements in generators
function* it() { yield <a></a>; }
(#31) @eldereal - When cloning nodes do not clone its comments (#24) @danez
- Fix parse errors when using arrow functions with an spread element and return type
(...props): void => {}
(#10) @danez - Fix leading comments added from previous node (#23) @danez
- Fix parse errors with flow's optional arguments
(arg?) => {}
(#19) @danez - Support negative numeric type literals @kittens
- Remove line terminator restriction after await keyword @kittens
- Remove grouped type arrow restriction as it seems flow no longer has it @kittens
- Fix parse error with generic methods that have the name
get
orset
class foo { get() {} }
(#55) @vkurchatkin - Fix parse error with arrow functions that have flow type parameter declarations
<T>(x: T): T => x;
(#54) @gabelevi
Documentation
Internal
- Enable skipped tests (#16) @danez
- Add script to test latest version of babylon with babel (#21) @danez
- Upgrade test runner ava @kittens
- Add missing generate-identifier-regex script @kittens
- Rename parser context types @kittens
- Add node v6 to travis testing @hzoo
- Update to Unicode v9 (#45) @mathiasbynens
6.8.1 (2016-06-06)
New Feature
- Parse type parameter declarations with defaults like
type Foo<T = string> = T
Bug Fixes
- Type parameter declarations need 1 or more type parameters.
- The existential type
*
is not a valid type parameter. - The existential type
*
is a primary type
Spec Compliancy
- The param list for type parameter declarations now consists of
TypeParameter
nodes - New
TypeParameter
AST Node (replaces using theIdentifier
node before)
interface TypeParameter <: Node {
bound: TypeAnnotation;
default: TypeAnnotation;
name: string;
variance: "plus" | "minus";
}
6.8.0 (2016-05-02)
New Feature
Parse Method Parameter Decorators (#12)
Method Parameter Decorators is now a TC39 stage 0 proposal.
Examples:
class Foo {
constructor(@foo() x, @bar({ a: 123 }) @baz() y) {}
}
export default function func(@foo() x, @bar({ a: 123 }) @baz() y) {}
var obj = {
method(@foo() x, @bar({ a: 123 }) @baz() y) {}
};
Parse for-await statements (w/ asyncGenerators
plugin) (#17)
There is also a new node type, ForAwaitStatement
.
Async generators and for-await are now a stage 2 proposal.
Example:
async function f() {
for await (let x of y);
}