package fourslash_test import ( "testing" "github.com/microsoft/typescript-go/internal/fourslash" "github.com/microsoft/typescript-go/internal/lsp/lsproto" "github.com/microsoft/typescript-go/internal/testutil" ) func TestJsdocDeprecated_suggestion2(t *testing.T) { t.Parallel() defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `// overloads declare function foo(a: string): number; /** @deprecated */ declare function foo(): undefined; declare function foo (a?: string): number | undefined; [|foo|](); foo(''); foo; /** @deprecated */ declare function bar(): number; [|bar|](); [|bar|]; /** @deprecated */ declare function baz(): number; /** @deprecated */ declare function baz(): number | undefined; [|baz|](); [|baz|]; interface Foo { /** @deprecated */ (): void (a: number): void } declare const f: Foo; [|f|](); f(1); interface T { createElement(): void /** @deprecated */ createElement(tag: 'xmp'): void; } declare const t: T; t.createElement(); t.[|createElement|]('xmp'); declare class C { /** @deprecated */ constructor (); constructor(v: string) } C; const c = new [|C|](); interface Ca { /** @deprecated */ (): void new (): void } interface Cb { (): void /** @deprecated */ new (): string } declare const ca: Ca; declare const cb: Cb; ca; cb; [|ca|](); cb(); new ca(); new [|cb|]();` f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) defer done() f.VerifySuggestionDiagnostics(t, []*lsproto.Diagnostic{ { Message: lsproto.StringOrMarkupContent{String: new("The signature '(): undefined' of 'foo' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[0].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature '(): number' of 'bar' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[1].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("'bar' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6385))}, Range: f.Ranges()[2].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature '(): number' of 'baz' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[3].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("'baz' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6385))}, Range: f.Ranges()[4].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature '(): void' of 'f' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[5].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature '(tag: \"xmp\"): void' of 't.createElement' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[6].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature 'new (): C' of 'C' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[7].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature '(): void' of 'ca' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[8].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, { Message: lsproto.StringOrMarkupContent{String: new("The signature 'new (): string' of 'cb' is deprecated.")}, Code: &lsproto.IntegerOrString{Integer: new(int32(6387))}, Range: f.Ranges()[9].LSRange, Tags: &[]lsproto.DiagnosticTag{lsproto.DiagnosticTagDeprecated}, }, }) }