From 1dc3b0389ddac602b8106b839e41c35a78278185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 10 Feb 2023 17:38:59 +0100 Subject: [PATCH 1/3] Fix string completions depending on contextual signatures --- src/compiler/checker.ts | 4 +- ...ringDependingOnContexSensitiveSignature.ts | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 93f559c1faa79..4fca657a214e1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37307,7 +37307,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return nullWideningType; case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.StringLiteral: - return getFreshTypeOfLiteralType(getStringLiteralType((node as StringLiteralLike).text)); + return hasSkipDirectInferenceFlag(node) ? + anyType : + getFreshTypeOfLiteralType(getStringLiteralType((node as StringLiteralLike).text)); case SyntaxKind.NumericLiteral: checkGrammarNumericLiteral(node as NumericLiteral); return getFreshTypeOfLiteralType(getNumberLiteralType(+(node as NumericLiteral).text)); diff --git a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts new file mode 100644 index 0000000000000..a44ea5c8a391c --- /dev/null +++ b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts @@ -0,0 +1,41 @@ +/// +// @strict: true +//// +//// type ActorRef = { +//// send: (ev: TEvent) => void +//// } +//// +//// type Action { +//// (ctx: TContext): void +//// } +//// +//// type Config = { +//// entry: Action +//// } +//// +//// declare function createMachine(config: Config): void +//// +//// type EventFrom = T extends ActorRef ? TEvent : { type: 'HAHAHA' } +//// +//// declare function sendTo< +//// TContext, +//// TActor extends ActorRef +//// >( +//// actor: ((ctx: TContext) => TActor), +//// event: EventFrom +//// ): Action +//// +//// createMachine<{ +//// child: ActorRef<{ type: "EVENT" }>; +//// }>({ +//// entry: sendTo((ctx) => ctx.child, { type: /*1*/ }), +//// }); +//// +//// createMachine<{ +//// child: ActorRef<{ type: "EVENT" }>; +//// }>({ +//// entry: sendTo((ctx) => ctx.child, { type: "/*2*/" }), +//// }); + +verify.completions({ marker: "1", includes: [`"EVENT"`] }) +verify.completions({ marker: "2", exact: [`EVENT`] }) \ No newline at end of file From 317117924c17b185784734093c9c29c40788ce97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 3 Mar 2023 09:18:03 +0100 Subject: [PATCH 2/3] Fixed a syntax error in the added test --- .../completionsForStringDependingOnContexSensitiveSignature.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts index a44ea5c8a391c..1c7062acd7d20 100644 --- a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts +++ b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts @@ -5,7 +5,7 @@ //// send: (ev: TEvent) => void //// } //// -//// type Action { +//// type Action = { //// (ctx: TContext): void //// } //// From 50872ee1512dbf3b4ef7b42ef21a4a71c78e0121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 3 Mar 2023 09:19:44 +0100 Subject: [PATCH 3/3] Update tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts --- .../completionsForStringDependingOnContexSensitiveSignature.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts index 1c7062acd7d20..e80c014546d73 100644 --- a/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts +++ b/tests/cases/fourslash/completionsForStringDependingOnContexSensitiveSignature.ts @@ -15,7 +15,7 @@ //// //// declare function createMachine(config: Config): void //// -//// type EventFrom = T extends ActorRef ? TEvent : { type: 'HAHAHA' } +//// type EventFrom = T extends ActorRef ? TEvent : never //// //// declare function sendTo< //// TContext,