Skip to content

Commit 6b28248

Browse files
committed
Merge remote-tracking branch 'upstream/master'
* upstream/master: Make new error an error, not message fix(38299): use string literals as keys to creating rest result (microsoft#38600) Intersection check for empty object type shouldn't cause circularities (microsoft#38673) fix(38682): use stable typescript version (microsoft#38683) Add d.ts for Intl.RelativeTimeFormat (microsoft#36084) fix(38295): handle duplicate object literal keys which contain '+' and '-' tokens make last para of Actomics.notify optional. Fix some JSDoc factory function return types. fix order and tests move to invocationErrorDetails replace the original not-callable error Add _0_is_declared_here pointing to accessor declaration Better error message for accidental calls to get-accessors
2 parents 2ba61a7 + 45cf20c commit 6b28248

36 files changed

+842
-46
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
"source-map-support": "latest",
9797
"through2": "latest",
9898
"travis-fold": "latest",
99-
"typescript": "next",
99+
"typescript": "^3.9.3",
100100
"vinyl": "latest",
101101
"vinyl-sourcemaps-apply": "latest",
102102
"xml2js": "^0.4.19"

src/compiler/checker.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15370,7 +15370,9 @@ namespace ts {
1537015370
}
1537115371

1537215372
function isEmptyAnonymousObjectType(type: Type) {
15373-
return !!(getObjectFlags(type) & ObjectFlags.Anonymous) && isEmptyObjectType(type);
15373+
return !!(getObjectFlags(type) & ObjectFlags.Anonymous && (
15374+
(<ResolvedType>type).members && isEmptyResolvedType(<ResolvedType>type) ||
15375+
type.symbol && type.symbol.flags & SymbolFlags.TypeLiteral && getMembersOfSymbol(type.symbol).size === 0));
1537415376
}
1537515377

1537615378
function isStringIndexSignatureOnlyType(type: Type): boolean {
@@ -26384,7 +26386,7 @@ namespace ts {
2638426386
return true;
2638526387
}
2638626388

26387-
function invocationErrorDetails(apparentType: Type, kind: SignatureKind): { messageChain: DiagnosticMessageChain, relatedMessage: DiagnosticMessage | undefined } {
26389+
function invocationErrorDetails(errorTarget: Node, apparentType: Type, kind: SignatureKind): { messageChain: DiagnosticMessageChain, relatedMessage: DiagnosticMessage | undefined } {
2638826390
let errorInfo: DiagnosticMessageChain | undefined;
2638926391
const isCall = kind === SignatureKind.Call;
2639026392
const awaitedType = getAwaitedType(apparentType);
@@ -26453,16 +26455,24 @@ namespace ts {
2645326455
typeToString(apparentType)
2645426456
);
2645526457
}
26458+
26459+
let headMessage = isCall ? Diagnostics.This_expression_is_not_callable : Diagnostics.This_expression_is_not_constructable;
26460+
26461+
// Diagnose get accessors incorrectly called as functions
26462+
if (isCallExpression(errorTarget.parent) && errorTarget.parent.arguments.length === 0) {
26463+
const { resolvedSymbol } = getNodeLinks(errorTarget);
26464+
if (resolvedSymbol && resolvedSymbol.flags & SymbolFlags.GetAccessor) {
26465+
headMessage = Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without;
26466+
}
26467+
}
26468+
2645626469
return {
26457-
messageChain: chainDiagnosticMessages(
26458-
errorInfo,
26459-
isCall ? Diagnostics.This_expression_is_not_callable : Diagnostics.This_expression_is_not_constructable
26460-
),
26470+
messageChain: chainDiagnosticMessages(errorInfo, headMessage),
2646126471
relatedMessage: maybeMissingAwait ? Diagnostics.Did_you_forget_to_use_await : undefined,
2646226472
};
2646326473
}
2646426474
function invocationError(errorTarget: Node, apparentType: Type, kind: SignatureKind, relatedInformation?: DiagnosticRelatedInformation) {
26465-
const { messageChain, relatedMessage: relatedInfo } = invocationErrorDetails(apparentType, kind);
26475+
const { messageChain, relatedMessage: relatedInfo } = invocationErrorDetails(errorTarget, apparentType, kind);
2646626476
const diagnostic = createDiagnosticForNodeFromMessageChain(errorTarget, messageChain);
2646726477
if (relatedInfo) {
2646826478
addRelatedInfo(diagnostic, createDiagnosticForNode(errorTarget, relatedInfo));
@@ -26566,7 +26576,7 @@ namespace ts {
2656626576

2656726577
const headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
2656826578
if (!callSignatures.length) {
26569-
const errorDetails = invocationErrorDetails(apparentType, SignatureKind.Call);
26579+
const errorDetails = invocationErrorDetails(node.expression, apparentType, SignatureKind.Call);
2657026580
const messageChain = chainDiagnosticMessages(errorDetails.messageChain, headMessage);
2657126581
const diag = createDiagnosticForNodeFromMessageChain(node.expression, messageChain);
2657226582
if (errorDetails.relatedMessage) {

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ namespace ts {
5353
["es2020.promise", "lib.es2020.promise.d.ts"],
5454
["es2020.string", "lib.es2020.string.d.ts"],
5555
["es2020.symbol.wellknown", "lib.es2020.symbol.wellknown.d.ts"],
56+
["es2020.intl", "lib.es2020.intl.d.ts"],
5657
["esnext.array", "lib.es2019.array.d.ts"],
5758
["esnext.symbol", "lib.es2019.symbol.d.ts"],
5859
["esnext.asynciterable", "lib.es2018.asynciterable.d.ts"],

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4416,6 +4416,10 @@
44164416
"category": "Error",
44174417
"code": 6233
44184418
},
4419+
"This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?": {
4420+
"category": "Error",
4421+
"code": 6234
4422+
},
44194423

44204424
"Projects to reference": {
44214425
"category": "Message",

src/compiler/emitter.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4499,10 +4499,11 @@ namespace ts {
44994499
function getLiteralTextOfNode(node: LiteralLikeNode, neverAsciiEscape: boolean | undefined, jsxAttributeEscape: boolean): string {
45004500
if (node.kind === SyntaxKind.StringLiteral && (<StringLiteral>node).textSourceNode) {
45014501
const textSourceNode = (<StringLiteral>node).textSourceNode!;
4502-
if (isIdentifier(textSourceNode)) {
4503-
return jsxAttributeEscape ? `"${escapeJsxAttributeString(getTextOfNode(textSourceNode))}"` :
4504-
neverAsciiEscape || (getEmitFlags(node) & EmitFlags.NoAsciiEscaping) ? `"${escapeString(getTextOfNode(textSourceNode))}"` :
4505-
`"${escapeNonAsciiString(getTextOfNode(textSourceNode))}"`;
4502+
if (isIdentifier(textSourceNode) || isNumericLiteral(textSourceNode)) {
4503+
const text = isNumericLiteral(textSourceNode) ? textSourceNode.text : getTextOfNode(textSourceNode);
4504+
return jsxAttributeEscape ? `"${escapeJsxAttributeString(text)}"` :
4505+
neverAsciiEscape || (getEmitFlags(node) & EmitFlags.NoAsciiEscaping) ? `"${escapeString(text)}"` :
4506+
`"${escapeNonAsciiString(text)}"`;
45064507
}
45074508
else {
45084509
return getLiteralTextOfNode(textSourceNode, neverAsciiEscape, jsxAttributeEscape);

src/compiler/factoryPublic.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,23 +2610,23 @@ namespace ts {
26102610
}
26112611

26122612
export function createJSDocAuthorTag(comment?: string) {
2613-
return createJSDocTag(SyntaxKind.JSDocAuthorTag, "author", comment);
2613+
return createJSDocTag<JSDocAuthorTag>(SyntaxKind.JSDocAuthorTag, "author", comment);
26142614
}
26152615

26162616
export function createJSDocPublicTag() {
2617-
return createJSDocTag(SyntaxKind.JSDocPublicTag, "public");
2617+
return createJSDocTag<JSDocPublicTag>(SyntaxKind.JSDocPublicTag, "public");
26182618
}
26192619

26202620
export function createJSDocPrivateTag() {
2621-
return createJSDocTag(SyntaxKind.JSDocPrivateTag, "private");
2621+
return createJSDocTag<JSDocPrivateTag>(SyntaxKind.JSDocPrivateTag, "private");
26222622
}
26232623

26242624
export function createJSDocProtectedTag() {
2625-
return createJSDocTag(SyntaxKind.JSDocProtectedTag, "protected");
2625+
return createJSDocTag<JSDocProtectedTag>(SyntaxKind.JSDocProtectedTag, "protected");
26262626
}
26272627

26282628
export function createJSDocReadonlyTag() {
2629-
return createJSDocTag(SyntaxKind.JSDocReadonlyTag, "readonly");
2629+
return createJSDocTag<JSDocReadonlyTag>(SyntaxKind.JSDocReadonlyTag, "readonly");
26302630
}
26312631

26322632
export function appendJSDocToContainer(node: JSDocContainer, jsdoc: JSDoc) {

src/compiler/utilities.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3092,6 +3092,12 @@ namespace ts {
30923092
else if (isStringOrNumericLiteralLike(nameExpression)) {
30933093
return escapeLeadingUnderscores(nameExpression.text);
30943094
}
3095+
else if (isSignedNumericLiteral(nameExpression)) {
3096+
if (nameExpression.operator === SyntaxKind.MinusToken) {
3097+
return tokenToString(nameExpression.operator) + nameExpression.operand.text as __String;
3098+
}
3099+
return nameExpression.operand.text as __String;
3100+
}
30953101
return undefined;
30963102
default:
30973103
return Debug.assertNever(name);

src/lib/es2017.sharedmemory.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,11 @@ interface Atomics {
102102
/**
103103
* Wakes up sleeping agents that are waiting on the given index of the array, returning the
104104
* number of agents that were awoken.
105+
* @param typedArray A shared Int32Array.
106+
* @param index The position in the typedArray to wake up on.
107+
* @param count The number of sleeping agents to notify. Defaults to +Infinity.
105108
*/
106-
notify(typedArray: Int32Array, index: number, count: number): number;
109+
notify(typedArray: Int32Array, index: number, count?: number): number;
107110

108111
/**
109112
* Stores the bitwise XOR of a value with the value at the given position in the array,

src/lib/es2020.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
/// <reference lib="es2020.promise" />
44
/// <reference lib="es2020.string" />
55
/// <reference lib="es2020.symbol.wellknown" />
6+
/// <reference lib="es2020.intl" />

0 commit comments

Comments
 (0)