diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2490c32fedc..bff0c137e24 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9412,7 +9412,10 @@ module ts { } if (isArrayLikeType(inputType)) { - return getIndexTypeOfType(inputType, IndexKind.Number); + let indexType = getIndexTypeOfType(inputType, IndexKind.Number); + if (indexType) { + return indexType; + } } error(errorNode, Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); diff --git a/src/services/services.ts b/src/services/services.ts index 1d006e0b14c..fe5be09244d 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3109,6 +3109,7 @@ module ts { case SyntaxKind.SemicolonToken: return containingNodeKind === SyntaxKind.PropertySignature && + previousToken.parent && previousToken.parent.parent && (previousToken.parent.parent.kind === SyntaxKind.InterfaceDeclaration || // interface a { f; | previousToken.parent.parent.kind === SyntaxKind.TypeLiteral); // let x : { a; | @@ -3124,7 +3125,8 @@ module ts { case SyntaxKind.DotDotDotToken: return containingNodeKind === SyntaxKind.Parameter || containingNodeKind === SyntaxKind.Constructor || - (previousToken.parent.parent.kind === SyntaxKind.ArrayBindingPattern); // var [ ...z| + (previousToken.parent && previousToken.parent.parent && + previousToken.parent.parent.kind === SyntaxKind.ArrayBindingPattern); // var [ ...z| case SyntaxKind.PublicKeyword: case SyntaxKind.PrivateKeyword: diff --git a/tests/baselines/reference/assignmentLHSIsValue.errors.txt b/tests/baselines/reference/assignmentLHSIsValue.errors.txt index cf747b44b3e..a8a57090fb8 100644 --- a/tests/baselines/reference/assignmentLHSIsValue.errors.txt +++ b/tests/baselines/reference/assignmentLHSIsValue.errors.txt @@ -14,6 +14,7 @@ tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(3 tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(31,1): error TS2364: Invalid left-hand side of assignment expression. tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(32,1): error TS2364: Invalid left-hand side of assignment expression. tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(35,9): error TS1128: Declaration or statement expected. +tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(38,1): error TS2461: Type 'any' is not an array type. tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(38,2): error TS2364: Invalid left-hand side of assignment expression. tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(38,6): error TS2364: Invalid left-hand side of assignment expression. tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(42,36): error TS1034: 'super' must be followed by an argument list or member access. @@ -38,7 +39,7 @@ tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(6 tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(70,1): error TS2364: Invalid left-hand side of assignment expression. -==== tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts (38 errors) ==== +==== tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts (39 errors) ==== // expected error for all the LHS of assignments var value; @@ -109,6 +110,8 @@ tests/cases/conformance/expressions/assignmentOperator/assignmentLHSIsValue.ts(7 // array literals ['', ''] = value; + ~~~~~~~~ +!!! error TS2461: Type 'any' is not an array type. ~~ !!! error TS2364: Invalid left-hand side of assignment expression. ~~ diff --git a/tests/cases/fourslash/completionAfterDotDotDot.ts b/tests/cases/fourslash/completionAfterDotDotDot.ts new file mode 100644 index 00000000000..10c2d39b8cb --- /dev/null +++ b/tests/cases/fourslash/completionAfterDotDotDot.ts @@ -0,0 +1,6 @@ +/// + +////.../**/ + +goTo.marker(); +verify.not.completionListIsEmpty(); \ No newline at end of file diff --git a/tests/cases/fourslash/completionInIncompleteCallExpression.ts b/tests/cases/fourslash/completionInIncompleteCallExpression.ts new file mode 100644 index 00000000000..eda8cf14378 --- /dev/null +++ b/tests/cases/fourslash/completionInIncompleteCallExpression.ts @@ -0,0 +1,9 @@ +/// + +////var array = [1, 2, 4] +////function a4(x, y, z) { } +////a4(.../**/ + + +goTo.marker(); +verify.not.completionListIsEmpty(); \ No newline at end of file