From d1d4f39130c388b5cf49ba809b0e7b9635b2d28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 19 Nov 2024 12:28:06 +0100 Subject: [PATCH 1/2] Fixed a printer crash caused by empty parameter modifiers --- src/compiler/expressionToTypeNode.ts | 2 +- ...sMembersWithInferredFunctionReturnType1.ts | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionEntryClassMembersWithInferredFunctionReturnType1.ts diff --git a/src/compiler/expressionToTypeNode.ts b/src/compiler/expressionToTypeNode.ts index 7f54ab49406c5..9582de99adab2 100644 --- a/src/compiler/expressionToTypeNode.ts +++ b/src/compiler/expressionToTypeNode.ts @@ -1114,7 +1114,7 @@ export function createSyntacticTypeNodeBuilder( function ensureParameter(p: ParameterDeclaration, context: SyntacticTypeNodeBuilderContext) { return factory.updateParameterDeclaration( p, - [], + p.modifiers, reuseNode(context, p.dotDotDotToken), resolver.serializeNameOfParameter(context, p), resolver.isOptionalParameter(p) ? factory.createToken(SyntaxKind.QuestionToken) : undefined, diff --git a/tests/cases/fourslash/completionEntryClassMembersWithInferredFunctionReturnType1.ts b/tests/cases/fourslash/completionEntryClassMembersWithInferredFunctionReturnType1.ts new file mode 100644 index 0000000000000..902022da8a142 --- /dev/null +++ b/tests/cases/fourslash/completionEntryClassMembersWithInferredFunctionReturnType1.ts @@ -0,0 +1,31 @@ +/// + +// @filename: /tokenizer.ts +//// export default abstract class Tokenizer { +//// errorBuilder() { +//// return (pos: number, lineStart: number, curLine: number) => {}; +//// } +//// } + +// @filename: /expression.ts +//// import Tokenizer from "./tokenizer.js"; +//// +//// export default abstract class ExpressionParser extends Tokenizer { +//// /**/ +//// } + +verify.completions({ + marker: "", + includes: [ + { + name: "errorBuilder", + insertText: "errorBuilder(): (pos: number, lineStart: number, curLine: number) => void {\n}", + filterText: "errorBuilder", + }, + ], + preferences: { + includeCompletionsWithInsertText: true, + includeCompletionsWithClassMemberSnippets: true, + }, + isNewIdentifierLocation: true, +}); From 0d3a1729775f1b058375aa9e152c576dc5bf16f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Mon, 24 Feb 2025 23:24:59 +0100 Subject: [PATCH 2/2] just use `undefined` --- src/compiler/expressionToTypeNode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/expressionToTypeNode.ts b/src/compiler/expressionToTypeNode.ts index 9582de99adab2..32ad51de0d60c 100644 --- a/src/compiler/expressionToTypeNode.ts +++ b/src/compiler/expressionToTypeNode.ts @@ -1114,7 +1114,7 @@ export function createSyntacticTypeNodeBuilder( function ensureParameter(p: ParameterDeclaration, context: SyntacticTypeNodeBuilderContext) { return factory.updateParameterDeclaration( p, - p.modifiers, + /*modifiers*/ undefined, reuseNode(context, p.dotDotDotToken), resolver.serializeNameOfParameter(context, p), resolver.isOptionalParameter(p) ? factory.createToken(SyntaxKind.QuestionToken) : undefined,