Skip to content

Commit 4e702e5

Browse files
committed
Implement breakpoints in paramters with destructuring binding pattern
1 parent 73498e8 commit 4e702e5

9 files changed

Lines changed: 59 additions & 120 deletions

src/services/breakpoints.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,15 @@ namespace ts.BreakpointResolver {
287287
return spanInPreviousNode(node);
288288
}
289289

290-
// initializer of variable declaration go to previous node
291-
if (node.parent.kind === SyntaxKind.VariableDeclaration &&
292-
((<VariableDeclaration>node.parent).initializer === node ||
293-
isAssignmentOperator(node.kind))) {
294-
return spanInPreviousNode(node);
290+
// initializer of variable/parameter declaration go to previous node
291+
if ((node.parent.kind === SyntaxKind.VariableDeclaration ||
292+
node.parent.kind === SyntaxKind.Parameter)) {
293+
const paramOrVarDecl = <VariableDeclaration | ParameterDeclaration>node.parent;
294+
if (paramOrVarDecl.initializer === node ||
295+
paramOrVarDecl.type === node ||
296+
isAssignmentOperator(node.kind)) {
297+
return spanInPreviousNode(node);
298+
}
295299
}
296300

297301
// Default go to parent to set the breakpoint
@@ -345,7 +349,11 @@ namespace ts.BreakpointResolver {
345349
}
346350

347351
function spanInParameterDeclaration(parameter: ParameterDeclaration): TextSpan {
348-
if (canHaveSpanInParameterDeclaration(parameter)) {
352+
if (isBindingPattern(parameter.name)) {
353+
// set breakpoint in binding pattern
354+
return spanInBindingPattern(<BindingPattern>parameter.name);
355+
}
356+
else if (canHaveSpanInParameterDeclaration(parameter)) {
349357
return textSpan(parameter);
350358
}
351359
else {
@@ -562,7 +570,9 @@ namespace ts.BreakpointResolver {
562570

563571
function spanInColonToken(node: Node): TextSpan {
564572
// Is this : specifying return annotation of the function declaration
565-
if (isFunctionLike(node.parent) || node.parent.kind === SyntaxKind.PropertyAssignment) {
573+
if (isFunctionLike(node.parent) ||
574+
node.parent.kind === SyntaxKind.PropertyAssignment ||
575+
node.parent.kind === SyntaxKind.Parameter) {
566576
return spanInPreviousNode(node);
567577
}
568578

tests/baselines/reference/bpSpanDestructuringParameterArrayBindingPattern.baseline

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
>:=> (line 7, col 4) to (line 7, col 22)
2929
6 >function foo1([, nameA]: Robot) {
3030

31-
~~~~~~~~~ => Pos: (147 to 155) SpanInfo: {"start":150,"length":5}
31+
~~~~~~~~~~~~~~~~~ => Pos: (147 to 163) SpanInfo: {"start":150,"length":5}
3232
>nameA
3333
>:=> (line 6, col 17) to (line 6, col 22)
3434
6 >function foo1([, nameA]: Robot) {
3535

36-
~~~~~~~~~~~ => Pos: (156 to 166) SpanInfo: {"start":171,"length":18}
36+
~~~ => Pos: (164 to 166) SpanInfo: {"start":171,"length":18}
3737
>console.log(nameA)
3838
>:=> (line 7, col 4) to (line 7, col 22)
3939
--------------------------------
@@ -56,12 +56,12 @@
5656
>:=> (line 10, col 4) to (line 10, col 24)
5757
9 >function foo2([numberB]: Robot) {
5858

59-
~~~~~~~~~ => Pos: (207 to 215) SpanInfo: {"start":208,"length":7}
59+
~~~~~~~~~~~~~~~~~ => Pos: (207 to 223) SpanInfo: {"start":208,"length":7}
6060
>numberB
6161
>:=> (line 9, col 15) to (line 9, col 22)
6262
9 >function foo2([numberB]: Robot) {
6363

64-
~~~~~~~~~~~ => Pos: (216 to 226) SpanInfo: {"start":231,"length":20}
64+
~~~ => Pos: (224 to 226) SpanInfo: {"start":231,"length":20}
6565
>console.log(numberB)
6666
>:=> (line 10, col 4) to (line 10, col 24)
6767
--------------------------------
@@ -94,12 +94,12 @@
9494
>:=> (line 12, col 25) to (line 12, col 31)
9595
12 >function foo3([numberA2, nameA2, skillA2]: Robot) {
9696

97-
~~~~~~~~~ => Pos: (287 to 295) SpanInfo: {"start":288,"length":7}
97+
~~~~~~~~~~~~~~~~~=> Pos: (287 to 303) SpanInfo: {"start":288,"length":7}
9898
>skillA2
9999
>:=> (line 12, col 33) to (line 12, col 40)
100100
12 >function foo3([numberA2, nameA2, skillA2]: Robot) {
101101

102-
~~~~~~~~~~~=> Pos: (296 to 306) SpanInfo: {"start":311,"length":19}
102+
~~~=> Pos: (304 to 306) SpanInfo: {"start":311,"length":19}
103103
>console.log(nameA2)
104104
>:=> (line 13, col 4) to (line 13, col 23)
105105
--------------------------------
@@ -127,12 +127,12 @@
127127
>:=> (line 15, col 15) to (line 15, col 23)
128128
15 >function foo4([numberA3, ...robotAInfo]: Robot) {
129129

130-
~~~~~~~~~~~~~~~ => Pos: (358 to 372) SpanInfo: {"start":359,"length":13}
130+
~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (358 to 380) SpanInfo: {"start":359,"length":13}
131131
>...robotAInfo
132132
>:=> (line 15, col 25) to (line 15, col 38)
133133
15 >function foo4([numberA3, ...robotAInfo]: Robot) {
134134

135-
~~~~~~~~~~~=> Pos: (373 to 383) SpanInfo: {"start":388,"length":23}
135+
~~~=> Pos: (381 to 383) SpanInfo: {"start":388,"length":23}
136136
>console.log(robotAInfo)
137137
>:=> (line 16, col 4) to (line 16, col 27)
138138
--------------------------------

tests/baselines/reference/bpSpanDestructuringParameterArrayBindingPattern2.baseline

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
>:=> (line 7, col 4) to (line 7, col 23)
2929
6 >function foo1([, skillA]: Robot) {
3030

31-
~~~~~~~~~~ => Pos: (162 to 171) SpanInfo: {"start":165,"length":6}
31+
~~~~~~~~~~~~~~~~~~ => Pos: (162 to 179) SpanInfo: {"start":165,"length":6}
3232
>skillA
3333
>:=> (line 6, col 17) to (line 6, col 23)
3434
6 >function foo1([, skillA]: Robot) {
3535

36-
~~~~~~~~~~~ => Pos: (172 to 182) SpanInfo: {"start":187,"length":19}
36+
~~~ => Pos: (180 to 182) SpanInfo: {"start":187,"length":19}
3737
>console.log(skillA)
3838
>:=> (line 7, col 4) to (line 7, col 23)
3939
--------------------------------
@@ -56,12 +56,12 @@
5656
>:=> (line 10, col 4) to (line 10, col 23)
5757
9 >function foo2([nameMB]: Robot) {
5858

59-
~~~~~~~~ => Pos: (224 to 231) SpanInfo: {"start":225,"length":6}
59+
~~~~~~~~~~~~~~~~ => Pos: (224 to 239) SpanInfo: {"start":225,"length":6}
6060
>nameMB
6161
>:=> (line 9, col 15) to (line 9, col 21)
6262
9 >function foo2([nameMB]: Robot) {
6363

64-
~~~~~~~~~~~ => Pos: (232 to 242) SpanInfo: {"start":247,"length":19}
64+
~~~ => Pos: (240 to 242) SpanInfo: {"start":247,"length":19}
6565
>console.log(nameMB)
6666
>:=> (line 10, col 4) to (line 10, col 23)
6767
--------------------------------
@@ -99,12 +99,12 @@
9999
>:=> (line 12, col 39) to (line 12, col 54)
100100
12 >function foo3([nameMA, [primarySkillA, secondarySkillA]]: Robot) {
101101

102-
~=> Pos: (325 to 325) SpanInfo: {"start":293,"length":32}
102+
~~~~~~~~~=> Pos: (325 to 333) SpanInfo: {"start":293,"length":32}
103103
>[primarySkillA, secondarySkillA]
104104
>:=> (line 12, col 23) to (line 12, col 55)
105105
12 >function foo3([nameMA, [primarySkillA, secondarySkillA]]: Robot) {
106106

107-
~~~~~~~~~~~=> Pos: (326 to 336) SpanInfo: {"start":341,"length":19}
107+
~~~=> Pos: (334 to 336) SpanInfo: {"start":341,"length":19}
108108
>console.log(nameMA)
109109
>:=> (line 13, col 4) to (line 13, col 23)
110110
--------------------------------
@@ -127,12 +127,12 @@
127127
>:=> (line 16, col 4) to (line 16, col 32)
128128
15 >function foo4([...multiRobotAInfo]: Robot) {
129129

130-
~~~~~~~~~~~~~~~~~~~~ => Pos: (378 to 397) SpanInfo: {"start":379,"length":18}
130+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (378 to 405) SpanInfo: {"start":379,"length":18}
131131
>...multiRobotAInfo
132132
>:=> (line 15, col 15) to (line 15, col 33)
133133
15 >function foo4([...multiRobotAInfo]: Robot) {
134134

135-
~~~~~~~~~~~ => Pos: (398 to 408) SpanInfo: {"start":413,"length":28}
135+
~~~ => Pos: (406 to 408) SpanInfo: {"start":413,"length":28}
136136
>console.log(multiRobotAInfo)
137137
>:=> (line 16, col 4) to (line 16, col 32)
138138
--------------------------------

tests/baselines/reference/bpSpanDestructuringParameterArrayBindingPatternDefaultValues.baseline

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,11 @@
2828
>:=> (line 7, col 4) to (line 7, col 22)
2929
6 >function foo1([, nameA = "noName"]: Robot = [-1, "name", "skill"]) {
3030

31-
~~~~~~~~~~~~~~~~~~~~ => Pos: (147 to 166) SpanInfo: {"start":150,"length":16}
31+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (147 to 198) SpanInfo: {"start":150,"length":16}
3232
>nameA = "noName"
3333
>:=> (line 6, col 17) to (line 6, col 33)
3434
6 >function foo1([, nameA = "noName"]: Robot = [-1, "name", "skill"]) {
3535

36-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (167 to 198) SpanInfo: {"start":147,"length":51}
37-
>[, nameA = "noName"]: Robot = [-1, "name", "skill"]
38-
>:=> (line 6, col 14) to (line 6, col 65)
39-
6 >function foo1([, nameA = "noName"]: Robot = [-1, "name", "skill"]) {
40-
4136
~~~=> Pos: (199 to 201) SpanInfo: {"start":206,"length":18}
4237
>console.log(nameA)
4338
>:=> (line 7, col 4) to (line 7, col 22)
@@ -61,16 +56,11 @@
6156
>:=> (line 10, col 4) to (line 10, col 24)
6257
9 >function foo2([numberB = -1]: Robot = [-1, "name", "skill"]) {
6358

64-
~~~~~~~~~~~~~~ => Pos: (242 to 255) SpanInfo: {"start":243,"length":12}
59+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (242 to 287) SpanInfo: {"start":243,"length":12}
6560
>numberB = -1
6661
>:=> (line 9, col 15) to (line 9, col 27)
6762
9 >function foo2([numberB = -1]: Robot = [-1, "name", "skill"]) {
6863

69-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (256 to 287) SpanInfo: {"start":242,"length":45}
70-
>[numberB = -1]: Robot = [-1, "name", "skill"]
71-
>:=> (line 9, col 14) to (line 9, col 59)
72-
9 >function foo2([numberB = -1]: Robot = [-1, "name", "skill"]) {
73-
7464
~~~=> Pos: (288 to 290) SpanInfo: {"start":295,"length":20}
7565
>console.log(numberB)
7666
>:=> (line 10, col 4) to (line 10, col 24)
@@ -104,16 +94,11 @@
10494
>:=> (line 12, col 30) to (line 12, col 45)
10595
12 >function foo3([numberA2 = -1, nameA2 = "name", skillA2 = "skill"]: Robot = [-1, "name", "skill"]) {
10696

107-
~~~~~~~~~~~~~~~~~~~=> Pos: (365 to 383) SpanInfo: {"start":366,"length":17}
97+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (365 to 415) SpanInfo: {"start":366,"length":17}
10898
>skillA2 = "skill"
10999
>:=> (line 12, col 47) to (line 12, col 64)
110100
12 >function foo3([numberA2 = -1, nameA2 = "name", skillA2 = "skill"]: Robot = [-1, "name", "skill"]) {
111101

112-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (384 to 415) SpanInfo: {"start":333,"length":82}
113-
>[numberA2 = -1, nameA2 = "name", skillA2 = "skill"]: Robot = [-1, "name", "skill"]
114-
>:=> (line 12, col 14) to (line 12, col 96)
115-
12 >function foo3([numberA2 = -1, nameA2 = "name", skillA2 = "skill"]: Robot = [-1, "name", "skill"]) {
116-
117102
~~~=> Pos: (416 to 418) SpanInfo: {"start":423,"length":19}
118103
>console.log(nameA2)
119104
>:=> (line 13, col 4) to (line 13, col 23)
@@ -142,16 +127,11 @@
142127
>:=> (line 15, col 15) to (line 15, col 28)
143128
15 >function foo4([numberA3 = -1, ...robotAInfo]: Robot = [-1, "name", "skill"]) {
144129

145-
~~~~~~~~~~~~~~~ => Pos: (475 to 489) SpanInfo: {"start":476,"length":13}
130+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (475 to 521) SpanInfo: {"start":476,"length":13}
146131
>...robotAInfo
147132
>:=> (line 15, col 30) to (line 15, col 43)
148133
15 >function foo4([numberA3 = -1, ...robotAInfo]: Robot = [-1, "name", "skill"]) {
149134

150-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (490 to 521) SpanInfo: {"start":460,"length":61}
151-
>[numberA3 = -1, ...robotAInfo]: Robot = [-1, "name", "skill"]
152-
>:=> (line 15, col 14) to (line 15, col 75)
153-
15 >function foo4([numberA3 = -1, ...robotAInfo]: Robot = [-1, "name", "skill"]) {
154-
155135
~~~=> Pos: (522 to 524) SpanInfo: {"start":529,"length":23}
156136
>console.log(robotAInfo)
157137
>:=> (line 16, col 4) to (line 16, col 27)

tests/baselines/reference/bpSpanDestructuringParameterArrayBindingPatternDefaultValues2.baseline

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,11 @@
2828
>:=> (line 7, col 4) to (line 7, col 23)
2929
6 >function foo1([, skillA = ["noSkill", "noSkill"]]: Robot= ["name", ["skill1", "skill2"]]) {
3030

31-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (154 to 188) SpanInfo: {"start":157,"length":31}
31+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (154 to 228) SpanInfo: {"start":157,"length":31}
3232
>skillA = ["noSkill", "noSkill"]
3333
>:=> (line 6, col 17) to (line 6, col 48)
3434
6 >function foo1([, skillA = ["noSkill", "noSkill"]]: Robot= ["name", ["skill1", "skill2"]]) {
3535

36-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (189 to 228) SpanInfo: {"start":154,"length":74}
37-
>[, skillA = ["noSkill", "noSkill"]]: Robot= ["name", ["skill1", "skill2"]]
38-
>:=> (line 6, col 14) to (line 6, col 88)
39-
6 >function foo1([, skillA = ["noSkill", "noSkill"]]: Robot= ["name", ["skill1", "skill2"]]) {
40-
4136
~~~=> Pos: (229 to 231) SpanInfo: {"start":236,"length":19}
4237
>console.log(skillA)
4338
>:=> (line 7, col 4) to (line 7, col 23)
@@ -61,16 +56,11 @@
6156
>:=> (line 10, col 4) to (line 10, col 23)
6257
9 >function foo2([nameMB = "noName"]: Robot = ["name", ["skill1", "skill2"]]) {
6358

64-
~~~~~~~~~~~~~~~~~~~ => Pos: (273 to 291) SpanInfo: {"start":274,"length":17}
59+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (273 to 332) SpanInfo: {"start":274,"length":17}
6560
>nameMB = "noName"
6661
>:=> (line 9, col 15) to (line 9, col 32)
6762
9 >function foo2([nameMB = "noName"]: Robot = ["name", ["skill1", "skill2"]]) {
6863

69-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=> Pos: (292 to 332) SpanInfo: {"start":273,"length":59}
70-
>[nameMB = "noName"]: Robot = ["name", ["skill1", "skill2"]]
71-
>:=> (line 9, col 14) to (line 9, col 73)
72-
9 >function foo2([nameMB = "noName"]: Robot = ["name", ["skill1", "skill2"]]) {
73-
7464
~~~=> Pos: (333 to 335) SpanInfo: {"start":340,"length":19}
7565
>console.log(nameMB)
7666
>:=> (line 10, col 4) to (line 10, col 23)
@@ -122,15 +112,15 @@
122112
>:=> (line 14, col 4) to (line 14, col 33)
123113
15 >] = ["noSkill", "noSkill"]]: Robot) {
124114

125-
~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (465 to 490) SpanInfo: {"start":397,"length":93}
115+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ => Pos: (465 to 498) SpanInfo: {"start":397,"length":93}
126116
>[
127117
> primarySkillA = "primary",
128118
> secondarySkillA = "secondary"
129119
>] = ["noSkill", "noSkill"]
130120
>:=> (line 12, col 34) to (line 15, col 26)
131121
15 >] = ["noSkill", "noSkill"]]: Robot) {
132122

133-
~~~~~~~~~~~ => Pos: (491 to 501) SpanInfo: {"start":506,"length":19}
123+
~~~ => Pos: (499 to 501) SpanInfo: {"start":506,"length":19}
134124
>console.log(nameMA)
135125
>:=> (line 16, col 4) to (line 16, col 23)
136126
--------------------------------

tests/baselines/reference/bpSpanDestructuringParameterNestedObjectBindingPattern.baseline

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@
6767
>:=> (line 12, col 45) to (line 12, col 66)
6868
12 >function foo1({ skills: { primary: primaryA, secondary: secondaryA } }: Robot) {
6969

70-
~~=> Pos: (321 to 322) SpanInfo: {"start":269,"length":52}
70+
~~~~~~~~~~=> Pos: (321 to 330) SpanInfo: {"start":269,"length":52}
7171
>skills: { primary: primaryA, secondary: secondaryA }
7272
>:=> (line 12, col 16) to (line 12, col 68)
7373
12 >function foo1({ skills: { primary: primaryA, secondary: secondaryA } }: Robot) {
7474

75-
~~~~~~~~~~~=> Pos: (323 to 333) SpanInfo: {"start":338,"length":21}
75+
~~~=> Pos: (331 to 333) SpanInfo: {"start":338,"length":21}
7676
>console.log(primaryA)
7777
>:=> (line 13, col 4) to (line 13, col 25)
7878
--------------------------------
@@ -115,12 +115,12 @@
115115
>:=> (line 15, col 58) to (line 15, col 79)
116116
15 >function foo2({ name: nameC, skills: { primary: primaryB, secondary: secondaryB } }: Robot) {
117117

118-
~~=> Pos: (444 to 445) SpanInfo: {"start":392,"length":52}
118+
~~~~~~~~~~=> Pos: (444 to 453) SpanInfo: {"start":392,"length":52}
119119
>skills: { primary: primaryB, secondary: secondaryB }
120120
>:=> (line 15, col 29) to (line 15, col 81)
121121
15 >function foo2({ name: nameC, skills: { primary: primaryB, secondary: secondaryB } }: Robot) {
122122

123-
~~~~~~~~~~~=> Pos: (446 to 456) SpanInfo: {"start":461,"length":23}
123+
~~~=> Pos: (454 to 456) SpanInfo: {"start":461,"length":23}
124124
>console.log(secondaryB)
125125
>:=> (line 16, col 4) to (line 16, col 27)
126126
--------------------------------
@@ -143,12 +143,12 @@
143143
>:=> (line 19, col 4) to (line 19, col 31)
144144
18 >function foo3({ skills }: Robot) {
145145

146-
~~~~~~~~~~ => Pos: (502 to 511) SpanInfo: {"start":504,"length":6}
146+
~~~~~~~~~~~~~~~~~~ => Pos: (502 to 519) SpanInfo: {"start":504,"length":6}
147147
>skills
148148
>:=> (line 18, col 16) to (line 18, col 22)
149149
18 >function foo3({ skills }: Robot) {
150150

151-
~~~~~~~~~~~ => Pos: (512 to 522) SpanInfo: {"start":527,"length":27}
151+
~~~ => Pos: (520 to 522) SpanInfo: {"start":527,"length":27}
152152
>console.log(skills.primary)
153153
>:=> (line 19, col 4) to (line 19, col 31)
154154
--------------------------------

0 commit comments

Comments
 (0)