From 643d169465b2c07689066ea29766c8da166e609d Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 6 Oct 2014 14:24:58 -0700 Subject: [PATCH] Better symbol information for lambda variable types at the call site --- src/services/services.ts | 57 +++++++++---------- tests/cases/fourslash/commentsFunction.ts | 3 +- tests/cases/fourslash/commentsInheritance.ts | 48 ++++++++-------- tests/cases/fourslash/commentsInterface.ts | 12 ++-- tests/cases/fourslash/commentsOverloads.ts | 34 +++++------ tests/cases/fourslash/commentsVariables.ts | 4 +- .../fourslash/quickInfoForOverloadOnConst1.ts | 2 +- .../cases/fourslash/quickinfoIsConsistent.ts | 9 +-- 8 files changed, 82 insertions(+), 87 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 0316f736387..33f65730fa7 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2727,38 +2727,37 @@ module ts { var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); if (contains(allSignatures, signature.target || signature)) { - // Write it as method/function/constructor as: (constructor) a(....) - if (symbolKind === ScriptElementKind.memberVariableElement || symbolFlags & SymbolFlags.Variable || symbolFlags & SymbolFlags.Class) { - if (useConstructSignatures) { - symbolKind = ScriptElementKind.constructorImplementationElement; - } - else { - switch (symbolKind) { - case ScriptElementKind.memberVariableElement: - symbolKind = ScriptElementKind.memberFunctionElement; - break; - case ScriptElementKind.variableElement: - symbolKind = ScriptElementKind.functionElement; - break; - case ScriptElementKind.parameterElement: - case ScriptElementKind.localVariableElement: - symbolKind = ScriptElementKind.localFunctionElement; - break; - default: - Debug.fail("symbolKind: " + symbolKind); - } - } - } - - // Constructor or call signatures use the type name - if (useConstructSignatures || (signature.declaration.kind === SyntaxKind.CallSignature && - !(type.symbol.flags & SymbolFlags.TypeLiteral || type.symbol.flags & SymbolFlags.ObjectLiteral))) { + if (useConstructSignatures && (symbolFlags & SymbolFlags.Class)) { + // Constructor + symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { addPrefixForAnyFunctionOrVar(symbol, symbolKind); } - addSignatureDisplayParts(signature, allSignatures); + + switch (symbolKind) { + case ScriptElementKind.memberVariableElement: + case ScriptElementKind.variableElement: + case ScriptElementKind.parameterElement: + case ScriptElementKind.localVariableElement: + // If it is call or construct signature of lambda's write type name + displayParts.push(punctuationPart(SyntaxKind.ColonToken)); + displayParts.push(spacePart()); + if (useConstructSignatures) { + displayParts.push(keywordPart(SyntaxKind.NewKeyword)); + displayParts.push(spacePart()); + } + if (!(type.flags & TypeFlags.Anonymous)) { + displayParts.push.apply(displayParts, symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, /*meaning*/ undefined, SymbolFormatFlags.WriteTypeParametersOrArguments)); + } + addSignatureDisplayParts(signature, allSignatures, TypeFormatFlags.WriteArrowStyleSignature); + break; + + default: + // Just signature + addSignatureDisplayParts(signature, allSignatures); + } hasAddedSymbolInfo = true; } } @@ -2917,8 +2916,8 @@ module ts { } } - function addSignatureDisplayParts(signature: Signature, allSignatures: Signature[]) { - displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, TypeFormatFlags.NoTruncation | TypeFormatFlags.WriteTypeArgumentsOfSignature)); + function addSignatureDisplayParts(signature: Signature, allSignatures: Signature[], flags?: TypeFormatFlags) { + displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | TypeFormatFlags.NoTruncation | TypeFormatFlags.WriteTypeArgumentsOfSignature)); if (allSignatures.length > 1) { displayParts.push(spacePart()); displayParts.push(punctuationPart(SyntaxKind.OpenParenToken)); diff --git a/tests/cases/fourslash/commentsFunction.ts b/tests/cases/fourslash/commentsFunction.ts index f3f49a2c5b1..3a4e4e4dcc2 100644 --- a/tests/cases/fourslash/commentsFunction.ts +++ b/tests/cases/fourslash/commentsFunction.ts @@ -126,6 +126,7 @@ verify.quickInfoIs('(local var) localVar: string', ''); goTo.marker('30'); verify.quickInfoIs('(parameter) b: string', ''); goTo.marker('31'); -verify.quickInfoIs('(local function) lambdaVar(b: string): string', ''); +debugger; +verify.quickInfoIs('(local var) lambdaVar: (b: string) => string', ''); goTo.marker('32'); verify.quickInfoIs('(parameter) a: number', ''); diff --git a/tests/cases/fourslash/commentsInheritance.ts b/tests/cases/fourslash/commentsInheritance.ts index ffff914e117..10926c953ff 100644 --- a/tests/cases/fourslash/commentsInheritance.ts +++ b/tests/cases/fourslash/commentsInheritance.ts @@ -261,13 +261,13 @@ verify.quickInfoIs("(method) i1.f1(): void", ""); goTo.marker('5q'); verify.quickInfoIs("(method) i1.nc_f1(): void", ""); goTo.marker('l2q'); -verify.quickInfoIs("(method) i1.i1_l1(): void", ""); +verify.quickInfoIs("(property) i1.i1_l1: () => void", ""); goTo.marker('l3q'); -verify.quickInfoIs("(method) i1.i1_nc_l1(): void", ""); +verify.quickInfoIs("(property) i1.i1_nc_l1: () => void", ""); goTo.marker('l4q'); -verify.quickInfoIs("(method) i1.l1(): void", ""); +verify.quickInfoIs("(property) i1.l1: () => void", ""); goTo.marker('l5q'); -verify.quickInfoIs("(method) i1.nc_l1(): void", ""); +verify.quickInfoIs("(property) i1.nc_l1: () => void", ""); goTo.marker('6'); verify.memberListContains("i1_p1", "(property) c1.i1_p1: number", ""); @@ -310,13 +310,13 @@ verify.quickInfoIs("(method) c1.f1(): void", "c1_f1"); goTo.marker('10q'); verify.quickInfoIs("(method) c1.nc_f1(): void", "c1_nc_f1"); goTo.marker('l7q'); -verify.quickInfoIs("(method) c1.i1_l1(): void", ""); +verify.quickInfoIs("(property) c1.i1_l1: () => void", ""); goTo.marker('l8q'); -verify.quickInfoIs("(method) c1.i1_nc_l1(): void", ""); +verify.quickInfoIs("(property) c1.i1_nc_l1: () => void", ""); goTo.marker('l9q'); -verify.quickInfoIs("(method) c1.l1(): void", ""); +verify.quickInfoIs("(property) c1.l1: () => void", ""); goTo.marker('l10q'); -verify.quickInfoIs("(method) c1.nc_l1(): void", ""); +verify.quickInfoIs("(property) c1.nc_l1: () => void", ""); goTo.marker('11'); verify.memberListContains("i1_p1", "(property) i1.i1_p1: number", "i1_p1"); @@ -356,13 +356,13 @@ verify.quickInfoIs("(method) i1.f1(): void", ""); goTo.marker('15q'); verify.quickInfoIs("(method) i1.nc_f1(): void", ""); goTo.marker('l12q'); -verify.quickInfoIs("(method) i1.i1_l1(): void", ""); +verify.quickInfoIs("(property) i1.i1_l1: () => void", ""); goTo.marker('l13q'); -verify.quickInfoIs("(method) i1.i1_nc_l1(): void", ""); +verify.quickInfoIs("(property) i1.i1_nc_l1: () => void", ""); goTo.marker('l14q'); -verify.quickInfoIs("(method) i1.l1(): void", ""); +verify.quickInfoIs("(property) i1.l1: () => void", ""); goTo.marker('l15q'); -verify.quickInfoIs("(method) i1.nc_l1(): void", ""); +verify.quickInfoIs("(property) i1.nc_l1: () => void", ""); goTo.marker('16'); verify.completionListContains("i1", "interface i1", "i1 is interface with properties"); @@ -545,13 +545,13 @@ verify.quickInfoIs("(method) i2.f1(): void", "i2 f1"); goTo.marker('40q'); verify.quickInfoIs("(method) i2.nc_f1(): void", ""); goTo.marker('l37q'); -verify.quickInfoIs("(method) i2.i2_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_l1: () => void", ""); goTo.marker('l38q'); -verify.quickInfoIs("(method) i2.i2_nc_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_nc_l1: () => void", ""); goTo.marker('l39q'); -verify.quickInfoIs("(method) i2.l1(): void", ""); +verify.quickInfoIs("(property) i2.l1: () => void", ""); goTo.marker('l40q'); -verify.quickInfoIs("(method) i2.nc_l1(): void", ""); +verify.quickInfoIs("(property) i2.nc_l1: () => void", ""); goTo.marker('41'); verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1"); @@ -592,13 +592,13 @@ verify.quickInfoIs("(method) i3.f1(): void", "i3 f1"); goTo.marker('45q'); verify.quickInfoIs("(method) i3.nc_f1(): void", ""); goTo.marker('l42q'); -verify.quickInfoIs("(method) i2.i2_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_l1: () => void", ""); goTo.marker('l43q'); -verify.quickInfoIs("(method) i2.i2_nc_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_nc_l1: () => void", ""); goTo.marker('l44q'); -verify.quickInfoIs("(method) i3.l1(): void", ""); +verify.quickInfoIs("(property) i3.l1: () => void", ""); goTo.marker('l45q'); -verify.quickInfoIs("(method) i3.nc_l1(): void", ""); +verify.quickInfoIs("(property) i3.nc_l1: () => void", ""); goTo.marker('46'); verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1"); @@ -639,13 +639,13 @@ verify.quickInfoIs("(method) i2.f1(): void", "i2 f1"); goTo.marker('50q'); verify.quickInfoIs("(method) i2.nc_f1(): void", ""); goTo.marker('l47q'); -verify.quickInfoIs("(method) i2.i2_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_l1: () => void", ""); goTo.marker('l48q'); -verify.quickInfoIs("(method) i2.i2_nc_l1(): void", ""); +verify.quickInfoIs("(property) i2.i2_nc_l1: () => void", ""); goTo.marker('l49q'); -verify.quickInfoIs("(method) i2.l1(): void", ""); +verify.quickInfoIs("(property) i2.l1: () => void", ""); goTo.marker('l50q'); -verify.quickInfoIs("(method) i2.nc_l1(): void", ""); +verify.quickInfoIs("(property) i2.nc_l1: () => void", ""); goTo.marker('51'); verify.completionListContains("i2", "interface i2", ""); diff --git a/tests/cases/fourslash/commentsInterface.ts b/tests/cases/fourslash/commentsInterface.ts index f0c963643c9..f1656b7cecf 100644 --- a/tests/cases/fourslash/commentsInterface.ts +++ b/tests/cases/fourslash/commentsInterface.ts @@ -111,7 +111,7 @@ goTo.marker('12'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs("param help"); goTo.marker('12q'); -verify.quickInfoIs("(method) i2.foo(b: number): string", ""); +verify.quickInfoIs("(property) i2.foo: (b: number) => string", ""); goTo.marker('13'); verify.quickInfoIs("(var) i2_i_i2_si: number", ""); @@ -130,7 +130,7 @@ goTo.marker('16'); verify.currentSignatureHelpDocCommentIs("new method"); verify.currentParameterHelpArgumentDocCommentIs("param"); goTo.marker('16q'); -verify.quickInfoIs("(constructor) i2(i: i1): any", "new method"); +verify.quickInfoIs("(var) i2_i: new i2(i: i1) => any", "new method"); goTo.marker('17'); verify.quickInfoIs("(var) i2_i_nc_x: number", ""); @@ -151,7 +151,7 @@ goTo.marker('22'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('22q'); -verify.quickInfoIs("(method) i2.nc_foo(b: number): string", ""); +verify.quickInfoIs("(property) i2.nc_foo: (b: number) => string", ""); goTo.marker('23'); verify.quickInfoIs("(var) i2_i_r: number", ""); @@ -160,7 +160,7 @@ goTo.marker('24'); verify.currentSignatureHelpDocCommentIs("this is call signature"); verify.currentParameterHelpArgumentDocCommentIs("paramhelp a"); goTo.marker('24q'); -verify.quickInfoIs("(function) i2(a: number, b: number): number", "this is call signature"); +verify.quickInfoIs("(var) i2_i: i2(a: number, b: number) => number", "this is call signature"); goTo.marker('25'); verify.currentSignatureHelpDocCommentIs("this is call signature"); @@ -244,7 +244,7 @@ goTo.marker('43'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs("comment i3 l b"); goTo.marker('43q'); -verify.quickInfoIs("(method) i3.l(b: number): string", ""); +verify.quickInfoIs("(property) i3.l: (b: number) => string", ""); goTo.marker('44'); verify.currentSignatureHelpDocCommentIs(""); @@ -256,4 +256,4 @@ goTo.marker('45'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('45q'); -verify.quickInfoIs("(method) i3.nc_l(b: number): string", ""); +verify.quickInfoIs("(property) i3.nc_l: (b: number) => string", ""); diff --git a/tests/cases/fourslash/commentsOverloads.ts b/tests/cases/fourslash/commentsOverloads.ts index f7769c04b95..3cc7707de5a 100644 --- a/tests/cases/fourslash/commentsOverloads.ts +++ b/tests/cases/fourslash/commentsOverloads.ts @@ -308,7 +308,7 @@ verify.completionListContains('f4', '(function) f4(a: number): number (+ 1 overl goTo.marker('18'); verify.completionListContains('i1', 'interface i1', ''); -verify.completionListContains('i1_i', '(constructor) i1(b: number): any (+ 1 overload(s))', ''); +verify.completionListContains('i1_i', '(var) i1_i: new i1(b: number) => any (+ 1 overload(s))', ''); verify.completionListContains('i2', 'interface i2', ''); verify.completionListContains('i2_i', '(var) i2_i: i2', ''); verify.completionListContains('i3', 'interface i3', ''); @@ -320,25 +320,25 @@ goTo.marker('19'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('19q'); -verify.quickInfoIs("(constructor) i1(b: number): any (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i1_i: new i1(b: number) => any (+ 1 overload(s))", ""); goTo.marker('20'); verify.currentSignatureHelpDocCommentIs("new 1"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('20q'); -verify.quickInfoIs("(constructor) i1(a: string): any (+ 1 overload(s))", "new 1"); +verify.quickInfoIs("(var) i1_i: new i1(a: string) => any (+ 1 overload(s))", "new 1"); goTo.marker('21'); verify.currentSignatureHelpDocCommentIs("this signature 1"); verify.currentParameterHelpArgumentDocCommentIs("param a"); goTo.marker('21q'); -verify.quickInfoIs("(function) i1(a: number): number (+ 1 overload(s))", "this signature 1"); +verify.quickInfoIs("(var) i1_i: i1(a: number) => number (+ 1 overload(s))", "this signature 1"); goTo.marker('22'); verify.currentSignatureHelpDocCommentIs("this is signature 2"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('22q'); -verify.quickInfoIs("(function) i1(b: string): number (+ 1 overload(s))", "this is signature 2"); +verify.quickInfoIs("(var) i1_i: i1(b: string) => number (+ 1 overload(s))", "this is signature 2"); goTo.marker('23'); verify.memberListContains('foo', '(method) i1.foo(a: number): number (+ 1 overload(s))', 'foo 1'); @@ -398,73 +398,73 @@ goTo.marker('32'); verify.currentSignatureHelpDocCommentIs("new 2"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('32q'); -verify.quickInfoIs("(constructor) i2(b: number): any (+ 1 overload(s))", "new 2"); +verify.quickInfoIs("(var) i2_i: new i2(b: number) => any (+ 1 overload(s))", "new 2"); goTo.marker('33'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('33q'); -verify.quickInfoIs("(constructor) i2(a: string): any (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i2_i: new i2(a: string) => any (+ 1 overload(s))", ""); goTo.marker('34'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('34q'); -verify.quickInfoIs("(function) i2(a: number): number (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i2_i: i2(a: number) => number (+ 1 overload(s))", ""); goTo.marker('35'); verify.currentSignatureHelpDocCommentIs("this is signature 2"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('35q'); -verify.quickInfoIs("(function) i2(b: string): number (+ 1 overload(s))", "this is signature 2"); +verify.quickInfoIs("(var) i2_i: i2(b: string) => number (+ 1 overload(s))", "this is signature 2"); goTo.marker('36'); verify.currentSignatureHelpDocCommentIs("new 2"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('36q'); -verify.quickInfoIs("(constructor) i3(b: number): any (+ 1 overload(s))", "new 2"); +verify.quickInfoIs("(var) i3_i: new i3(b: number) => any (+ 1 overload(s))", "new 2"); goTo.marker('37'); verify.currentSignatureHelpDocCommentIs("new 1"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('37q'); -verify.quickInfoIs("(constructor) i3(a: string): any (+ 1 overload(s))", "new 1"); +verify.quickInfoIs("(var) i3_i: new i3(a: string) => any (+ 1 overload(s))", "new 1"); goTo.marker('38'); verify.currentSignatureHelpDocCommentIs("this is signature 1"); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('38q'); -verify.quickInfoIs("(function) i3(a: number): number (+ 1 overload(s))", "this is signature 1"); +verify.quickInfoIs("(var) i3_i: i3(a: number) => number (+ 1 overload(s))", "this is signature 1"); goTo.marker('39'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('39q'); -verify.quickInfoIs("(function) i3(b: string): number (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i3_i: i3(b: string) => number (+ 1 overload(s))", ""); goTo.marker('40'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('40q'); -verify.quickInfoIs("(constructor) i4(b: number): any (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i4_i: new i4(b: number) => any (+ 1 overload(s))", ""); goTo.marker('41'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('41q'); -verify.quickInfoIs("(constructor) i4(a: string): any (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i4_i: new i4(a: string) => any (+ 1 overload(s))", ""); goTo.marker('42'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('42q'); -verify.quickInfoIs("(function) i4(a: number): number (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i4_i: i4(a: number) => number (+ 1 overload(s))", ""); goTo.marker('43'); verify.currentSignatureHelpDocCommentIs(""); verify.currentParameterHelpArgumentDocCommentIs(""); goTo.marker('43q'); -verify.quickInfoIs("(function) i4(b: string): number (+ 1 overload(s))", ""); +verify.quickInfoIs("(var) i4_i: i4(b: string) => number (+ 1 overload(s))", ""); goTo.marker('44'); verify.memberListContains('prop1', '(method) c.prop1(a: number): number (+ 1 overload(s))', ''); diff --git a/tests/cases/fourslash/commentsVariables.ts b/tests/cases/fourslash/commentsVariables.ts index 8540aa00b6c..33c96f9e5d7 100644 --- a/tests/cases/fourslash/commentsVariables.ts +++ b/tests/cases/fourslash/commentsVariables.ts @@ -63,7 +63,7 @@ verify.quickInfoIs("(function) foo(): void", "foos comment"); goTo.marker('6'); verify.currentSignatureHelpDocCommentIs(""); goTo.marker('6q'); -verify.quickInfoIs("(function) fooVar(): void", ""); +verify.quickInfoIs("(var) fooVar: () => void", ""); goTo.marker('7'); verify.completionListContains("foo", "(function) foo(): void", "foos comment"); @@ -77,7 +77,7 @@ verify.quickInfoIs("(function) foo(): void", "foos comment"); goTo.marker('9'); verify.currentSignatureHelpDocCommentIs(""); goTo.marker('9q'); -verify.quickInfoIs("(function) fooVar(): void", ""); +verify.quickInfoIs("(var) fooVar: () => void", ""); goTo.marker('9aq'); verify.quickInfoIs("(var) fooVar: () => void", "fooVar comment"); diff --git a/tests/cases/fourslash/quickInfoForOverloadOnConst1.ts b/tests/cases/fourslash/quickInfoForOverloadOnConst1.ts index 147c030c22a..f2ee37aa675 100644 --- a/tests/cases/fourslash/quickInfoForOverloadOnConst1.ts +++ b/tests/cases/fourslash/quickInfoForOverloadOnConst1.ts @@ -30,7 +30,7 @@ verify.quickInfoIs("(method) C.x1(a: number, callback: (x: 'hi') => number): any goTo.marker('5'); verify.quickInfoIs('(parameter) callback: (x: string) => number'); goTo.marker('6'); -verify.quickInfoIs('(local function) callback(x: string): number'); +verify.quickInfoIs('(parameter) callback: (x: string) => number'); goTo.marker('7'); verify.quickInfoIs("(method) C.x1(a: number, callback: (x: 'hi') => number): any"); goTo.marker('8'); diff --git a/tests/cases/fourslash/quickinfoIsConsistent.ts b/tests/cases/fourslash/quickinfoIsConsistent.ts index 4b2dc705e6d..cc27e698d34 100644 --- a/tests/cases/fourslash/quickinfoIsConsistent.ts +++ b/tests/cases/fourslash/quickinfoIsConsistent.ts @@ -6,12 +6,7 @@ //// /*3*/f(3); ////} -// Declaration is shown as type information -goTo.marker("1"); -verify.quickInfoIs("(var) f: (x: number) => number", ""); - -// But the call sites show the signatures selected -[2, 3].forEach((val) => { +[1, 2, 3].forEach((val) => { goTo.marker("" + val); - verify.quickInfoIs("(function) f(x: number): number", ""); + verify.quickInfoIs("(var) f: (x: number) => number", ""); } ); \ No newline at end of file