Skip to content

Commit 8b7664a

Browse files
authored
Generate more correct property name nodes in declaration emit (#34741)
* Generate more correct property name nodes in declaration emit * Silly only-on-CI lint rule T.T
1 parent d28672d commit 8b7664a

File tree

237 files changed

+1030
-927
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

237 files changed

+1030
-927
lines changed

src/compiler/checker.ts

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4258,9 +4258,9 @@ namespace ts {
42584258
}
42594259
}
42604260
}
4261-
const propertyName = symbolToName(propertySymbol, context, SymbolFlags.Value, /*expectsIdentifier*/ true);
4262-
context.approximateLength += (symbolName(propertySymbol).length + 1);
42634261
context.enclosingDeclaration = saveEnclosingDeclaration;
4262+
const propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
4263+
context.approximateLength += (symbolName(propertySymbol).length + 1);
42644264
const optionalToken = propertySymbol.flags & SymbolFlags.Optional ? createToken(SyntaxKind.QuestionToken) : undefined;
42654265
if (propertySymbol.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(propertyType).length && !isReadonlySymbol(propertySymbol)) {
42664266
const signatures = getSignaturesOfType(filterType(propertyType, t => !(t.flags & TypeFlags.Undefined)), SignatureKind.Call);
@@ -4892,23 +4892,38 @@ namespace ts {
48924892
}
48934893
}
48944894

4895+
function isSingleQuotedStringNamed(d: Declaration) {
4896+
const name = getNameOfDeclaration(d);
4897+
if (name && isStringLiteral(name) && (
4898+
name.singleQuote ||
4899+
(!nodeIsSynthesized(name) && startsWith(getTextOfNode(name, /*includeTrivia*/ false), "'"))
4900+
)) {
4901+
return true;
4902+
}
4903+
return false;
4904+
}
4905+
48954906
function getPropertyNameNodeForSymbol(symbol: Symbol, context: NodeBuilderContext) {
4896-
const fromNameType = getPropertyNameNodeForSymbolFromNameType(symbol, context);
4907+
const singleQuote = !!length(symbol.declarations) && every(symbol.declarations, isSingleQuotedStringNamed);
4908+
const fromNameType = getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote);
48974909
if (fromNameType) {
48984910
return fromNameType;
48994911
}
4912+
if (isKnownSymbol(symbol)) {
4913+
return createComputedPropertyName(createPropertyAccess(createIdentifier("Symbol"), (symbol.escapedName as string).substr(3)));
4914+
}
49004915
const rawName = unescapeLeadingUnderscores(symbol.escapedName);
4901-
return createPropertyNameNodeForIdentifierOrLiteral(rawName);
4916+
return createPropertyNameNodeForIdentifierOrLiteral(rawName, singleQuote);
49024917
}
49034918

