From fc1beb0b30c49c910eb9691e5aee17d0804dc414 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sat, 15 Apr 2023 13:39:23 -0700 Subject: [PATCH 1/2] Revert "feat(7411): JSX namespaced attribute syntax not supported (#47356)" This reverts commit 0c5be02dcc120de802e74bf502f5020cf2c0d4fb. --- src/compiler/checker.ts | 43 +++-- src/compiler/diagnosticMessages.json | 4 - src/compiler/emitter.ts | 9 - src/compiler/factory/nodeFactory.ts | 28 +-- src/compiler/factory/nodeTests.ts | 5 - src/compiler/parser.ts | 42 +---- src/compiler/scanner.ts | 13 ++ src/compiler/transformers/jsx.ts | 24 ++- src/compiler/types.ts | 28 +-- src/compiler/utilities.ts | 20 -- src/compiler/utilitiesPublic.ts | 4 +- src/compiler/visitorPublic.ts | 9 +- src/services/codefixes/fixAddMissingMember.ts | 3 +- src/services/completions.ts | 3 +- src/services/stringCompletions.ts | 3 +- .../reference/api/tsserverlibrary.d.ts | 174 ++++++++---------- tests/baselines/reference/api/typescript.d.ts | 174 ++++++++---------- ...NamespaceNamesQuestionableForms.errors.txt | 8 +- ...JsxNamespaceNamesQuestionableForms.symbols | 6 + ...ckJsxNamespaceNamesQuestionableForms.types | 18 +- .../reference/jsxEsprimaFbTestSuite.types | 7 +- .../jsxInvalidEsprimaTestSuite.errors.txt | 12 +- .../reference/jsxInvalidEsprimaTestSuite.js | 2 +- .../jsxInvalidEsprimaTestSuite.types | 10 +- .../jsxNamespacePrefixInName.errors.txt | 27 ++- .../reference/jsxNamespacePrefixInName.js | 6 +- .../jsxNamespacePrefixInName.symbols | 4 +- .../reference/jsxNamespacePrefixInName.types | 95 +++------- .../jsxNamespacePrefixInNameReact.errors.txt | 27 ++- .../jsxNamespacePrefixInNameReact.js | 6 +- .../jsxNamespacePrefixInNameReact.symbols | 4 +- .../jsxNamespacePrefixInNameReact.types | 95 +++------- .../jsxNamespacePrefixIntrinsics.errors.txt | 12 +- .../jsxNamespacePrefixIntrinsics.symbols | 5 + .../jsxNamespacePrefixIntrinsics.types | 19 +- .../reference/tsxNamespacedAttributeName1.js | 8 - .../tsxNamespacedAttributeName1.symbols | 9 - .../tsxNamespacedAttributeName1.types | 25 --- .../reference/tsxNamespacedAttributeName2.js | 10 - .../tsxNamespacedAttributeName2.symbols | 12 -- .../tsxNamespacedAttributeName2.types | 28 --- .../reference/tsxNamespacedTagName1.js | 12 -- .../reference/tsxNamespacedTagName1.symbols | 13 -- .../reference/tsxNamespacedTagName1.types | 33 ---- .../tsxNamespacedTagName2.errors.txt | 13 -- .../reference/tsxNamespacedTagName2.js | 14 -- .../reference/tsxNamespacedTagName2.symbols | 16 -- .../reference/tsxNamespacedTagName2.types | 36 ---- .../jsx/tsxNamespacedAttributeName1.tsx | 5 - .../jsx/tsxNamespacedAttributeName2.tsx | 6 - .../conformance/jsx/tsxNamespacedTagName1.tsx | 7 - .../conformance/jsx/tsxNamespacedTagName2.tsx | 8 - 52 files changed, 376 insertions(+), 828 deletions(-) delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName1.js delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName1.symbols delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName1.types delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName2.js delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName2.symbols delete mode 100644 tests/baselines/reference/tsxNamespacedAttributeName2.types delete mode 100644 tests/baselines/reference/tsxNamespacedTagName1.js delete mode 100644 tests/baselines/reference/tsxNamespacedTagName1.symbols delete mode 100644 tests/baselines/reference/tsxNamespacedTagName1.types delete mode 100644 tests/baselines/reference/tsxNamespacedTagName2.errors.txt delete mode 100644 tests/baselines/reference/tsxNamespacedTagName2.js delete mode 100644 tests/baselines/reference/tsxNamespacedTagName2.symbols delete mode 100644 tests/baselines/reference/tsxNamespacedTagName2.types delete mode 100644 tests/cases/conformance/jsx/tsxNamespacedAttributeName1.tsx delete mode 100644 tests/cases/conformance/jsx/tsxNamespacedAttributeName2.tsx delete mode 100644 tests/cases/conformance/jsx/tsxNamespacedTagName1.tsx delete mode 100644 tests/cases/conformance/jsx/tsxNamespacedTagName2.tsx diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5e9c72ec48319..918a7ac2c9a6e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -275,7 +275,6 @@ import { getEntityNameFromTypeNode, getErrorSpanForNode, getEscapedTextOfIdentifierOrLiteral, - getEscapedTextOfJsxAttributeName, getESModuleInterop, getExpandoInitializer, getExportAssignmentExpression, @@ -351,7 +350,6 @@ import { getSymbolNameForPrivateIdentifier, getTextOfIdentifierOrLiteral, getTextOfJSDocComment, - getTextOfJsxAttributeName, getTextOfNode, getTextOfPropertyName, getThisContainer, @@ -595,7 +593,6 @@ import { isJsxAttributeLike, isJsxAttributes, isJsxElement, - isJsxNamespacedName, isJsxOpeningElement, isJsxOpeningFragment, isJsxOpeningLikeElement, @@ -810,6 +807,7 @@ import { MappedTypeNode, MatchingKeys, maybeBind, + MemberName, MemberOverrideStatus, memoize, MetaProperty, @@ -13519,7 +13517,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { function isTypeInvalidDueToUnionDiscriminant(contextualType: Type, obj: ObjectLiteralExpression | JsxAttributes): boolean { const list = obj.properties as NodeArray; return list.some(property => { - const nameType = property.name && (isJsxNamespacedName(property.name) ? getStringLiteralType(getTextOfJsxAttributeName(property.name)) : getLiteralTypeFromPropertyName(property.name)); + const nameType = property.name && getLiteralTypeFromPropertyName(property.name); const name = nameType && isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined; const expected = name === undefined ? undefined : getTypeOfPropertyOfType(contextualType, name); return !!expected && isLiteralType(expected) && !isTypeAssignableTo(getTypeOfNode(property), expected); @@ -19592,8 +19590,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { function *generateJsxAttributes(node: JsxAttributes): ElaborationIterator { if (!length(node.properties)) return; for (const prop of node.properties) { - if (isJsxSpreadAttribute(prop) || isHyphenatedJsxName(getTextOfJsxAttributeName(prop.name))) continue; - yield { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(getTextOfJsxAttributeName(prop.name)) }; + if (isJsxSpreadAttribute(prop) || isHyphenatedJsxName(idText(prop.name))) continue; + yield { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(idText(prop.name)) }; } } @@ -29268,7 +29266,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (!attributesType || isTypeAny(attributesType)) { return undefined; } - return getTypeOfPropertyOfContextualType(attributesType, getEscapedTextOfJsxAttributeName(attribute.name)); + return getTypeOfPropertyOfContextualType(attributesType, attribute.name.escapedText); } else { return getContextualType(attribute.parent, contextFlags); @@ -30402,12 +30400,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { attributeSymbol.links.target = member; attributesTable.set(attributeSymbol.escapedName, attributeSymbol); allAttributesTable?.set(attributeSymbol.escapedName, attributeSymbol); - if (getEscapedTextOfJsxAttributeName(attributeDecl.name) === jsxChildrenPropertyName) { + if (attributeDecl.name.escapedText === jsxChildrenPropertyName) { explicitlySpecifyChildrenAttribute = true; } if (contextualType) { const prop = getPropertyOfType(contextualType, member.escapedName); - if (prop && prop.declarations && isDeprecatedSymbol(prop) && isIdentifier(attributeDecl.name)) { + if (prop && prop.declarations && isDeprecatedSymbol(prop)) { addDeprecatedSuggestion(attributeDecl.name, prop.declarations, attributeDecl.name.escapedText as string); } } @@ -47854,9 +47852,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } const { name, initializer } = attr; - const escapedText = getEscapedTextOfJsxAttributeName(name); - if (!seen.get(escapedText)) { - seen.set(escapedText, true); + if (!seen.get(name.escapedText)) { + seen.set(name.escapedText, true); } else { return grammarErrorOnNode(name, Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); @@ -47869,11 +47866,25 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function checkGrammarJsxName(node: JsxTagNameExpression) { - if (isPropertyAccessExpression(node) && isJsxNamespacedName(node.expression)) { - return grammarErrorOnNode(node.expression, Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names); + if (isPropertyAccessExpression(node)) { + let propName: JsxTagNameExpression = node; + do { + const check = checkGrammarJsxNestedIdentifier(propName.name); + if (check) { + return check; + } + propName = propName.expression; + } while (isPropertyAccessExpression(propName)); + const check = checkGrammarJsxNestedIdentifier(propName); + if (check) { + return check; + } } - if (isJsxNamespacedName(node) && getJSXTransformEnabled(compilerOptions) && !isIntrinsicJsxName(node.namespace.escapedText)) { - return grammarErrorOnNode(node, Diagnostics.React_components_cannot_include_JSX_namespace_names); + + function checkGrammarJsxNestedIdentifier(name: MemberName | ThisExpression) { + if (isIdentifier(name) && idText(name).indexOf(":") !== -1) { + return grammarErrorOnNode(name, Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names); + } } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index d5460a49e3928..7816d4ec7976e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2893,10 +2893,6 @@ "category": "Error", "code": 2638 }, - "React components cannot include JSX namespace names": { - "category": "Error", - "code": 2639 - }, "Cannot augment module '{0}' with value exports because it resolves to a non-module entity.": { "category": "Error", diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 16d111d3659be..d15e4de4be6e0 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -289,7 +289,6 @@ import { JsxEmit, JsxExpression, JsxFragment, - JsxNamespacedName, JsxOpeningElement, JsxOpeningFragment, JsxSelfClosingElement, @@ -2284,8 +2283,6 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri return emitJsxSelfClosingElement(node as JsxSelfClosingElement); case SyntaxKind.JsxFragment: return emitJsxFragment(node as JsxFragment); - case SyntaxKind.JsxNamespacedName: - return emitJsxNamespacedName(node as JsxNamespacedName); // Synthesized list case SyntaxKind.SyntaxList: @@ -4228,12 +4225,6 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri } } - function emitJsxNamespacedName(node: JsxNamespacedName) { - emitIdentifierName(node.namespace); - writePunctuation(":"); - emitIdentifierName(node.name); - } - function emitJsxTagName(node: JsxTagNameExpression) { if (node.kind === SyntaxKind.Identifier) { emitExpression(node); diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index 9399263537ad9..d4c3f2e345c6d 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -267,7 +267,6 @@ import { JSDocVariadicType, JsxAttribute, JsxAttributeLike, - JsxAttributeName, JsxAttributes, JsxAttributeValue, JsxChild, @@ -276,7 +275,6 @@ import { JsxElement, JsxExpression, JsxFragment, - JsxNamespacedName, JsxOpeningElement, JsxOpeningFragment, JsxSelfClosingElement, @@ -910,8 +908,6 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode updateJsxSpreadAttribute, createJsxExpression, updateJsxExpression, - createJsxNamespacedName, - updateJsxNamespacedName, createCaseClause, updateCaseClause, createDefaultClause, @@ -5586,7 +5582,7 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode } // @api - function createJsxAttribute(name: JsxAttributeName, initializer: JsxAttributeValue | undefined) { + function createJsxAttribute(name: Identifier, initializer: JsxAttributeValue | undefined) { const node = createBaseDeclaration(SyntaxKind.JsxAttribute); node.name = name; node.initializer = initializer; @@ -5598,7 +5594,7 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode } // @api - function updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer: JsxAttributeValue | undefined) { + function updateJsxAttribute(node: JsxAttribute, name: Identifier, initializer: JsxAttributeValue | undefined) { return node.name !== name || node.initializer !== initializer ? update(createJsxAttribute(name, initializer), node) @@ -5658,26 +5654,6 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode : node; } - // @api - function createJsxNamespacedName(namespace: Identifier, name: Identifier) { - const node = createBaseNode(SyntaxKind.JsxNamespacedName); - node.namespace = namespace; - node.name = name; - node.transformFlags |= - propagateChildFlags(node.namespace) | - propagateChildFlags(node.name) | - TransformFlags.ContainsJsx; - return node; - } - - // @api - function updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier) { - return node.namespace !== namespace - || node.name !== name - ? update(createJsxNamespacedName(namespace, name), node) - : node; - } - // // Clauses // diff --git a/src/compiler/factory/nodeTests.ts b/src/compiler/factory/nodeTests.ts index bfe0ec7de9fe6..54cbe50462c40 100644 --- a/src/compiler/factory/nodeTests.ts +++ b/src/compiler/factory/nodeTests.ts @@ -128,7 +128,6 @@ import { JsxElement, JsxExpression, JsxFragment, - JsxNamespacedName, JsxOpeningElement, JsxOpeningFragment, JsxSelfClosingElement, @@ -964,10 +963,6 @@ export function isJsxExpression(node: Node): node is JsxExpression { return node.kind === SyntaxKind.JsxExpression; } -export function isJsxNamespacedName(node: Node): node is JsxNamespacedName { - return node.kind === SyntaxKind.JsxNamespacedName; -} - // Clauses export function isCaseClause(node: Node): node is CaseClause { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 64257c7203935..e6912998b1665 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -221,7 +221,6 @@ import { JsxElement, JsxExpression, JsxFragment, - JsxNamespacedName, JsxOpeningElement, JsxOpeningFragment, JsxOpeningLikeElement, @@ -1031,10 +1030,6 @@ const forEachChildTable: ForEachChildTable = { [SyntaxKind.JsxClosingElement]: function forEachChildInJsxClosingElement(node: JsxClosingElement, cbNode: (node: Node) => T | undefined, _cbNodes?: (nodes: NodeArray) => T | undefined): T | undefined { return visitNode(cbNode, node.tagName); }, - [SyntaxKind.JsxNamespacedName]: function forEachChildInJsxNamespacedName(node: JsxNamespacedName, cbNode: (node: Node) => T | undefined, _cbNodes?: (nodes: NodeArray) => T | undefined): T | undefined { - return visitNode(cbNode, node.namespace) || - visitNode(cbNode, node.name); - }, [SyntaxKind.OptionalType]: forEachChildInOptionalRestOrJSDocParameterModifier, [SyntaxKind.RestType]: forEachChildInOptionalRestOrJSDocParameterModifier, [SyntaxKind.JSDocTypeExpression]: forEachChildInOptionalRestOrJSDocParameterModifier, @@ -6107,31 +6102,20 @@ namespace Parser { function parseJsxElementName(): JsxTagNameExpression { const pos = getNodePos(); + scanJsxIdentifier(); // JsxElement can have name in the form of // propertyAccessExpression // primaryExpression in the form of an identifier and "this" keyword // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword // We only want to consider "this" as a primaryExpression - let expression: JsxTagNameExpression = parseJsxTagName(); + let expression: JsxTagNameExpression = token() === SyntaxKind.ThisKeyword ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(SyntaxKind.DotToken)) { expression = finishNode(factoryCreatePropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos) as JsxTagNamePropertyAccess; } return expression; } - function parseJsxTagName(): Identifier | JsxNamespacedName | ThisExpression { - const pos = getNodePos(); - scanJsxIdentifier(); - - const isThis = token() === SyntaxKind.ThisKeyword; - const tagName = parseIdentifierName(); - if (parseOptional(SyntaxKind.ColonToken)) { - scanJsxIdentifier(); - return finishNode(factory.createJsxNamespacedName(tagName, parseIdentifierName()), pos); - } - return isThis ? finishNode(factory.createToken(SyntaxKind.ThisKeyword), pos) : tagName; - } - function parseJsxExpression(inExpressionContext: boolean): JsxExpression | undefined { const pos = getNodePos(); if (!parseExpected(SyntaxKind.OpenBraceToken)) { @@ -6164,8 +6148,9 @@ namespace Parser { return parseJsxSpreadAttribute(); } + scanJsxIdentifier(); const pos = getNodePos(); - return finishNode(factory.createJsxAttribute(parseJsxAttributeName(), parseJsxAttributeValue()), pos); + return finishNode(factory.createJsxAttribute(parseIdentifierName(), parseJsxAttributeValue()), pos); } function parseJsxAttributeValue(): JsxAttributeValue | undefined { @@ -6184,18 +6169,6 @@ namespace Parser { return undefined; } - function parseJsxAttributeName() { - const pos = getNodePos(); - scanJsxIdentifier(); - - const attrName = parseIdentifierName(); - if (parseOptional(SyntaxKind.ColonToken)) { - scanJsxIdentifier(); - return finishNode(factory.createJsxNamespacedName(attrName, parseIdentifierName()), pos); - } - return attrName; - } - function parseJsxSpreadAttribute(): JsxSpreadAttribute { const pos = getNodePos(); parseExpected(SyntaxKind.OpenBraceToken); @@ -10452,11 +10425,6 @@ export function tagNamesAreEquivalent(lhs: JsxTagNameExpression, rhs: JsxTagName return true; } - if (lhs.kind === SyntaxKind.JsxNamespacedName) { - return lhs.namespace.escapedText === (rhs as JsxNamespacedName).namespace.escapedText && - lhs.name.escapedText === (rhs as JsxNamespacedName).name.escapedText; - } - // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only // take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression // it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 9f539aec49d80..32860b744e080 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -2543,6 +2543,7 @@ export function createScanner(languageVersion: ScriptTarget, // everything after it to the token // Do note that this means that `scanJsxIdentifier` effectively _mutates_ the visible token without advancing to a new token // Any caller should be expecting this behavior and should only read the pos or token value after calling it. + let namespaceSeparator = false; while (pos < end) { const ch = text.charCodeAt(pos); if (ch === CharacterCodes.minus) { @@ -2550,12 +2551,24 @@ export function createScanner(languageVersion: ScriptTarget, pos++; continue; } + else if (ch === CharacterCodes.colon && !namespaceSeparator) { + tokenValue += ":"; + pos++; + namespaceSeparator = true; + token = SyntaxKind.Identifier; // swap from keyword kind to identifier kind + continue; + } const oldPos = pos; tokenValue += scanIdentifierParts(); // reuse `scanIdentifierParts` so unicode escapes are handled if (pos === oldPos) { break; } } + // Do not include a trailing namespace separator in the token, since this is against the spec. + if (tokenValue.slice(-1) === ":") { + tokenValue = tokenValue.slice(0, -1); + pos--; + } return getIdentifierToken(); } return token; diff --git a/src/compiler/transformers/jsx.ts b/src/compiler/transformers/jsx.ts index 52fa0bc564f74..4463613bf8a64 100644 --- a/src/compiler/transformers/jsx.ts +++ b/src/compiler/transformers/jsx.ts @@ -32,7 +32,6 @@ import { isJsxAttribute, isJsxElement, isJsxFragment, - isJsxNamespacedName, isJsxSelfClosingElement, isJsxSpreadAttribute, isLineBreak, @@ -263,7 +262,7 @@ export function transformJsx(context: TransformationContext): (x: SourceFile | B if (isJsxSpreadAttribute(elem) && (!isObjectLiteralExpression(elem.expression) || elem.expression.properties.some(isSpreadAssignment))) { spread = true; } - else if (spread && isJsxAttribute(elem) && isIdentifier(elem.name) && elem.name.escapedText === "key") { + else if (spread && isJsxAttribute(elem) && elem.name.escapedText === "key") { return true; } } @@ -640,15 +639,12 @@ export function transformJsx(context: TransformationContext): (x: SourceFile | B return getTagName(node.openingElement); } else { - const tagName = node.tagName; - if (isIdentifier(tagName) && isIntrinsicJsxName(tagName.escapedText)) { - return factory.createStringLiteral(idText(tagName)); - } - else if (isJsxNamespacedName(tagName)) { - return factory.createStringLiteral(idText(tagName.namespace) + ":" + idText(tagName.name)); + const name = node.tagName; + if (isIdentifier(name) && isIntrinsicJsxName(name.escapedText)) { + return factory.createStringLiteral(idText(name)); } else { - return createExpressionFromEntityName(factory, tagName); + return createExpressionFromEntityName(factory, name); } } } @@ -660,11 +656,13 @@ export function transformJsx(context: TransformationContext): (x: SourceFile | B */ function getAttributeName(node: JsxAttribute): StringLiteral | Identifier { const name = node.name; - if (isIdentifier(name)) { - const text = idText(name); - return (/^[A-Za-z_]\w*$/.test(text)) ? name : factory.createStringLiteral(text); + const text = idText(name); + if (/^[A-Za-z_]\w*$/.test(text)) { + return name; + } + else { + return factory.createStringLiteral(text); } - return factory.createStringLiteral(idText(name.namespace) + ":" + idText(name.name)); } function visitJsxExpression(node: JsxExpression) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f297ed469466e..80890b92df76b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -367,7 +367,6 @@ export const enum SyntaxKind { JsxAttributes, JsxSpreadAttribute, JsxExpression, - JsxNamespacedName, // Clauses CaseClause, @@ -1154,7 +1153,6 @@ export type HasChildren = | JsxAttributes | JsxSpreadAttribute | JsxExpression - | JsxNamespacedName | CaseClause | DefaultClause | HeritageClause @@ -3179,34 +3177,21 @@ export type JsxAttributeLike = | JsxSpreadAttribute ; -export type JsxAttributeName = - | Identifier - | JsxNamespacedName - ; - export type JsxTagNameExpression = | Identifier | ThisExpression | JsxTagNamePropertyAccess - | JsxNamespacedName ; export interface JsxTagNamePropertyAccess extends PropertyAccessExpression { readonly expression: JsxTagNameExpression; } -export interface JsxAttributes extends PrimaryExpression, Declaration { - readonly properties: NodeArray; +export interface JsxAttributes extends ObjectLiteralExpressionBase { readonly kind: SyntaxKind.JsxAttributes; readonly parent: JsxOpeningLikeElement; } -export interface JsxNamespacedName extends PrimaryExpression { - readonly kind: SyntaxKind.JsxNamespacedName; - readonly name: Identifier; - readonly namespace: Identifier; -} - /// The opening element of a ... JsxElement export interface JsxOpeningElement extends Expression { readonly kind: SyntaxKind.JsxOpeningElement; @@ -3244,10 +3229,10 @@ export interface JsxClosingFragment extends Expression { readonly parent: JsxFragment; } -export interface JsxAttribute extends Declaration { +export interface JsxAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxAttribute; readonly parent: JsxAttributes; - readonly name: JsxAttributeName; + readonly name: Identifier; /// JSX attribute initializers are optional; is sugar for readonly initializer?: JsxAttributeValue; } @@ -3261,7 +3246,6 @@ export type JsxAttributeValue = export interface JsxSpreadAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxSpreadAttribute; - readonly name: PropertyName; readonly parent: JsxAttributes; readonly expression: Expression; } @@ -8730,16 +8714,14 @@ export interface NodeFactory { createJsxOpeningFragment(): JsxOpeningFragment; createJsxJsxClosingFragment(): JsxClosingFragment; updateJsxFragment(node: JsxFragment, openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment; - createJsxAttribute(name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; - updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; + createJsxAttribute(name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; + updateJsxAttribute(node: JsxAttribute, name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; createJsxAttributes(properties: readonly JsxAttributeLike[]): JsxAttributes; updateJsxAttributes(node: JsxAttributes, properties: readonly JsxAttributeLike[]): JsxAttributes; createJsxSpreadAttribute(expression: Expression): JsxSpreadAttribute; updateJsxSpreadAttribute(node: JsxSpreadAttribute, expression: Expression): JsxSpreadAttribute; createJsxExpression(dotDotDotToken: DotDotDotToken | undefined, expression: Expression | undefined): JsxExpression; updateJsxExpression(node: JsxExpression, expression: Expression | undefined): JsxExpression; - createJsxNamespacedName(namespace: Identifier, name: Identifier): JsxNamespacedName; - updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier): JsxNamespacedName; // // Clauses diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index a4d7c936ec68e..6e4085a82ae27 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -355,7 +355,6 @@ import { JSDocTemplateTag, JSDocTypedefTag, JsonSourceFile, - JsxAttributeName, JsxChild, JsxElement, JsxEmit, @@ -2063,8 +2062,6 @@ export function entityNameToString(name: EntityNameOrEntityNameExpression | JSDo } case SyntaxKind.JSDocMemberName: return entityNameToString(name.left) + entityNameToString(name.right); - case SyntaxKind.JsxNamespacedName: - return entityNameToString(name.namespace) + ":" + entityNameToString(name.name); default: return Debug.assertNever(name); } @@ -10165,20 +10162,3 @@ export function tryGetJSDocSatisfiesTypeNode(node: Node) { const tag = getJSDocSatisfiesTag(node); return tag && tag.typeExpression && tag.typeExpression.type; } - -/** @internal */ -export function getEscapedTextOfJsxAttributeName(node: JsxAttributeName): __String { - return isIdentifier(node) ? node.escapedText : `${node.namespace.escapedText}:${idText(node.name)}` as __String; -} - -/** @internal */ -export function getTextOfJsxAttributeName(node: JsxAttributeName): string { - return isIdentifier(node) ? idText(node) : `${idText(node.namespace)}:${idText(node.name)}`; -} - -/** @internal */ -export function isJsxAttributeName(node: Node): node is JsxAttributeName { - const kind = node.kind; - return kind === SyntaxKind.Identifier - || kind === SyntaxKind.JsxNamespacedName; -} diff --git a/src/compiler/utilitiesPublic.ts b/src/compiler/utilitiesPublic.ts index 2a4a3d21a19c9..25114f2b96feb 100644 --- a/src/compiler/utilitiesPublic.ts +++ b/src/compiler/utilitiesPublic.ts @@ -1941,7 +1941,6 @@ function isLeftHandSideExpressionKind(kind: SyntaxKind): boolean { case SyntaxKind.JsxElement: case SyntaxKind.JsxSelfClosingElement: case SyntaxKind.JsxFragment: - case SyntaxKind.JsxNamespacedName: case SyntaxKind.TaggedTemplateExpression: case SyntaxKind.ArrayLiteralExpression: case SyntaxKind.ParenthesizedExpression: @@ -2407,8 +2406,7 @@ export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression const kind = node.kind; return kind === SyntaxKind.ThisKeyword || kind === SyntaxKind.Identifier - || kind === SyntaxKind.PropertyAccessExpression - || kind === SyntaxKind.JsxNamespacedName; + || kind === SyntaxKind.PropertyAccessExpression; } export function isJsxChild(node: Node): node is JsxChild { diff --git a/src/compiler/visitorPublic.ts b/src/compiler/visitorPublic.ts index 08475d5c0ae7a..0ae4957ffab32 100644 --- a/src/compiler/visitorPublic.ts +++ b/src/compiler/visitorPublic.ts @@ -46,7 +46,6 @@ import { isImportSpecifier, isImportTypeAssertionContainer, isJsxAttributeLike, - isJsxAttributeName, isJsxAttributes, isJsxChild, isJsxClosingElement, @@ -1430,12 +1429,6 @@ const visitEachChildTable: VisitEachChildTable = { Debug.checkDefined(nodeVisitor(node.tagName, visitor, isJsxTagNameExpression))); }, - [SyntaxKind.JsxNamespacedName]: function forEachChildInJsxNamespacedName(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { - return context.factory.updateJsxNamespacedName(node, - Debug.checkDefined(nodeVisitor(node.namespace, visitor, isIdentifier)), - Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier))); - }, - [SyntaxKind.JsxFragment]: function visitEachChildOfJsxFragment(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { return context.factory.updateJsxFragment(node, Debug.checkDefined(nodeVisitor(node.openingFragment, visitor, isJsxOpeningFragment)), @@ -1445,7 +1438,7 @@ const visitEachChildTable: VisitEachChildTable = { [SyntaxKind.JsxAttribute]: function visitEachChildOfJsxAttribute(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { return context.factory.updateJsxAttribute(node, - Debug.checkDefined(nodeVisitor(node.name, visitor, isJsxAttributeName)), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), nodeVisitor(node.initializer, visitor, isStringLiteralOrJsxExpression)); }, diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 2231cd0509a9b..3d46bc1511d2a 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -29,7 +29,6 @@ import { getCheckFlags, getClassLikeDeclarationOfSymbol, getEmitScriptTarget, - getEscapedTextOfJsxAttributeName, getFirstConstructorWithBody, getNodeId, getObjectFlags, @@ -743,7 +742,7 @@ function getUnmatchedAttributes(checker: TypeChecker, target: ScriptTarget, sour const seenNames = new Set<__String>(); for (const sourceProp of source.attributes.properties) { if (isJsxAttribute(sourceProp)) { - seenNames.add(getEscapedTextOfJsxAttributeName(sourceProp.name)); + seenNames.add(sourceProp.name.escapedText); } if (isJsxSpreadAttribute(sourceProp)) { const type = checker.getTypeAtLocation(sourceProp.expression); diff --git a/src/services/completions.ts b/src/services/completions.ts index f9fa8892e73f6..cb7ed3a5085a6 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -82,7 +82,6 @@ import { getEmitModuleResolutionKind, getEmitScriptTarget, getEscapedTextOfIdentifierOrLiteral, - getEscapedTextOfJsxAttributeName, getExportInfoMap, getFormatCodeSettingsForWriting, getJSDocParameterTags, @@ -4810,7 +4809,7 @@ function getCompletionData( } if (attr.kind === SyntaxKind.JsxAttribute) { - seenNames.add(getEscapedTextOfJsxAttributeName(attr.name)); + seenNames.add(attr.name.escapedText); } else if (isJsxSpreadAttribute(attr)) { setMembersDeclaredBySpreadAssignment(attr, membersDeclaredBySpreadAssignment); diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts index 61c23266701fa..7347c231344aa 100644 --- a/src/services/stringCompletions.ts +++ b/src/services/stringCompletions.ts @@ -59,7 +59,6 @@ import { getResolvePackageJsonExports, getSupportedExtensions, getSupportedExtensionsWithJsonIfResolveJsonModule, - getTextOfJsxAttributeName, getTokenAtPosition, hasIndexSignature, hasProperty, @@ -488,7 +487,7 @@ function getStringLiteralCompletionsFromSignature(call: CallLikeExpression, arg: if (!signatureHasRestParameter(candidate) && argumentInfo.argumentCount > candidate.parameters.length) return; let type = candidate.getTypeParameterAtPosition(argumentInfo.argumentIndex); if (isJsxOpeningLikeElement(call)) { - const propType = checker.getTypeOfPropertyOfType(type, getTextOfJsxAttributeName((editingArgument as JsxAttribute).name)); + const propType = checker.getTypeOfPropertyOfType(type, (editingArgument as JsxAttribute).name.text); if (propType) { type = propType; } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 7a7adbc8a0755..4bf70d659b1ff 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -4350,79 +4350,78 @@ declare namespace ts { JsxAttributes = 291, JsxSpreadAttribute = 292, JsxExpression = 293, - JsxNamespacedName = 294, - CaseClause = 295, - DefaultClause = 296, - HeritageClause = 297, - CatchClause = 298, - AssertClause = 299, - AssertEntry = 300, - ImportTypeAssertionContainer = 301, - PropertyAssignment = 302, - ShorthandPropertyAssignment = 303, - SpreadAssignment = 304, - EnumMember = 305, - /** @deprecated */ UnparsedPrologue = 306, - /** @deprecated */ UnparsedPrepend = 307, - /** @deprecated */ UnparsedText = 308, - /** @deprecated */ UnparsedInternalText = 309, - /** @deprecated */ UnparsedSyntheticReference = 310, - SourceFile = 311, - Bundle = 312, - /** @deprecated */ UnparsedSource = 313, - /** @deprecated */ InputFiles = 314, - JSDocTypeExpression = 315, - JSDocNameReference = 316, - JSDocMemberName = 317, - JSDocAllType = 318, - JSDocUnknownType = 319, - JSDocNullableType = 320, - JSDocNonNullableType = 321, - JSDocOptionalType = 322, - JSDocFunctionType = 323, - JSDocVariadicType = 324, - JSDocNamepathType = 325, - JSDoc = 326, + CaseClause = 294, + DefaultClause = 295, + HeritageClause = 296, + CatchClause = 297, + AssertClause = 298, + AssertEntry = 299, + ImportTypeAssertionContainer = 300, + PropertyAssignment = 301, + ShorthandPropertyAssignment = 302, + SpreadAssignment = 303, + EnumMember = 304, + /** @deprecated */ UnparsedPrologue = 305, + /** @deprecated */ UnparsedPrepend = 306, + /** @deprecated */ UnparsedText = 307, + /** @deprecated */ UnparsedInternalText = 308, + /** @deprecated */ UnparsedSyntheticReference = 309, + SourceFile = 310, + Bundle = 311, + /** @deprecated */ UnparsedSource = 312, + /** @deprecated */ InputFiles = 313, + JSDocTypeExpression = 314, + JSDocNameReference = 315, + JSDocMemberName = 316, + JSDocAllType = 317, + JSDocUnknownType = 318, + JSDocNullableType = 319, + JSDocNonNullableType = 320, + JSDocOptionalType = 321, + JSDocFunctionType = 322, + JSDocVariadicType = 323, + JSDocNamepathType = 324, + JSDoc = 325, /** @deprecated Use SyntaxKind.JSDoc */ - JSDocComment = 326, - JSDocText = 327, - JSDocTypeLiteral = 328, - JSDocSignature = 329, - JSDocLink = 330, - JSDocLinkCode = 331, - JSDocLinkPlain = 332, - JSDocTag = 333, - JSDocAugmentsTag = 334, - JSDocImplementsTag = 335, - JSDocAuthorTag = 336, - JSDocDeprecatedTag = 337, - JSDocClassTag = 338, - JSDocPublicTag = 339, - JSDocPrivateTag = 340, - JSDocProtectedTag = 341, - JSDocReadonlyTag = 342, - JSDocOverrideTag = 343, - JSDocCallbackTag = 344, - JSDocOverloadTag = 345, - JSDocEnumTag = 346, - JSDocParameterTag = 347, - JSDocReturnTag = 348, - JSDocThisTag = 349, - JSDocTypeTag = 350, - JSDocTemplateTag = 351, - JSDocTypedefTag = 352, - JSDocSeeTag = 353, - JSDocPropertyTag = 354, - JSDocThrowsTag = 355, - JSDocSatisfiesTag = 356, - SyntaxList = 357, - NotEmittedStatement = 358, - PartiallyEmittedExpression = 359, - CommaListExpression = 360, - MergeDeclarationMarker = 361, - EndOfDeclarationMarker = 362, - SyntheticReferenceExpression = 363, - Count = 364, + JSDocComment = 325, + JSDocText = 326, + JSDocTypeLiteral = 327, + JSDocSignature = 328, + JSDocLink = 329, + JSDocLinkCode = 330, + JSDocLinkPlain = 331, + JSDocTag = 332, + JSDocAugmentsTag = 333, + JSDocImplementsTag = 334, + JSDocAuthorTag = 335, + JSDocDeprecatedTag = 336, + JSDocClassTag = 337, + JSDocPublicTag = 338, + JSDocPrivateTag = 339, + JSDocProtectedTag = 340, + JSDocReadonlyTag = 341, + JSDocOverrideTag = 342, + JSDocCallbackTag = 343, + JSDocOverloadTag = 344, + JSDocEnumTag = 345, + JSDocParameterTag = 346, + JSDocReturnTag = 347, + JSDocThisTag = 348, + JSDocTypeTag = 349, + JSDocTemplateTag = 350, + JSDocTypedefTag = 351, + JSDocSeeTag = 352, + JSDocPropertyTag = 353, + JSDocThrowsTag = 354, + JSDocSatisfiesTag = 355, + SyntaxList = 356, + NotEmittedStatement = 357, + PartiallyEmittedExpression = 358, + CommaListExpression = 359, + MergeDeclarationMarker = 360, + EndOfDeclarationMarker = 361, + SyntheticReferenceExpression = 362, + Count = 363, FirstAssignment = 64, LastAssignment = 79, FirstCompoundAssignment = 65, @@ -4450,10 +4449,10 @@ declare namespace ts { FirstStatement = 242, LastStatement = 258, FirstNode = 165, - FirstJSDocNode = 315, - LastJSDocNode = 356, - FirstJSDocTagNode = 333, - LastJSDocTagNode = 356 + FirstJSDocNode = 314, + LastJSDocNode = 355, + FirstJSDocTagNode = 332, + LastJSDocTagNode = 355 } type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ShebangTrivia | SyntaxKind.ConflictMarkerTrivia; type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral; @@ -5361,21 +5360,14 @@ declare namespace ts { } type JsxOpeningLikeElement = JsxSelfClosingElement | JsxOpeningElement; type JsxAttributeLike = JsxAttribute | JsxSpreadAttribute; - type JsxAttributeName = Identifier | JsxNamespacedName; - type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess | JsxNamespacedName; + type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess; interface JsxTagNamePropertyAccess extends PropertyAccessExpression { readonly expression: JsxTagNameExpression; } - interface JsxAttributes extends PrimaryExpression, Declaration { - readonly properties: NodeArray; + interface JsxAttributes extends ObjectLiteralExpressionBase { readonly kind: SyntaxKind.JsxAttributes; readonly parent: JsxOpeningLikeElement; } - interface JsxNamespacedName extends PrimaryExpression { - readonly kind: SyntaxKind.JsxNamespacedName; - readonly name: Identifier; - readonly namespace: Identifier; - } interface JsxOpeningElement extends Expression { readonly kind: SyntaxKind.JsxOpeningElement; readonly parent: JsxElement; @@ -5403,16 +5395,15 @@ declare namespace ts { readonly kind: SyntaxKind.JsxClosingFragment; readonly parent: JsxFragment; } - interface JsxAttribute extends Declaration { + interface JsxAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxAttribute; readonly parent: JsxAttributes; - readonly name: JsxAttributeName; + readonly name: Identifier; readonly initializer?: JsxAttributeValue; } type JsxAttributeValue = StringLiteral | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; interface JsxSpreadAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxSpreadAttribute; - readonly name: PropertyName; readonly parent: JsxAttributes; readonly expression: Expression; } @@ -7949,16 +7940,14 @@ declare namespace ts { createJsxOpeningFragment(): JsxOpeningFragment; createJsxJsxClosingFragment(): JsxClosingFragment; updateJsxFragment(node: JsxFragment, openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment; - createJsxAttribute(name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; - updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; + createJsxAttribute(name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; + updateJsxAttribute(node: JsxAttribute, name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; createJsxAttributes(properties: readonly JsxAttributeLike[]): JsxAttributes; updateJsxAttributes(node: JsxAttributes, properties: readonly JsxAttributeLike[]): JsxAttributes; createJsxSpreadAttribute(expression: Expression): JsxSpreadAttribute; updateJsxSpreadAttribute(node: JsxSpreadAttribute, expression: Expression): JsxSpreadAttribute; createJsxExpression(dotDotDotToken: DotDotDotToken | undefined, expression: Expression | undefined): JsxExpression; updateJsxExpression(node: JsxExpression, expression: Expression | undefined): JsxExpression; - createJsxNamespacedName(namespace: Identifier, name: Identifier): JsxNamespacedName; - updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier): JsxNamespacedName; createCaseClause(expression: Expression, statements: readonly Statement[]): CaseClause; updateCaseClause(node: CaseClause, expression: Expression, statements: readonly Statement[]): CaseClause; createDefaultClause(statements: readonly Statement[]): DefaultClause; @@ -9029,7 +9018,6 @@ declare namespace ts { function isJsxAttributes(node: Node): node is JsxAttributes; function isJsxSpreadAttribute(node: Node): node is JsxSpreadAttribute; function isJsxExpression(node: Node): node is JsxExpression; - function isJsxNamespacedName(node: Node): node is JsxNamespacedName; function isCaseClause(node: Node): node is CaseClause; function isDefaultClause(node: Node): node is DefaultClause; function isHeritageClause(node: Node): node is HeritageClause; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index ff62845a28f2c..6acc0c5bc906e 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -338,79 +338,78 @@ declare namespace ts { JsxAttributes = 291, JsxSpreadAttribute = 292, JsxExpression = 293, - JsxNamespacedName = 294, - CaseClause = 295, - DefaultClause = 296, - HeritageClause = 297, - CatchClause = 298, - AssertClause = 299, - AssertEntry = 300, - ImportTypeAssertionContainer = 301, - PropertyAssignment = 302, - ShorthandPropertyAssignment = 303, - SpreadAssignment = 304, - EnumMember = 305, - /** @deprecated */ UnparsedPrologue = 306, - /** @deprecated */ UnparsedPrepend = 307, - /** @deprecated */ UnparsedText = 308, - /** @deprecated */ UnparsedInternalText = 309, - /** @deprecated */ UnparsedSyntheticReference = 310, - SourceFile = 311, - Bundle = 312, - /** @deprecated */ UnparsedSource = 313, - /** @deprecated */ InputFiles = 314, - JSDocTypeExpression = 315, - JSDocNameReference = 316, - JSDocMemberName = 317, - JSDocAllType = 318, - JSDocUnknownType = 319, - JSDocNullableType = 320, - JSDocNonNullableType = 321, - JSDocOptionalType = 322, - JSDocFunctionType = 323, - JSDocVariadicType = 324, - JSDocNamepathType = 325, - JSDoc = 326, + CaseClause = 294, + DefaultClause = 295, + HeritageClause = 296, + CatchClause = 297, + AssertClause = 298, + AssertEntry = 299, + ImportTypeAssertionContainer = 300, + PropertyAssignment = 301, + ShorthandPropertyAssignment = 302, + SpreadAssignment = 303, + EnumMember = 304, + /** @deprecated */ UnparsedPrologue = 305, + /** @deprecated */ UnparsedPrepend = 306, + /** @deprecated */ UnparsedText = 307, + /** @deprecated */ UnparsedInternalText = 308, + /** @deprecated */ UnparsedSyntheticReference = 309, + SourceFile = 310, + Bundle = 311, + /** @deprecated */ UnparsedSource = 312, + /** @deprecated */ InputFiles = 313, + JSDocTypeExpression = 314, + JSDocNameReference = 315, + JSDocMemberName = 316, + JSDocAllType = 317, + JSDocUnknownType = 318, + JSDocNullableType = 319, + JSDocNonNullableType = 320, + JSDocOptionalType = 321, + JSDocFunctionType = 322, + JSDocVariadicType = 323, + JSDocNamepathType = 324, + JSDoc = 325, /** @deprecated Use SyntaxKind.JSDoc */ - JSDocComment = 326, - JSDocText = 327, - JSDocTypeLiteral = 328, - JSDocSignature = 329, - JSDocLink = 330, - JSDocLinkCode = 331, - JSDocLinkPlain = 332, - JSDocTag = 333, - JSDocAugmentsTag = 334, - JSDocImplementsTag = 335, - JSDocAuthorTag = 336, - JSDocDeprecatedTag = 337, - JSDocClassTag = 338, - JSDocPublicTag = 339, - JSDocPrivateTag = 340, - JSDocProtectedTag = 341, - JSDocReadonlyTag = 342, - JSDocOverrideTag = 343, - JSDocCallbackTag = 344, - JSDocOverloadTag = 345, - JSDocEnumTag = 346, - JSDocParameterTag = 347, - JSDocReturnTag = 348, - JSDocThisTag = 349, - JSDocTypeTag = 350, - JSDocTemplateTag = 351, - JSDocTypedefTag = 352, - JSDocSeeTag = 353, - JSDocPropertyTag = 354, - JSDocThrowsTag = 355, - JSDocSatisfiesTag = 356, - SyntaxList = 357, - NotEmittedStatement = 358, - PartiallyEmittedExpression = 359, - CommaListExpression = 360, - MergeDeclarationMarker = 361, - EndOfDeclarationMarker = 362, - SyntheticReferenceExpression = 363, - Count = 364, + JSDocComment = 325, + JSDocText = 326, + JSDocTypeLiteral = 327, + JSDocSignature = 328, + JSDocLink = 329, + JSDocLinkCode = 330, + JSDocLinkPlain = 331, + JSDocTag = 332, + JSDocAugmentsTag = 333, + JSDocImplementsTag = 334, + JSDocAuthorTag = 335, + JSDocDeprecatedTag = 336, + JSDocClassTag = 337, + JSDocPublicTag = 338, + JSDocPrivateTag = 339, + JSDocProtectedTag = 340, + JSDocReadonlyTag = 341, + JSDocOverrideTag = 342, + JSDocCallbackTag = 343, + JSDocOverloadTag = 344, + JSDocEnumTag = 345, + JSDocParameterTag = 346, + JSDocReturnTag = 347, + JSDocThisTag = 348, + JSDocTypeTag = 349, + JSDocTemplateTag = 350, + JSDocTypedefTag = 351, + JSDocSeeTag = 352, + JSDocPropertyTag = 353, + JSDocThrowsTag = 354, + JSDocSatisfiesTag = 355, + SyntaxList = 356, + NotEmittedStatement = 357, + PartiallyEmittedExpression = 358, + CommaListExpression = 359, + MergeDeclarationMarker = 360, + EndOfDeclarationMarker = 361, + SyntheticReferenceExpression = 362, + Count = 363, FirstAssignment = 64, LastAssignment = 79, FirstCompoundAssignment = 65, @@ -438,10 +437,10 @@ declare namespace ts { FirstStatement = 242, LastStatement = 258, FirstNode = 165, - FirstJSDocNode = 315, - LastJSDocNode = 356, - FirstJSDocTagNode = 333, - LastJSDocTagNode = 356 + FirstJSDocNode = 314, + LastJSDocNode = 355, + FirstJSDocTagNode = 332, + LastJSDocTagNode = 355 } type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ShebangTrivia | SyntaxKind.ConflictMarkerTrivia; type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral; @@ -1349,21 +1348,14 @@ declare namespace ts { } type JsxOpeningLikeElement = JsxSelfClosingElement | JsxOpeningElement; type JsxAttributeLike = JsxAttribute | JsxSpreadAttribute; - type JsxAttributeName = Identifier | JsxNamespacedName; - type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess | JsxNamespacedName; + type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess; interface JsxTagNamePropertyAccess extends PropertyAccessExpression { readonly expression: JsxTagNameExpression; } - interface JsxAttributes extends PrimaryExpression, Declaration { - readonly properties: NodeArray; + interface JsxAttributes extends ObjectLiteralExpressionBase { readonly kind: SyntaxKind.JsxAttributes; readonly parent: JsxOpeningLikeElement; } - interface JsxNamespacedName extends PrimaryExpression { - readonly kind: SyntaxKind.JsxNamespacedName; - readonly name: Identifier; - readonly namespace: Identifier; - } interface JsxOpeningElement extends Expression { readonly kind: SyntaxKind.JsxOpeningElement; readonly parent: JsxElement; @@ -1391,16 +1383,15 @@ declare namespace ts { readonly kind: SyntaxKind.JsxClosingFragment; readonly parent: JsxFragment; } - interface JsxAttribute extends Declaration { + interface JsxAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxAttribute; readonly parent: JsxAttributes; - readonly name: JsxAttributeName; + readonly name: Identifier; readonly initializer?: JsxAttributeValue; } type JsxAttributeValue = StringLiteral | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; interface JsxSpreadAttribute extends ObjectLiteralElement { readonly kind: SyntaxKind.JsxSpreadAttribute; - readonly name: PropertyName; readonly parent: JsxAttributes; readonly expression: Expression; } @@ -3937,16 +3928,14 @@ declare namespace ts { createJsxOpeningFragment(): JsxOpeningFragment; createJsxJsxClosingFragment(): JsxClosingFragment; updateJsxFragment(node: JsxFragment, openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment; - createJsxAttribute(name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; - updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer: JsxAttributeValue | undefined): JsxAttribute; + createJsxAttribute(name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; + updateJsxAttribute(node: JsxAttribute, name: Identifier, initializer: JsxAttributeValue | undefined): JsxAttribute; createJsxAttributes(properties: readonly JsxAttributeLike[]): JsxAttributes; updateJsxAttributes(node: JsxAttributes, properties: readonly JsxAttributeLike[]): JsxAttributes; createJsxSpreadAttribute(expression: Expression): JsxSpreadAttribute; updateJsxSpreadAttribute(node: JsxSpreadAttribute, expression: Expression): JsxSpreadAttribute; createJsxExpression(dotDotDotToken: DotDotDotToken | undefined, expression: Expression | undefined): JsxExpression; updateJsxExpression(node: JsxExpression, expression: Expression | undefined): JsxExpression; - createJsxNamespacedName(namespace: Identifier, name: Identifier): JsxNamespacedName; - updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier): JsxNamespacedName; createCaseClause(expression: Expression, statements: readonly Statement[]): CaseClause; updateCaseClause(node: CaseClause, expression: Expression, statements: readonly Statement[]): CaseClause; createDefaultClause(statements: readonly Statement[]): DefaultClause; @@ -5017,7 +5006,6 @@ declare namespace ts { function isJsxAttributes(node: Node): node is JsxAttributes; function isJsxSpreadAttribute(node: Node): node is JsxSpreadAttribute; function isJsxExpression(node: Node): node is JsxExpression; - function isJsxNamespacedName(node: Node): node is JsxNamespacedName; function isCaseClause(node: Node): node is CaseClause; function isDefaultClause(node: Node): node is DefaultClause; function isHeritageClause(node: Node): node is HeritageClause; diff --git a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.errors.txt b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.errors.txt index 55a28e9330031..d758a3ed0c9b5 100644 --- a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.errors.txt +++ b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.errors.txt @@ -1,7 +1,9 @@ +tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx(12,2): error TS2304: Cannot find name 'b:c'. tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx(12,2): error TS2633: JSX property access expressions cannot include JSX namespace names +tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx(12,10): error TS2304: Cannot find name 'b:c'. -==== tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx (1 errors) ==== +==== tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx (3 errors) ==== declare namespace JSX { interface IntrinsicElements { 'this:b': any; @@ -15,5 +17,9 @@ tests/cases/conformance/jsx/checkJsxNamespaceNamesQuestionableForms.tsx(12,2): e ; ; ~~~ +!!! error TS2304: Cannot find name 'b:c'. + ~~~ !!! error TS2633: JSX property access expressions cannot include JSX namespace names + ~~~ +!!! error TS2304: Cannot find name 'b:c'. ; \ No newline at end of file diff --git a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.symbols b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.symbols index 9f2a5cb77ceef..405838180ce31 100644 --- a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.symbols +++ b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.symbols @@ -21,5 +21,11 @@ declare namespace JSX { } ; +>a:b : Symbol(JSX.IntrinsicElements['a:b'], Decl(checkJsxNamespaceNamesQuestionableForms.tsx, 5, 10)) +>a:b : Symbol(JSX.IntrinsicElements['a:b'], Decl(checkJsxNamespaceNamesQuestionableForms.tsx, 5, 10)) + ; ; +>this:b : Symbol(JSX.IntrinsicElements['this:b'], Decl(checkJsxNamespaceNamesQuestionableForms.tsx, 1, 33)) +>this:b : Symbol(JSX.IntrinsicElements['this:b'], Decl(checkJsxNamespaceNamesQuestionableForms.tsx, 1, 33)) + diff --git a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.types b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.types index ea6728210b671..9f99922032253 100644 --- a/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.types +++ b/tests/baselines/reference/checkJsxNamespaceNamesQuestionableForms.types @@ -18,26 +18,20 @@ declare namespace JSX { ; > : any ->a : any ->b : any ->a : any ->b : any +>a:b : any +>a:b : any ; > : any >b:c.x : any ->b : any ->c : any +>b:c : any >x : any >b:c.x : any ->b : any ->c : any +>b:c : any >x : any ; > : any ->this : any ->b : any ->this : any ->b : any +>this:b : any +>this:b : any diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.types b/tests/baselines/reference/jsxEsprimaFbTestSuite.types index 3731eac7a2374..4b48d7c378d53 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.types +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.types @@ -29,18 +29,13 @@ declare var value; ; > : any ->n : any ->a : any +>n:a : any >n:v : true ->n : any ->v : any {value} ; > {value} : any >a : any >n:foo : string ->n : any ->foo : any >value : any > : any >b : any diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt index f332ade0a3d52..cbe83ef6ece5a 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt @@ -35,7 +35,7 @@ tests/cases/conformance/jsx/17.tsx(1,2): error TS17008: JSX element 'a' has no c tests/cases/conformance/jsx/17.tsx(1,10): error TS1005: '; - ~ + ~ !!! error TS1003: Identifier expected. ==== tests/cases/conformance/jsx/3.tsx (5 errors) ==== <:a />; @@ -125,10 +127,14 @@ tests/cases/conformance/jsx/9.tsx(1,2): error TS2633: JSX property access expres ; ~ !!! error TS17002: Expected corresponding JSX closing tag for 'a:b'. -==== tests/cases/conformance/jsx/9.tsx (1 errors) ==== +==== tests/cases/conformance/jsx/9.tsx (3 errors) ==== ; ~~~ +!!! error TS2304: Cannot find name 'a:b'. + ~~~ !!! error TS2633: JSX property access expressions cannot include JSX namespace names + ~~~ +!!! error TS2304: Cannot find name 'a:b'. ==== tests/cases/conformance/jsx/10.tsx (6 errors) ==== ; ~ diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.js b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.js index 8c1d7dea1c27c..e0d10043838a8 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.js +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.js @@ -77,7 +77,7 @@ var x =
one
/* intervening comment */
two
;; //// [1.jsx] > ; //// [2.jsx] -; +; //// [3.jsx] < ; a / > ; diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types index e3bb4ff69559f..277d3da9da61b 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types @@ -11,7 +11,6 @@ declare var React: any; ; > : any >a : any -> : any === tests/cases/conformance/jsx/3.tsx === <:a />; @@ -52,20 +51,17 @@ declare var React: any; === tests/cases/conformance/jsx/8.tsx === ; > : any ->a : any ->b : any +>a:b : any >b : any === tests/cases/conformance/jsx/9.tsx === ; > : any >a:b.c : any ->a : any ->b : any +>a:b : any >c : any >a:b.c : any ->a : any ->b : any +>a:b : any >c : any === tests/cases/conformance/jsx/10.tsx === diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index b600af4c155a7..a983e8736b03c 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -15,10 +15,11 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,32): error TS1003: Identifi tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,68): error TS1005: '>' expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,73): error TS1005: ',' expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,74): error TS1109: Expression expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(21,27): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(21,29): error TS1005: '...' expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(21,29): error TS2698: Spread types may only be created from object types. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(21,21): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,26): error TS1003: Identifier expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,27): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,29): error TS1005: '...' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,29): error TS2698: Spread types may only be created from object types. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,21): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,22): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,25): error TS1005: ',' expected. @@ -26,12 +27,10 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,30): error TS2362: The left tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,38): error TS1005: ':' expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,41): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,42): error TS1109: Expression expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,29): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,31): error TS1005: '...' expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,31): error TS2698: Spread types may only be created from object types. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifier expected. -==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (31 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (30 errors) ==== var justElement1 = ; var justElement2 = ; var justElement3 = ; @@ -87,15 +86,17 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,31): error TS2698: Spread t var both3 = {"text"}; var endOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. + var endOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. ~ !!! error TS1003: Identifier expected. ~~~~~~~ !!! error TS1005: '...' expected. ~~~~~~~ !!! error TS2698: Spread types may only be created from object types. - var endOfIdent2 = ; - ~ -!!! error TS1003: Identifier expected. var beginOfIdent1 = <:a attr={"value"} />; ~ @@ -113,12 +114,8 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,31): error TS2698: Spread t ~ !!! error TS1109: Expression expected. var beginOfIdent2 = ; - ~ + ~ !!! error TS1003: Identifier expected. - ~~~~~~~ -!!! error TS1005: '...' expected. - ~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index 8952eea50106b..eca335921a34a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -50,9 +50,9 @@ var justAttribute3 = {"text"}; var both1 = ; var both2 = ; var both3 = {"text"}; -var endOfIdent1 = ; -var endOfIdent2 = ; +var endOfIdent1 = ; +var endOfIdent2 = ; var beginOfIdent1 = < , a, attr = { "value": } / > ; -var beginOfIdent2 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols index aaa19da28e0ce..876ffa59e06b2 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -68,10 +68,11 @@ var both3 = {"text"}; var endOfIdent1 = ; >endOfIdent1 : Symbol(endOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 20, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 20, 21)) var endOfIdent2 = ; >endOfIdent2 : Symbol(endOfIdent2, Decl(jsxNamespacePrefixInName.tsx, 21, 3)) ->attr: : Symbol(attr:, Decl(jsxNamespacePrefixInName.tsx, 21, 20)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 21, 20)) var beginOfIdent1 = <:a attr={"value"} />; >beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3)) @@ -81,6 +82,7 @@ var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent2 = ; >beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInName.tsx, 26, 3)) diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types index c86c34874c2d9..616ac016b7935 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.types +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -2,62 +2,50 @@ var justElement1 = ; >justElement1 : any > : any ->a : any ->element : any +>a:element : any var justElement2 = ; >justElement2 : any > : any ->a : any ->element : any ->a : any ->element : any +>a:element : any +>a:element : any var justElement3 = ; >justElement3 : any > : any ->a : any ->element : any +>a:element : any >attr : string >"value" : "value" ->a : any ->element : any +>a:element : any var justElement4 = {"text"}; >justElement4 : any >{"text"} : any ->a : any ->element : any +>a:element : any >"text" : "text" ->a : any ->element : any +>a:element : any var justElement5 = {"text"}; >justElement5 : any >{"text"} : any ->a : any ->element : any +>a:element : any >attr : string >"value" : "value" >"text" : "text" ->a : any ->element : any +>a:element : any var tooManySeparators1 = ; >tooManySeparators1 : any > : any ->a : any ->ele : any +>a:ele : any >ment : true var tooManySeparators2 = ; >tooManySeparators2 : any >a : any ->ele : any +>a:ele : any >ment : true ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -66,13 +54,11 @@ var tooManySeparators2 = ; var tooManySeparators3 = ; >tooManySeparators3 : any >a : any ->ele : any +>a:ele : any >ment : true >attr : string >"value" : "value" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -81,12 +67,10 @@ var tooManySeparators3 = ; var tooManySeparators4 = {"text"}; >tooManySeparators4 : any >{"text"}a : any ->ele : any +>a:ele : any >ment : true >"text" : "text" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -95,14 +79,12 @@ var tooManySeparators4 = {"text"}; var tooManySeparators5 = {"text"}; >tooManySeparators5 : any >{"text"}a : any ->ele : any +>a:ele : any >ment : true >attr : string >"value" : "value" >"text" : "text" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -113,8 +95,6 @@ var justAttribute1 = ; > : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" var justAttribute2 = ; @@ -122,8 +102,6 @@ var justAttribute2 = ; > : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >element : any @@ -132,8 +110,6 @@ var justAttribute3 = {"text"}; >{"text"} : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >"text" : "text" >element : any @@ -141,52 +117,39 @@ var justAttribute3 = {"text"}; var both1 = ; >both1 : any > : any ->a : any ->element : any +>a:element : any >a:attr : string ->a : any ->attr : any >"value" : "value" var both2 = ; >both2 : any > : any ->a : any ->element : any +>a:element : any >k:attr : string ->k : any ->attr : any >"value" : "value" ->a : any ->element : any +>a:element : any var both3 = {"text"}; >both3 : any >{"text"} : any ->a : any ->element : any +>a:element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >"text" : "text" ->a : any ->element : any +>a:element : any var endOfIdent1 = ; >endOfIdent1 : any > : any >a : any ->attr : any +>attr : string >"value" : "value" var endOfIdent2 = ; >endOfIdent2 : any > : any >a : any ->attr: : string ->attr : any -> : any +>attr : true >"value" : "value" var beginOfIdent1 = <:a attr={"value"} />; @@ -208,18 +171,16 @@ var beginOfIdent2 = ; >beginOfIdent2 : any > : any >a : any ->attr : any +>attr : string >"value" : "value" var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : any > : any ->ns : any ->Upcase : any +>ns:Upcase : any var upcaseComponent2 = ; // Parsed as instrinsic >upcaseComponent2 : any > : any ->Upcase : any ->element : any +>Upcase:element : any diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt index 9aa5eea9df2a8..bae65da057a4b 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt @@ -15,10 +15,11 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,32): error TS1003: Ide tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,68): error TS1005: '>' expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,73): error TS1005: ',' expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,74): error TS1109: Expression expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,27): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,29): error TS1005: '...' expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,29): error TS2698: Spread types may only be created from object types. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,21): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,26): error TS1003: Identifier expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,27): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,29): error TS1005: '...' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,29): error TS2698: Spread types may only be created from object types. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,21): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,22): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,25): error TS1005: ',' expected. @@ -26,12 +27,10 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,30): error TS2362: The tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,38): error TS1005: ':' expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,41): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,42): error TS1109: Expression expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,29): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,31): error TS1005: '...' expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,31): error TS2698: Spread types may only be created from object types. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,24): error TS1003: Identifier expected. -==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (31 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (30 errors) ==== declare var React: any; var justElement1 = ; @@ -89,15 +88,17 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,31): error TS2698: Spr var both3 = {"text"}; var endOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. + var endOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. ~ !!! error TS1003: Identifier expected. ~~~~~~~ !!! error TS1005: '...' expected. ~~~~~~~ !!! error TS2698: Spread types may only be created from object types. - var endOfIdent2 = ; - ~ -!!! error TS1003: Identifier expected. var beginOfIdent1 = <:a attr={"value"} />; ~ @@ -115,12 +116,8 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,31): error TS2698: Spr ~ !!! error TS1109: Expression expected. var beginOfIdent2 = ; - ~ + ~ !!! error TS1003: Identifier expected. - ~~~~~~~ -!!! error TS1005: '...' expected. - ~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js index 84158b12986f5..c0cee80308aac 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js @@ -63,9 +63,9 @@ var justAttribute3 = React.createElement("element", { "a:attr": "value" }, "text var both1 = React.createElement("a:element", { "a:attr": "value" }); var both2 = React.createElement("a:element", { "k:attr": "value" }); var both3 = React.createElement("a:element", { "a:attr": "value" }, "text"); -var endOfIdent1 = React.createElement("a:attr", __assign({}, "value")); -var endOfIdent2 = React.createElement("a", { "attr:": "value" }); +var endOfIdent1 = React.createElement("a", { attr: "value" }); +var endOfIdent2 = React.createElement("a", __assign({ attr: true }, "value")); var beginOfIdent1 = < , a, attr = { "value": } / > ; -var beginOfIdent2 = React.createElement("a:attr", __assign({}, "value")); +var beginOfIdent2 = React.createElement("a", { attr: "value" }); var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic var upcaseComponent2 = React.createElement("Upcase:element", null); // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols index e5b56ad08f5e8..34136573521b5 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols @@ -71,10 +71,11 @@ var both3 = {"text"}; var endOfIdent1 = ; >endOfIdent1 : Symbol(endOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 21)) var endOfIdent2 = ; >endOfIdent2 : Symbol(endOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 3)) ->attr: : Symbol(attr:, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 20)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 20)) var beginOfIdent1 = <:a attr={"value"} />; >beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3)) @@ -84,6 +85,7 @@ var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent2 = ; >beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24)) var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 3)) diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types index c177fc2e587fb..e67a617796670 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types @@ -5,62 +5,50 @@ declare var React: any; var justElement1 = ; >justElement1 : any > : any ->a : any ->element : any +>a:element : any var justElement2 = ; >justElement2 : any > : any ->a : any ->element : any ->a : any ->element : any +>a:element : any +>a:element : any var justElement3 = ; >justElement3 : any > : any ->a : any ->element : any +>a:element : any >attr : string >"value" : "value" ->a : any ->element : any +>a:element : any var justElement4 = {"text"}; >justElement4 : any >{"text"} : any ->a : any ->element : any +>a:element : any >"text" : "text" ->a : any ->element : any +>a:element : any var justElement5 = {"text"}; >justElement5 : any >{"text"} : any ->a : any ->element : any +>a:element : any >attr : string >"value" : "value" >"text" : "text" ->a : any ->element : any +>a:element : any var tooManySeparators1 = ; >tooManySeparators1 : any > : any ->a : any ->ele : any +>a:ele : any >ment : true var tooManySeparators2 = ; >tooManySeparators2 : any >a : any ->ele : any +>a:ele : any >ment : true ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -69,13 +57,11 @@ var tooManySeparators2 = ; var tooManySeparators3 = ; >tooManySeparators3 : any >a : any ->ele : any +>a:ele : any >ment : true >attr : string >"value" : "value" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -84,12 +70,10 @@ var tooManySeparators3 = ; var tooManySeparators4 = {"text"}; >tooManySeparators4 : any >{"text"}a : any ->ele : any +>a:ele : any >ment : true >"text" : "text" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -98,14 +82,12 @@ var tooManySeparators4 = {"text"}; var tooManySeparators5 = {"text"}; >tooManySeparators5 : any >{"text"}a : any ->ele : any +>a:ele : any >ment : true >attr : string >"value" : "value" >"text" : "text" ->a : any ->ele : any +>a:ele : any >ment : any >> : boolean > : any @@ -116,8 +98,6 @@ var justAttribute1 = ; > : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" var justAttribute2 = ; @@ -125,8 +105,6 @@ var justAttribute2 = ; > : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >element : any @@ -135,8 +113,6 @@ var justAttribute3 = {"text"}; >{"text"} : any >element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >"text" : "text" >element : any @@ -144,52 +120,39 @@ var justAttribute3 = {"text"}; var both1 = ; >both1 : any > : any ->a : any ->element : any +>a:element : any >a:attr : string ->a : any ->attr : any >"value" : "value" var both2 = ; >both2 : any > : any ->a : any ->element : any +>a:element : any >k:attr : string ->k : any ->attr : any >"value" : "value" ->a : any ->element : any +>a:element : any var both3 = {"text"}; >both3 : any >{"text"} : any ->a : any ->element : any +>a:element : any >a:attr : string ->a : any ->attr : any >"value" : "value" >"text" : "text" ->a : any ->element : any +>a:element : any var endOfIdent1 = ; >endOfIdent1 : any > : any >a : any ->attr : any +>attr : string >"value" : "value" var endOfIdent2 = ; >endOfIdent2 : any > : any >a : any ->attr: : string ->attr : any -> : any +>attr : true >"value" : "value" var beginOfIdent1 = <:a attr={"value"} />; @@ -211,18 +174,16 @@ var beginOfIdent2 = ; >beginOfIdent2 : any > : any >a : any ->attr : any +>attr : string >"value" : "value" var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : any > : any ->ns : any ->Upcase : any +>ns:Upcase : any var upcaseComponent2 = ; // Parsed as instrinsic >upcaseComponent2 : any > : any ->Upcase : any ->element : any +>Upcase:element : any diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt index c9a4a81eeeec1..22bacb161c5dd 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt @@ -1,7 +1,11 @@ tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(16,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. + Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. Did you mean '"ns:attribute"'? +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(17,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. + Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. -==== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx (1 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx (3 errors) ==== declare namespace JSX { interface IntrinsicElements { "ns:element": { @@ -20,5 +24,11 @@ tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,18): error TS2339: Prop ~~~~~~~~~~~ !!! error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. const invalid2 = ; + ~~~~~~~~~ +!!! error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. +!!! error TS2322: Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. Did you mean '"ns:attribute"'? const invalid3 = ; + ~~~~~~~~~~ +!!! error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. +!!! error TS2322: Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols index 31ef8f7b2db0b..b12b339ca223a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols @@ -22,22 +22,27 @@ declare namespace JSX { const valid = ; >valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) >ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 25)) const validUpcase1 = ; >validUpcase1 : Symbol(validUpcase1, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 5)) +>ns:NamespacedUpcaseAlsoIntrinsic : Symbol(JSX.IntrinsicElements["ns:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 4, 6)) const validUpcase2 = ; >validUpcase2 : Symbol(validUpcase2, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) +>NS:NamespacedUpcaseAlsoIntrinsic : Symbol(JSX.IntrinsicElements["NS:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 5, 44)) const invalid1 = ; >invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 5)) const invalid2 = ; >invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 15, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) >attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 15, 28)) const invalid3 = ; >invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 16, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) >ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 16, 28)) diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types index 1b4f542baee5d..962128ca2f41a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types @@ -19,23 +19,18 @@ declare namespace JSX { const valid = ; >valid : any > : any ->ns : any ->element : any +>ns:element : any >ns:attribute : string ->ns : any ->attribute : any const validUpcase1 = ; >validUpcase1 : any > : any ->ns : any ->NamespacedUpcaseAlsoIntrinsic : any +>ns:NamespacedUpcaseAlsoIntrinsic : any const validUpcase2 = ; >validUpcase2 : any > : any ->NS : any ->NamespacedUpcaseAlsoIntrinsic : any +>NS:NamespacedUpcaseAlsoIntrinsic : any const invalid1 = ; >invalid1 : any @@ -45,16 +40,12 @@ const invalid1 = ; const invalid2 = ; >invalid2 : any > : any ->ns : any ->element : any +>ns:element : any >attribute : string const invalid3 = ; >invalid3 : any > : any ->ns : any ->element : any +>ns:element : any >ns:invalid : string ->ns : any ->invalid : any diff --git a/tests/baselines/reference/tsxNamespacedAttributeName1.js b/tests/baselines/reference/tsxNamespacedAttributeName1.js deleted file mode 100644 index 736243791ff48..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName1.js +++ /dev/null @@ -1,8 +0,0 @@ -//// [a.tsx] -const a = ; -const b = ; - - -//// [a.jsx] -var a = ; -var b = ; diff --git a/tests/baselines/reference/tsxNamespacedAttributeName1.symbols b/tests/baselines/reference/tsxNamespacedAttributeName1.symbols deleted file mode 100644 index 3256bddfb67d2..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName1.symbols +++ /dev/null @@ -1,9 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -const a = ; ->a : Symbol(a, Decl(a.tsx, 0, 5)) ->a:b : Symbol(a:b, Decl(a.tsx, 0, 19)) - -const b = ; ->b : Symbol(b, Decl(a.tsx, 1, 5)) ->a:b : Symbol(a:b, Decl(a.tsx, 1, 21)) - diff --git a/tests/baselines/reference/tsxNamespacedAttributeName1.types b/tests/baselines/reference/tsxNamespacedAttributeName1.types deleted file mode 100644 index 4ab13055b7613..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName1.types +++ /dev/null @@ -1,25 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -const a = ; ->a : error -> : error ->svg : error ->path : error ->a:b : number ->a : error ->b : error ->1 : 1 ->svg : error ->path : error - -const b = ; ->b : error -> : error ->svg : error ->path : error ->a:b : number ->a : error ->b : error ->1 : 1 ->svg : error ->path : error - diff --git a/tests/baselines/reference/tsxNamespacedAttributeName2.js b/tests/baselines/reference/tsxNamespacedAttributeName2.js deleted file mode 100644 index a99853e5e96dc..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName2.js +++ /dev/null @@ -1,10 +0,0 @@ -//// [a.tsx] -declare var React: any; - -const a = ; -const b = ; - - -//// [a.js] -var a = React.createElement("svg:path", { "a:b": 1 }); -var b = React.createElement("svg:path", { "a:b": 1 }); diff --git a/tests/baselines/reference/tsxNamespacedAttributeName2.symbols b/tests/baselines/reference/tsxNamespacedAttributeName2.symbols deleted file mode 100644 index ba9168814e5db..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName2.symbols +++ /dev/null @@ -1,12 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -declare var React: any; ->React : Symbol(React, Decl(a.tsx, 0, 11)) - -const a = ; ->a : Symbol(a, Decl(a.tsx, 2, 5)) ->a:b : Symbol(a:b, Decl(a.tsx, 2, 19)) - -const b = ; ->b : Symbol(b, Decl(a.tsx, 3, 5)) ->a:b : Symbol(a:b, Decl(a.tsx, 3, 21)) - diff --git a/tests/baselines/reference/tsxNamespacedAttributeName2.types b/tests/baselines/reference/tsxNamespacedAttributeName2.types deleted file mode 100644 index 9415a504a8f68..0000000000000 --- a/tests/baselines/reference/tsxNamespacedAttributeName2.types +++ /dev/null @@ -1,28 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -declare var React: any; ->React : any - -const a = ; ->a : error -> : error ->svg : error ->path : error ->a:b : number ->a : error ->b : error ->1 : 1 ->svg : error ->path : error - -const b = ; ->b : error -> : error ->svg : error ->path : error ->a:b : number ->a : error ->b : error ->1 : 1 ->svg : error ->path : error - diff --git a/tests/baselines/reference/tsxNamespacedTagName1.js b/tests/baselines/reference/tsxNamespacedTagName1.js deleted file mode 100644 index 8fe1db6f88a26..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName1.js +++ /dev/null @@ -1,12 +0,0 @@ -//// [a.tsx] -const a = ; -const b = ; -const c = ; -const d = ; - - -//// [a.jsx] -var a = ; -var b = ; -var c = ; -var d = ; diff --git a/tests/baselines/reference/tsxNamespacedTagName1.symbols b/tests/baselines/reference/tsxNamespacedTagName1.symbols deleted file mode 100644 index da528e4be8af6..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName1.symbols +++ /dev/null @@ -1,13 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -const a = ; ->a : Symbol(a, Decl(a.tsx, 0, 5)) - -const b = ; ->b : Symbol(b, Decl(a.tsx, 1, 5)) - -const c = ; ->c : Symbol(c, Decl(a.tsx, 2, 5)) - -const d = ; ->d : Symbol(d, Decl(a.tsx, 3, 5)) - diff --git a/tests/baselines/reference/tsxNamespacedTagName1.types b/tests/baselines/reference/tsxNamespacedTagName1.types deleted file mode 100644 index c1ae229108065..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName1.types +++ /dev/null @@ -1,33 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -const a = ; ->a : error -> : error ->svg : error ->path : error ->svg : error ->path : error - -const b = ; ->b : error -> : error ->svg : error ->path : error ->svg : error ->path : error - -const c = ; ->c : error -> : error ->A : error ->foo : error ->A : error ->foo : error - -const d = ; ->d : error -> : error ->a : error ->foo : error ->a : error ->foo : error - diff --git a/tests/baselines/reference/tsxNamespacedTagName2.errors.txt b/tests/baselines/reference/tsxNamespacedTagName2.errors.txt deleted file mode 100644 index d1cefe79cccaf..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName2.errors.txt +++ /dev/null @@ -1,13 +0,0 @@ -tests/cases/conformance/jsx/a.tsx(5,12): error TS2639: React components cannot include JSX namespace names - - -==== tests/cases/conformance/jsx/a.tsx (1 errors) ==== - declare var React: any; - - const a = ; - const b = ; - const c = ; - ~~~~~ -!!! error TS2639: React components cannot include JSX namespace names - const d = ; - \ No newline at end of file diff --git a/tests/baselines/reference/tsxNamespacedTagName2.js b/tests/baselines/reference/tsxNamespacedTagName2.js deleted file mode 100644 index 415b4bf70cebb..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName2.js +++ /dev/null @@ -1,14 +0,0 @@ -//// [a.tsx] -declare var React: any; - -const a = ; -const b = ; -const c = ; -const d = ; - - -//// [a.js] -var a = React.createElement("svg:path", null); -var b = React.createElement("svg:path", null); -var c = React.createElement("A:foo", null); -var d = React.createElement("a:foo", null); diff --git a/tests/baselines/reference/tsxNamespacedTagName2.symbols b/tests/baselines/reference/tsxNamespacedTagName2.symbols deleted file mode 100644 index 46adee08a03f4..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName2.symbols +++ /dev/null @@ -1,16 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -declare var React: any; ->React : Symbol(React, Decl(a.tsx, 0, 11)) - -const a = ; ->a : Symbol(a, Decl(a.tsx, 2, 5)) - -const b = ; ->b : Symbol(b, Decl(a.tsx, 3, 5)) - -const c = ; ->c : Symbol(c, Decl(a.tsx, 4, 5)) - -const d = ; ->d : Symbol(d, Decl(a.tsx, 5, 5)) - diff --git a/tests/baselines/reference/tsxNamespacedTagName2.types b/tests/baselines/reference/tsxNamespacedTagName2.types deleted file mode 100644 index c90a5aaedc127..0000000000000 --- a/tests/baselines/reference/tsxNamespacedTagName2.types +++ /dev/null @@ -1,36 +0,0 @@ -=== tests/cases/conformance/jsx/a.tsx === -declare var React: any; ->React : any - -const a = ; ->a : any -> : any ->svg : any ->path : any ->svg : any ->path : any - -const b = ; ->b : any -> : any ->svg : any ->path : any ->svg : any ->path : any - -const c = ; ->c : any -> : any ->A : any ->foo : any ->A : any ->foo : any - -const d = ; ->d : any -> : any ->a : any ->foo : any ->a : any ->foo : any - diff --git a/tests/cases/conformance/jsx/tsxNamespacedAttributeName1.tsx b/tests/cases/conformance/jsx/tsxNamespacedAttributeName1.tsx deleted file mode 100644 index 076556145f4ac..0000000000000 --- a/tests/cases/conformance/jsx/tsxNamespacedAttributeName1.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// @jsx: preserve -// @filename: a.tsx - -const a = ; -const b = ; diff --git a/tests/cases/conformance/jsx/tsxNamespacedAttributeName2.tsx b/tests/cases/conformance/jsx/tsxNamespacedAttributeName2.tsx deleted file mode 100644 index e9b92585d119b..0000000000000 --- a/tests/cases/conformance/jsx/tsxNamespacedAttributeName2.tsx +++ /dev/null @@ -1,6 +0,0 @@ -// @jsx: react -// @filename: a.tsx -declare var React: any; - -const a = ; -const b = ; diff --git a/tests/cases/conformance/jsx/tsxNamespacedTagName1.tsx b/tests/cases/conformance/jsx/tsxNamespacedTagName1.tsx deleted file mode 100644 index ad03e0faab01c..0000000000000 --- a/tests/cases/conformance/jsx/tsxNamespacedTagName1.tsx +++ /dev/null @@ -1,7 +0,0 @@ -// @jsx: preserve -// @filename: a.tsx - -const a = ; -const b = ; -const c = ; -const d = ; diff --git a/tests/cases/conformance/jsx/tsxNamespacedTagName2.tsx b/tests/cases/conformance/jsx/tsxNamespacedTagName2.tsx deleted file mode 100644 index b5b06d748a9e3..0000000000000 --- a/tests/cases/conformance/jsx/tsxNamespacedTagName2.tsx +++ /dev/null @@ -1,8 +0,0 @@ -// @jsx: react -// @filename: a.tsx -declare var React: any; - -const a = ; -const b = ; -const c = ; -const d = ; From a674d0b335d42e3df023e12a35653ff678eac85a Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Sat, 15 Apr 2023 14:27:30 -0700 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A4=96=20Pick=20PR=20#53784=20([test]?= =?UTF-8?q?=20Intrinsics=20with=20colon=20no=20lon...)=20into=20revert-473?= =?UTF-8?q?56-feat/7411=20(#53793)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: eps1lon --- .../reference/jsxElementType.errors.txt | 11 ++++++++ tests/baselines/reference/jsxElementType.js | 12 ++++++++ .../reference/jsxElementType.symbols | 28 +++++++++++++++++-- .../baselines/reference/jsxElementType.types | 21 ++++++++++++++ tests/cases/compiler/jsxElementType.tsx | 11 ++++++++ 5 files changed, 80 insertions(+), 3 deletions(-) diff --git a/tests/baselines/reference/jsxElementType.errors.txt b/tests/baselines/reference/jsxElementType.errors.txt index ddd2efe19cce7..7d18352e01ff5 100644 --- a/tests/baselines/reference/jsxElementType.errors.txt +++ b/tests/baselines/reference/jsxElementType.errors.txt @@ -197,4 +197,15 @@ tests/cases/compiler/jsxElementType.tsx(99,2): error TS2304: Cannot find name 'U ; ~~~~~~~~~~ !!! error TS2304: Cannot find name 'Unresolved'. + + // regression test for intrinsic containing `:` + declare global { + namespace JSX { + interface IntrinsicElements { + ['fbt:enum']: { knownProp: string }; + } + } + } + + ; \ No newline at end of file diff --git a/tests/baselines/reference/jsxElementType.js b/tests/baselines/reference/jsxElementType.js index 13986b0c62e90..2ec2559762e3f 100644 --- a/tests/baselines/reference/jsxElementType.js +++ b/tests/baselines/reference/jsxElementType.js @@ -98,6 +98,17 @@ function f1 React.ReactElement>(Component: T) { ; ; + +// regression test for intrinsic containing `:` +declare global { + namespace JSX { + interface IntrinsicElements { + ['fbt:enum']: { knownProp: string }; + } + } +} + +; //// [jsxElementType.js] @@ -231,3 +242,4 @@ function f1(Component) { } React.createElement(Unresolved, null); React.createElement(Unresolved, { foo: "abc" }); +React.createElement("fbt:enum", { knownProp: "accepted", unknownProp: "rejected" }); diff --git a/tests/baselines/reference/jsxElementType.symbols b/tests/baselines/reference/jsxElementType.symbols index c932009d84a1f..8aa9e262898ed 100644 --- a/tests/baselines/reference/jsxElementType.symbols +++ b/tests/baselines/reference/jsxElementType.symbols @@ -49,17 +49,17 @@ type NewReactJSXElementConstructor

= >P : Symbol(P, Decl(jsxElementType.tsx, 16, 35)) declare global { ->global : Symbol(global, Decl(jsxElementType.tsx, 18, 48)) +>global : Symbol(global, Decl(jsxElementType.tsx, 18, 48), Decl(jsxElementType.tsx, 98, 25)) namespace JSX { ->JSX : Symbol(JSX, Decl(react16.d.ts, 2493, 12), Decl(jsxElementType.tsx, 20, 16)) +>JSX : Symbol(JSX, Decl(react16.d.ts, 2493, 12), Decl(jsxElementType.tsx, 20, 16), Decl(jsxElementType.tsx, 101, 16)) type ElementType = string | NewReactJSXElementConstructor; >ElementType : Symbol(ElementType, Decl(jsxElementType.tsx, 21, 17)) >NewReactJSXElementConstructor : Symbol(NewReactJSXElementConstructor, Decl(jsxElementType.tsx, 13, 30)) interface IntrinsicElements { ->IntrinsicElements : Symbol(IntrinsicElements, Decl(react16.d.ts, 2514, 86), Decl(jsxElementType.tsx, 22, 67)) +>IntrinsicElements : Symbol(IntrinsicElements, Decl(react16.d.ts, 2514, 86), Decl(jsxElementType.tsx, 22, 67), Decl(jsxElementType.tsx, 102, 17)) ['my-custom-element']: React.DOMAttributes; >['my-custom-element'] : Symbol(IntrinsicElements['my-custom-element'], Decl(jsxElementType.tsx, 23, 33)) @@ -272,3 +272,25 @@ function f1 React.ReactElement>(Component: T) { ; >foo : Symbol(foo, Decl(jsxElementType.tsx, 98, 11)) +// regression test for intrinsic containing `:` +declare global { +>global : Symbol(global, Decl(jsxElementType.tsx, 18, 48), Decl(jsxElementType.tsx, 98, 25)) + + namespace JSX { +>JSX : Symbol(JSX, Decl(react16.d.ts, 2493, 12), Decl(jsxElementType.tsx, 20, 16), Decl(jsxElementType.tsx, 101, 16)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(react16.d.ts, 2514, 86), Decl(jsxElementType.tsx, 22, 67), Decl(jsxElementType.tsx, 102, 17)) + + ['fbt:enum']: { knownProp: string }; +>['fbt:enum'] : Symbol(IntrinsicElements['fbt:enum'], Decl(jsxElementType.tsx, 103, 33)) +>'fbt:enum' : Symbol(IntrinsicElements['fbt:enum'], Decl(jsxElementType.tsx, 103, 33)) +>knownProp : Symbol(knownProp, Decl(jsxElementType.tsx, 104, 21)) + } + } +} + +; +>knownProp : Symbol(knownProp, Decl(jsxElementType.tsx, 109, 9)) +>unknownProp : Symbol(unknownProp, Decl(jsxElementType.tsx, 109, 30)) + diff --git a/tests/baselines/reference/jsxElementType.types b/tests/baselines/reference/jsxElementType.types index 4e9a5a9a8ccb6..e9bf40a419934 100644 --- a/tests/baselines/reference/jsxElementType.types +++ b/tests/baselines/reference/jsxElementType.types @@ -290,3 +290,24 @@ function f1 React.ReactElement>(Component: T) { >Unresolved : any >foo : string +// regression test for intrinsic containing `:` +declare global { +>global : any + + namespace JSX { + interface IntrinsicElements { + ['fbt:enum']: { knownProp: string }; +>['fbt:enum'] : { knownProp: string; } +>'fbt:enum' : "fbt:enum" +>knownProp : string + } + } +} + +; +> : JSX.Element +>fbt : any +>enum : any +>knownProp : string +>unknownProp : string + diff --git a/tests/cases/compiler/jsxElementType.tsx b/tests/cases/compiler/jsxElementType.tsx index 75585a2d99a43..da81a65eb3698 100644 --- a/tests/cases/compiler/jsxElementType.tsx +++ b/tests/cases/compiler/jsxElementType.tsx @@ -99,3 +99,14 @@ function f1 React.ReactElement>(Component: T) { ; ; + +// regression test for intrinsic containing `:` +declare global { + namespace JSX { + interface IntrinsicElements { + ['fbt:enum']: { knownProp: string }; + } + } +} + +;