Fix arrow functions with destructuring, types & default value (#94)

Flow's "toAssignable" override wasn't calling the inner function,
resulting in the destructuring in an AssignmentPattern not having the
node type changed from ObjectExpression to ObjectPattern, resulting in
"Binding rvalue" thrown from "checkLVal()"
This commit is contained in:
Dan Harper 2016-08-23 22:27:39 +01:00 committed by Henry Zhu
parent db0705bc51
commit efab40154e
3 changed files with 263 additions and 3 deletions

View File

@ -878,11 +878,11 @@ export default function (instance) {
});
instance.extend("toAssignable", function (inner) {
return function (node) {
return function (node, isBinding) {
if (node.type === "TypeCastExpression") {
return this.typeCastToParameter(node);
return inner.call(this, this.typeCastToParameter(node), isBinding);
} else {
return inner.apply(this, arguments);
return inner.call(this, node, isBinding);
}
};
});

View File

@ -0,0 +1 @@
var x = ({ a } : any = 'foo') => {}

View File

@ -0,0 +1,259 @@
{
"type": "File",
"start": 0,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 35
}
},
"program": {
"type": "Program",
"start": 0,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 35
}
},
"sourceType": "module",
"body": [
{
"type": "VariableDeclaration",
"start": 0,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 35
}
},
"declarations": [
{
"type": "VariableDeclarator",
"start": 4,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 35
}
},
"id": {
"type": "Identifier",
"start": 4,
"end": 5,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 5
},
"identifierName": "x"
},
"name": "x"
},
"init": {
"type": "ArrowFunctionExpression",
"start": 8,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 8
},
"end": {
"line": 1,
"column": 35
}
},
"id": null,
"generator": false,
"expression": false,
"async": false,
"params": [
{
"type": "AssignmentPattern",
"start": 9,
"end": 28,
"loc": {
"start": {
"line": 1,
"column": 9
},
"end": {
"line": 1,
"column": 28
}
},
"left": {
"type": "ObjectPattern",
"start": 9,
"end": 20,
"loc": {
"start": {
"line": 1,
"column": 9
},
"end": {
"line": 1,
"column": 20
}
},
"properties": [
{
"type": "ObjectProperty",
"start": 11,
"end": 12,
"loc": {
"start": {
"line": 1,
"column": 11
},
"end": {
"line": 1,
"column": 12
}
},
"method": false,
"shorthand": true,
"computed": false,
"key": {
"type": "Identifier",
"start": 11,
"end": 12,
"loc": {
"start": {
"line": 1,
"column": 11
},
"end": {
"line": 1,
"column": 12
},
"identifierName": "a"
},
"name": "a"
},
"value": {
"type": "Identifier",
"start": 11,
"end": 12,
"loc": {
"start": {
"line": 1,
"column": 11
},
"end": {
"line": 1,
"column": 12
},
"identifierName": "a"
},
"name": "a"
},
"extra": {
"shorthand": true
}
}
],
"typeAnnotation": {
"type": "TypeAnnotation",
"start": 15,
"end": 20,
"loc": {
"start": {
"line": 1,
"column": 15
},
"end": {
"line": 1,
"column": 20
}
},
"typeAnnotation": {
"type": "AnyTypeAnnotation",
"start": 17,
"end": 20,
"loc": {
"start": {
"line": 1,
"column": 17
},
"end": {
"line": 1,
"column": 20
}
}
}
}
},
"right": {
"type": "StringLiteral",
"start": 23,
"end": 28,
"loc": {
"start": {
"line": 1,
"column": 23
},
"end": {
"line": 1,
"column": 28
}
},
"extra": {
"rawValue": "foo",
"raw": "'foo'"
},
"value": "foo"
}
}
],
"body": {
"type": "BlockStatement",
"start": 33,
"end": 35,
"loc": {
"start": {
"line": 1,
"column": 33
},
"end": {
"line": 1,
"column": 35
}
},
"body": [],
"directives": []
}
}
}
],
"kind": "var"
}
],
"directives": []
}
}