Merge pull request #25966 from ajafff/shorthandPropertyAssignment-initializer-symbol

correctly resolve Symbol of destructuring shorthand intializer
This commit is contained in:
Mohamed Hegazy 2018-07-26 09:32:39 -07:00 committed by GitHub
commit 3057be3a0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 82 additions and 0 deletions

View File

@ -1633,6 +1633,8 @@ namespace ts {
return true;
case SyntaxKind.ExpressionWithTypeArguments:
return (<ExpressionWithTypeArguments>parent).expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
case SyntaxKind.ShorthandPropertyAssignment:
return (<ShorthandPropertyAssignment>parent).objectAssignmentInitializer === node;
default:
return isExpressionNode(parent);
}

View File

@ -63,6 +63,7 @@ x; // number
>{x = ""} = {x: true} : { x?: true; }
>{x = ""} : { x?: string | number | boolean | RegExp; }
>x : string | number | boolean | RegExp
>"" : ""
>{x: true} : { x?: true; }
>x : true
>true : true

View File

@ -13,5 +13,6 @@ Test(({ b = '5' } = {}));
>{ b = '5' } = {} : { b?: any; }
>{ b = '5' } : { [x: string]: any; b?: any; }
>b : any
>'5' : "5"
>{} : { b?: any; }

View File

@ -13,5 +13,6 @@ let x = 0;
>{x = 1} = a : { x?: number | undefined; }
>{x = 1} : { x?: number; }
>x : number
>1 : 1
>a : { x?: number | undefined; }

View File

@ -169,6 +169,7 @@ async function forOfStatement17() {
for ({ x = a } of await y) { z; }
>x : Symbol(x, Decl(es5-asyncFunctionForOfStatements.ts, 71, 10))
>a : Symbol(a, Decl(es5-asyncFunctionForOfStatements.ts, 0, 20))
>y : Symbol(y, Decl(es5-asyncFunctionForOfStatements.ts, 0, 14))
>z : Symbol(z, Decl(es5-asyncFunctionForOfStatements.ts, 0, 17))
}
@ -178,6 +179,7 @@ async function forOfStatement18() {
for ({ x = a } of y) { await z; }
>x : Symbol(x, Decl(es5-asyncFunctionForOfStatements.ts, 75, 10))
>a : Symbol(a, Decl(es5-asyncFunctionForOfStatements.ts, 0, 20))
>y : Symbol(y, Decl(es5-asyncFunctionForOfStatements.ts, 0, 14))
>z : Symbol(z, Decl(es5-asyncFunctionForOfStatements.ts, 0, 17))
}

View File

@ -9,6 +9,7 @@
for ({ s0 = 5 } of [{ s0: 1 }]) {
>{ s0 = 5 } : { s0?: any; }
>s0 : any
>5 : 5
>[{ s0: 1 }] : { s0: number; }[]
>{ s0: 1 } : { s0: number; }
>s0 : number
@ -45,6 +46,7 @@
for ({ s1 = 5 } of [{}]) {
>{ s1 = 5 } : { s1?: any; }
>s1 : any
>5 : 5
>[{}] : {}[]
>{} : {}
}
@ -78,6 +80,7 @@
for ({ s2 = 5 } of [{ s2: "" }]) {
>{ s2 = 5 } : { s2?: any; }
>s2 : any
>5 : 5
>[{ s2: "" }] : { s2: string; }[]
>{ s2: "" } : { s2: string; }
>s2 : string
@ -115,6 +118,7 @@
for ({ s3 = 5 } of [{ s3: "" }]) {
>{ s3 = 5 } : { s3?: string; }
>s3 : string
>5 : 5
>[{ s3: "" }] : { s3: string; }[]
>{ s3: "" } : { s3: string; }
>s3 : string
@ -154,6 +158,7 @@
>{ y = 5 } = { y: 1 } : { y?: number; }
>{ y = 5 } : { y?: any; }
>y : any
>5 : 5
>{ y: 1 } : { y?: number; }
>y : number
>1 : 1
@ -193,6 +198,7 @@
>{ y0 = 5 } = { y0: 1 } : { y0?: number; }
>{ y0 = 5 } : { y0?: number; }
>y0 : number
>5 : 5
>{ y0: 1 } : { y0?: number; }
>y0 : number
>1 : 1
@ -232,6 +238,7 @@
>{ y1 = 5 } = {} : { y1?: string; }
>{ y1 = 5 } : { y1?: string; }
>y1 : string
>5 : 5
>{} : { y1?: string; }
});
@ -269,6 +276,7 @@
>{ y2 = 5, y3 = { x: 1 } } = {} : { y2?: string; y3?: { x: string; }; }
>{ y2 = 5, y3 = { x: 1 } } : { y2?: string; y3?: { x: string; }; }
>y2 : string
>5 : 5
>y3 : { x: string; }
>{ x: 1 } : { x: number; }
>x : number
@ -318,6 +326,7 @@
>{ y4 = 5, y5 = { x: 1 } } = {} : { y4?: number; y5?: { x: number; }; }
>{ y4 = 5, y5 = { x: 1 } } : { y4?: number; y5?: { x: number; }; }
>y4 : number
>5 : 5
>y5 : { x: number; }
>{ x: 1 } : { x: number; }
>x : number
@ -411,6 +420,7 @@
>a : { s: any; }
>{ s = 5 } : { s: any; }
>s : any
>5 : 5
});

