diff --git a/src/services/completions.ts b/src/services/completions.ts
index 1e74ea3bbf1..3edc1cc4f56 100644
--- a/src/services/completions.ts
+++ b/src/services/completions.ts
@@ -986,7 +986,10 @@ namespace ts.Completions {
break;
case SyntaxKind.Identifier:
// For `
` we don't want to treat this as a jsx inializer, instead it's the attribute name.
+ if (parent !== previousToken.parent &&
+ !(parent as JsxAttribute).initializer &&
+ findChildOfKind(parent, SyntaxKind.EqualsToken, sourceFile)) {
isJsxInitializer = previousToken as Identifier;
}
}
diff --git a/tests/cases/fourslash/completionsJsxAttribute.ts b/tests/cases/fourslash/completionsJsxAttribute.ts
index 75bf20c7488..c4d1513a6ee 100644
--- a/tests/cases/fourslash/completionsJsxAttribute.ts
+++ b/tests/cases/fourslash/completionsJsxAttribute.ts
@@ -8,15 +8,22 @@
//// interface IntrinsicElements {
//// div: {
//// /** Doc */
-//// foo: string
+//// foo: boolean;
+//// bar: string;
//// }
//// }
////}
////
////
;
-goTo.marker();
-verify.completionEntryDetailIs("foo", "(JSX attribute) foo: string", "Doc", "JSX attribute", []);
+const exact: ReadonlyArray = [
+ { name: "foo", kind: "JSX attribute", text: "(JSX attribute) foo: boolean", documentation: "Doc" },
+ { name: "bar", kind: "JSX attribute", text: "(JSX attribute) bar: string" },
+];
+verify.completions({ marker: "", exact });
edit.insert("f");
-verify.completionEntryDetailIs("foo", "(JSX attribute) foo: string", "Doc", "JSX attribute", []);
-
+verify.completions({ exact });
+edit.insert("oo ");
+verify.completions({ exact: exact[1] });
+edit.insert("b");
+verify.completions({ exact: exact[1] });