diff --git a/src/services/services.ts b/src/services/services.ts index 49490756470..72b4b617b3a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3393,6 +3393,7 @@ namespace ts { case SyntaxKind.SlashToken: case SyntaxKind.Identifier: case SyntaxKind.JsxAttribute: + case SyntaxKind.JsxSpreadAttribute: if (parent && (parent.kind === SyntaxKind.JsxSelfClosingElement || parent.kind === SyntaxKind.JsxOpeningElement)) { return parent; } @@ -3402,7 +3403,7 @@ namespace ts { // its parent is a JsxExpression, whose parent is a JsxAttribute, // whose parent is a JsxOpeningLikeElement case SyntaxKind.StringLiteral: - if (parent && parent.kind === SyntaxKind.JsxAttribute) { + if (parent && ((parent.kind === SyntaxKind.JsxAttribute) || (parent.kind === SyntaxKind.JsxSpreadAttribute))) { return parent.parent; } @@ -3412,11 +3413,15 @@ namespace ts { if (parent && parent.kind === SyntaxKind.JsxExpression && parent.parent && - parent.parent.kind === SyntaxKind.JsxAttribute) { + (parent.parent.kind === SyntaxKind.JsxAttribute)) { return parent.parent.parent; } + if (parent && parent.kind === SyntaxKind.JsxSpreadAttribute) { + return parent.parent; + } + break; } } diff --git a/tests/cases/fourslash/tsxCompletion7.ts b/tests/cases/fourslash/tsxCompletion7.ts new file mode 100644 index 00000000000..ca489b8e0c4 --- /dev/null +++ b/tests/cases/fourslash/tsxCompletion7.ts @@ -0,0 +1,17 @@ +/// + +//@Filename: file.tsx +//// declare module JSX { +//// interface Element { } +//// interface IntrinsicElements { +//// div: { ONE: string; TWO: number; } +//// } +//// } +//// let y = { ONE: '' }; +//// var x =
; + +goTo.marker(); + +verify.completionListContains("ONE"); +verify.completionListContains("TWO"); +verify.not.completionListAllowsNewIdentifier();