From d71632aa38ba4ad2023a1dfd9f319de6cd804b4f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 6 Apr 2015 15:32:22 -0700 Subject: [PATCH 1/2] Check for omitted expressions when checking const and let declaration names --- src/compiler/checker.ts | 4 +- .../reference/arrayBindingPattern.js | 31 +++++++++++++ .../reference/arrayBindingPattern.types | 43 +++++++++++++++++++ tests/cases/compiler/arrayBindingPattern.ts | 17 ++++++++ 4 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/arrayBindingPattern.js create mode 100644 tests/baselines/reference/arrayBindingPattern.types create mode 100644 tests/cases/compiler/arrayBindingPattern.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 54d722f53b0..d154bc1c93b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12596,7 +12596,9 @@ module ts { else { let elements = (name).elements; for (let element of elements) { - checkGrammarNameInLetOrConstDeclarations(element.name); + if (element.kind !== SyntaxKind.OmittedExpression) { + checkGrammarNameInLetOrConstDeclarations(element.name); + } } } } diff --git a/tests/baselines/reference/arrayBindingPattern.js b/tests/baselines/reference/arrayBindingPattern.js new file mode 100644 index 00000000000..bd1b350fbe4 --- /dev/null +++ b/tests/baselines/reference/arrayBindingPattern.js @@ -0,0 +1,31 @@ +//// [arrayBindingPattern.ts] + +var results: string[]; + +{ + let [, b, , a] = results; + let x = { + a, + b + } +} + + +function f([, a, , b, , , , s, , , ] = results) { + a = s[1]; + b = s[2]; +} + +//// [arrayBindingPattern.js] +var results; +{ + let [, b, , a] = results; + let x = { + a, + b + }; +} +function f([, a, , b, , , , s, , ,] = results) { + a = s[1]; + b = s[2]; +} diff --git a/tests/baselines/reference/arrayBindingPattern.types b/tests/baselines/reference/arrayBindingPattern.types new file mode 100644 index 00000000000..a157a357fe7 --- /dev/null +++ b/tests/baselines/reference/arrayBindingPattern.types @@ -0,0 +1,43 @@ +=== tests/cases/compiler/arrayBindingPattern.ts === + +var results: string[]; +>results : string[] + +{ + let [, b, , a] = results; +>b : string +>a : string +>results : string[] + + let x = { +>x : { a: string; b: string; } +>{ a, b } : { a: string; b: string; } + + a, +>a : string + + b +>b : string + } +} + + +function f([, a, , b, , , , s, , , ] = results) { +>f : ([, a, , b, , , , s, , , ]?: string[]) => void +>a : string +>b : string +>s : string +>results : string[] + + a = s[1]; +>a = s[1] : string +>a : string +>s[1] : string +>s : string + + b = s[2]; +>b = s[2] : string +>b : string +>s[2] : string +>s : string +} diff --git a/tests/cases/compiler/arrayBindingPattern.ts b/tests/cases/compiler/arrayBindingPattern.ts new file mode 100644 index 00000000000..61d8c6f7dda --- /dev/null +++ b/tests/cases/compiler/arrayBindingPattern.ts @@ -0,0 +1,17 @@ +// @target: ES6 + +var results: string[]; + +{ + let [, b, , a] = results; + let x = { + a, + b + } +} + + +function f([, a, , b, , , , s, , , ] = results) { + a = s[1]; + b = s[2]; +} \ No newline at end of file From 238a33daa0edf54f38a49ce716383cf50de53d60 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 6 Apr 2015 16:24:55 -0700 Subject: [PATCH 2/2] Rename test case --- ...ingPattern.js => arrayBindingPatternOmittedExpressions.js} | 4 ++-- ...tern.types => arrayBindingPatternOmittedExpressions.types} | 2 +- ...ingPattern.ts => arrayBindingPatternOmittedExpressions.ts} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename tests/baselines/reference/{arrayBindingPattern.js => arrayBindingPatternOmittedExpressions.js} (75%) rename tests/baselines/reference/{arrayBindingPattern.types => arrayBindingPatternOmittedExpressions.types} (83%) rename tests/cases/compiler/{arrayBindingPattern.ts => arrayBindingPatternOmittedExpressions.ts} (100%) diff --git a/tests/baselines/reference/arrayBindingPattern.js b/tests/baselines/reference/arrayBindingPatternOmittedExpressions.js similarity index 75% rename from tests/baselines/reference/arrayBindingPattern.js rename to tests/baselines/reference/arrayBindingPatternOmittedExpressions.js index bd1b350fbe4..a6f01d7b75c 100644 --- a/tests/baselines/reference/arrayBindingPattern.js +++ b/tests/baselines/reference/arrayBindingPatternOmittedExpressions.js @@ -1,4 +1,4 @@ -//// [arrayBindingPattern.ts] +//// [arrayBindingPatternOmittedExpressions.ts] var results: string[]; @@ -16,7 +16,7 @@ function f([, a, , b, , , , s, , , ] = results) { b = s[2]; } -//// [arrayBindingPattern.js] +//// [arrayBindingPatternOmittedExpressions.js] var results; { let [, b, , a] = results; diff --git a/tests/baselines/reference/arrayBindingPattern.types b/tests/baselines/reference/arrayBindingPatternOmittedExpressions.types similarity index 83% rename from tests/baselines/reference/arrayBindingPattern.types rename to tests/baselines/reference/arrayBindingPatternOmittedExpressions.types index a157a357fe7..ba1ac955b85 100644 --- a/tests/baselines/reference/arrayBindingPattern.types +++ b/tests/baselines/reference/arrayBindingPatternOmittedExpressions.types @@ -1,4 +1,4 @@ -=== tests/cases/compiler/arrayBindingPattern.ts === +=== tests/cases/compiler/arrayBindingPatternOmittedExpressions.ts === var results: string[]; >results : string[] diff --git a/tests/cases/compiler/arrayBindingPattern.ts b/tests/cases/compiler/arrayBindingPatternOmittedExpressions.ts similarity index 100% rename from tests/cases/compiler/arrayBindingPattern.ts rename to tests/cases/compiler/arrayBindingPatternOmittedExpressions.ts