From c33f83ac9b80b2a38d208128c89f1b908ce6257d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Mon, 30 Jun 2025 20:14:10 +0200 Subject: [PATCH] Fixed a printer crash caused by empty parameter modifiers (#60537) --- 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 bb3db3bd0cc..0df3a399b8f 100644 --- a/src/compiler/expressionToTypeNode.ts +++ b/src/compiler/expressionToTypeNode.ts @@ -1113,7 +1113,7 @@ export function createSyntacticTypeNodeBuilder( function ensureParameter(p: ParameterDeclaration, context: SyntacticTypeNodeBuilderContext) { return factory.updateParameterDeclaration( p, - [], + /*modifiers*/ undefined, 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 00000000000..902022da8a1 --- /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, +});