View File

@ -9,6 +9,7 @@
for ({ s0 = 5 } of [{ s0: 1 }]) {
>{ s0 = 5 } : { s0?: any; }
>s0 : any
>5 : 5
>[{ s0: 1 }] : { s0: number; }[]
>{ s0: 1 } : { s0: number; }
>s0 : number
@ -45,6 +46,7 @@
for ({ s1 = 5 } of [{}]) {
>{ s1 = 5 } : { s1?: any; }
>s1 : any
>5 : 5
>[{}] : {}[]
>{} : {}
}
@ -78,6 +80,7 @@
for ({ s2 = 5 } of [{ s2: "" }]) {
>{ s2 = 5 } : { s2?: any; }
>s2 : any
>5 : 5
>[{ s2: "" }] : { s2: string; }[]
>{ s2: "" } : { s2: string; }
>s2 : string
@ -115,6 +118,7 @@
for ({ s3 = 5 } of [{ s3: "" }]) {
>{ s3 = 5 } : { s3?: string; }
>s3 : string
>5 : 5
>[{ s3: "" }] : { s3: string; }[]
>{ s3: "" } : { s3: string; }
>s3 : string
@ -154,6 +158,7 @@
>{ y = 5 } = { y: 1 } : { y?: number; }
>{ y = 5 } : { y?: any; }
>y : any
>5 : 5
>{ y: 1 } : { y?: number; }
>y : number
>1 : 1
@ -193,6 +198,7 @@
>{ y0 = 5 } = { y0: 1 } : { y0?: number; }
>{ y0 = 5 } : { y0?: number; }
>y0 : number
>5 : 5
>{ y0: 1 } : { y0?: number; }
>y0 : number
>1 : 1
@ -232,6 +238,7 @@
>{ y1 = 5 } = {} : { y1?: string; }
>{ y1 = 5 } : { y1?: string; }
>y1 : string
>5 : 5
>{} : { y1?: string; }
});
@ -269,6 +276,7 @@
>{ y2 = 5, y3 = { x: 1 } } = {} : { y2?: string; y3?: { x: string; }; }
>{ y2 = 5, y3 = { x: 1 } } : { y2?: string; y3?: { x: string; }; }
>y2 : string
>5 : 5
>y3 : { x: string; }
>{ x: 1 } : { x: number; }
>x : number
@ -318,6 +326,7 @@
>{ y4 = 5, y5 = { x: 1 } } = {} : { y4?: number; y5?: { x: number; }; }
>{ y4 = 5, y5 = { x: 1 } } : { y4?: number; y5?: { x: number; }; }
>y4 : number
>5 : 5
>y5 : { x: number; }
>{ x: 1 } : { x: number; }
>x : number
@ -411,6 +420,7 @@
>a : { s: any; }
>{ s = 5 } : { s: any; }
>s : any
>5 : 5
});

View File