49044919
// See getNameForSymbolFromNameType for a stringy equivalent
4905-
function getPropertyNameNodeForSymbolFromNameType(symbol: Symbol, context: NodeBuilderContext) {
4920+
function getPropertyNameNodeForSymbolFromNameType(symbol: Symbol, context: NodeBuilderContext, singleQuote?: boolean) {
49064921
const nameType = symbol.nameType;
49074922
if (nameType) {
49084923
if (nameType.flags & TypeFlags.StringOrNumberLiteral) {
49094924
const name = "" + (<StringLiteralType | NumberLiteralType>nameType).value;
49104925
if (!isIdentifierText(name, compilerOptions.target) && !isNumericLiteralName(name)) {
4911-
return createLiteral(name);
4926+
return createLiteral(name, !!singleQuote);
49124927
}
49134928
if (isNumericLiteralName(name) && startsWith(name, "-")) {
49144929
return createComputedPropertyName(createLiteral(+name));
@@ -4921,8 +4936,8 @@ namespace ts {
49214936
}
49224937
}
49234938

4924-
function createPropertyNameNodeForIdentifierOrLiteral(name: string) {
4925-
return isIdentifierText(name, compilerOptions.target) ? createIdentifier(name) : createLiteral(isNumericLiteralName(name) ? +name : name) as StringLiteral | NumericLiteral;
4939+
function createPropertyNameNodeForIdentifierOrLiteral(name: string, singleQuote?: boolean) {
4940+
return isIdentifierText(name, compilerOptions.target) ? createIdentifier(name) : createLiteral(isNumericLiteralName(name) ? +name : name, !!singleQuote);
49264941
}
49274942

49284943
function cloneNodeBuilderContext(context: NodeBuilderContext): NodeBuilderContext {

src/compiler/factory.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ namespace ts {
6666
// Literals
6767

6868
/* @internal */ export function createLiteral(value: string | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | Identifier, isSingleQuote: boolean): StringLiteral; // eslint-disable-line @typescript-eslint/unified-signatures
69+
/* @internal */ export function createLiteral(value: string | number, isSingleQuote: boolean): StringLiteral | NumericLiteral;
6970
/** If a node is passed, creates a string literal whose source text is read from a source node during emit. */
7071
export function createLiteral(value: string | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | Identifier): StringLiteral;
7172
export function createLiteral(value: number | PseudoBigInt): NumericLiteral;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts ===
22
var v = { *() { } }
3-
>v : { (Missing)(): Generator<never, void, unknown>; }
4-
>{ *() { } } : { (Missing)(): Generator<never, void, unknown>; }
3+
>v : { ""(): Generator<never, void, unknown>; }
4+
>{ *() { } } : { ""(): Generator<never, void, unknown>; }
55
> : () => Generator<never, void, unknown>
66

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts ===
22
var v = { *{ } }
3-
>v : { (Missing)(): Generator<never, void, unknown>; }
4-
>{ *{ } } : { (Missing)(): Generator<never, void, unknown>; }
3+
>v : { ""(): Generator<never, void, unknown>; }
4+
>{ *{ } } : { ""(): Generator<never, void, unknown>; }
55
> : () => Generator<never, void, unknown>
66

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments4_es6.ts ===
22
var v = { * }
3-
>v : { (Missing)(): any; }
4-
>{ * } : { (Missing)(): any; }
3+
>v : { ""(): any; }
4+
>{ * } : { ""(): any; }
55
> : () => any
66

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts ===
22
var v = { *<T>() { } }
3-
>v : { (Missing)<T>(): Generator<never, void, unknown>; }
4-
>{ *<T>() { } } : { (Missing)<T>(): Generator<never, void, unknown>; }
3+
>v : { ""<T>(): Generator<never, void, unknown>; }
4+
>{ *<T>() { } } : { ""<T>(): Generator<never, void, unknown>; }
55
> : <T>() => Generator<never, void, unknown>
66

tests/baselines/reference/assignmentCompatWithObjectMembersNumericNames.types

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ var t2: T2;
3131
>t2 : T2
3232

3333
var a: { 1.: string; bar?: string }
34-
>a : { 1.: string; bar?: string; }
34+
>a : { 1: string; bar?: string; }
3535
>1. : string
3636
>bar : string
3737

3838
var b: { 1.0: string; baz?: string }
39-
>b : { 1.0: string; baz?: string; }
39+
>b : { 1: string; baz?: string; }
4040
>1.0 : string
4141
>baz : string
4242

4343
var a2 = { 1.0: '' };
44-
>a2 : { 1.0: string; }
45-
>{ 1.0: '' } : { 1.0: string; }
44+
>a2 : { 1: string; }
45+
>{ 1.0: '' } : { 1: string; }
4646
>1.0 : string
4747
>'' : ""
4848

@@ -68,9 +68,9 @@ s = s2;
6868
>s2 : S2
6969

7070
s = a2;
71-
>s = a2 : { 1.0: string; }
71+
>s = a2 : { 1: string; }
7272
>s : S
73-
>a2 : { 1.0: string; }
73+
>a2 : { 1: string; }
7474

7575
s2 = t2;
7676
>s2 = t2 : T2
@@ -88,62 +88,62 @@ s2 = t;
8888
>t : T
8989

9090
s2 = b;
91-
>s2 = b : { 1.0: string; baz?: string; }
91+
>s2 = b : { 1: string; baz?: string; }
9292
>s2 : S2
93-
>b : { 1.0: string; baz?: string; }
93+
>b : { 1: string; baz?: string; }
9494

9595
s2 = a2;
96-
>s2 = a2 : { 1.0: string; }
96+
>s2 = a2 : { 1: string; }
9797
>s2 : S2
98-
>a2 : { 1.0: string; }
98+
>a2 : { 1: string; }
9999

100100
a = b;
101-
>a = b : { 1.0: string; baz?: string; }
102-
>a : { 1.: string; bar?: string; }
103-
>b : { 1.0: string; baz?: string; }
101+
>a = b : { 1: string; baz?: string; }
102+
>a : { 1: string; bar?: string; }
103+
>b : { 1: string; baz?: string; }
104104

105105
b = a;
106-
>b = a : { 1.: string; bar?: string; }
107-
>b : { 1.0: string; baz?: string; }
108-
>a : { 1.: string; bar?: string; }
106+
>b = a : { 1: string; bar?: string; }
107+
>b : { 1: string; baz?: string; }
108+
>a : { 1: string; bar?: string; }
109109

110110
a = s;
111111
>a = s : S
112-
>a : { 1.: string; bar?: string; }
112+
>a : { 1: string; bar?: string; }
113113
>s : S
114114

115115
a = s2;
116116
>a = s2 : S2
117-
>a : { 1.: string; bar?: string; }
117+
>a : { 1: string; bar?: string; }
118118
>s2 : S2
119119

120120
a = a2;
121-
>a = a2 : { 1.0: string; }
122-
>a : { 1.: string; bar?: string; }
123-
>a2 : { 1.0: string; }
121+
>a = a2 : { 1: string; }
122+
>a : { 1: string; bar?: string; }
123+
>a2 : { 1: string; }
124124

125125
a2 = b2;
126126
>a2 = b2 : { 1: string; }
127-
>a2 : { 1.0: string; }
127+
>a2 : { 1: string; }
128128
>b2 : { 1: string; }
129129

130130
b2 = a2;
131-
>b2 = a2 : { 1.0: string; }
131+
>b2 = a2 : { 1: string; }
132132
>b2 : { 1: string; }
133-
>a2 : { 1.0: string; }
133+
>a2 : { 1: string; }
134134

135135
a2 = b;
136-
>a2 = b : { 1.0: string; baz?: string; }
137-
>a2 : { 1.0: string; }
138-
>b : { 1.0: string; baz?: string; }
136+
>a2 = b : { 1: string; baz?: string; }
137+
>a2 : { 1: string; }
138+
>b : { 1: string; baz?: string; }
139139

140140
a2 = t2;
141141
>a2 = t2 : T2
142-
>a2 : { 1.0: string; }
142+
>a2 : { 1: string; }
143143
>t2 : T2
144144

145145
a2 = t;
146146
>a2 = t : T
147-
>a2 : { 1.0: string; }
147+
>a2 : { 1: string; }
148148
>t : T
149149

0 commit comments

Comments
 (0)