@ -324,6 +324,7 @@ for ({ name = "noName" } = robot, i = 0; i < 1; i++) {
>{ name = "noName" } = robot : Robot
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
>robot : Robot
>i = 0 : 0
>i : number
@ -346,6 +347,7 @@ for ({ name = "noName" } = getRobot(), i = 0; i < 1; i++) {
>{ name = "noName" } = getRobot() : Robot
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
>getRobot() : Robot
>getRobot : () => Robot
>i = 0 : 0
@ -369,6 +371,7 @@ for ({ name = "noName" } = <Robot>{ name: "trimmer", skill: "trimming" }, i = 0;
>{ name = "noName" } = <Robot>{ name: "trimmer", skill: "trimming" } : Robot
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
><Robot>{ name: "trimmer", skill: "trimming" } : Robot
>Robot : Robot
>{ name: "trimmer", skill: "trimming" } : { name: string; skill: string; }
@ -404,9 +407,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }
@ -445,9 +450,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }
@ -487,9 +494,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }
@ -802,7 +811,9 @@ for ({ name = "noName", skill = "skill" } = robot, i = 0; i < 1; i++) {
>{ name = "noName", skill = "skill" } = robot : Robot
>{ name = "noName", skill = "skill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"skill" : "skill"
>robot : Robot
>i = 0 : 0
>i : number
@ -825,7 +836,9 @@ for ({ name = "noName", skill = "skill" } = getRobot(), i = 0; i < 1; i++) {
>{ name = "noName", skill = "skill" } = getRobot() : Robot
>{ name = "noName", skill = "skill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"skill" : "skill"
>getRobot() : Robot
>getRobot : () => Robot
>i = 0 : 0
@ -849,7 +862,9 @@ for ({ name = "noName", skill = "skill" } = <Robot>{ name: "trimmer", skill: "tr
>{ name = "noName", skill = "skill" } = <Robot>{ name: "trimmer", skill: "trimming" } : Robot
>{ name = "noName", skill = "skill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"skill" : "skill"
><Robot>{ name: "trimmer", skill: "trimming" } : Robot
>Robot : Robot
>{ name: "trimmer", skill: "trimming" } : { name: string; skill: string; }
@ -880,6 +895,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -888,9 +904,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }
@ -924,6 +942,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -932,9 +951,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }
@ -969,6 +990,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -977,9 +999,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "none", secondary: "none" }
>{ primary: "none", secondary: "none" } : { primary?: string; secondary?: string; }

View File

@ -273,6 +273,7 @@ for ({ skills: { primary: primaryA = "primary", secondary: secondaryA = "seconda
for ({ name = "noName" } of robots) {
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
>robots : Robot[]
console.log(nameA);
@ -285,6 +286,7 @@ for ({ name = "noName" } of robots) {
for ({ name = "noName" } of getRobots()) {
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
>getRobots() : Robot[]
>getRobots : () => Robot[]
@ -298,6 +300,7 @@ for ({ name = "noName" } of getRobots()) {
for ({ name = "noName" } of [{ name: "mower", skill: "mowing" }, { name: "trimmer", skill: "trimming" }]) {
>{ name = "noName" } : { name?: string; }
>name : string
>"noName" : "noName"
>[{ name: "mower", skill: "mowing" }, { name: "trimmer", skill: "trimming" }] : { name: string; skill: string; }[]
>{ name: "mower", skill: "mowing" } : { name: string; skill: string; }
>name : string
@ -327,9 +330,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }
@ -358,9 +363,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }
@ -390,9 +397,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }
@ -657,7 +666,9 @@ for ({
for ({ name = "noName", skill = "noSkill" } of robots) {
>{ name = "noName", skill = "noSkill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"noSkill" : "noSkill"
>robots : Robot[]
console.log(nameA);
@ -670,7 +681,9 @@ for ({ name = "noName", skill = "noSkill" } of robots) {
for ({ name = "noName", skill = "noSkill" } of getRobots()) {
>{ name = "noName", skill = "noSkill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"noSkill" : "noSkill"
>getRobots() : Robot[]
>getRobots : () => Robot[]
@ -684,7 +697,9 @@ for ({ name = "noName", skill = "noSkill" } of getRobots()) {
for ({ name = "noName", skill = "noSkill" } of [{ name: "mower", skill: "mowing" }, { name: "trimmer", skill: "trimming" }]) {
>{ name = "noName", skill = "noSkill" } : { name?: string; skill?: string; }
>name : string
>"noName" : "noName"
>skill : string
>"noSkill" : "noSkill"
>[{ name: "mower", skill: "mowing" }, { name: "trimmer", skill: "trimming" }] : { name: string; skill: string; }[]
>{ name: "mower", skill: "mowing" } : { name: string; skill: string; }
>name : string
@ -709,6 +724,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -717,9 +733,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }
@ -743,6 +761,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -751,9 +770,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }
@ -778,6 +799,7 @@ for ({
name = "noName",
>name : string
>"noName" : "noName"
skills: {
>skills : { primary?: string; secondary?: string; }
@ -786,9 +808,11 @@ for ({
primary = "primary",
>primary : string
>"primary" : "primary"
secondary = "secondary"
>secondary : string
>"secondary" : "secondary"
} = { primary: "noSkill", secondary: "noSkill" }
>{ primary: "noSkill", secondary: "noSkill" } : { primary?: string; secondary?: string; }

View File

@ -0,0 +1,7 @@
/// <reference path='fourslash.ts' />
////let a = '';
////let b: string;
////({b = /**/a} = {b: 'b'});
verify.quickInfoAt("", "let a: string");