From c49ef369643b31da83e4d5a071a54b390161cb0a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Thu, 10 May 2018 16:51:46 -0700 Subject: [PATCH 01/69] First half of fix Still doesn't work correctly for multiple merges --- src/compiler/checker.ts | 7 +++++-- .../reference/typeFromPropertyAssignment14.types | 10 +++++----- .../reference/typeFromPropertyAssignment4.types | 10 +++++----- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index edefd6bf9dde5..fc82ebfa02c98 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -915,8 +915,11 @@ namespace ts { } if ((source.flags | target.flags) & SymbolFlags.JSContainer) { const sourceInitializer = getJSInitializerSymbol(source); - const targetInitializer = getJSInitializerSymbol(target); + let targetInitializer = getJSInitializerSymbol(target); if (sourceInitializer !== source || targetInitializer !== target) { + if (!(targetInitializer.flags & SymbolFlags.Transient)) { + targetInitializer = cloneSymbol(targetInitializer); + } mergeSymbol(targetInitializer, sourceInitializer); } } @@ -19452,7 +19455,7 @@ namespace ts { } const links = getNodeLinks(node); - const type = getTypeOfSymbol(node.symbol); + const type = getTypeOfSymbol(getMergedSymbol(node.symbol)); if (isTypeAny(type)) { return type; } diff --git a/tests/baselines/reference/typeFromPropertyAssignment14.types b/tests/baselines/reference/typeFromPropertyAssignment14.types index 10a3fa00e3514..0416d2de952fe 100644 --- a/tests/baselines/reference/typeFromPropertyAssignment14.types +++ b/tests/baselines/reference/typeFromPropertyAssignment14.types @@ -1,13 +1,13 @@ === tests/cases/conformance/salsa/def.js === var Outer = {}; ->Outer : typeof Outer ->{} : typeof Outer +>Outer : { [x: string]: any; Inner(): void; } +>{} : { [x: string]: any; Inner(): void; } === tests/cases/conformance/salsa/work.js === Outer.Inner = function () {} >Outer.Inner = function () {} : () => void >Outer.Inner : () => void ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner(): void; } >Inner : () => void >function () {} : () => void @@ -15,7 +15,7 @@ Outer.Inner.prototype = { >Outer.Inner.prototype = { x: 1, m() { }} : { [x: string]: any; x: number; m(): void; } >Outer.Inner.prototype : any >Outer.Inner : () => void ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner(): void; } >Inner : () => void >prototype : any >{ x: 1, m() { }} : { [x: string]: any; x: number; m(): void; } @@ -48,7 +48,7 @@ var inno = new Outer.Inner() >inno : { [x: string]: any; x: number; m(): void; } >new Outer.Inner() : { [x: string]: any; x: number; m(): void; } >Outer.Inner : () => void ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner(): void; } >Inner : () => void inno.x diff --git a/tests/baselines/reference/typeFromPropertyAssignment4.types b/tests/baselines/reference/typeFromPropertyAssignment4.types index 3b46296c10e94..90b97d91d0c32 100644 --- a/tests/baselines/reference/typeFromPropertyAssignment4.types +++ b/tests/baselines/reference/typeFromPropertyAssignment4.types @@ -1,13 +1,13 @@ === tests/cases/conformance/salsa/def.js === var Outer = {}; ->Outer : typeof Outer ->{} : typeof Outer +>Outer : { [x: string]: any; Inner: typeof Inner; } +>{} : { [x: string]: any; Inner: typeof Inner; } === tests/cases/conformance/salsa/a.js === Outer.Inner = class { >Outer.Inner = class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner >Outer.Inner : typeof Inner ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner: typeof Inner; } >Inner : typeof Inner >class { constructor() { /** @type {number} */ this.y = 12 }} : typeof Inner @@ -35,7 +35,7 @@ var inner = new Outer.Inner() >inner : Inner >new Outer.Inner() : Inner >Outer.Inner : typeof Inner ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner: typeof Inner; } >Inner : typeof Inner inner.y @@ -57,7 +57,7 @@ var z = new Outer.Inner() >z : Inner >new Outer.Inner() : Inner >Outer.Inner : typeof Inner ->Outer : typeof Outer +>Outer : { [x: string]: any; Inner: typeof Inner; } >Inner : typeof Inner z.y From fdd078064d85b546557ed15d7b88ca2149b17e61 Mon Sep 17 00:00:00 2001 From: Armando Aguirre Date: Thu, 10 May 2018 18:08:36 -0700 Subject: [PATCH 02/69] Added deferred to FileStats telemetry --- src/server/editorServices.ts | 1 + src/server/project.ts | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 9de36f0687f2b..a5a4bceb43ce6 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -83,6 +83,7 @@ namespace ts.server { readonly ts: number; readonly tsx: number; readonly dts: number; + readonly deferred: number; } export interface OpenFileInfo { diff --git a/src/server/project.ts b/src/server/project.ts index a19739d2ba1f3..6073cd9caef6e 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -11,7 +11,7 @@ namespace ts.server { /* @internal */ export function countEachFileTypes(infos: ScriptInfo[]): FileStats { - const result: Mutable = { js: 0, jsx: 0, ts: 0, tsx: 0, dts: 0 }; + const result: Mutable = { js: 0, jsx: 0, ts: 0, tsx: 0, dts: 0, deferred: 0 }; for (const info of infos) { switch (info.scriptKind) { case ScriptKind.JS: @@ -28,6 +28,9 @@ namespace ts.server { case ScriptKind.TSX: result.tsx += 1; break; + case ScriptKind.Deferred: + result.deferred += 1; + break; } } return result; From bb178d38bfe069d10215f87b3894528c65745989 Mon Sep 17 00:00:00 2001 From: Armando Aguirre Date: Thu, 10 May 2018 18:18:43 -0700 Subject: [PATCH 03/69] Small test fixes --- src/harness/unittests/tsserverProjectSystem.ts | 2 +- tests/baselines/reference/api/tsserverlibrary.d.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index f26170ef6aed9..980a27446f7f1 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -164,7 +164,7 @@ namespace ts.projectSystem { } export function fileStats(nonZeroStats: Partial): server.FileStats { - return { ts: 0, tsx: 0, dts: 0, js: 0, jsx: 0, ...nonZeroStats }; + return { ts: 0, tsx: 0, dts: 0, js: 0, jsx: 0, deferred: 0, ...nonZeroStats }; } export class TestServerEventManager { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 061ff2aeae1d9..c069dbf4d0473 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -8047,6 +8047,7 @@ declare namespace ts.server { readonly ts: number; readonly tsx: number; readonly dts: number; + readonly deferred: number; } interface OpenFileInfo { readonly checkJs: boolean; From 904f8df9c14903e888cc2a50ba26b558996b2518 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Thu, 10 May 2018 20:58:59 -0700 Subject: [PATCH 04/69] Fix repeated merging of js initializers --- src/compiler/checker.ts | 3 +- .../typeFromPropertyAssignment10.types | 80 +++++++++---------- 2 files changed, 42 insertions(+), 41 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fc82ebfa02c98..0f1ee7e62d9a0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -918,7 +918,8 @@ namespace ts { let targetInitializer = getJSInitializerSymbol(target); if (sourceInitializer !== source || targetInitializer !== target) { if (!(targetInitializer.flags & SymbolFlags.Transient)) { - targetInitializer = cloneSymbol(targetInitializer); + const mergedInitializer = getMergedSymbol(targetInitializer); + targetInitializer = mergedInitializer === targetInitializer ? cloneSymbol(targetInitializer) : mergedInitializer; } mergeSymbol(targetInitializer, sourceInitializer); } diff --git a/tests/baselines/reference/typeFromPropertyAssignment10.types b/tests/baselines/reference/typeFromPropertyAssignment10.types index f4d118165373e..a880498f047c7 100644 --- a/tests/baselines/reference/typeFromPropertyAssignment10.types +++ b/tests/baselines/reference/typeFromPropertyAssignment10.types @@ -1,28 +1,28 @@ === tests/cases/conformance/salsa/module.js === var Outer = Outer || {}; ->Outer : typeof __object ->Outer || {} : typeof __object ->Outer : typeof __object ->{} : typeof __object +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>Outer || {} : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>{} : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } Outer.app = Outer.app || {}; ->Outer.app = Outer.app || {} : typeof __object ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object ->Outer.app || {} : typeof __object ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object ->{} : typeof __object +>Outer.app = Outer.app || {} : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer.app || {} : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>{} : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } === tests/cases/conformance/salsa/someview.js === Outer.app.SomeView = (function () { >Outer.app.SomeView = (function () { var SomeView = function() { var me = this; } return SomeView;})() : () => void >Outer.app.SomeView : () => void ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >SomeView : () => void >(function () { var SomeView = function() { var me = this; } return SomeView;})() : () => void >(function () { var SomeView = function() { var me = this; } return SomeView;}) : () => () => void @@ -43,9 +43,9 @@ Outer.app.SomeView = (function () { Outer.app.Inner = class { >Outer.app.Inner = class { constructor() { /** @type {number} */ this.y = 12; }} : typeof Inner >Outer.app.Inner : typeof Inner ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >Inner : typeof Inner >class { constructor() { /** @type {number} */ this.y = 12; }} : typeof Inner @@ -63,9 +63,9 @@ var example = new Outer.app.Inner(); >example : Inner >new Outer.app.Inner() : Inner >Outer.app.Inner : typeof Inner ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >Inner : typeof Inner example.y; @@ -77,9 +77,9 @@ example.y; Outer.app.statische = function (k) { >Outer.app.statische = function (k) { return k ** k;} : (k: number) => number >Outer.app.statische : (k: number) => number ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >statische : (k: number) => number >function (k) { return k ** k;} : (k: number) => number >k : number @@ -93,9 +93,9 @@ Outer.app.statische = function (k) { Outer.app.Application = (function () { >Outer.app.Application = (function () { /** * Application main class. * Will be instantiated & initialized by HTML page */ var Application = function () { var me = this; me.view = new Outer.app.SomeView(); }; return Application;})() : () => void >Outer.app.Application : () => void ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >Application : () => void >(function () { /** * Application main class. * Will be instantiated & initialized by HTML page */ var Application = function () { var me = this; me.view = new Outer.app.SomeView(); }; return Application;})() : () => void >(function () { /** * Application main class. * Will be instantiated & initialized by HTML page */ var Application = function () { var me = this; me.view = new Outer.app.SomeView(); }; return Application;}) : () => () => void @@ -120,9 +120,9 @@ Outer.app.Application = (function () { >view : any >new Outer.app.SomeView() : any >Outer.app.SomeView : () => void ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >SomeView : () => void }; @@ -135,18 +135,18 @@ var app = new Outer.app.Application(); >app : any >new Outer.app.Application() : any >Outer.app.Application : () => void ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >Application : () => void var inner = new Outer.app.Inner(); >inner : Inner >new Outer.app.Inner() : Inner >Outer.app.Inner : typeof Inner ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >Inner : typeof Inner inner.y; @@ -166,9 +166,9 @@ x.y; Outer.app.statische(101); // Infinity, duh >Outer.app.statische(101) : number >Outer.app.statische : (k: number) => number ->Outer.app : typeof __object ->Outer : typeof __object ->app : typeof __object +>Outer.app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } +>Outer : { [x: string]: any; app: { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; }; } +>app : { [x: string]: any; SomeView: () => void; Inner: typeof Inner; statische(k: number): number; Application: () => void; } >statische : (k: number) => number >101 : 101 From bb615ac3f9ef30589f1afe8a4487de8938108660 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Fri, 11 May 2018 13:47:44 +0300 Subject: [PATCH 05/69] Add declarationDir to excludeSpec --- src/compiler/commandLineParser.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index f648bddefe9a7..d9bfc93b78d65 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1607,10 +1607,13 @@ namespace ts { createCompilerDiagnosticOnlyIfJson(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); } } - else { - const outDir = raw.compilerOptions && raw.compilerOptions.outDir; - if (outDir) { - excludeSpecs = [outDir]; + else if (raw.compilerOptions) { + const outDir = raw.compilerOptions.outDir; + const declarationDir = raw.compilerOptions.declarationDir; + const excludeDirs = [outDir, declarationDir].filter(dir => dir); + + if (excludeDirs.length) { + excludeSpecs = excludeDirs; } } From de9ff1b0046a66f3d3d0d84fbe063af254be91be Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 11 May 2018 09:12:25 -0700 Subject: [PATCH 06/69] Assert:only merge into transient symbols --- src/compiler/checker.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0f1ee7e62d9a0..caa75a45eb987 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -892,6 +892,7 @@ namespace ts { function mergeSymbol(target: Symbol, source: Symbol) { if (!(target.flags & getExcludedSymbolFlags(source.flags)) || (source.flags | target.flags) & SymbolFlags.JSContainer) { + Debug.assert(!!(target.flags & SymbolFlags.Transient)); // Javascript static-property-assignment declarations always merge, even though they are also values if (source.flags & SymbolFlags.ValueModule && target.flags & SymbolFlags.ValueModule && target.constEnumOnlyModule && !source.constEnumOnlyModule) { // reset flag when merging instantiated module into value module that has only const enums From 2792ff97dda65ba56193f3ba41c21e2cff6329d5 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 11 May 2018 09:51:12 -0700 Subject: [PATCH 07/69] Add fourslash test case --- .../fourslash/jsSpecialAssignmentMerging.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/cases/fourslash/jsSpecialAssignmentMerging.ts diff --git a/tests/cases/fourslash/jsSpecialAssignmentMerging.ts b/tests/cases/fourslash/jsSpecialAssignmentMerging.ts new file mode 100644 index 0000000000000..fa093470baeaa --- /dev/null +++ b/tests/cases/fourslash/jsSpecialAssignmentMerging.ts @@ -0,0 +1,22 @@ +/// +// @noEmit: true +// @allowJs: true +// @checkJs: true + +// @Filename: b.d.ts +//// declare class C { } +// @Filename: a.js +//// C.prototype = { m: "q"; } +// @Filename: test.js +//// var c = new C() +//// /*1*/ +//// var c = new C() + +// #24015 +// This failed with 13 and up on my machine, so 20 is 2**7 more than needed. +for (let i = 0; i < 20; i++) { + goTo.marker('1'); + edit.insertLine('c'); + + verify.getSemanticDiagnostics([]) +} From 60d39d7f18d831706e2b067d5a8079cdd023291a Mon Sep 17 00:00:00 2001 From: Alexader Date: Fri, 11 May 2018 21:27:40 +0300 Subject: [PATCH 08/69] add tests --- src/compiler/commandLineParser.ts | 5 ++--- src/harness/unittests/tsconfigParsing.ts | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index d9bfc93b78d65..8b963409ab6ad 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1610,10 +1610,9 @@ namespace ts { else if (raw.compilerOptions) { const outDir = raw.compilerOptions.outDir; const declarationDir = raw.compilerOptions.declarationDir; - const excludeDirs = [outDir, declarationDir].filter(dir => dir); - if (excludeDirs.length) { - excludeSpecs = excludeDirs; + if (outDir || declarationDir) { + excludeSpecs = [outDir, declarationDir].filter(d => !!d); } } diff --git a/src/harness/unittests/tsconfigParsing.ts b/src/harness/unittests/tsconfigParsing.ts index f1b4d5265816b..7a47481b88d3f 100644 --- a/src/harness/unittests/tsconfigParsing.ts +++ b/src/harness/unittests/tsconfigParsing.ts @@ -217,6 +217,29 @@ namespace ts { assertParseFileList(tsconfigWithExclude, "tsconfig.json", rootDir, allFiles, allFiles); }); + it("exclude declarationDir unless overridden", () => { + const tsconfigWithoutExclude = + `{ + "compilerOptions": { + "declarationDir": "declarations" + } + }`; + const tsconfigWithExclude = + `{ + "compilerOptions": { + "declarationDir": "declarations" + }, + "exclude": [ "types" ] + }`; + + const rootDir = "/"; + const allFiles = ["/declarations/a.d.ts", "/a.ts"]; + const expectedFiles = ["/a.ts"]; + + assertParseFileList(tsconfigWithoutExclude, "tsconfig.json", rootDir, allFiles, expectedFiles); + assertParseFileList(tsconfigWithExclude, "tsconfig.json", rootDir, allFiles, allFiles); + }); + it("implicitly exclude common package folders", () => { assertParseFileList( `{}`, From dfef2fa9a29f29151809c0e79b3a48c5ecabc05d Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 11 May 2018 16:24:42 -0700 Subject: [PATCH 09/69] Add another test of js special assignment merging (#24070) --- .../fourslash/jsSpecialAssignmentMerging2.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/cases/fourslash/jsSpecialAssignmentMerging2.ts diff --git a/tests/cases/fourslash/jsSpecialAssignmentMerging2.ts b/tests/cases/fourslash/jsSpecialAssignmentMerging2.ts new file mode 100644 index 0000000000000..c04432fcc2770 --- /dev/null +++ b/tests/cases/fourslash/jsSpecialAssignmentMerging2.ts @@ -0,0 +1,24 @@ +/// +// @noEmit: true +// @allowJs: true +// @checkJs: true + +// @Filename: b.d.ts +//// declare namespace N { +//// class X { } +//// } +// @Filename: a.js +//// var N = {}; +//// N.X = function() { }; +// @Filename: test.js +//// var c = N.X +//// /*1*/ + +// #24015 +// This failed with 13 and up on my machine, so 20 is 2**7 more than needed. +for (let i = 0; i < 20; i++) { + goTo.marker('1'); + edit.insertLine('c'); + + verify.getSemanticDiagnostics([]) +} From 69f73eba168f509aa709bb42706d14370c638d9c Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 2 May 2018 14:16:39 -0700 Subject: [PATCH 10/69] Return mapped locations in alternate fields --- src/server/session.ts | 29 ++++++++++++++++++++++------- src/services/services.ts | 8 ++++++-- src/services/types.ts | 11 ++++++++--- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index 8d6defa1562bf..6cd3a7df56082 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -665,9 +665,8 @@ namespace ts.server { if (simplifiedResult) { return this.mapDefinitionInfo(definitions, project); } - else { - return definitions; - } + + return definitions.map(Session.mapToOriginalLocation); } private getDefinitionAndBoundSpan(args: protocol.FileLocationRequestArgs, simplifiedResult: boolean): protocol.DefinitionInfoAndBoundSpan | DefinitionInfoAndBoundSpan { @@ -691,13 +690,30 @@ namespace ts.server { }; } - return definitionAndBoundSpan; + return { + ...definitionAndBoundSpan, + definitions: definitionAndBoundSpan.definitions.map(Session.mapToOriginalLocation) + }; } private mapDefinitionInfo(definitions: ReadonlyArray, project: Project): ReadonlyArray { return definitions.map(def => this.toFileSpan(def.fileName, def.textSpan, project)); } + private static mapToOriginalLocation(def: T): T { + if (def.originalFileName) { + Debug.assert(def.originalTextSpan !== undefined, "originalTextSpan should be present if originalFileName is"); + return { + ...def, + fileName: def.originalFileName, + textSpan: def.originalTextSpan, + targetFileName: def.fileName, + targetTextSpan: def.textSpan + }; + } + return def; + } + private toFileSpan(fileName: string, textSpan: TextSpan, project: Project): protocol.FileSpan { const ls = project.getLanguageService(); const start = ls.toLineColumnOffset(fileName, textSpan.start); @@ -732,9 +748,8 @@ namespace ts.server { if (simplifiedResult) { return implementations.map(({ fileName, textSpan }) => this.toFileSpan(fileName, textSpan, project)); } - else { - return implementations; - } + + return implementations.map(Session.mapToOriginalLocation); } private getOccurrences(args: protocol.FileLocationRequestArgs): ReadonlyArray { diff --git a/src/services/services.ts b/src/services/services.ts index 700b07085a06e..401576c57b8ff 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1634,7 +1634,9 @@ namespace ts { textSpan: { start: newLoc.position, length: info.textSpan.length - } + }, + originalFileName: info.fileName, + originalTextSpan: info.textSpan }) ); @@ -1678,7 +1680,9 @@ namespace ts { textSpan: { start: newLoc.position, length: info.textSpan.length - } + }, + originalFileName: info.fileName, + originalTextSpan: info.textSpan }) ); diff --git a/src/services/types.ts b/src/services/types.ts index cf2e58a3712a6..0d15213cb1204 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -542,6 +542,13 @@ namespace ts { export interface DocumentSpan { textSpan: TextSpan; fileName: string; + + /** + * If the span represents a location that was remapped (e.g. via a .d.ts.map file), + * then the original filename and span will be specified here + */ + originalTextSpan?: TextSpan; + originalFileName?: string; } export interface RenameLocation extends DocumentSpan { @@ -654,9 +661,7 @@ namespace ts { indentMultiLineObjectLiteralBeginningOnBlankLine?: boolean; } - export interface DefinitionInfo { - fileName: string; - textSpan: TextSpan; + export interface DefinitionInfo extends DocumentSpan { kind: ScriptElementKind; name: string; containerKind: ScriptElementKind; From 70b6bd95c38fc954737dc0abe9129c49f59cd6e3 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 11 May 2018 20:44:21 -0700 Subject: [PATCH 11/69] Cut back on more 'caught exceptions' from vfs --- src/harness/fakes.ts | 4 ++-- src/harness/vfs.ts | 12 ++++++++++-- src/harness/vpath.ts | 7 ++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/harness/fakes.ts b/src/harness/fakes.ts index 79d3503cb8079..4fdd30c940e26 100644 --- a/src/harness/fakes.ts +++ b/src/harness/fakes.ts @@ -150,7 +150,7 @@ namespace fakes { private _getStats(path: string) { try { - return this.vfs.statSync(path); + return this.vfs.existsSync(path) ? this.vfs.statSync(path) : undefined; } catch { return undefined; @@ -332,7 +332,7 @@ namespace fakes { let fs = this.vfs; while (fs.shadowRoot) { try { - const shadowRootStats = fs.shadowRoot.statSync(canonicalFileName); + const shadowRootStats = fs.shadowRoot.existsSync(canonicalFileName) && fs.shadowRoot.statSync(canonicalFileName); if (shadowRootStats.dev !== stats.dev || shadowRootStats.ino !== stats.ino || shadowRootStats.mtimeMs !== stats.mtimeMs) { diff --git a/src/harness/vfs.ts b/src/harness/vfs.ts index 4972dd08925e1..34a48f5909104 100644 --- a/src/harness/vfs.ts +++ b/src/harness/vfs.ts @@ -384,6 +384,14 @@ namespace vfs { // POSIX API (aligns with NodeJS "fs" module API) + /** + * Determines whether a path exists. + */ + public existsSync(path: string) { + const result = this._walk(this._resolve(path), /*noFollow*/ true, () => "stop"); + return result !== undefined && result.node !== undefined; + } + /** * Get file status. If `path` is a symbolic link, it is dereferenced. * @@ -861,8 +869,8 @@ namespace vfs { */ private _resolve(path: string) { return this._cwd - ? vpath.resolve(this._cwd, vpath.validate(path, vpath.ValidationFlags.RelativeOrAbsolute)) - : vpath.validate(path, vpath.ValidationFlags.Absolute); + ? vpath.resolve(this._cwd, vpath.validate(path, vpath.ValidationFlags.RelativeOrAbsolute | vpath.ValidationFlags.AllowWildcard)) + : vpath.validate(path, vpath.ValidationFlags.Absolute | vpath.ValidationFlags.AllowWildcard); } private _applyFiles(files: FileSet, dirname: string) { diff --git a/src/harness/vpath.ts b/src/harness/vpath.ts index e2024f890c4c2..6211fc9278a63 100644 --- a/src/harness/vpath.ts +++ b/src/harness/vpath.ts @@ -26,7 +26,9 @@ namespace vpath { const invalidRootComponentRegExp = /^(?!(\/|\/\/\w+\/|[a-zA-Z]:\/?|)$)/; const invalidNavigableComponentRegExp = /[:*?"<>|]/; + const invalidNavigableComponentWithWildcardsRegExp = /[:"<>|]/; const invalidNonNavigableComponentRegExp = /^\.{1,2}$|[:*?"<>|]/; + const invalidNonNavigableComponentWithWildcardsRegExp = /^\.{1,2}$|[:"<>|]/; const extRegExp = /\.\w+$/; export const enum ValidationFlags { @@ -44,6 +46,7 @@ namespace vpath { AllowExtname = 1 << 8, AllowTrailingSeparator = 1 << 9, AllowNavigation = 1 << 10, + AllowWildcard = 1 << 11, /** Path must be a valid directory root */ Root = RequireRoot | AllowRoot | AllowTrailingSeparator, @@ -63,7 +66,9 @@ namespace vpath { const hasDirname = components.length > 2; const hasBasename = components.length > 1; const hasExtname = hasBasename && extRegExp.test(components[components.length - 1]); - const invalidComponentRegExp = flags & ValidationFlags.AllowNavigation ? invalidNavigableComponentRegExp : invalidNonNavigableComponentRegExp; + const invalidComponentRegExp = flags & ValidationFlags.AllowNavigation + ? flags & ValidationFlags.AllowWildcard ? invalidNavigableComponentWithWildcardsRegExp : invalidNavigableComponentRegExp + : flags & ValidationFlags.AllowWildcard ? invalidNonNavigableComponentWithWildcardsRegExp : invalidNonNavigableComponentRegExp; // Validate required components if (flags & ValidationFlags.RequireRoot && !hasRoot) return false; From 8a63a8caa496fb3aa255795fce1ecad7ea1128d5 Mon Sep 17 00:00:00 2001 From: csigs Date: Sat, 12 May 2018 04:10:28 +0000 Subject: [PATCH 12/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl index 37c5615f81ad4..6a3fb08c28733 100644 --- a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -4346,6 +4346,9 @@ + + + @@ -6539,6 +6542,9 @@ + + + From f5281d62cc6408d73f8f686849acb9c946530943 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Sat, 12 May 2018 02:07:31 -0700 Subject: [PATCH 13/69] Fix async generator rejection handling --- src/compiler/transformers/esnext.ts | 10 +++-- src/harness/compilerRunner.ts | 2 +- .../reference/asyncImportNestedYield.js | 2 +- ...ter.asyncGenerators.classMethods.es2015.js | 34 ++++++++------- ...mitter.asyncGenerators.classMethods.es5.js | 34 ++++++++------- ...cGenerators.functionDeclarations.es2015.js | 30 +++++++------ ...syncGenerators.functionDeclarations.es5.js | 30 +++++++------ ...ncGenerators.functionExpressions.es2015.js | 30 +++++++------ ...asyncGenerators.functionExpressions.es5.js | 30 +++++++------ ...cGenerators.objectLiteralMethods.es2015.js | 30 +++++++------ ...syncGenerators.objectLiteralMethods.es5.js | 30 +++++++------ .../reference/emitter.forAwait.es2015.js | 42 ++++++++++++------- .../reference/emitter.forAwait.es2017.js | 42 ++++++++++++------- .../reference/emitter.forAwait.es5.js | 42 ++++++++++++------- 14 files changed, 229 insertions(+), 159 deletions(-) diff --git a/src/compiler/transformers/esnext.ts b/src/compiler/transformers/esnext.ts index fa5ec555ed139..d054aaaf909df 100644 --- a/src/compiler/transformers/esnext.ts +++ b/src/compiler/transformers/esnext.ts @@ -924,7 +924,7 @@ namespace ts { return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -956,7 +956,7 @@ namespace ts { var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } };` }; @@ -979,8 +979,10 @@ namespace ts { text: ` var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } };` }; diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 91a95e22c89d2..b899f3107c578 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -73,7 +73,7 @@ class CompilerBaselineRunner extends RunnerBase { }); }); } - describe(`${this.testSuiteName} tests for ${fileName}}`, () => { + describe(`${this.testSuiteName} tests for ${fileName}`, () => { this.runSuite(fileName, test); }); } diff --git a/tests/baselines/reference/asyncImportNestedYield.js b/tests/baselines/reference/asyncImportNestedYield.js index 776caed516788..74d6dd59629ad 100644 --- a/tests/baselines/reference/asyncImportNestedYield.js +++ b/tests/baselines/reference/asyncImportNestedYield.js @@ -38,7 +38,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js index 58dbe061d18af..821bd29afaba2 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js @@ -68,7 +68,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -87,7 +87,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -107,7 +107,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -122,14 +122,16 @@ class C3 { //// [C4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -137,7 +139,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -157,20 +159,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; class C5 { f() { @@ -187,7 +191,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -207,7 +211,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -227,7 +231,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -249,7 +253,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js index 0387225261cd5..ed20f908dba91 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js @@ -95,7 +95,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -147,7 +147,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -206,7 +206,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -260,14 +260,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -275,7 +277,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -344,20 +346,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -431,7 +435,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -489,7 +493,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -541,7 +545,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -606,7 +610,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js index 1d242f4ce6b6c..c0a16fa076b45 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js @@ -37,7 +37,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -54,7 +54,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -72,7 +72,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -85,14 +85,16 @@ function f3() { //// [F4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -100,7 +102,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -118,20 +120,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; function f5() { return __asyncGenerator(this, arguments, function* f5_1() { @@ -146,7 +150,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -164,7 +168,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js index 88a39d18cd011..eda35c42755e0 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js @@ -64,7 +64,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -111,7 +111,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -165,7 +165,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -214,14 +214,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -229,7 +231,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -293,20 +295,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -375,7 +379,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -428,7 +432,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js index 9c964275ff34e..890ab5e89b686 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js @@ -37,7 +37,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -54,7 +54,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -72,7 +72,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -85,14 +85,16 @@ const f3 = function () { //// [F4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -100,7 +102,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -118,20 +120,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; const f5 = function () { return __asyncGenerator(this, arguments, function* () { @@ -146,7 +150,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -164,7 +168,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js index 969036e96af7a..80c790a9cdf93 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js @@ -64,7 +64,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -111,7 +111,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -165,7 +165,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -214,14 +214,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -229,7 +231,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -293,20 +295,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -375,7 +379,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -428,7 +432,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js index 0f64e788b2956..43203397b0fef 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js @@ -51,7 +51,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -70,7 +70,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -90,7 +90,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -105,14 +105,16 @@ const o3 = { //// [O4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -120,7 +122,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -140,20 +142,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; const o5 = { f() { @@ -170,7 +174,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -190,7 +194,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js index ae2174497154e..ac2930de78362 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js @@ -78,7 +78,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -127,7 +127,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -183,7 +183,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -234,14 +234,16 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -249,7 +251,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -315,20 +317,22 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; }; } + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -399,7 +403,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -454,7 +458,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.forAwait.es2015.js b/tests/baselines/reference/emitter.forAwait.es2015.js index 62728018e6a85..6a29e7fad0a50 100644 --- a/tests/baselines/reference/emitter.forAwait.es2015.js +++ b/tests/baselines/reference/emitter.forAwait.es2015.js @@ -52,8 +52,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f1() { return __awaiter(this, void 0, void 0, function* () { @@ -84,8 +86,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f2() { return __awaiter(this, void 0, void 0, function* () { @@ -108,8 +112,10 @@ function f2() { //// [file3.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -118,7 +124,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -144,8 +150,10 @@ function f3() { //// [file4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -154,7 +162,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -188,8 +196,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; // https://github.com/Microsoft/TypeScript/issues/21363 function f5() { @@ -214,8 +224,10 @@ function f5() { //// [file6.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -224,7 +236,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.forAwait.es2017.js b/tests/baselines/reference/emitter.forAwait.es2017.js index 2ef0812fad477..63e833e81d22d 100644 --- a/tests/baselines/reference/emitter.forAwait.es2017.js +++ b/tests/baselines/reference/emitter.forAwait.es2017.js @@ -44,8 +44,10 @@ async function* f6() { //// [file1.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; async function f1() { var e_1, _a; @@ -66,8 +68,10 @@ async function f1() { //// [file2.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; async function f2() { var e_1, _a; @@ -88,8 +92,10 @@ async function f2() { //// [file3.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -98,7 +104,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -124,8 +130,10 @@ function f3() { //// [file4.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -134,7 +142,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -160,8 +168,10 @@ function f4() { //// [file5.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; // https://github.com/Microsoft/TypeScript/issues/21363 async function f5() { @@ -184,8 +194,10 @@ async function f5() { //// [file6.js] var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -194,7 +206,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } diff --git a/tests/baselines/reference/emitter.forAwait.es5.js b/tests/baselines/reference/emitter.forAwait.es5.js index ec03fdb1e27c0..b40adeb443f4c 100644 --- a/tests/baselines/reference/emitter.forAwait.es5.js +++ b/tests/baselines/reference/emitter.forAwait.es5.js @@ -79,8 +79,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f1() { return __awaiter(this, void 0, void 0, function () { @@ -159,8 +161,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f2() { return __awaiter(this, void 0, void 0, function () { @@ -231,8 +235,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -241,7 +247,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -316,8 +322,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -326,7 +334,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } @@ -409,8 +417,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; // https://github.com/Microsoft/TypeScript/issues/21363 function f5() { @@ -482,8 +492,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator]; - return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { @@ -492,7 +504,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } From 8a0aa993273b9409eb14ecda47614eb54c0270af Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 14 May 2018 08:39:32 -0700 Subject: [PATCH 14/69] Inject token into push like vsts does --- scripts/open-user-pr.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/open-user-pr.ts b/scripts/open-user-pr.ts index 746d1946e4e27..9d484f00ed17e 100644 --- a/scripts/open-user-pr.ts +++ b/scripts/open-user-pr.ts @@ -27,7 +27,7 @@ runSequence([ ["git", ["add", "."]], // Add all changes ["git", ["commit", "-m", `"Update user baselines"`]], // Commit all changes ["git", ["remote", "add", "fork", remoteUrl]], // Add the remote fork - ["git", ["push", "--set-upstream", "fork", branchName]] // push the branch + ["git", ["-c", `http.extraheader="AUTHORIZATION: basic ${process.argv[2]}"`, "push", "--set-upstream", "fork", branchName]] // push the branch ]); const gh = new Octokit(); From d470b0228a0835180148ea80382804206a5f0e2b Mon Sep 17 00:00:00 2001 From: csigs Date: Mon, 14 May 2018 16:10:27 +0000 Subject: [PATCH 15/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 136 ++++++++++++++++-- 1 file changed, 128 insertions(+), 8 deletions(-) diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl index 9d3620e29e46d..1b6070bf4bacb 100644 --- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -1104,6 +1104,15 @@ + + + + + + + + + @@ -2040,6 +2049,15 @@ + + + + + + + + + @@ -2418,6 +2436,15 @@ + + + + + + + + + @@ -3051,21 +3078,18 @@ - + - + - + - + - - - - + @@ -3141,6 +3165,15 @@ + + + + + + + + + @@ -3696,6 +3729,15 @@ + + + + + + + + + @@ -4302,6 +4344,9 @@ + + + @@ -5229,6 +5274,12 @@ + + + + + + @@ -5604,6 +5655,9 @@ + + + @@ -5625,6 +5679,24 @@ + + + + + + + + + + + + + + + + + + @@ -6018,6 +6090,24 @@ + + + + + + + + + + + + + + + + + + @@ -6444,6 +6534,21 @@ + + + + + + + + + + + + + + + @@ -6456,6 +6561,15 @@ + + + + + + + + + @@ -6465,6 +6579,12 @@ + + + + + + From 86145eedb13c27c8ce8c3917347836ce2b3fc233 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 14 May 2018 09:58:32 -0700 Subject: [PATCH 16/69] Update API baselines --- tests/baselines/reference/api/tsserverlibrary.d.ts | 11 ++++++++--- tests/baselines/reference/api/typescript.d.ts | 10 +++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index c069dbf4d0473..42e15980a9c6c 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -4701,6 +4701,12 @@ declare namespace ts { interface DocumentSpan { textSpan: TextSpan; fileName: string; + /** + * If the span represents a location that was remapped (e.g. via a .d.ts.map file), + * then the original filename and span will be specified here + */ + originalTextSpan?: TextSpan; + originalFileName?: string; } interface RenameLocation extends DocumentSpan { } @@ -4798,9 +4804,7 @@ declare namespace ts { insertSpaceBeforeTypeAnnotation?: boolean; indentMultiLineObjectLiteralBeginningOnBlankLine?: boolean; } - interface DefinitionInfo { - fileName: string; - textSpan: TextSpan; + interface DefinitionInfo extends DocumentSpan { kind: ScriptElementKind; name: string; containerKind: ScriptElementKind; @@ -8410,6 +8414,7 @@ declare namespace ts.server { private getDefinition; private getDefinitionAndBoundSpan; private mapDefinitionInfo; + private static mapToOriginalLocation; private toFileSpan; private getTypeDefinition; private getImplementation; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 4887de7fd2fc2..05425f8053976 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4701,6 +4701,12 @@ declare namespace ts { interface DocumentSpan { textSpan: TextSpan; fileName: string; + /** + * If the span represents a location that was remapped (e.g. via a .d.ts.map file), + * then the original filename and span will be specified here + */ + originalTextSpan?: TextSpan; + originalFileName?: string; } interface RenameLocation extends DocumentSpan { } @@ -4798,9 +4804,7 @@ declare namespace ts { insertSpaceBeforeTypeAnnotation?: boolean; indentMultiLineObjectLiteralBeginningOnBlankLine?: boolean; } - interface DefinitionInfo { - fileName: string; - textSpan: TextSpan; + interface DefinitionInfo extends DocumentSpan { kind: ScriptElementKind; name: string; containerKind: ScriptElementKind; From 560371d7a07ad49f404899e80d742a94410f742a Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 14 May 2018 10:27:13 -0700 Subject: [PATCH 17/69] Alter basic auth strategy --- scripts/open-user-pr.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/open-user-pr.ts b/scripts/open-user-pr.ts index 9d484f00ed17e..75dfff5b2c8b0 100644 --- a/scripts/open-user-pr.ts +++ b/scripts/open-user-pr.ts @@ -19,7 +19,7 @@ const userName = process.env.GH_USERNAME; const reviewers = ["weswigham", "sandersn", "mhegazy"] const now = new Date(); const branchName = `user-update-${now.getFullYear()}${padNum(now.getMonth())}${padNum(now.getDay())}`; -const remoteUrl = `https://github.com/${userName}/TypeScript.git`; +const remoteUrl = `https://${process.argv[2]}@github.com/${userName}/TypeScript.git`; runSequence([ ["git", ["checkout", "."]], // reset any changes ["node", ["./node_modules/jake/bin/cli.js", "baseline-accept"]], // accept baselines @@ -27,7 +27,7 @@ runSequence([ ["git", ["add", "."]], // Add all changes ["git", ["commit", "-m", `"Update user baselines"`]], // Commit all changes ["git", ["remote", "add", "fork", remoteUrl]], // Add the remote fork - ["git", ["-c", `http.extraheader="AUTHORIZATION: basic ${process.argv[2]}"`, "push", "--set-upstream", "fork", branchName]] // push the branch + ["git", ["push", "--set-upstream", "fork", branchName]] // push the branch ]); const gh = new Octokit(); From 7c07b16fb1a2e4198abd6c20fa6579b32fc65ed4 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 14 May 2018 10:38:00 -0700 Subject: [PATCH 18/69] Fix JSDoc type resolution Breaks type parameter resolution that is looked up through prototype methods, though. I need to fix that still. --- src/compiler/checker.ts | 33 ++++++++++++------- src/compiler/utilities.ts | 8 ++--- .../reference/paramTagTypeResolution.symbols | 23 +++++++++++++ .../reference/paramTagTypeResolution.types | 31 +++++++++++++++++ .../jsdoc/paramTagTypeResolution.ts | 13 ++++++++ 5 files changed, 93 insertions(+), 15 deletions(-) create mode 100644 tests/baselines/reference/paramTagTypeResolution.symbols create mode 100644 tests/baselines/reference/paramTagTypeResolution.types create mode 100644 tests/cases/conformance/jsdoc/paramTagTypeResolution.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ec6db3a273893..e47e2b6cbed5e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2145,22 +2145,24 @@ namespace ts { */ function resolveEntityNameFromJSSpecialAssignment(name: Identifier, meaning: SymbolFlags) { if (isJSDocTypeReference(name.parent)) { - const host = getJSDocHost(name.parent); - if (host) { - const secondaryLocation = getJSSpecialAssignmentSymbol(getJSDocHost(name.parent.parent.parent as JSDocTag)); - return secondaryLocation && resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); + const secondaryLocation = getJSSpecialAssignmentSymbol(name.parent); + if (secondaryLocation) { + return resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); } } } - function getJSSpecialAssignmentSymbol(host: HasJSDoc): Declaration | undefined { - if (isPropertyAssignment(host) && isFunctionLike(host.initializer)) { - const symbol = getSymbolOfNode(host.initializer); + function getJSSpecialAssignmentSymbol(node: TypeReferenceNode): Declaration | undefined { + const sig = getHostSignatureFromJSDoc(node); + if (sig) { + const symbol = getSymbolOfNode(sig); return symbol && symbol.valueDeclaration; } - else if (isExpressionStatement(host) && - isBinaryExpression(host.expression) && - getSpecialPropertyAssignmentKind(host.expression) === SpecialPropertyAssignmentKind.PrototypeProperty) { + const host = getJSDocHost(node); + if (host && + isExpressionStatement(host) && + isBinaryExpression(host.expression) && + getSpecialPropertyAssignmentKind(host.expression) === SpecialPropertyAssignmentKind.PrototypeProperty) { const symbol = getSymbolOfNode(host.expression.left); return symbol && symbol.parent.valueDeclaration; } @@ -9534,7 +9536,16 @@ namespace ts { // parameters that are in scope (and therefore potentially referenced). For type literals that // aren't the right hand side of a generic type alias declaration we optimize by reducing the // set of type parameters to those that are possibly referenced in the literal. - const declaration = symbol.declarations[0]; + let declaration = symbol.declarations[0]; + if (isInJavaScriptFile(declaration)) { + const paramTag = findAncestor(declaration, isJSDocParameterTag); + if (paramTag) { + const paramSymbol = getParameterSymbolFromJSDoc(paramTag); + if (paramSymbol) { + declaration = paramSymbol.valueDeclaration; + } + } + } let outerTypeParameters = getOuterTypeParameters(declaration, /*includeThisTypes*/ true); if (isJavaScriptConstructor(declaration)) { const templateTagParameters = getTypeParametersFromDeclaration(declaration as DeclarationWithTypeParameters); diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 3d382be902d6d..8d521d02d6b45 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1866,7 +1866,7 @@ namespace ts { // */ // var x = function(name) { return name.length; } if (parent.parent && - (getSingleVariableOfVariableStatement(parent.parent) === node || getSourceOfAssignment(parent.parent))) { + (getSingleVariableOfVariableStatement(parent.parent) === node)) { getJSDocCommentsAndTagsWorker(parent.parent); } if (parent.parent && parent.parent.parent && @@ -1875,8 +1875,8 @@ namespace ts { getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } - if (isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) !== SpecialPropertyAssignmentKind.None || - isBinaryExpression(parent) && getSpecialPropertyAssignmentKind(parent) !== SpecialPropertyAssignmentKind.None || + if (isBinaryExpression(node) && node.operatorToken.kind === SyntaxKind.EqualsToken || + isBinaryExpression(parent) && parent.operatorToken.kind === SyntaxKind.EqualsToken || node.kind === SyntaxKind.PropertyAccessExpression && node.parent && node.parent.kind === SyntaxKind.ExpressionStatement) { getJSDocCommentsAndTagsWorker(parent); } @@ -1913,7 +1913,7 @@ namespace ts { return parameter && parameter.symbol; } - export function getHostSignatureFromJSDoc(node: JSDocTag): SignatureDeclaration | undefined { + export function getHostSignatureFromJSDoc(node: Node): SignatureDeclaration | undefined { const host = getJSDocHost(node); const decl = getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || diff --git a/tests/baselines/reference/paramTagTypeResolution.symbols b/tests/baselines/reference/paramTagTypeResolution.symbols new file mode 100644 index 0000000000000..1584e2fcb95c6 --- /dev/null +++ b/tests/baselines/reference/paramTagTypeResolution.symbols @@ -0,0 +1,23 @@ +=== tests/cases/conformance/jsdoc/main.js === +var f = require('./first'); +>f : Symbol(f, Decl(main.js, 0, 3)) +>require : Symbol(require) +>'./first' : Symbol("tests/cases/conformance/jsdoc/first", Decl(first.js, 0, 0)) + +f(1, n => { }) +>f : Symbol(f, Decl(main.js, 0, 3)) +>n : Symbol(n, Decl(main.js, 1, 4)) + +=== tests/cases/conformance/jsdoc/first.js === +/** @template T + * @param {T} x + * @param {(t: T) => void} k + */ +module.exports = function (x, k) { return k(x) } +>module : Symbol(export=, Decl(first.js, 0, 0)) +>exports : Symbol(export=, Decl(first.js, 0, 0)) +>x : Symbol(x, Decl(first.js, 4, 27)) +>k : Symbol(k, Decl(first.js, 4, 29)) +>k : Symbol(k, Decl(first.js, 4, 29)) +>x : Symbol(x, Decl(first.js, 4, 27)) + diff --git a/tests/baselines/reference/paramTagTypeResolution.types b/tests/baselines/reference/paramTagTypeResolution.types new file mode 100644 index 0000000000000..daf7749c6bb84 --- /dev/null +++ b/tests/baselines/reference/paramTagTypeResolution.types @@ -0,0 +1,31 @@ +=== tests/cases/conformance/jsdoc/main.js === +var f = require('./first'); +>f : (x: T, k: (t: T) => void) => void +>require('./first') : (x: T, k: (t: T) => void) => void +>require : any +>'./first' : "./first" + +f(1, n => { }) +>f(1, n => { }) : void +>f : (x: T, k: (t: T) => void) => void +>1 : 1 +>n => { } : (n: number) => void +>n : number + +=== tests/cases/conformance/jsdoc/first.js === +/** @template T + * @param {T} x + * @param {(t: T) => void} k + */ +module.exports = function (x, k) { return k(x) } +>module.exports = function (x, k) { return k(x) } : (x: T, k: (t: T) => void) => void +>module.exports : any +>module : any +>exports : any +>function (x, k) { return k(x) } : (x: T, k: (t: T) => void) => void +>x : T +>k : (t: T) => void +>k(x) : void +>k : (t: T) => void +>x : T + diff --git a/tests/cases/conformance/jsdoc/paramTagTypeResolution.ts b/tests/cases/conformance/jsdoc/paramTagTypeResolution.ts new file mode 100644 index 0000000000000..0256651234d25 --- /dev/null +++ b/tests/cases/conformance/jsdoc/paramTagTypeResolution.ts @@ -0,0 +1,13 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: first.js +/** @template T + * @param {T} x + * @param {(t: T) => void} k + */ +module.exports = function (x, k) { return k(x) } + +// @Filename: main.js +var f = require('./first'); +f(1, n => { }) From 64b1c23a9bd09ca3f78e4ae35911afd5f65ef849 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 14 May 2018 10:54:40 -0700 Subject: [PATCH 19/69] Push through original mapping location --- src/services/services.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 401576c57b8ff..628892960afd9 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1600,10 +1600,10 @@ namespace ts { function makeGetTargetOfMappedPosition( extract: (original: TIn) => sourcemaps.SourceMappableLocation, - create: (result: sourcemaps.SourceMappableLocation, original: TIn) => TIn + create: (result: sourcemaps.SourceMappableLocation, original: TIn, firstOriginal: TIn) => TIn ) { return getTargetOfMappedPosition; - function getTargetOfMappedPosition(input: TIn): TIn { + function getTargetOfMappedPosition(input: TIn, firstOriginal = input): TIn { const info = extract(input); if (endsWith(info.fileName, Extension.Dts)) { let file: SourceFileLike = program.getSourceFile(info.fileName); @@ -1617,7 +1617,7 @@ namespace ts { const mapper = getSourceMapper(info.fileName, file); const newLoc = mapper.getOriginalPosition(info); if (newLoc === info) return input; - return getTargetOfMappedPosition(create(newLoc, input)); + return getTargetOfMappedPosition(create(newLoc, input, firstOriginal), firstOriginal); } return input; } @@ -1625,7 +1625,7 @@ namespace ts { const getTargetOfMappedDeclarationInfo = makeGetTargetOfMappedPosition( (info: DefinitionInfo) => ({ fileName: info.fileName, position: info.textSpan.start }), - (newLoc, info) => ({ + (newLoc, info, firstOriginal) => ({ containerKind: info.containerKind, containerName: info.containerName, fileName: newLoc.fileName, @@ -1635,13 +1635,13 @@ namespace ts { start: newLoc.position, length: info.textSpan.length }, - originalFileName: info.fileName, - originalTextSpan: info.textSpan + originalFileName: firstOriginal.fileName, + originalTextSpan: firstOriginal.textSpan }) ); function getTargetOfMappedDeclarationFiles(infos: ReadonlyArray): DefinitionInfo[] { - return map(infos, getTargetOfMappedDeclarationInfo); + return map(infos, d => getTargetOfMappedDeclarationInfo(d)); } /// Goto definition @@ -1687,7 +1687,7 @@ namespace ts { ); function getTargetOfMappedImplementationLocations(infos: ReadonlyArray): ImplementationLocation[] { - return map(infos, getTargetOfMappedImplementationLocation); + return map(infos, d => getTargetOfMappedImplementationLocation(d)); } function getImplementationAtPosition(fileName: string, position: number): ImplementationLocation[] { From b58e4e1fa18b977d11414ae53c0523cf9c3bcd5c Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 14 May 2018 11:20:04 -0700 Subject: [PATCH 20/69] Reduce aggression of parenthesis removal in ts transform (#24073) --- src/compiler/transformers/ts.ts | 5 +++++ .../reference/parenthesizedArrowExpressionASI.js | 11 +++++++++++ .../parenthesizedArrowExpressionASI.symbols | 11 +++++++++++ .../parenthesizedArrowExpressionASI.types | 14 ++++++++++++++ .../compiler/parenthesizedArrowExpressionASI.ts | 4 ++++ 5 files changed, 45 insertions(+) create mode 100644 tests/baselines/reference/parenthesizedArrowExpressionASI.js create mode 100644 tests/baselines/reference/parenthesizedArrowExpressionASI.symbols create mode 100644 tests/baselines/reference/parenthesizedArrowExpressionASI.types create mode 100644 tests/cases/compiler/parenthesizedArrowExpressionASI.ts diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index b358b13b5023e..67c9ddfc788f9 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -2534,6 +2534,11 @@ namespace ts { // we can safely elide the parentheses here, as a new synthetic // ParenthesizedExpression will be inserted if we remove parentheses too // aggressively. + // HOWEVER - if there are leading comments on the expression itself, to handle ASI + // correctly for return and throw, we must keep the parenthesis + if (length(getLeadingCommentRangesOfNode(expression, currentSourceFile))) { + return updateParen(node, expression); + } return createPartiallyEmittedExpression(expression, node); } diff --git a/tests/baselines/reference/parenthesizedArrowExpressionASI.js b/tests/baselines/reference/parenthesizedArrowExpressionASI.js new file mode 100644 index 0000000000000..d27ddfb1216fa --- /dev/null +++ b/tests/baselines/reference/parenthesizedArrowExpressionASI.js @@ -0,0 +1,11 @@ +//// [parenthesizedArrowExpressionASI.ts] +const x = (a: any[]) => ( + // comment + undefined as number +); + + +//// [parenthesizedArrowExpressionASI.js] +var x = function (a) { return ( +// comment +undefined); }; diff --git a/tests/baselines/reference/parenthesizedArrowExpressionASI.symbols b/tests/baselines/reference/parenthesizedArrowExpressionASI.symbols new file mode 100644 index 0000000000000..25b3669cca30b --- /dev/null +++ b/tests/baselines/reference/parenthesizedArrowExpressionASI.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/parenthesizedArrowExpressionASI.ts === +const x = (a: any[]) => ( +>x : Symbol(x, Decl(parenthesizedArrowExpressionASI.ts, 0, 5)) +>a : Symbol(a, Decl(parenthesizedArrowExpressionASI.ts, 0, 11)) + + // comment + undefined as number +>undefined : Symbol(undefined) + +); + diff --git a/tests/baselines/reference/parenthesizedArrowExpressionASI.types b/tests/baselines/reference/parenthesizedArrowExpressionASI.types new file mode 100644 index 0000000000000..43af9b4b4f827 --- /dev/null +++ b/tests/baselines/reference/parenthesizedArrowExpressionASI.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/parenthesizedArrowExpressionASI.ts === +const x = (a: any[]) => ( +>x : (a: any[]) => number +>(a: any[]) => ( // comment undefined as number) : (a: any[]) => number +>a : any[] +>( // comment undefined as number) : number + + // comment + undefined as number +>undefined as number : number +>undefined : undefined + +); + diff --git a/tests/cases/compiler/parenthesizedArrowExpressionASI.ts b/tests/cases/compiler/parenthesizedArrowExpressionASI.ts new file mode 100644 index 0000000000000..373d448f9fc6b --- /dev/null +++ b/tests/cases/compiler/parenthesizedArrowExpressionASI.ts @@ -0,0 +1,4 @@ +const x = (a: any[]) => ( + // comment + undefined as number +); From 9b6378b9386425572ee3ba0c27f2bcf2c78d02f1 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 14 May 2018 11:32:16 -0700 Subject: [PATCH 21/69] Use SHA256 hash for project info telemetry (#24099) * Use SHA256 hash for project info telemetry * Update API baselines --- src/compiler/sys.ts | 14 +++++++++++--- src/harness/unittests/telemetry.ts | 9 +++------ src/harness/unittests/tsserverProjectSystem.ts | 4 ++-- src/harness/virtualFileSystemWithWatch.ts | 4 ++++ src/server/editorServices.ts | 4 ++-- tests/baselines/reference/api/tsserverlibrary.d.ts | 3 ++- tests/baselines/reference/api/typescript.d.ts | 3 ++- 7 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 688400fc6d5c2..05620afadfca4 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -448,10 +448,11 @@ namespace ts { readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[]; getModifiedTime?(path: string): Date; /** - * This should be cryptographically secure. * A good implementation is node.js' `crypto.createHash`. (https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm) */ createHash?(data: string): string; + /** This must be cryptographically secure. Only implement this method using `crypto.createHash("sha256")`. */ + createSHA256Hash?(data: string): string; getMemoryUsage?(): number; exit(exitCode?: number): void; realpath?(path: string): string; @@ -527,7 +528,7 @@ namespace ts { const _path = require("path"); const _os = require("os"); // crypto can be absent on reduced node installations - let _crypto: any; + let _crypto: typeof import("crypto"); try { _crypto = require("crypto"); } @@ -590,6 +591,7 @@ namespace ts { readDirectory, getModifiedTime, createHash: _crypto ? createMD5HashUsingNativeCrypto : generateDjb2Hash, + createSHA256Hash: _crypto ? createSHA256Hash : undefined, getMemoryUsage() { if (global.gc) { global.gc(); @@ -1072,11 +1074,17 @@ namespace ts { return `${chars.reduce((prev, curr) => ((prev << 5) + prev) + curr, 5381)}`; } - function createMD5HashUsingNativeCrypto(data: string) { + function createMD5HashUsingNativeCrypto(data: string): string { const hash = _crypto.createHash("md5"); hash.update(data); return hash.digest("hex"); } + + function createSHA256Hash(data: string): string { + const hash = _crypto.createHash("sha256"); + hash.update(data); + return hash.digest("hex"); + } } function getChakraSystem(): System { diff --git a/src/harness/unittests/telemetry.ts b/src/harness/unittests/telemetry.ts index e3649ae1c7974..53025e15a9c54 100644 --- a/src/harness/unittests/telemetry.ts +++ b/src/harness/unittests/telemetry.ts @@ -59,7 +59,6 @@ namespace ts.projectSystem { // TODO: Apparently compilerOptions is mutated, so have to repeat it here! et.assertProjectInfoTelemetryEvent({ - projectId: Harness.mockHash("/hunter2/foo.csproj"), compilerOptions: { strict: true }, compileOnSave: true, // These properties can't be present for an external project, so they are undefined instead of false. @@ -69,7 +68,7 @@ namespace ts.projectSystem { exclude: undefined, configFileName: "other", projectType: "external", - }); + }, "/hunter2/foo.csproj"); // Also test that opening an external project only sends an event once. @@ -202,7 +201,6 @@ namespace ts.projectSystem { const et = new TestServerEventManager([jsconfig, file]); et.service.openClientFile(file.path); et.assertProjectInfoTelemetryEvent({ - projectId: Harness.mockHash("/jsconfig.json"), fileStats: fileStats({ js: 1 }), compilerOptions: autoJsCompilerOptions, typeAcquisition: { @@ -211,7 +209,7 @@ namespace ts.projectSystem { exclude: false, }, configFileName: "jsconfig.json", - }); + }, "/jsconfig.json"); }); it("detects whether language service was disabled", () => { @@ -222,7 +220,6 @@ namespace ts.projectSystem { et.service.openClientFile(file.path); et.getEvent(server.ProjectLanguageServiceStateEvent); et.assertProjectInfoTelemetryEvent({ - projectId: Harness.mockHash("/jsconfig.json"), fileStats: fileStats({ js: 1 }), compilerOptions: autoJsCompilerOptions, configFileName: "jsconfig.json", @@ -232,7 +229,7 @@ namespace ts.projectSystem { exclude: false, }, languageServiceEnabled: false, - }); + }, "/jsconfig.json"); }); describe("open files telemetry", () => { diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index 980a27446f7f1..8524d46e094d8 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -214,9 +214,9 @@ namespace ts.projectSystem { assert.equal(eventData.triggerFile, triggerFile); } - assertProjectInfoTelemetryEvent(partial: Partial, configFile?: string): void { + assertProjectInfoTelemetryEvent(partial: Partial, configFile = "/tsconfig.json"): void { assert.deepEqual(this.getEvent(server.ProjectInfoTelemetryEvent), { - projectId: Harness.mockHash(configFile || "/tsconfig.json"), + projectId: sys.createSHA256Hash(configFile), fileStats: fileStats({ ts: 1 }), compilerOptions: {}, extends: false, diff --git a/src/harness/virtualFileSystemWithWatch.ts b/src/harness/virtualFileSystemWithWatch.ts index ef3d4955e420c..96873f1c08325 100644 --- a/src/harness/virtualFileSystemWithWatch.ts +++ b/src/harness/virtualFileSystemWithWatch.ts @@ -811,6 +811,10 @@ interface Array {}` return Harness.mockHash(s); } + createSHA256Hash(s: string): string { + return sys.createSHA256Hash(s); + } + watchFile(fileName: string, cb: FileWatcherCallback, pollingInterval: number) { if (this.dynamicPriorityWatchFile) { return this.dynamicPriorityWatchFile(fileName, cb, pollingInterval); diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index a5a4bceb43ce6..459b4b12d8314 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1429,12 +1429,12 @@ namespace ts.server { } this.seenProjects.set(projectKey, true); - if (!this.eventHandler) { + if (!this.eventHandler || !this.host.createSHA256Hash) { return; } const data: ProjectInfoTelemetryEventData = { - projectId: this.host.createHash(projectKey), + projectId: this.host.createSHA256Hash(projectKey), fileStats: countEachFileTypes(project.getScriptInfos()), compilerOptions: convertCompilerOptionsForTelemetry(project.getCompilationSettings()), typeAcquisition: convertTypeAcquisition(project.getTypeAcquisition()), diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index c069dbf4d0473..6a9f6117d396b 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2980,10 +2980,11 @@ declare namespace ts { readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[]; getModifiedTime?(path: string): Date; /** - * This should be cryptographically secure. * A good implementation is node.js' `crypto.createHash`. (https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm) */ createHash?(data: string): string; + /** This must be cryptographically secure. Only implement this method using `crypto.createHash("sha256")`. */ + createSHA256Hash?(data: string): string; getMemoryUsage?(): number; exit(exitCode?: number): void; realpath?(path: string): string; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 4887de7fd2fc2..db6ce733f229c 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2980,10 +2980,11 @@ declare namespace ts { readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[]; getModifiedTime?(path: string): Date; /** - * This should be cryptographically secure. * A good implementation is node.js' `crypto.createHash`. (https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm) */ createHash?(data: string): string; + /** This must be cryptographically secure. Only implement this method using `crypto.createHash("sha256")`. */ + createSHA256Hash?(data: string): string; getMemoryUsage?(): number; exit(exitCode?: number): void; realpath?(path: string): string; From 7e3af08a097c024ddbc6c2af1e0ff31d2a8b742c Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 14 May 2018 12:00:40 -0700 Subject: [PATCH 22/69] Don't add a suggestion to convert to an es6 module if no commonjs import/export appears at top-level. (#24101) --- src/services/suggestionDiagnostics.ts | 27 ++++++++++++++++++- ...efactorConvertToEs6Module_notAtTopLevel.ts | 12 +++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/refactorConvertToEs6Module_notAtTopLevel.ts diff --git a/src/services/suggestionDiagnostics.ts b/src/services/suggestionDiagnostics.ts index 0c8ec58798c94..f2961e19345d5 100644 --- a/src/services/suggestionDiagnostics.ts +++ b/src/services/suggestionDiagnostics.ts @@ -5,7 +5,9 @@ namespace ts { const checker = program.getDiagnosticsProducingTypeChecker(); const diags: Diagnostic[] = []; - if (sourceFile.commonJsModuleIndicator && (programContainsEs6Modules(program) || compilerOptionsIndicateEs6Modules(program.getCompilerOptions()))) { + if (sourceFile.commonJsModuleIndicator && + (programContainsEs6Modules(program) || compilerOptionsIndicateEs6Modules(program.getCompilerOptions())) && + containsTopLevelCommonjs(sourceFile)) { diags.push(createDiagnosticForNode(getErrorNodeFromCommonJsIndicator(sourceFile.commonJsModuleIndicator), Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module)); } @@ -61,6 +63,29 @@ namespace ts { return diags.concat(checker.getSuggestionDiagnostics(sourceFile)); } + // convertToEs6Module only works on top-level, so don't trigger it if commonjs code only appears in nested scopes. + function containsTopLevelCommonjs(sourceFile: SourceFile): boolean { + return sourceFile.statements.some(statement => { + switch (statement.kind) { + case SyntaxKind.VariableStatement: + return (statement as VariableStatement).declarationList.declarations.some(decl => + isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true)); + case SyntaxKind.ExpressionStatement: { + const { expression } = statement as ExpressionStatement; + if (!isBinaryExpression(expression)) return isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true); + const kind = getSpecialPropertyAssignmentKind(expression); + return kind === SpecialPropertyAssignmentKind.ExportsProperty || kind === SpecialPropertyAssignmentKind.ModuleExports; + } + default: + return false; + } + }); + } + + function propertyAccessLeftHandSide(node: Expression): Expression { + return isPropertyAccessExpression(node) ? propertyAccessLeftHandSide(node.expression) : node; + } + function importNameForConvertToDefaultImport(node: AnyValidImportOrReExport): Identifier | undefined { switch (node.kind) { case SyntaxKind.ImportDeclaration: diff --git a/tests/cases/fourslash/refactorConvertToEs6Module_notAtTopLevel.ts b/tests/cases/fourslash/refactorConvertToEs6Module_notAtTopLevel.ts new file mode 100644 index 0000000000000..8de358138841a --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToEs6Module_notAtTopLevel.ts @@ -0,0 +1,12 @@ +/// + +// @allowJs: true +// @target: esnext + +// @Filename: /a.js +////(function() { +//// module.exports = 0; +////})(); + +verify.getSuggestionDiagnostics([]); + From ba4bf21eade396ac0d82ab1278dfddc6ce69c653 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 14 May 2018 12:54:26 -0700 Subject: [PATCH 23/69] Cache simplified indexed accesses to better handle circularly constrained indexed acceses (#24072) --- src/compiler/checker.ts | 14 +++++++++----- src/compiler/types.ts | 1 + .../baselines/reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + .../circularConstrainedMappedTypeNoCrash.js | 6 ++++++ .../circularConstrainedMappedTypeNoCrash.symbols | 16 ++++++++++++++++ .../circularConstrainedMappedTypeNoCrash.types | 16 ++++++++++++++++ .../circularConstrainedMappedTypeNoCrash.ts | 3 +++ 8 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/circularConstrainedMappedTypeNoCrash.js create mode 100644 tests/baselines/reference/circularConstrainedMappedTypeNoCrash.symbols create mode 100644 tests/baselines/reference/circularConstrainedMappedTypeNoCrash.types create mode 100644 tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index caa75a45eb987..b85acc03d468f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8692,6 +8692,10 @@ namespace ts { // Transform an indexed access to a simpler form, if possible. Return the simpler form, or return // the type itself if no transformation is possible. function getSimplifiedIndexedAccessType(type: IndexedAccessType): Type { + if (type.simplified) { + return type.simplified === circularConstraintType ? type : type.simplified; + } + type.simplified = circularConstraintType; const objectType = type.objectType; if (objectType.flags & TypeFlags.Intersection && isGenericObjectType(objectType)) { // Given an indexed access type T[K], if T is an intersection containing one or more generic types and one or @@ -8709,7 +8713,7 @@ namespace ts { regularTypes.push(t); } } - return getUnionType([ + return type.simplified = getUnionType([ getSimplifiedType(getIndexedAccessType(getIntersectionType(regularTypes), type.indexType)), getIntersectionType(stringIndexTypes) ]); @@ -8720,7 +8724,7 @@ namespace ts { // eventually anyway, but it easier to reason about. if (some((objectType).types, isMappedTypeToNever)) { const nonNeverTypes = filter((objectType).types, t => !isMappedTypeToNever(t)); - return getSimplifiedType(getIndexedAccessType(getIntersectionType(nonNeverTypes), type.indexType)); + return type.simplified = getSimplifiedType(getIndexedAccessType(getIntersectionType(nonNeverTypes), type.indexType)); } } // If the object type is a mapped type { [P in K]: E }, where K is generic, instantiate E using a mapper @@ -8728,15 +8732,15 @@ namespace ts { // construct the type Box. We do not further simplify the result because mapped types can be recursive // and we might never terminate. if (isGenericMappedType(objectType)) { - return substituteIndexedMappedType(objectType, type); + return type.simplified = substituteIndexedMappedType(objectType, type); } if (objectType.flags & TypeFlags.TypeParameter) { const constraint = getConstraintFromTypeParameter(objectType as TypeParameter); if (constraint && isGenericMappedType(constraint)) { - return substituteIndexedMappedType(constraint, type); + return type.simplified = substituteIndexedMappedType(constraint, type); } } - return type; + return type.simplified = type; } function substituteIndexedMappedType(objectType: MappedType, type: IndexedAccessType) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4b2a7c080d216..5c1069538d0a1 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3973,6 +3973,7 @@ namespace ts { objectType: Type; indexType: Type; constraint?: Type; + simplified?: Type; } export type TypeVariable = TypeParameter | IndexedAccessType; diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 6a9f6117d396b..04279014ecc6c 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2248,6 +2248,7 @@ declare namespace ts { objectType: Type; indexType: Type; constraint?: Type; + simplified?: Type; } type TypeVariable = TypeParameter | IndexedAccessType; interface IndexType extends InstantiableType { diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index db6ce733f229c..c637bec49980a 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2248,6 +2248,7 @@ declare namespace ts { objectType: Type; indexType: Type; constraint?: Type; + simplified?: Type; } type TypeVariable = TypeParameter | IndexedAccessType; interface IndexType extends InstantiableType { diff --git a/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.js b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.js new file mode 100644 index 0000000000000..4448a5b858976 --- /dev/null +++ b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.js @@ -0,0 +1,6 @@ +//// [circularConstrainedMappedTypeNoCrash.ts] +type Loop> = { + [P in keyof T]: U[P] extends boolean ? number : string; +}; + +//// [circularConstrainedMappedTypeNoCrash.js] diff --git a/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.symbols b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.symbols new file mode 100644 index 0000000000000..a83439bafb9d3 --- /dev/null +++ b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.symbols @@ -0,0 +1,16 @@ +=== tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts === +type Loop> = { +>Loop : Symbol(Loop, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 0)) +>T : Symbol(T, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 10)) +>U : Symbol(U, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 12)) +>Loop : Symbol(Loop, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 0)) +>T : Symbol(T, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 10)) +>U : Symbol(U, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 12)) + + [P in keyof T]: U[P] extends boolean ? number : string; +>P : Symbol(P, Decl(circularConstrainedMappedTypeNoCrash.ts, 1, 5)) +>T : Symbol(T, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 10)) +>U : Symbol(U, Decl(circularConstrainedMappedTypeNoCrash.ts, 0, 12)) +>P : Symbol(P, Decl(circularConstrainedMappedTypeNoCrash.ts, 1, 5)) + +}; diff --git a/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.types b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.types new file mode 100644 index 0000000000000..315fa8351c166 --- /dev/null +++ b/tests/baselines/reference/circularConstrainedMappedTypeNoCrash.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts === +type Loop> = { +>Loop : Loop +>T : T +>U : U +>Loop : Loop +>T : T +>U : U + + [P in keyof T]: U[P] extends boolean ? number : string; +>P : P +>T : T +>U : U +>P : P + +}; diff --git a/tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts b/tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts new file mode 100644 index 0000000000000..9e60b3e86cd5c --- /dev/null +++ b/tests/cases/compiler/circularConstrainedMappedTypeNoCrash.ts @@ -0,0 +1,3 @@ +type Loop> = { + [P in keyof T]: U[P] extends boolean ? number : string; +}; \ No newline at end of file From 7be85958a1e0a7c3253204e0723c8feccd0db3e6 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 14 May 2018 12:35:36 -0700 Subject: [PATCH 24/69] Add test for module resolution with package json containing main field referencing js file in sub directory --- ...ageRoot_mainFieldInSubDirectory.errors.txt | 14 +++++++ ...esAtPackageRoot_mainFieldInSubDirectory.js | 15 ++++++++ ...ackageRoot_mainFieldInSubDirectory.symbols | 8 ++++ ...ageRoot_mainFieldInSubDirectory.trace.json | 37 +++++++++++++++++++ ...tPackageRoot_mainFieldInSubDirectory.types | 8 ++++ ...esAtPackageRoot_mainFieldInSubDirectory.ts | 10 +++++ 6 files changed, 92 insertions(+) create mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt create mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.js create mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.symbols create mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json create mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types create mode 100644 tests/cases/compiler/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt new file mode 100644 index 0000000000000..2dffc5530f809 --- /dev/null +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt @@ -0,0 +1,14 @@ +/index.ts(1,19): error TS2307: Cannot find module 'foo'. + + +==== /node_modules/foo/package.json (0 errors) ==== + { "name": "foo", "version": "1.2.3", "main": "src/index.js" } + +==== /node_modules/foo/src/index.d.ts (0 errors) ==== + export const x: number; + +==== /index.ts (1 errors) ==== + import { x } from "foo"; + ~~~~~ +!!! error TS2307: Cannot find module 'foo'. + \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.js b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.js new file mode 100644 index 0000000000000..1aa0a624d8dbc --- /dev/null +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts] //// + +//// [package.json] +{ "name": "foo", "version": "1.2.3", "main": "src/index.js" } + +//// [index.d.ts] +export const x: number; + +//// [index.ts] +import { x } from "foo"; + + +//// [index.js] +"use strict"; +exports.__esModule = true; diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.symbols b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.symbols new file mode 100644 index 0000000000000..7a5c1d7ea2788 --- /dev/null +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.symbols @@ -0,0 +1,8 @@ +=== /node_modules/foo/src/index.d.ts === +export const x: number; +>x : Symbol(x, Decl(index.d.ts, 0, 12)) + +=== /index.ts === +import { x } from "foo"; +>x : Symbol(x, Decl(index.ts, 0, 8)) + diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json new file mode 100644 index 0000000000000..d02e83a9a70d2 --- /dev/null +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json @@ -0,0 +1,37 @@ +[ + "======== Resolving module 'foo' from '/index.ts'. ========", + "Module resolution kind is not specified, using 'NodeJs'.", + "Loading module 'foo' from 'node_modules' folder, target file type 'TypeScript'.", + "'package.json' does not have a 'typings' field.", + "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", + "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/i.d.ts@1.2.3'.", + "File '/node_modules/foo.ts' does not exist.", + "File '/node_modules/foo.tsx' does not exist.", + "File '/node_modules/foo.d.ts' does not exist.", + "'package.json' does not have a 'typings' field.", + "'package.json' does not have a 'types' field.", + "File '/node_modules/foo/index.ts' does not exist.", + "File '/node_modules/foo/index.tsx' does not exist.", + "File '/node_modules/foo/index.d.ts' does not exist.", + "Directory '/node_modules/@types' does not exist, skipping all lookups in it.", + "Loading module 'foo' from 'node_modules' folder, target file type 'JavaScript'.", + "'package.json' does not have a 'typings' field.", + "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", + "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/i.d.ts@1.2.3'.", + "File '/node_modules/foo.js' does not exist.", + "File '/node_modules/foo.jsx' does not exist.", + "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", + "File '/node_modules/foo/src/index.js' does not exist.", + "Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'JavaScript'.", + "File '/node_modules/foo/src/index.js.js' does not exist.", + "File '/node_modules/foo/src/index.js.jsx' does not exist.", + "File name '/node_modules/foo/src/index.js' has a '.js' extension - stripping it.", + "File '/node_modules/foo/src/index.js' does not exist.", + "File '/node_modules/foo/src/index.jsx' does not exist.", + "Directory '/node_modules/foo/src/index.js' does not exist, skipping all lookups in it.", + "File '/node_modules/foo/index.js' does not exist.", + "File '/node_modules/foo/index.jsx' does not exist.", + "======== Module name 'foo' was not resolved. ========" +] \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types new file mode 100644 index 0000000000000..32a66be06a6bd --- /dev/null +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types @@ -0,0 +1,8 @@ +=== /node_modules/foo/src/index.d.ts === +export const x: number; +>x : number + +=== /index.ts === +import { x } from "foo"; +>x : any + diff --git a/tests/cases/compiler/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts b/tests/cases/compiler/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts new file mode 100644 index 0000000000000..4af56e48e1c3e --- /dev/null +++ b/tests/cases/compiler/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.ts @@ -0,0 +1,10 @@ +// @traceResolution: true + +// @Filename: /node_modules/foo/package.json +{ "name": "foo", "version": "1.2.3", "main": "src/index.js" } + +// @Filename: /node_modules/foo/src/index.d.ts +export const x: number; + +// @Filename: /index.ts +import { x } from "foo"; From 5447f881b7d3042de73114e2ff3920a038f1d728 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 14 May 2018 13:52:38 -0700 Subject: [PATCH 25/69] Check for prototype method assignments first --- src/compiler/checker.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e47e2b6cbed5e..b883abb074bdd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2145,19 +2145,14 @@ namespace ts { */ function resolveEntityNameFromJSSpecialAssignment(name: Identifier, meaning: SymbolFlags) { if (isJSDocTypeReference(name.parent)) { - const secondaryLocation = getJSSpecialAssignmentSymbol(name.parent); + const secondaryLocation = getJSSpecialAssignmentLocation(name.parent); if (secondaryLocation) { return resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); } } } - function getJSSpecialAssignmentSymbol(node: TypeReferenceNode): Declaration | undefined { - const sig = getHostSignatureFromJSDoc(node); - if (sig) { - const symbol = getSymbolOfNode(sig); - return symbol && symbol.valueDeclaration; - } + function getJSSpecialAssignmentLocation(node: TypeReferenceNode): Declaration | undefined { const host = getJSDocHost(node); if (host && isExpressionStatement(host) && @@ -2166,6 +2161,11 @@ namespace ts { const symbol = getSymbolOfNode(host.expression.left); return symbol && symbol.parent.valueDeclaration; } + const sig = getHostSignatureFromJSDoc(node); + if (sig) { + const symbol = getSymbolOfNode(sig); + return symbol && symbol.valueDeclaration; + } } function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression): Symbol { From 3444c61e5fb914a790e6dcc76b6f01856988ecbd Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 14 May 2018 13:59:41 -0700 Subject: [PATCH 26/69] Undo dedupe changes to getJSDocTags --- src/compiler/utilities.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 8d521d02d6b45..b3153100a68e0 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1866,7 +1866,7 @@ namespace ts { // */ // var x = function(name) { return name.length; } if (parent.parent && - (getSingleVariableOfVariableStatement(parent.parent) === node)) { + (getSingleVariableOfVariableStatement(parent.parent) === node || getSourceOfAssignment(parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent); } if (parent.parent && parent.parent.parent && @@ -1875,8 +1875,8 @@ namespace ts { getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } - if (isBinaryExpression(node) && node.operatorToken.kind === SyntaxKind.EqualsToken || - isBinaryExpression(parent) && parent.operatorToken.kind === SyntaxKind.EqualsToken || + if (isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) !== SpecialPropertyAssignmentKind.None || + isBinaryExpression(parent) && getSpecialPropertyAssignmentKind(parent) !== SpecialPropertyAssignmentKind.None || node.kind === SyntaxKind.PropertyAccessExpression && node.parent && node.parent.kind === SyntaxKind.ExpressionStatement) { getJSDocCommentsAndTagsWorker(parent); } From 22d5b0e19f6de57be3545af1e8d08e469bb3d743 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 14 May 2018 13:42:45 -0700 Subject: [PATCH 27/69] Do not remove extension js or jsx from the subModuleName if the subModule doesnt have js or jsx extension --- src/compiler/moduleNameResolver.ts | 6 ++++-- ...Json_yesAtPackageRoot_mainFieldInSubDirectory.trace.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 8bb65e57616d5..1da70cd173f8d 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -1012,8 +1012,10 @@ namespace ts { } else { const jsPath = tryReadPackageJsonFields(/*readTypes*/ false, packageJsonContent, nodeModuleDirectory, state); - if (typeof jsPath === "string") { - subModuleName = removeExtension(removeExtension(jsPath.substring(nodeModuleDirectory.length + 1), Extension.Js), Extension.Jsx) + Extension.Dts; + if (typeof jsPath === "string" && jsPath.length > nodeModuleDirectory.length) { + const potentialSubModule = jsPath.substring(nodeModuleDirectory.length + 1); + subModuleName = (forEach(supportedJavascriptExtensions, extension => + tryRemoveExtension(potentialSubModule, extension)) || potentialSubModule) + Extension.Dts; } else { subModuleName = "index.d.ts"; diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json index d02e83a9a70d2..4833e4a57a010 100644 --- a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json @@ -5,7 +5,7 @@ "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", - "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/i.d.ts@1.2.3'.", + "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/index.d.ts@1.2.3'.", "File '/node_modules/foo.ts' does not exist.", "File '/node_modules/foo.tsx' does not exist.", "File '/node_modules/foo.d.ts' does not exist.", @@ -19,7 +19,7 @@ "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", - "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/i.d.ts@1.2.3'.", + "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/index.d.ts@1.2.3'.", "File '/node_modules/foo.js' does not exist.", "File '/node_modules/foo.jsx' does not exist.", "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", From dc50fe5e40887972dba8283ca45a6e2d05c0fb85 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 14 May 2018 14:38:09 -0700 Subject: [PATCH 28/69] Apart from typing, use main field in package json to resolve typescript files Fixes #23502 --- src/compiler/moduleNameResolver.ts | 13 +++++++-- src/harness/unittests/moduleResolution.ts | 7 +++++ ...age_relativeImportWithinPackage.trace.json | 1 + ...ativeImportWithinPackage_scoped.trace.json | 1 + ...lutionWithExtensions_unexpected.trace.json | 8 +++++ ...ageRoot_mainFieldInSubDirectory.errors.txt | 14 --------- ...ageRoot_mainFieldInSubDirectory.trace.json | 29 ++++++------------- ...tPackageRoot_mainFieldInSubDirectory.types | 2 +- .../reference/packageJsonMain.trace.json | 28 ++++++++++++++++++ .../packageJsonMain_isNonRecursive.trace.json | 9 ++++++ 10 files changed, 75 insertions(+), 37 deletions(-) delete mode 100644 tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 1da70cd173f8d..510fc096297a7 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -1049,9 +1049,18 @@ namespace ts { } function loadModuleFromPackageJson(jsonContent: PackageJsonPathFields, extensions: Extensions, candidate: string, failedLookupLocations: Push, state: ModuleResolutionState): PathAndExtension | undefined { - const file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state); + let file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state); if (!file) { - return undefined; + if (extensions === Extensions.TypeScript) { + // When resolving typescript modules, try resolving using main field as well + file = tryReadPackageJsonFields(/*readTypes*/ false, jsonContent, candidate, state); + if (!file) { + return undefined; + } + } + else { + return undefined; + } } const onlyRecordFailures = !directoryProbablyExists(getDirectoryPath(file), state.host); diff --git a/src/harness/unittests/moduleResolution.ts b/src/harness/unittests/moduleResolution.ts index fc1811420d34b..b5c527aa246df 100644 --- a/src/harness/unittests/moduleResolution.ts +++ b/src/harness/unittests/moduleResolution.ts @@ -181,6 +181,13 @@ namespace ts { "/a/b/foo.ts", "/a/b/foo.tsx", "/a/b/foo.d.ts", + "/c/d", + "/c/d.ts", + "/c/d.tsx", + "/c/d.d.ts", + "/c/d/index.ts", + "/c/d/index.tsx", + "/c/d/index.d.ts", "/a/b/foo/index.ts", "/a/b/foo/index.tsx", ]); diff --git a/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.trace.json b/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.trace.json index d592022e2e177..d75683d210f83 100644 --- a/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.trace.json +++ b/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.trace.json @@ -40,6 +40,7 @@ "File '/node_modules/a/node_modules/foo.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' does not have a 'main' field.", "File '/node_modules/a/node_modules/foo/index.ts' does not exist.", "File '/node_modules/a/node_modules/foo/index.tsx' does not exist.", "File '/node_modules/a/node_modules/foo/index.d.ts' exist - use it as a name resolution result.", diff --git a/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.trace.json b/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.trace.json index 108873d70f900..7b07ecd66e49d 100644 --- a/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.trace.json +++ b/tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.trace.json @@ -40,6 +40,7 @@ "File '/node_modules/a/node_modules/@foo/bar.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' does not have a 'main' field.", "File '/node_modules/a/node_modules/@foo/bar/index.ts' does not exist.", "File '/node_modules/a/node_modules/@foo/bar/index.tsx' does not exist.", "File '/node_modules/a/node_modules/@foo/bar/index.d.ts' exist - use it as a name resolution result.", diff --git a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json index 5f32a4bf511ef..60cdab44a29fc 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions_unexpected.trace.json @@ -11,6 +11,14 @@ "File '/node_modules/normalize.css.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'normalize.css' that references '/node_modules/normalize.css/normalize.css'.", + "File '/node_modules/normalize.css/normalize.css' exist - use it as a name resolution result.", + "File '/node_modules/normalize.css/normalize.css' has an unsupported extension, so skipping it.", + "Loading module as file / folder, candidate module location '/node_modules/normalize.css/normalize.css', target file type 'TypeScript'.", + "File '/node_modules/normalize.css/normalize.css.ts' does not exist.", + "File '/node_modules/normalize.css/normalize.css.tsx' does not exist.", + "File '/node_modules/normalize.css/normalize.css.d.ts' does not exist.", + "Directory '/node_modules/normalize.css/normalize.css' does not exist, skipping all lookups in it.", "File '/node_modules/normalize.css/index.ts' does not exist.", "File '/node_modules/normalize.css/index.tsx' does not exist.", "File '/node_modules/normalize.css/index.d.ts' does not exist.", diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt deleted file mode 100644 index 2dffc5530f809..0000000000000 --- a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.errors.txt +++ /dev/null @@ -1,14 +0,0 @@ -/index.ts(1,19): error TS2307: Cannot find module 'foo'. - - -==== /node_modules/foo/package.json (0 errors) ==== - { "name": "foo", "version": "1.2.3", "main": "src/index.js" } - -==== /node_modules/foo/src/index.d.ts (0 errors) ==== - export const x: number; - -==== /index.ts (1 errors) ==== - import { x } from "foo"; - ~~~~~ -!!! error TS2307: Cannot find module 'foo'. - \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json index 4833e4a57a010..849b65ee59ff6 100644 --- a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.trace.json @@ -11,27 +11,16 @@ "File '/node_modules/foo.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", - "File '/node_modules/foo/index.ts' does not exist.", - "File '/node_modules/foo/index.tsx' does not exist.", - "File '/node_modules/foo/index.d.ts' does not exist.", - "Directory '/node_modules/@types' does not exist, skipping all lookups in it.", - "Loading module 'foo' from 'node_modules' folder, target file type 'JavaScript'.", - "'package.json' does not have a 'typings' field.", - "'package.json' does not have a 'types' field.", - "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", - "Found 'package.json' at '/node_modules/foo/package.json'. Package ID is 'foo/src/index.d.ts@1.2.3'.", - "File '/node_modules/foo.js' does not exist.", - "File '/node_modules/foo.jsx' does not exist.", "'package.json' has 'main' field 'src/index.js' that references '/node_modules/foo/src/index.js'.", "File '/node_modules/foo/src/index.js' does not exist.", - "Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'JavaScript'.", - "File '/node_modules/foo/src/index.js.js' does not exist.", - "File '/node_modules/foo/src/index.js.jsx' does not exist.", + "Loading module as file / folder, candidate module location '/node_modules/foo/src/index.js', target file type 'TypeScript'.", + "File '/node_modules/foo/src/index.js.ts' does not exist.", + "File '/node_modules/foo/src/index.js.tsx' does not exist.", + "File '/node_modules/foo/src/index.js.d.ts' does not exist.", "File name '/node_modules/foo/src/index.js' has a '.js' extension - stripping it.", - "File '/node_modules/foo/src/index.js' does not exist.", - "File '/node_modules/foo/src/index.jsx' does not exist.", - "Directory '/node_modules/foo/src/index.js' does not exist, skipping all lookups in it.", - "File '/node_modules/foo/index.js' does not exist.", - "File '/node_modules/foo/index.jsx' does not exist.", - "======== Module name 'foo' was not resolved. ========" + "File '/node_modules/foo/src/index.ts' does not exist.", + "File '/node_modules/foo/src/index.tsx' does not exist.", + "File '/node_modules/foo/src/index.d.ts' exist - use it as a name resolution result.", + "Resolving real path for '/node_modules/foo/src/index.d.ts', result '/node_modules/foo/src/index.d.ts'.", + "======== Module name 'foo' was successfully resolved to '/node_modules/foo/src/index.d.ts'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types index 32a66be06a6bd..e0ae051e59f17 100644 --- a/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types +++ b/tests/baselines/reference/moduleResolution_packageJson_yesAtPackageRoot_mainFieldInSubDirectory.types @@ -4,5 +4,5 @@ export const x: number; === /index.ts === import { x } from "foo"; ->x : any +>x : number diff --git a/tests/baselines/reference/packageJsonMain.trace.json b/tests/baselines/reference/packageJsonMain.trace.json index 6d39b9d4a7b7a..06c8cff66431b 100644 --- a/tests/baselines/reference/packageJsonMain.trace.json +++ b/tests/baselines/reference/packageJsonMain.trace.json @@ -11,6 +11,13 @@ "File '/node_modules/foo.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.", + "File '/node_modules/foo/oof' does not exist.", + "Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.", + "File '/node_modules/foo/oof.ts' does not exist.", + "File '/node_modules/foo/oof.tsx' does not exist.", + "File '/node_modules/foo/oof.d.ts' does not exist.", + "Directory '/node_modules/foo/oof' does not exist, skipping all lookups in it.", "File '/node_modules/foo/index.ts' does not exist.", "File '/node_modules/foo/index.tsx' does not exist.", "File '/node_modules/foo/index.d.ts' does not exist.", @@ -40,6 +47,18 @@ "File '/node_modules/bar.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'rab.js' that references '/node_modules/bar/rab.js'.", + "File '/node_modules/bar/rab.js' exist - use it as a name resolution result.", + "File '/node_modules/bar/rab.js' has an unsupported extension, so skipping it.", + "Loading module as file / folder, candidate module location '/node_modules/bar/rab.js', target file type 'TypeScript'.", + "File '/node_modules/bar/rab.js.ts' does not exist.", + "File '/node_modules/bar/rab.js.tsx' does not exist.", + "File '/node_modules/bar/rab.js.d.ts' does not exist.", + "File name '/node_modules/bar/rab.js' has a '.js' extension - stripping it.", + "File '/node_modules/bar/rab.ts' does not exist.", + "File '/node_modules/bar/rab.tsx' does not exist.", + "File '/node_modules/bar/rab.d.ts' does not exist.", + "Directory '/node_modules/bar/rab.js' does not exist, skipping all lookups in it.", "File '/node_modules/bar/index.ts' does not exist.", "File '/node_modules/bar/index.tsx' does not exist.", "File '/node_modules/bar/index.d.ts' does not exist.", @@ -67,6 +86,15 @@ "File '/node_modules/baz.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'zab' that references '/node_modules/baz/zab'.", + "File '/node_modules/baz/zab' does not exist.", + "Loading module as file / folder, candidate module location '/node_modules/baz/zab', target file type 'TypeScript'.", + "File '/node_modules/baz/zab.ts' does not exist.", + "File '/node_modules/baz/zab.tsx' does not exist.", + "File '/node_modules/baz/zab.d.ts' does not exist.", + "File '/node_modules/baz/zab/index.ts' does not exist.", + "File '/node_modules/baz/zab/index.tsx' does not exist.", + "File '/node_modules/baz/zab/index.d.ts' does not exist.", "File '/node_modules/baz/index.ts' does not exist.", "File '/node_modules/baz/index.tsx' does not exist.", "File '/node_modules/baz/index.d.ts' does not exist.", diff --git a/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json b/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json index 81f5be11a6d76..a2878a2a4fed5 100644 --- a/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json +++ b/tests/baselines/reference/packageJsonMain_isNonRecursive.trace.json @@ -11,6 +11,15 @@ "File '/node_modules/foo.d.ts' does not exist.", "'package.json' does not have a 'typings' field.", "'package.json' does not have a 'types' field.", + "'package.json' has 'main' field 'oof' that references '/node_modules/foo/oof'.", + "File '/node_modules/foo/oof' does not exist.", + "Loading module as file / folder, candidate module location '/node_modules/foo/oof', target file type 'TypeScript'.", + "File '/node_modules/foo/oof.ts' does not exist.", + "File '/node_modules/foo/oof.tsx' does not exist.", + "File '/node_modules/foo/oof.d.ts' does not exist.", + "File '/node_modules/foo/oof/index.ts' does not exist.", + "File '/node_modules/foo/oof/index.tsx' does not exist.", + "File '/node_modules/foo/oof/index.d.ts' does not exist.", "File '/node_modules/foo/index.ts' does not exist.", "File '/node_modules/foo/index.tsx' does not exist.", "File '/node_modules/foo/index.d.ts' does not exist.", From 6baaddc4f0e8dc2902a9fe79dc8a3a783a3a419c Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 14 May 2018 15:22:24 -0700 Subject: [PATCH 29/69] Add 'inspector' to known node modules --- src/services/jsTyping.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/jsTyping.ts b/src/services/jsTyping.ts index 907003b7db762..da49c31d01165 100644 --- a/src/services/jsTyping.ts +++ b/src/services/jsTyping.ts @@ -37,7 +37,7 @@ namespace ts.JsTyping { "vm", "child_process", "url", "dns", "net", "dgram", "fs", "path", "string_decoder", "tls", "crypto", "stream", "util", "assert", "tty", "domain", - "constants", "process", "v8", "timers", "console"]; + "constants", "process", "v8", "timers", "console", "inspector"]; /* @internal */ export const nodeCoreModules = arrayToSet(nodeCoreModuleList); From b8c2eca8b303f01b7b913679e9d749532b955a71 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 14 May 2018 15:37:11 -0700 Subject: [PATCH 30/69] Reorder, add `"http2"`, `"async-hooks"` and `"perf_hooks"` --- src/services/jsTyping.ts | 43 ++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/services/jsTyping.ts b/src/services/jsTyping.ts index da49c31d01165..c6f97ec2a1acb 100644 --- a/src/services/jsTyping.ts +++ b/src/services/jsTyping.ts @@ -32,12 +32,43 @@ namespace ts.JsTyping { /* @internal */ export const nodeCoreModuleList: ReadonlyArray = [ - "buffer", "querystring", "events", "http", "cluster", - "zlib", "os", "https", "punycode", "repl", "readline", - "vm", "child_process", "url", "dns", "net", - "dgram", "fs", "path", "string_decoder", "tls", - "crypto", "stream", "util", "assert", "tty", "domain", - "constants", "process", "v8", "timers", "console", "inspector"]; + "assert", + "async_hooks", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "dgram", + "dns", + "domain", + "events", + "fs", + "http", + "https", + "http2", + "inspector", + "net", + "os", + "path", + "perf_hooks", + "process", + "punycode", + "querystring", + "readline", + "repl", + "stream", + "string_decoder", + "timers", + "tls", + "tty", + "url", + "util", + "v8", + "vm", + "zlib" + ]; /* @internal */ export const nodeCoreModules = arrayToSet(nodeCoreModuleList); From f01338fa338c3efdd628cc45970593a091de1b9f Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 14 May 2018 18:27:21 -0700 Subject: [PATCH 31/69] Comments/naming --- src/server/session.ts | 7 +++++++ src/services/services.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index 6cd3a7df56082..d0c58b209229f 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -700,6 +700,13 @@ namespace ts.server { return definitions.map(def => this.toFileSpan(def.fileName, def.textSpan, project)); } + /* + * When we map a .d.ts location to .ts, Visual Studio gets confused because there's no associated Roslyn Document in + * the same project which corresponds to the file. VS Code has no problem with this, and luckily we have two protocols. + * This retains the existing behavior for the "simplified" (VS Code) protocol but stores the .d.ts location in a + * set of additional fields, and does the reverse for VS (store the .d.ts location where + * it used to be and stores the .ts location in the additional fields). + */ private static mapToOriginalLocation(def: T): T { if (def.originalFileName) { Debug.assert(def.originalTextSpan !== undefined, "originalTextSpan should be present if originalFileName is"); diff --git a/src/services/services.ts b/src/services/services.ts index 628892960afd9..3fcd4e8e151f8 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1600,10 +1600,10 @@ namespace ts { function makeGetTargetOfMappedPosition( extract: (original: TIn) => sourcemaps.SourceMappableLocation, - create: (result: sourcemaps.SourceMappableLocation, original: TIn, firstOriginal: TIn) => TIn + create: (result: sourcemaps.SourceMappableLocation, unmapped: TIn, original: TIn) => TIn ) { return getTargetOfMappedPosition; - function getTargetOfMappedPosition(input: TIn, firstOriginal = input): TIn { + function getTargetOfMappedPosition(input: TIn, original = input): TIn { const info = extract(input); if (endsWith(info.fileName, Extension.Dts)) { let file: SourceFileLike = program.getSourceFile(info.fileName); @@ -1617,7 +1617,7 @@ namespace ts { const mapper = getSourceMapper(info.fileName, file); const newLoc = mapper.getOriginalPosition(info); if (newLoc === info) return input; - return getTargetOfMappedPosition(create(newLoc, input, firstOriginal), firstOriginal); + return getTargetOfMappedPosition(create(newLoc, input, original), original); } return input; } @@ -1625,7 +1625,7 @@ namespace ts { const getTargetOfMappedDeclarationInfo = makeGetTargetOfMappedPosition( (info: DefinitionInfo) => ({ fileName: info.fileName, position: info.textSpan.start }), - (newLoc, info, firstOriginal) => ({ + (newLoc, info, original) => ({ containerKind: info.containerKind, containerName: info.containerName, fileName: newLoc.fileName, @@ -1635,8 +1635,8 @@ namespace ts { start: newLoc.position, length: info.textSpan.length }, - originalFileName: firstOriginal.fileName, - originalTextSpan: firstOriginal.textSpan + originalFileName: original.fileName, + originalTextSpan: original.textSpan }) ); From 0bda862ccaddf6b5780db3cfa163f320c530d3b7 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 14 May 2018 22:49:50 -0700 Subject: [PATCH 32/69] Remove assert --- src/compiler/checker.ts | 2 +- .../codeFixInferFromUsageJSXElement.ts | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b85acc03d468f..f308348fb4612 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3604,7 +3604,7 @@ namespace ts { function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext, preserveModifierFlags?: boolean): ParameterDeclaration { const parameterDeclaration = getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter); - Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol) && !!parameterSymbol.isRestParameter); + Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol)); let parameterType = getTypeOfSymbol(parameterSymbol); if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { diff --git a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts new file mode 100644 index 0000000000000..c7ce7cc6bdd88 --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts @@ -0,0 +1,40 @@ +/// + +// @noImplicitAny: true +// @jsx: react +// @module: es2015 +// @moduleResolution: node + +// @Filename: /node_modules/@types/react/index.d.ts +////export = React; +////export as namespace React; +////declare namespace React { +//// export class Component { render(): JSX.Element | null; } +////} +////declare global { +//// namespace JSX { +//// interface Element {} +//// } +////} + + +// @filename: a.tsx +//// import React from 'react'; +//// +//// export default function Component([|props |]) { +//// if (props.isLoading) { +//// return
...Loading < /div>; +//// } +//// else { +//// return { +//// return props.update(rec); +//// } +//// } +//// />; +//// } +//// } + + +verify.rangeAfterCodeFix("props: { isLoading: any; update: (...arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file From 573e68c79868fe10ab9eea68f5f0406193bb8e70 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 15 May 2018 09:01:44 -0700 Subject: [PATCH 33/69] JS Type aliases can't refer to host type params Previously, js type aliases (@typedef and @callback) could refer to type paremeters defined in @template tags in a *different* jsdoc tag, as long as both tags were hosted on the same signature. --- src/compiler/checker.ts | 12 +++++- src/compiler/utilities.ts | 5 ++- .../typedefTagTypeResolution.errors.txt | 37 +++++++++++++++++ .../typedefTagTypeResolution.symbols | 38 ++++++++++++++++++ .../reference/typedefTagTypeResolution.types | 40 +++++++++++++++++++ .../jsdoc/typedefTagTypeResolution.ts | 32 +++++++++++++++ 6 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/typedefTagTypeResolution.errors.txt create mode 100644 tests/baselines/reference/typedefTagTypeResolution.symbols create mode 100644 tests/baselines/reference/typedefTagTypeResolution.types create mode 100644 tests/cases/conformance/jsdoc/typedefTagTypeResolution.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b883abb074bdd..ad62ac2f83aa4 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1445,6 +1445,12 @@ namespace ts { location = location.parent; } break; + case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: + // js type aliases do not resolve names from their host, so skip past it + lastLocation = location; + location = getJSDocHost(location).parent; + continue; } if (isSelfReferenceLocation(location)) { lastSelfReferenceLocation = location; @@ -2153,6 +2159,10 @@ namespace ts { } function getJSSpecialAssignmentLocation(node: TypeReferenceNode): Declaration | undefined { + const typeAlias = findAncestor(node, node => !(isJSDocNode(node) || node.flags & NodeFlags.JSDoc) ? "quit" : isJSDocTypeAlias(node)); + if (typeAlias) { + return; + } const host = getJSDocHost(node); if (host && isExpressionStatement(host) && @@ -2161,7 +2171,7 @@ namespace ts { const symbol = getSymbolOfNode(host.expression.left); return symbol && symbol.parent.valueDeclaration; } - const sig = getHostSignatureFromJSDoc(node); + const sig = getHostSignatureFromJSDocHost(host); if (sig) { const symbol = getSymbolOfNode(sig); return symbol && symbol.valueDeclaration; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index b3153100a68e0..8f69e456afd49 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1914,7 +1914,10 @@ namespace ts { } export function getHostSignatureFromJSDoc(node: Node): SignatureDeclaration | undefined { - const host = getJSDocHost(node); + return getHostSignatureFromJSDocHost(getJSDocHost(node)); + } + + export function getHostSignatureFromJSDocHost(host: HasJSDoc): SignatureDeclaration | undefined { const decl = getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(host) || diff --git a/tests/baselines/reference/typedefTagTypeResolution.errors.txt b/tests/baselines/reference/typedefTagTypeResolution.errors.txt new file mode 100644 index 0000000000000..8d8c324beb32f --- /dev/null +++ b/tests/baselines/reference/typedefTagTypeResolution.errors.txt @@ -0,0 +1,37 @@ +tests/cases/conformance/jsdoc/github20832.js(2,15): error TS2304: Cannot find name 'U'. +tests/cases/conformance/jsdoc/github20832.js(17,12): error TS2304: Cannot find name 'V'. + + +==== tests/cases/conformance/jsdoc/github20832.js (2 errors) ==== + // #20832 + /** @typedef {U} T - should be "error, can't find type named 'U' */ + ~ +!!! error TS2304: Cannot find name 'U'. + /** + * @template U + * @param {U} x + * @return {T} + */ + function f(x) { + return x; + } + + /** @type T - should be fine, since T will be any */ + const x = 3; + + /** + * @callback Cb + * @param {V} firstParam + ~ +!!! error TS2304: Cannot find name 'V'. + */ + /** + * @template V + * @param {V} vvvvv + */ + function g(vvvvv) { + } + + /** @type {Cb} */ + const cb = x => {} + \ No newline at end of file diff --git a/tests/baselines/reference/typedefTagTypeResolution.symbols b/tests/baselines/reference/typedefTagTypeResolution.symbols new file mode 100644 index 0000000000000..9201ecb2cd855 --- /dev/null +++ b/tests/baselines/reference/typedefTagTypeResolution.symbols @@ -0,0 +1,38 @@ +=== tests/cases/conformance/jsdoc/github20832.js === +// #20832 +/** @typedef {U} T - should be "error, can't find type named 'U' */ +/** + * @template U + * @param {U} x + * @return {T} + */ +function f(x) { +>f : Symbol(f, Decl(github20832.js, 0, 0)) +>x : Symbol(x, Decl(github20832.js, 7, 11)) + + return x; +>x : Symbol(x, Decl(github20832.js, 7, 11)) +} + +/** @type T - should be fine, since T will be any */ +const x = 3; +>x : Symbol(x, Decl(github20832.js, 12, 5)) + +/** + * @callback Cb + * @param {V} firstParam + */ +/** + * @template V + * @param {V} vvvvv + */ +function g(vvvvv) { +>g : Symbol(g, Decl(github20832.js, 12, 12)) +>vvvvv : Symbol(vvvvv, Decl(github20832.js, 22, 11)) +} + +/** @type {Cb} */ +const cb = x => {} +>cb : Symbol(cb, Decl(github20832.js, 26, 5)) +>x : Symbol(x, Decl(github20832.js, 26, 10)) + diff --git a/tests/baselines/reference/typedefTagTypeResolution.types b/tests/baselines/reference/typedefTagTypeResolution.types new file mode 100644 index 0000000000000..5c225d166d21c --- /dev/null +++ b/tests/baselines/reference/typedefTagTypeResolution.types @@ -0,0 +1,40 @@ +=== tests/cases/conformance/jsdoc/github20832.js === +// #20832 +/** @typedef {U} T - should be "error, can't find type named 'U' */ +/** + * @template U + * @param {U} x + * @return {T} + */ +function f(x) { +>f : (x: U) => any +>x : U + + return x; +>x : U +} + +/** @type T - should be fine, since T will be any */ +const x = 3; +>x : any +>3 : 3 + +/** + * @callback Cb + * @param {V} firstParam + */ +/** + * @template V + * @param {V} vvvvv + */ +function g(vvvvv) { +>g : (vvvvv: V) => void +>vvvvv : V +} + +/** @type {Cb} */ +const cb = x => {} +>cb : (firstParam: any) => any +>x => {} : (x: any) => void +>x : any + diff --git a/tests/cases/conformance/jsdoc/typedefTagTypeResolution.ts b/tests/cases/conformance/jsdoc/typedefTagTypeResolution.ts new file mode 100644 index 0000000000000..c4c993d9c78e0 --- /dev/null +++ b/tests/cases/conformance/jsdoc/typedefTagTypeResolution.ts @@ -0,0 +1,32 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: github20832.js + +// #20832 +/** @typedef {U} T - should be "error, can't find type named 'U' */ +/** + * @template U + * @param {U} x + * @return {T} + */ +function f(x) { + return x; +} + +/** @type T - should be fine, since T will be any */ +const x = 3; + +/** + * @callback Cb + * @param {V} firstParam + */ +/** + * @template V + * @param {V} vvvvv + */ +function g(vvvvv) { +} + +/** @type {Cb} */ +const cb = x => {} From 5756ae1fd8cdb40dd12a20b81c1828810020905d Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 15 May 2018 11:15:08 -0700 Subject: [PATCH 34/69] External runner fixes (#24115) * Add missing @types/node dep to so many projects, rename parent node_modules dirs so they dont participate in tests, sort errors * Accept new baselines * Satisfy linter --- src/harness/externalCompileRunner.ts | 55 +- .../reference/user/adonis-framework.log | 12 +- tests/baselines/reference/user/async.log | 10 +- tests/baselines/reference/user/bcryptjs.log | 14 +- .../user/chrome-devtools-frontend.log | 1360 ++++++++--------- .../reference/user/create-react-app.log | 12 +- .../reference/user/enhanced-resolve.log | 8 +- tests/baselines/reference/user/lodash.log | 34 +- tests/baselines/reference/user/log4js.log | 12 + tests/baselines/reference/user/npm.log | 513 ++++--- tests/baselines/reference/user/puppeteer.log | 24 +- tests/baselines/reference/user/uglify-js.log | 118 +- tests/cases/user/acorn/package.json | 3 + .../cases/user/adonis-framework/package.json | 3 + tests/cases/user/assert/package.json | 3 + tests/cases/user/async/package.json | 3 + tests/cases/user/bcryptjs/package.json | 3 + tests/cases/user/bluebird/package.json | 3 + tests/cases/user/clear-require/package.json | 3 + tests/cases/user/clone/package.json | 3 + .../user/content-disposition/package.json | 3 + tests/cases/user/debug/package.json | 3 + .../cases/user/enhanced-resolve/package.json | 3 + .../cases/user/follow-redirects/package.json | 3 + tests/cases/user/graceful-fs/package.json | 3 + tests/cases/user/jimp/package.json | 3 + tests/cases/user/lodash/package.json | 3 + tests/cases/user/minimatch/package.json | 3 + tests/cases/user/npm/package.json | 3 + tests/cases/user/npmlog/package.json | 3 + tests/cases/user/octokit-rest/package.json | 3 + tests/cases/user/uglify-js/package.json | 3 + .../cases/user/url-search-params/package.json | 3 + tests/cases/user/util/package.json | 3 + 34 files changed, 1219 insertions(+), 1019 deletions(-) create mode 100644 tests/baselines/reference/user/log4js.log diff --git a/src/harness/externalCompileRunner.ts b/src/harness/externalCompileRunner.ts index 1617a2d6734ce..e80fb17db37eb 100644 --- a/src/harness/externalCompileRunner.ts +++ b/src/harness/externalCompileRunner.ts @@ -2,6 +2,7 @@ /// const fs = require("fs"); const path = require("path"); +const del = require("del"); interface ExecResult { stdout: Buffer; @@ -27,9 +28,32 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles(); describe(`${this.kind()} code samples`, () => { + const cwd = path.join(Harness.IO.getWorkspaceRoot(), this.testDir); + const placeholderName = ".node_modules"; + const moduleDirName = "node_modules"; + before(() => { + ts.forEachAncestorDirectory(cwd, dir => { + try { + fs.renameSync(path.join(dir, moduleDirName), path.join(dir, placeholderName)); + } + catch { + // empty + } + }); + }); for (const test of testList) { this.runTest(typeof test === "string" ? test : test.file); } + after(() => { + ts.forEachAncestorDirectory(cwd, dir => { + try { + fs.renameSync(path.join(dir, placeholderName), path.join(dir, moduleDirName)); + } + catch { + // empty + } + }); + }); }); } private runTest(directoryName: string) { @@ -42,6 +66,7 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { it("should build successfully", () => { let cwd = path.join(Harness.IO.getWorkspaceRoot(), cls.testDir, directoryName); + const originalCwd = cwd; const stdio = isWorker ? "pipe" : "inherit"; let types: string[]; if (fs.existsSync(path.join(cwd, "test.json"))) { @@ -64,7 +89,7 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { fs.unlinkSync(path.join(cwd, "package-lock.json")); } if (fs.existsSync(path.join(cwd, "node_modules"))) { - require("del").sync(path.join(cwd, "node_modules"), { force: true }); + del.sync(path.join(cwd, "node_modules"), { force: true }); } const install = cp.spawnSync(`npm`, ["i", "--ignore-scripts"], { cwd, timeout: timeout / 2, shell: true, stdio }); // NPM shouldn't take the entire timeout - if it takes a long time, it should be terminated and we should log the failure if (install.status !== 0) throw new Error(`NPM Install for ${directoryName} failed: ${install.stderr.toString()}`); @@ -72,6 +97,9 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { const args = [path.join(Harness.IO.getWorkspaceRoot(), "built/local/tsc.js")]; if (types) { args.push("--types", types.join(",")); + // Also actually install those types (for, eg, the js projects which need node) + const install = cp.spawnSync(`npm`, ["i", ...types.map(t => `@types/${t}`), "--no-save", "--ignore-scripts"], { cwd: originalCwd, timeout: timeout / 2, shell: true, stdio }); // NPM shouldn't take the entire timeout - if it takes a long time, it should be terminated and we should log the failure + if (install.status !== 0) throw new Error(`NPM Install types for ${directoryName} failed: ${install.stderr.toString()}`); } args.push("--noEmit"); Harness.Baseline.runBaseline(`${cls.kind()}/${directoryName}.log`, () => { @@ -91,7 +119,7 @@ class UserCodeRunner extends ExternalCompileRunnerBase { // tslint:disable-next-line:no-null-keyword return result.status === 0 && !result.stdout.length && !result.stderr.length ? null : `Exit Code: ${result.status} Standard output: -${stripAbsoluteImportPaths(result.stdout.toString().replace(/\r\n/g, "\n"))} +${sortErrors(stripAbsoluteImportPaths(result.stdout.toString().replace(/\r\n/g, "\n")))} Standard error: @@ -109,6 +137,29 @@ function stripAbsoluteImportPaths(result: string) { .replace(/Module '".*?\/tests\/cases\/user\//g, `Module '"/`); } +function sortErrors(result: string) { + return ts.flatten(splitBy(result.split("\n"), s => /^\S+/.test(s)).sort(compareErrorStrings)).join("\n"); +} + +const errorRegexp = /^(.+\.[tj]sx?)\((\d+),(\d+)\): error TS/; +function compareErrorStrings(a: string[], b: string[]) { + ts.Debug.assertGreaterThanOrEqual(a.length, 1); + ts.Debug.assertGreaterThanOrEqual(b.length, 1); + const matchA = a[0].match(errorRegexp); + if (!matchA) { + return -1; + } + const matchB = b[0].match(errorRegexp); + if (!matchB) { + return 1; + } + const [, errorFileA, lineNumberStringA, columnNumberStringA] = matchA; + const [, errorFileB, lineNumberStringB, columnNumberStringB] = matchB; + return ts.comparePathsCaseSensitive(errorFileA, errorFileB) || + ts.compareValues(parseInt(lineNumberStringA), parseInt(lineNumberStringB)) || + ts.compareValues(parseInt(columnNumberStringA), parseInt(columnNumberStringB)); +} + class DefinitelyTypedRunner extends ExternalCompileRunnerBase { readonly testDir = "../DefinitelyTyped/types/"; workingDirectory = this.testDir; diff --git a/tests/baselines/reference/user/adonis-framework.log b/tests/baselines/reference/user/adonis-framework.log index 7aa5436043873..727d325b6d0b6 100644 --- a/tests/baselines/reference/user/adonis-framework.log +++ b/tests/baselines/reference/user/adonis-framework.log @@ -146,6 +146,12 @@ node_modules/adonis-framework/src/Session/Drivers/File/index.js(79,15): error TS node_modules/adonis-framework/src/Session/Drivers/Redis/index.js(23,14): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/adonis-framework/src/Session/Drivers/Redis/index.js(59,15): error TS2322: Type 'IterableIterator' is not assignable to type 'boolean'. node_modules/adonis-framework/src/Session/Drivers/Redis/index.js(72,15): error TS2322: Type 'IterableIterator' is not assignable to type 'boolean'. +node_modules/adonis-framework/src/Session/SessionManager.js(13,21): error TS2307: Cannot find module 'adonis-fold'. +node_modules/adonis-framework/src/Session/SessionManager.js(69,22): error TS2339: Property 'drivers' does not exist on type 'Function'. +node_modules/adonis-framework/src/Session/SessionManager.js(69,49): error TS2339: Property 'drivers' does not exist on type 'Function'. +node_modules/adonis-framework/src/Session/SessionManager.js(71,76): error TS2339: Property 'drivers' does not exist on type 'Function'. +node_modules/adonis-framework/src/Session/Store.js(28,13): error TS2304: Cannot find name 'Mixed'. +node_modules/adonis-framework/src/Session/Store.js(80,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Session/index.js(10,14): error TS2304: Cannot find name 'SessionDriver'. node_modules/adonis-framework/src/Session/index.js(11,2): error TS1003: Identifier expected. node_modules/adonis-framework/src/Session/index.js(11,11): error TS2304: Cannot find name 'Class'. @@ -173,12 +179,6 @@ node_modules/adonis-framework/src/Session/index.js(249,15): error TS2304: Cannot node_modules/adonis-framework/src/Session/index.js(267,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Session/index.js(287,15): error TS2322: Type 'IterableIterator' is not assignable to type 'boolean'. node_modules/adonis-framework/src/Session/index.js(293,12): error TS2532: Object is possibly 'undefined'. -node_modules/adonis-framework/src/Session/SessionManager.js(13,21): error TS2307: Cannot find module 'adonis-fold'. -node_modules/adonis-framework/src/Session/SessionManager.js(69,22): error TS2339: Property 'drivers' does not exist on type 'Function'. -node_modules/adonis-framework/src/Session/SessionManager.js(69,49): error TS2339: Property 'drivers' does not exist on type 'Function'. -node_modules/adonis-framework/src/Session/SessionManager.js(71,76): error TS2339: Property 'drivers' does not exist on type 'Function'. -node_modules/adonis-framework/src/Session/Store.js(28,13): error TS2304: Cannot find name 'Mixed'. -node_modules/adonis-framework/src/Session/Store.js(80,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/View/Form/index.js(75,11): error TS2532: Object is possibly 'undefined'. node_modules/adonis-framework/src/View/Form/index.js(115,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/View/Form/index.js(147,63): error TS2345: Argument of type 'string | any[]' is not assignable to parameter of type 'any[]'. diff --git a/tests/baselines/reference/user/async.log b/tests/baselines/reference/user/async.log index c78c122343c49..8c2d96b1b6da7 100644 --- a/tests/baselines/reference/user/async.log +++ b/tests/baselines/reference/user/async.log @@ -43,8 +43,8 @@ node_modules/async/auto.js(159,18): error TS2695: Left side of comma operator is node_modules/async/auto.js(159,50): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/autoInject.js(44,17): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/autoInject.js(134,6): error TS2695: Left side of comma operator is unused and has no side effects. -node_modules/async/autoInject.js(136,25): error TS2532: Object is possibly 'undefined'. node_modules/async/autoInject.js(136,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. +node_modules/async/autoInject.js(136,25): error TS2532: Object is possibly 'undefined'. node_modules/async/autoInject.js(136,26): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/autoInject.js(139,14): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/autoInject.js(160,28): error TS2695: Left side of comma operator is unused and has no side effects. @@ -145,9 +145,9 @@ node_modules/async/dist/async.js(2963,25): error TS2722: Cannot invoke an object node_modules/async/dist/async.js(2970,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(2971,28): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(3005,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. -node_modules/async/dist/async.js(3008,9): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(3008,9): error TS2684: The 'this' context of type 'Function | undefined' is not assignable to method's 'this' of type 'Function'. Type 'undefined' is not assignable to type 'Function'. +node_modules/async/dist/async.js(3008,9): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(3081,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(3086,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(3087,28): error TS2722: Cannot invoke an object which is possibly 'undefined'. @@ -175,18 +175,18 @@ node_modules/async/dist/async.js(4153,14): error TS2339: Property 'unshift' does node_modules/async/dist/async.js(4367,5): error TS2322: Type 'any[] | {}' is not assignable to type 'any[]'. Type '{}' is not assignable to type 'any[]'. Property 'flatMap' is missing in type '{}'. -node_modules/async/dist/async.js(4603,17): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(4603,17): error TS2684: The 'this' context of type 'Function | undefined' is not assignable to method's 'this' of type 'Function'. Type 'undefined' is not assignable to type 'Function'. +node_modules/async/dist/async.js(4603,17): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(4917,19): error TS2339: Property 'code' does not exist on type 'Error'. node_modules/async/dist/async.js(4919,23): error TS2339: Property 'info' does not exist on type 'Error'. node_modules/async/dist/async.js(5090,9): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(5146,9): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/async/dist/async.js(5165,20): error TS2339: Property 'unmemoized' does not exist on type 'Function'. node_modules/async/dist/async.js(5208,25): error TS2722: Cannot invoke an object which is possibly 'undefined'. -node_modules/async/dist/async.js(5211,9): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(5211,9): error TS2684: The 'this' context of type 'Function | undefined' is not assignable to method's 'this' of type 'Function'. Type 'undefined' is not assignable to type 'Function'. +node_modules/async/dist/async.js(5211,9): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(5315,20): error TS2532: Object is possibly 'undefined'. node_modules/async/dist/async.js(5315,20): error TS2684: The 'this' context of type 'Function | undefined' is not assignable to method's 'this' of type 'Function'. Type 'undefined' is not assignable to type 'Function'. @@ -240,8 +240,8 @@ node_modules/async/eachSeries.js(28,12): error TS2304: Cannot find name 'AsyncFu node_modules/async/eachSeries.js(36,20): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/ensureAsync.js(34,12): error TS2304: Cannot find name 'AsyncFunction'. node_modules/async/ensureAsync.js(36,14): error TS2304: Cannot find name 'AsyncFunction'. -node_modules/async/ensureAsync.js(56,9): error TS2532: Object is possibly 'undefined'. node_modules/async/ensureAsync.js(56,9): error TS2722: Cannot invoke an object which is possibly 'undefined'. +node_modules/async/ensureAsync.js(56,9): error TS2532: Object is possibly 'undefined'. node_modules/async/ensureAsync.js(56,10): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/ensureAsync.js(57,13): error TS2695: Left side of comma operator is unused and has no side effects. node_modules/async/ensureAsync.js(62,18): error TS2695: Left side of comma operator is unused and has no side effects. diff --git a/tests/baselines/reference/user/bcryptjs.log b/tests/baselines/reference/user/bcryptjs.log index 1289e0a392ddf..306680eacd5dd 100644 --- a/tests/baselines/reference/user/bcryptjs.log +++ b/tests/baselines/reference/user/bcryptjs.log @@ -3,13 +3,6 @@ Standard output: node_modules/bcryptjs/scripts/build.js(1,26): error TS2307: Cannot find module 'metascript'. node_modules/bcryptjs/scripts/build.js(32,1): error TS2322: Type '{ VERSION: any; }' is not assignable to type '{ [x: string]: any; VERSION: any; ISAAC: boolean; }'. Property 'ISAAC' is missing in type '{ VERSION: any; }'. -node_modules/bcryptjs/src/bcrypt.js(25,13): error TS2322: Type 'Buffer' is not assignable to type 'number[]'. - Property 'flatMap' is missing in type 'Buffer'. -node_modules/bcryptjs/src/bcrypt.js(94,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. -node_modules/bcryptjs/src/bcrypt.js(150,5): error TS2322: Type 'string | undefined' is not assignable to type 'string'. - Type 'undefined' is not assignable to type 'string'. -node_modules/bcryptjs/src/bcrypt.js(160,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. -node_modules/bcryptjs/src/bcrypt.js(238,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. node_modules/bcryptjs/src/bcrypt/impl.js(516,22): error TS2345: Argument of type 'Int32Array | number[]' is not assignable to parameter of type 'number[]'. Type 'Int32Array' is not assignable to type 'number[]'. Property 'flatMap' is missing in type 'Int32Array'. @@ -27,6 +20,13 @@ node_modules/bcryptjs/src/bcrypt/prng/accum.js(65,74): error TS2339: Property 'd node_modules/bcryptjs/src/bcrypt/prng/accum.js(66,22): error TS2339: Property 'detachEvent' does not exist on type 'Document'. node_modules/bcryptjs/src/bcrypt/prng/accum.js(67,22): error TS2339: Property 'detachEvent' does not exist on type 'Document'. node_modules/bcryptjs/src/bcrypt/util.js(20,5): error TS2304: Cannot find name 'utfx'. +node_modules/bcryptjs/src/bcrypt.js(25,13): error TS2322: Type 'Buffer' is not assignable to type 'number[]'. + Property 'flatMap' is missing in type 'Buffer'. +node_modules/bcryptjs/src/bcrypt.js(94,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. +node_modules/bcryptjs/src/bcrypt.js(150,5): error TS2322: Type 'string | undefined' is not assignable to type 'string'. + Type 'undefined' is not assignable to type 'string'. +node_modules/bcryptjs/src/bcrypt.js(160,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. +node_modules/bcryptjs/src/bcrypt.js(238,14): error TS2366: Function lacks ending return statement and return type does not include 'undefined'. node_modules/bcryptjs/src/wrap.js(37,26): error TS2304: Cannot find name 'define'. node_modules/bcryptjs/src/wrap.js(37,51): error TS2304: Cannot find name 'define'. node_modules/bcryptjs/src/wrap.js(38,9): error TS2304: Cannot find name 'define'. diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index 276f683032800..bcae1ccdf787d 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -15,6 +15,154 @@ Standard output: ../../../../built/local/lib.es5.d.ts(1346,11): error TS2300: Duplicate identifier 'ArrayLike'. ../../../../built/local/lib.es5.d.ts(1382,6): error TS2300: Duplicate identifier 'Record'. ../../../../node_modules/@types/node/index.d.ts(150,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'module' must be of type '{ [x: string]: any; }', but here has type 'NodeModule'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(43,8): error TS2339: Property '_importScriptPathPrefix' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(95,28): error TS2339: Property 'response' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(147,37): error TS2339: Property '_importScriptPathPrefix' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(158,21): error TS2345: Argument of type 'Promise' is not assignable to parameter of type 'Promise'. + Type 'string' is not assignable to type 'undefined'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(161,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. + Type 'undefined[]' is not assignable to type 'undefined'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(187,12): error TS2339: Property 'eval' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(197,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(267,14): error TS2339: Property 'runtime' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(269,59): error TS2339: Property 'runtime' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(270,9): error TS2322: Type 'Promise' is not assignable to type 'Promise'. + Type 'void' is not assignable to type 'undefined'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(280,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(283,7): error TS2554: Expected 2-3 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(398,24): error TS1138: Parameter declaration expected. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(398,24): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(527,9): error TS2322: Type 'Function' is not assignable to type 'new () => any'. + Type 'Function' provides no match for the signature 'new (): any'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(527,49): error TS2352: Type 'Window' cannot be converted to type 'Function'. + Property 'apply' is missing in type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(539,20): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(693,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. + Type 'boolean' is not assignable to type 'undefined'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(693,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(705,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(715,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(721,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(729,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(854,36): error TS2339: Property 'eval' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(1083,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. +node_modules/chrome-devtools-frontend/front_end/Runtime.js(1088,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. +node_modules/chrome-devtools-frontend/front_end/Tests.js(107,5): error TS2322: Type 'Timer' is not assignable to type 'number'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(208,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(221,7): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(378,10): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(397,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(416,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(440,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(475,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(571,33): error TS2339: Property 'deprecatedRunAfterPendingDispatches' does not exist on type 'typeof InspectorBackend'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(590,27): error TS2554: Expected 0 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(687,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(711,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(735,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(769,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(775,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(781,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(814,31): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(816,7): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(847,9): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(848,9): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(886,29): error TS2339: Property 'getPreferences' does not exist on type 'typeof InspectorFrontendHost'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(890,17): error TS2339: Property '_instanceForTest' does not exist on type 'typeof Main'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(893,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(894,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(895,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(897,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(898,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(899,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(917,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(918,7): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(929,33): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(934,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(935,7): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(959,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(960,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(961,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(965,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(966,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(967,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(968,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(969,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(970,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(974,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(975,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(976,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(977,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(978,11): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(986,5): error TS2554: Expected 3 arguments, but got 2. +node_modules/chrome-devtools-frontend/front_end/Tests.js(988,5): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1033,25): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(1040,23): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(1084,20): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(1139,33): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1142,31): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1186,5): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1199,9): error TS2554: Expected 4 arguments, but got 3. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1199,28): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/Tests.js(1229,10): error TS2339: Property 'uiTests' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/Tests.js(1229,41): error TS2339: Property 'domAutomationController' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(9,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(11,46): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(45,27): error TS2694: Namespace 'DOMNode' has no exported member 'Attribute'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(64,18): error TS2339: Property 'setTextContentTruncatedIfNeeded' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(77,26): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(79,26): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(109,11): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(128,31): error TS2339: Property 'textContent' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(139,18): error TS2339: Property 'getComponentSelection' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(171,15): error TS2339: Property 'handled' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(175,43): error TS2339: Property 'textContent' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(176,13): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(180,15): error TS2339: Property 'keyCode' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(180,70): error TS2339: Property 'keyIdentifier' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(182,13): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(209,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(213,36): error TS2339: Property '_isEditingName' does not exist on type 'ARIAAttributePrompt'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAConfig.js(5,28): error TS2339: Property '_config' does not exist on type 'typeof ARIAMetadata'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(56,35): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(57,32): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(57,102): error TS2339: Property '_config' does not exist on type 'typeof ARIAMetadata'. +node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(58,37): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(10,11): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(14,18): error TS2339: Property 'tabIndex' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(24,38): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(40,51): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(42,20): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(50,33): error TS2339: Property 'hasFocus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(115,16): error TS2339: Property 'path' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,15): error TS2339: Property 'shiftKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,33): error TS2339: Property 'metaKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,50): error TS2339: Property 'ctrlKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,16): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,43): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,74): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,21): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,50): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,82): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(129,13): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(160,33): error TS2339: Property 'hasFocus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(184,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(208,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(265,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(274,42): error TS2554: Expected 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(298,19): error TS2339: Property 'breadcrumb' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(302,23): error TS2339: Property 'tabIndex' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(314,15): error TS1110: Type expected. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(323,23): error TS2339: Property 'style' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(330,27): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(391,50): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(393,50): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(396,27): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(447,26): error TS2339: Property 'breadcrumb' does not exist on type 'Node'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(457,30): error TS2339: Property 'breadcrumb' does not exist on type 'Node'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(473,24): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(481,17): error TS2339: Property 'setTextContentTruncatedIfNeeded' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(488,38): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(10,24): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(54,32): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(61,25): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. @@ -101,63 +249,6 @@ node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeV node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilitySidebarView.js(129,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilitySidebarView.js(141,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilitySidebarView.js(195,29): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(9,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(11,46): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(45,27): error TS2694: Namespace 'DOMNode' has no exported member 'Attribute'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(64,18): error TS2339: Property 'setTextContentTruncatedIfNeeded' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(77,26): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(79,26): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(109,11): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(128,31): error TS2339: Property 'textContent' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(139,18): error TS2339: Property 'getComponentSelection' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(171,15): error TS2339: Property 'handled' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(175,43): error TS2339: Property 'textContent' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(176,13): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(180,15): error TS2339: Property 'keyCode' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(180,70): error TS2339: Property 'keyIdentifier' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(182,13): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(209,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAAttributesView.js(213,36): error TS2339: Property '_isEditingName' does not exist on type 'ARIAAttributePrompt'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAConfig.js(5,28): error TS2339: Property '_config' does not exist on type 'typeof ARIAMetadata'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(56,35): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(57,32): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(57,102): error TS2339: Property '_config' does not exist on type 'typeof ARIAMetadata'. -node_modules/chrome-devtools-frontend/front_end/accessibility/ARIAMetadata.js(58,37): error TS2339: Property '_instance' does not exist on type 'typeof ARIAMetadata'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(10,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(14,18): error TS2339: Property 'tabIndex' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(24,38): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(40,51): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(42,20): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(50,33): error TS2339: Property 'hasFocus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(115,16): error TS2339: Property 'path' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,15): error TS2339: Property 'shiftKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,33): error TS2339: Property 'metaKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(117,50): error TS2339: Property 'ctrlKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,16): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,43): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(121,74): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,21): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,50): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(123,82): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(129,13): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(160,33): error TS2339: Property 'hasFocus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(184,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(208,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(265,42): error TS2339: Property 'enclosingNodeOrSelfWithClass' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(274,42): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(298,19): error TS2339: Property 'breadcrumb' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(302,23): error TS2339: Property 'tabIndex' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(314,15): error TS1110: Type expected. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(323,23): error TS2339: Property 'style' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(330,27): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(391,50): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(393,50): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(396,27): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(447,26): error TS2339: Property 'breadcrumb' does not exist on type 'Node'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(457,30): error TS2339: Property 'breadcrumb' does not exist on type 'Node'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(473,24): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(481,17): error TS2339: Property 'setTextContentTruncatedIfNeeded' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AXBreadcrumbsPane.js(488,38): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/accessibility_test_runner/AccessibilityPaneTestRunner.js(11,15): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/accessibility_test_runner/AccessibilityPaneTestRunner.js(17,12): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationGroupPreviewUI.js(7,11): error TS2339: Property 'AnimationGroupPreviewUI' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. @@ -410,6 +501,14 @@ node_modules/chrome-devtools-frontend/front_end/application_test_runner/IndexedD node_modules/chrome-devtools-frontend/front_end/application_test_runner/IndexedDBTestRunner.js(47,35): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? node_modules/chrome-devtools-frontend/front_end/application_test_runner/IndexedDBTestRunner.js(140,24): error TS2554: Expected 1 arguments, but got 2. node_modules/chrome-devtools-frontend/front_end/application_test_runner/IndexedDBTestRunner.js(140,96): error TS2339: Property 'securityOriginManager' does not exist on type 'typeof TestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(20,14): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(34,14): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(37,59): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(69,11): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(71,30): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(72,27): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(73,27): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. +node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(76,71): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(18,20): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(30,19): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(31,16): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. @@ -421,14 +520,6 @@ node_modules/chrome-devtools-frontend/front_end/application_test_runner/Resource node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(103,21): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(107,21): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(111,21): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(20,14): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(34,14): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(37,59): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(69,11): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(71,30): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(72,27): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(73,27): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourceTreeTestRunner.js(76,71): error TS2339: Property '_testSourceNavigator' does not exist on type 'typeof ApplicationTestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ServiceWorkersTestRunner.js(44,19): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? node_modules/chrome-devtools-frontend/front_end/application_test_runner/ServiceWorkersTestRunner.js(55,14): error TS2339: Property 'serviceWorkerManager' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ServiceWorkersTestRunner.js(57,18): error TS2339: Property 'serviceWorkerManager' does not exist on type 'typeof TestRunner'. @@ -660,8 +751,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestR node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(77,40): error TS2339: Property 'checkboxElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(89,29): error TS2339: Property 'disabled' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(102,24): error TS2488: Type 'NodeListOf' must have a '[Symbol.iterator]()' method that returns an iterator. -node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/Audits2Service.js(33,31): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/audits2_worker/Audits2Service.js(33,31): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/chrome-devtools-frontend/front_end/audits2_worker/Audits2Service.js(40,25): error TS2503: Cannot find namespace 'ReportRenderer'. @@ -3076,6 +3165,8 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(70756,10): error TS2531: Object is possibly 'null'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(70756,45): error TS2531: Object is possibly 'null'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(70848,34): error TS2304: Cannot find name 'fs'. +node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/bindings/BlackboxManager.js(22,21): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/bindings/BlackboxManager.js(25,71): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. node_modules/chrome-devtools-frontend/front_end/bindings/BlackboxManager.js(69,72): error TS2339: Property 'getAsArray' does not exist on type 'Setting'. @@ -3124,15 +3215,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(66 node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(713,51): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(863,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(905,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(48,52): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(50,62): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(59,56): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(184,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(194,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(202,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(218,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(39,25): error TS2694: Namespace 'Workspace' has no exported member 'projectTypes'. -node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(180,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(64,19): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: any; Regular: string; Inline: string; Attributes: string; }' and 'string'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(104,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'rawLocations' must be of type 'CSSLocation[]', but here has type 'any[]'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(106,20): error TS2339: Property 'pushAll' does not exist on type 'CSSLocation[]'. @@ -3152,6 +3234,15 @@ node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js( node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(218,30): error TS2339: Property 'set' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(221,21): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(232,41): error TS2551: Property 'resourceMapping' does not exist on type 'typeof Bindings'. Did you mean 'ResourceMapping'? +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(48,52): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(50,62): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(59,56): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(184,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(194,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(202,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(218,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(39,25): error TS2694: Namespace 'Workspace' has no exported member 'projectTypes'. +node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(180,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(51,31): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(85,5): error TS2322: Type 'StackTraceTopFrameLocation' is not assignable to type '{ [x: string]: any; update(): void; uiLocation(): UILocation; dispose(): void; isBlackboxed(): bo...'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(85,5): error TS2322: Type 'StackTraceTopFrameLocation' is not assignable to type '{ [x: string]: any; update(): void; uiLocation(): UILocation; dispose(): void; isBlackboxed(): bo...'. @@ -3498,6 +3589,7 @@ node_modules/chrome-devtools-frontend/front_end/cm_headless/headlesscodemirror.j node_modules/chrome-devtools-frontend/front_end/cm_headless/headlesscodemirror.js(153,32): error TS2339: Property 'blankLine' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/cm_headless/headlesscodemirror.js(153,48): error TS2339: Property 'blankLine' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/cm_headless/headlesscodemirror.js(155,24): error TS2339: Property 'token' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/cm_modes/DefaultCodeMirrorMimeMode.js(22,14): error TS2339: Property 'eval' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/cm_modes/clike.js(6,17): error TS2307: Cannot find module '../../lib/codemirror'. node_modules/chrome-devtools-frontend/front_end/cm_modes/clike.js(7,19): error TS2304: Cannot find name 'define'. node_modules/chrome-devtools-frontend/front_end/cm_modes/clike.js(7,43): error TS2304: Cannot find name 'define'. @@ -3513,7 +3605,6 @@ node_modules/chrome-devtools-frontend/front_end/cm_modes/coffeescript.js(12,5): node_modules/chrome-devtools-frontend/front_end/cm_modes/coffeescript.js(41,3): error TS2322: Type 'RegExp' is not assignable to type 'string[]'. Property 'flatMap' is missing in type 'RegExp'. node_modules/chrome-devtools-frontend/front_end/cm_modes/coffeescript.js(282,24): error TS2339: Property 'exec' does not exist on type 'string[]'. -node_modules/chrome-devtools-frontend/front_end/cm_modes/DefaultCodeMirrorMimeMode.js(22,14): error TS2339: Property 'eval' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/cm_modes/jsx.js(6,5): error TS2554: Expected 0-1 arguments, but got 3. node_modules/chrome-devtools-frontend/front_end/cm_modes/jsx.js(6,17): error TS2307: Cannot find module '../../lib/codemirror'. node_modules/chrome-devtools-frontend/front_end/cm_modes/jsx.js(6,50): error TS2307: Cannot find module '../xml/xml'. @@ -3836,19 +3927,6 @@ node_modules/chrome-devtools-frontend/front_end/common/UIString.js(81,54): error node_modules/chrome-devtools-frontend/front_end/common/UIString.js(93,6): error TS2339: Property 'ls' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/common/Worker.js(52,30): error TS2339: Property 'data' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Worker.js(82,25): error TS2315: Type 'MessageEvent' is not generic. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(42,46): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(44,62): error TS2339: Property 'closeWindow' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,7): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,41): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,76): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(71,7): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(116,33): error TS2339: Property 'deepActiveElement' does not exist on type 'Document'. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(122,27): error TS2339: Property 'setIsDocked' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193,5): error TS2322: Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. -node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193,5): error TS2322: Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. - Property 'item' is missing in type 'ToolbarButton'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(39,45): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(40,46): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(41,38): error TS2555: Expected at least 2 arguments, but got 1. @@ -3905,6 +3983,19 @@ node_modules/chrome-devtools-frontend/front_end/components/DOMPresentationUtils. node_modules/chrome-devtools-frontend/front_end/components/DOMPresentationUtils.js(259,13): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/components/DOMPresentationUtils.js(643,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/components/DOMPresentationUtils.js(657,19): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(42,46): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(44,62): error TS2339: Property 'closeWindow' does not exist on type 'typeof InspectorFrontendHost'. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,7): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,41): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(70,76): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(71,7): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(116,33): error TS2339: Property 'deepActiveElement' does not exist on type 'Document'. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(122,27): error TS2339: Property 'setIsDocked' does not exist on type 'typeof InspectorFrontendHost'. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193,5): error TS2322: Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. + Property 'item' is missing in type 'ToolbarButton'. +node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193,5): error TS2322: Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(62,24): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(125,94): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(127,41): error TS2339: Property 'remove' does not exist on type 'Map'. @@ -4965,10 +5056,10 @@ node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(9, node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(9,29): error TS2417: Class static side 'typeof ViewportDataGrid' incorrectly extends base class static side 'typeof DataGrid'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; ViewportCalculated: symbol; }' is not assignable to type '{ [x: string]: any; SelectedNode: symbol; DeselectedNode: symbol; OpenedNode: symbol; SortingChan...'. + Property 'SelectedNode' is missing in type '{ [x: string]: any; ViewportCalculated: symbol; }'. node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(9,29): error TS2417: Class static side 'typeof ViewportDataGrid' incorrectly extends base class static side 'typeof DataGrid'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; ViewportCalculated: symbol; }' is not assignable to type '{ [x: string]: any; SelectedNode: symbol; DeselectedNode: symbol; OpenedNode: symbol; SortingChan...'. - Property 'SelectedNode' is missing in type '{ [x: string]: any; ViewportCalculated: symbol; }'. node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(11,41): error TS2694: Namespace 'DataGrid' has no exported member 'ColumnDescriptor'. node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(32,22): error TS2345: Argument of type 'ViewportDataGridNode' is not assignable to parameter of type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/data_grid/ViewportDataGrid.js(43,41): error TS2339: Property 'flatChildren' does not exist on type 'NODE_TYPE'. @@ -5065,9 +5156,9 @@ node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(283,88): node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(285,36): error TS2694: Namespace 'Adb' has no exported member 'PortForwardingRule'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(286,5): error TS2322: Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. + Property 'renderItem' is missing in type 'ListWidget'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(286,5): error TS2322: Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. - Property 'renderItem' is missing in type 'ListWidget'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(290,31): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(293,43): error TS2694: Namespace 'Adb' has no exported member 'PortForwardingRule'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(297,29): error TS2555: Expected at least 2 arguments, but got 1. @@ -5097,9 +5188,9 @@ node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(466,64): node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(469,36): error TS2694: Namespace 'Adb' has no exported member 'PortForwardingRule'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(470,5): error TS2322: Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. + Property 'renderItem' is missing in type 'ListWidget'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(470,5): error TS2322: Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. Type 'ListWidget' is not assignable to type '{ [x: string]: any; renderItem(item: T, editable: boolean): Element; removeItemRequested(item: T,...'. - Property 'renderItem' is missing in type 'ListWidget'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(475,24): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(475,70): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(478,43): error TS2694: Namespace 'Adb' has no exported member 'PortForwardingRule'. @@ -5440,10 +5531,10 @@ node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(3 node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(65,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(73,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(84,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(122,5): error TS2322: Type 'Promise>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(122,5): error TS2322: Type 'Promise>' is not assignable to type 'Promise'. Type 'Map' is not assignable to type 'ComputedStyle'. Property 'node' is missing in type 'Map'. +node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleModel.js(122,5): error TS2322: Type 'Promise>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(48,36): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(51,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(52,49): error TS2555: Expected at least 2 arguments, but got 1. @@ -5479,6 +5570,21 @@ node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js( node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(281,35): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(282,49): error TS2339: Property 'selectorText' does not exist on type 'CSSRule'. node_modules/chrome-devtools-frontend/front_end/elements/ComputedStyleWidget.js(286,30): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(12,25): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(12,60): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(25,70): error TS2339: Property 'state' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(25,90): error TS2339: Property 'checked' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(36,13): error TS2339: Property 'state' does not exist on type 'HTMLInputElement'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(43,20): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(47,16): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(51,16): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(108,41): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(109,26): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(124,5): error TS2322: Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; }'. + Property 'item' is missing in type 'ToolbarToggle'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(124,5): error TS2322: Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; }'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsBreadcrumbs.js(12,46): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsBreadcrumbs.js(86,37): error TS2339: Property 'nextSiblingElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsBreadcrumbs.js(104,16): error TS2555: Expected at least 2 arguments, but got 1. @@ -5487,9 +5593,9 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(49,41) node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(58,40): error TS2694: Namespace 'ElementsPanel' has no exported member '_splitMode'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(90,32): error TS2339: Property 'addEventListener' does not exist on type 'typeof extensionServer'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(98,57): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(116,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(116,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. Property 'appendApplicableItems' is missing in type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }'. +node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(116,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(159,24): error TS2339: Property 'remove' does not exist on type 'ElementsTreeOutline[]'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(180,12): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(181,12): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -5543,21 +5649,6 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(884,11 node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(905,15): error TS2339: Property '_pendingNodeReveal' does not exist on type 'ElementsPanel'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(912,15): error TS2339: Property '_pendingNodeReveal' does not exist on type 'ElementsPanel'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsSidebarPane.js(66,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(12,25): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(12,60): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(25,70): error TS2339: Property 'state' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(25,90): error TS2339: Property 'checked' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(36,13): error TS2339: Property 'state' does not exist on type 'HTMLInputElement'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(43,20): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(47,16): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(51,16): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(108,41): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(109,26): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(124,5): error TS2322: Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; }'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementStatePaneWidget.js(124,5): error TS2322: Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & any; }'. - Property 'item' is missing in type 'ToolbarToggle'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(44,50): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(111,66): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(239,29): error TS2339: Property 'style' does not exist on type 'Element'. @@ -5673,10 +5764,10 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElementHigh node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(34,32): error TS2417: Class static side 'typeof ElementsTreeOutline' incorrectly extends base class static side 'typeof TreeOutline'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; SelectedNodeChanged: symbol; ElementsTreeUpdated: symbol; }' is not assignable to type '{ [x: string]: any; ElementAttached: symbol; ElementExpanded: symbol; ElementCollapsed: symbol; E...'. + Property 'ElementAttached' is missing in type '{ [x: string]: any; SelectedNodeChanged: symbol; ElementsTreeUpdated: symbol; }'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(34,32): error TS2417: Class static side 'typeof ElementsTreeOutline' incorrectly extends base class static side 'typeof TreeOutline'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; SelectedNodeChanged: symbol; ElementsTreeUpdated: symbol; }' is not assignable to type '{ [x: string]: any; ElementAttached: symbol; ElementExpanded: symbol; ElementCollapsed: symbol; E...'. - Property 'ElementAttached' is missing in type '{ [x: string]: any; SelectedNodeChanged: symbol; ElementsTreeUpdated: symbol; }'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(45,53): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(49,51): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(120,24): error TS2694: Namespace 'Elements' has no exported member 'MultilineEditorController'. @@ -6690,67 +6781,6 @@ node_modules/chrome-devtools-frontend/front_end/formatter/ScriptFormatter.js(127 node_modules/chrome-devtools-frontend/front_end/formatter/ScriptFormatter.js(134,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/formatter/ScriptFormatter.js(173,45): error TS2694: Namespace 'FormatterWorkerPool' has no exported member 'FormatMapping'. node_modules/chrome-devtools-frontend/front_end/formatter/ScriptFormatter.js(215,28): error TS2339: Property 'upperBound' does not exist on type 'number[]'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,10): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,35): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,48): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(527,43): error TS2339: Property 'startNode' does not exist on type 'Parser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(528,8): error TS2339: Property 'nextToken' does not exist on type 'Parser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(529,15): error TS2339: Property 'parseTopLevel' does not exist on type 'Parser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(1674,55): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,7): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,22): error TS2339: Property 'loc' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,37): error TS2339: Property 'raisedAt' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2564,12): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2565,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2568,18): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2569,36): error TS2339: Property 'curContext' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2570,10): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2571,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2573,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2575,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2580,8): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2580,26): error TS2339: Property 'braceIsBlock' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2581,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2585,8): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2586,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2591,8): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2592,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2601,67): error TS2339: Property 'curContext' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2602,10): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2603,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2607,12): error TS2339: Property 'curContext' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2608,10): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2610,10): error TS2339: Property 'context' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2611,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2634,22): error TS2304: Cannot find name 'Packages'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2634,77): error TS2304: Cannot find name 'Packages'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(3362,5): error TS2339: Property 'nextToken' does not exist on type 'Parser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(3363,12): error TS2339: Property 'parseExpression' does not exist on type 'Parser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,10): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,35): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,48): error TS2304: Cannot find name 'define'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(85,10): error TS2339: Property 'next' does not exist on type 'LooseParser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(114,16): error TS2339: Property 'lookAhead' does not exist on type 'LooseParser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(115,42): error TS2339: Property 'next' does not exist on type 'LooseParser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(217,36): error TS2339: Property 'raisedAt' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(219,32): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,31): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,105): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(223,41): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(225,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(225,31): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(227,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(228,22): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(231,41): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(252,29): error TS2322: Type '{ start: any; end: any; type: any; value: string; }' is not assignable to type 'boolean'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(255,19): error TS2339: Property 'loc' does not exist on type 'true'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(257,55): error TS2339: Property 'start' does not exist on type 'true'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(258,55): error TS2339: Property 'end' does not exist on type 'true'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(1365,5): error TS2339: Property 'next' does not exist on type 'LooseParser'. -node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(1366,12): error TS2339: Property 'parseTopLevel' does not exist on type 'LooseParser'. node_modules/chrome-devtools-frontend/front_end/formatter_worker/AcornTokenizer.js(14,54): error TS2345: Argument of type '{ ecmaVersion: number; onComment: any[]; }' is not assignable to parameter of type '{ [x: string]: boolean; }'. Property 'ecmaVersion' is incompatible with index signature. Type 'number' is not assignable to type 'boolean'. @@ -6917,6 +6947,67 @@ node_modules/chrome-devtools-frontend/front_end/formatter_worker/RelaxedJSONPars node_modules/chrome-devtools-frontend/front_end/formatter_worker/RelaxedJSONParser.js(179,103): error TS2694: Namespace '__object' has no exported member 'States'. node_modules/chrome-devtools-frontend/front_end/formatter_worker/RelaxedJSONParser.js(180,2): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/formatter_worker/RelaxedJSONParser.js(181,35): error TS2300: Duplicate identifier 'Context'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,10): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,35): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(4,48): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(527,43): error TS2339: Property 'startNode' does not exist on type 'Parser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(528,8): error TS2339: Property 'nextToken' does not exist on type 'Parser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(529,15): error TS2339: Property 'parseTopLevel' does not exist on type 'Parser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(1674,55): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,7): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,22): error TS2339: Property 'loc' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2451,37): error TS2339: Property 'raisedAt' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2564,12): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2565,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2568,18): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2569,36): error TS2339: Property 'curContext' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2570,10): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2571,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2573,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2575,10): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2580,8): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2580,26): error TS2339: Property 'braceIsBlock' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2581,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2585,8): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2586,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2591,8): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2592,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2601,67): error TS2339: Property 'curContext' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2602,10): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2603,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2607,12): error TS2339: Property 'curContext' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2608,10): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2610,10): error TS2339: Property 'context' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2611,8): error TS2339: Property 'exprAllowed' does not exist on type 'TokenType'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2634,22): error TS2304: Cannot find name 'Packages'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(2634,77): error TS2304: Cannot find name 'Packages'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(3362,5): error TS2339: Property 'nextToken' does not exist on type 'Parser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn.js(3363,12): error TS2339: Property 'parseExpression' does not exist on type 'Parser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,10): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,35): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(4,48): error TS2304: Cannot find name 'define'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(85,10): error TS2339: Property 'next' does not exist on type 'LooseParser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(114,16): error TS2339: Property 'lookAhead' does not exist on type 'LooseParser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(115,42): error TS2339: Property 'next' does not exist on type 'LooseParser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(217,36): error TS2339: Property 'raisedAt' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(219,32): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,31): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(221,105): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(223,41): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(225,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(225,31): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(227,11): error TS2322: Type '{ start: any; end: any; type: any; value: any; }' is not assignable to type 'boolean'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(228,22): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(231,41): error TS2339: Property 'pos' does not exist on type 'SyntaxError'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(252,29): error TS2322: Type '{ start: any; end: any; type: any; value: string; }' is not assignable to type 'boolean'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(255,19): error TS2339: Property 'loc' does not exist on type 'true'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(257,55): error TS2339: Property 'start' does not exist on type 'true'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(258,55): error TS2339: Property 'end' does not exist on type 'true'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(1365,5): error TS2339: Property 'next' does not exist on type 'LooseParser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker/acorn/acorn_loose.js(1366,12): error TS2339: Property 'parseTopLevel' does not exist on type 'LooseParser'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/formatter_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/har_importer/HARImporter.js(26,11): error TS2403: Subsequent variable declarations must have the same type. Variable 'page' must be of type 'any', but here has type 'HARPage'. node_modules/chrome-devtools-frontend/front_end/har_importer/HARImporter.js(46,5): error TS2322: Type 'Date' is not assignable to type 'number'. node_modules/chrome-devtools-frontend/front_end/heap_profiler_test_runner/HeapProfilerTestRunner.js(11,26): error TS2339: Property 'createJSHeapSnapshotMockObject' does not exist on type 'typeof HeapProfilerTestRunner'. @@ -7007,8 +7098,6 @@ node_modules/chrome-devtools-frontend/front_end/heap_profiler_test_runner/HeapPr node_modules/chrome-devtools-frontend/front_end/heap_profiler_test_runner/HeapProfilerTestRunner.js(682,36): error TS2339: Property 'instance' does not exist on type 'typeof SamplingHeapProfileType'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_model/HeapSnapshotModel.js(31,19): error TS2339: Property 'HeapSnapshotProgressEvent' does not exist on type 'typeof HeapSnapshotModel'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_model/HeapSnapshotModel.js(36,19): error TS2339: Property 'baseSystemDistance' does not exist on type 'typeof HeapSnapshotModel'. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(37,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(87,5): error TS2322: Type 'void' is not assignable to type 'HeapSnapshotNode'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(144,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. @@ -7132,6 +7221,8 @@ node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapsho node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshotLoader.js(132,47): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshotWorker.js(31,3): error TS2554: Expected 2-3 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js(87,36): error TS2339: Property 'eval' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. +node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/help/Help.js(6,19): error TS2694: Namespace 'Help' has no exported member 'ReleaseNote'. node_modules/chrome-devtools-frontend/front_end/help/Help.js(9,13): error TS2551: Property '_latestReleaseNote' does not exist on type 'typeof Help'. Did you mean 'latestReleaseNote'? node_modules/chrome-devtools-frontend/front_end/help/Help.js(11,10): error TS2551: Property '_latestReleaseNote' does not exist on type 'typeof Help'. Did you mean 'latestReleaseNote'? @@ -7250,29 +7341,6 @@ node_modules/chrome-devtools-frontend/front_end/inline_editor/BezierUI.js(100,31 node_modules/chrome-devtools-frontend/front_end/inline_editor/BezierUI.js(101,32): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/inline_editor/BezierUI.js(102,9): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/inline_editor/BezierUI.js(103,21): error TS2339: Property 'createSVGChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(16,35): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(17,32): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(21,83): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(96,29): error TS2694: Namespace 'Color' has no exported member 'Format'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(103,28): error TS2694: Namespace 'Color' has no exported member 'Format'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(131,30): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(132,31): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(138,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(139,36): error TS2339: Property 'createChild' does not exist on type 'ColorSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(146,16): error TS2339: Property 'shiftKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(148,18): error TS2339: Property 'parentNode' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(149,11): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(166,36): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(167,33): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(171,85): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(209,30): error TS2339: Property 'createChild' does not exist on type 'BezierSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(210,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(227,39): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(228,36): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(232,91): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(248,29): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(290,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(291,33): error TS2339: Property 'createChild' does not exist on type 'CSSShadowSwatch'. node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowEditor.js(11,25): error TS2339: Property 'tabIndex' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowEditor.js(14,43): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowEditor.js(15,79): error TS2555: Expected at least 2 arguments, but got 1. @@ -7330,6 +7398,29 @@ node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowEditor.js node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowEditor.js(367,20): error TS2339: Property 'value' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowModel.js(46,28): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. node_modules/chrome-devtools-frontend/front_end/inline_editor/CSSShadowModel.js(63,31): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(16,35): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(17,32): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(21,83): error TS2339: Property '_constructor' does not exist on type 'typeof ColorSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(96,29): error TS2694: Namespace 'Color' has no exported member 'Format'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(103,28): error TS2694: Namespace 'Color' has no exported member 'Format'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(131,30): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(132,31): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(138,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(139,36): error TS2339: Property 'createChild' does not exist on type 'ColorSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(146,16): error TS2339: Property 'shiftKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(148,18): error TS2339: Property 'parentNode' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(149,11): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(166,36): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(167,33): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(171,85): error TS2339: Property '_constructor' does not exist on type 'typeof BezierSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(209,30): error TS2339: Property 'createChild' does not exist on type 'BezierSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(210,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(227,39): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(228,36): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(232,91): error TS2339: Property '_constructor' does not exist on type 'typeof CSSShadowSwatch'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(248,29): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(290,10): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/inline_editor/ColorSwatch.js(291,33): error TS2339: Property 'createChild' does not exist on type 'CSSShadowSwatch'. node_modules/chrome-devtools-frontend/front_end/inline_editor/SwatchPopoverHelper.js(12,35): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; SetExactSize: symbol; SetExactWidthMaxHeight: symbol; MeasureContent: symbol; }'. node_modules/chrome-devtools-frontend/front_end/inline_editor/SwatchPopoverHelper.js(13,37): error TS2345: Argument of type 'symbol' is not assignable to parameter of type 'boolean'. node_modules/chrome-devtools-frontend/front_end/inline_editor/SwatchPopoverHelper.js(14,64): error TS2339: Property 'consume' does not exist on type 'Event'. @@ -7396,6 +7487,32 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(295,48): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(296,48): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(297,47): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(65,31): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(78,31): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(118,24): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(123,83): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(150,61): error TS2339: Property 'root' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(151,31): error TS2339: Property '_layer' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(164,25): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(199,25): error TS2339: Property '_layer' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(199,80): error TS2339: Property '_layer' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(215,17): error TS2538: Type 'symbol' cannot be used as an index type. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(222,11): error TS2339: Property 'createTextChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(223,25): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(33,47): error TS2694: Namespace 'Selection' has no exported member 'Type'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(51,48): error TS2694: Namespace 'Selection' has no exported member 'Type'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(92,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(101,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(114,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(124,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(125,84): error TS2339: Property 'scrollRectIndex' does not exist on type 'Selection'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(135,19): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(138,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(148,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(149,34): error TS2339: Property '_snapshot' does not exist on type 'Selection'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(153,20): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(231,9): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(235,7): error TS2554: Expected 3 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(44,30): error TS2339: Property 'createTextChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(44,46): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(54,47): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -7474,32 +7591,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(932 node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1080,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1098,15): error TS2304: Cannot find name 'CSSMatrix'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1143,19): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(65,31): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(78,31): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(118,24): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(123,83): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(150,61): error TS2339: Property 'root' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(151,31): error TS2339: Property '_layer' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(164,25): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(199,25): error TS2339: Property '_layer' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(199,80): error TS2339: Property '_layer' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(215,17): error TS2538: Type 'symbol' cannot be used as an index type. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(222,11): error TS2339: Property 'createTextChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(223,25): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(33,47): error TS2694: Namespace 'Selection' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(51,48): error TS2694: Namespace 'Selection' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(92,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(101,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(114,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(124,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(125,84): error TS2339: Property 'scrollRectIndex' does not exist on type 'Selection'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(135,19): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(138,11): error TS2345: Argument of type 'symbol' is not assignable to parameter of type '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(148,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Layer: symbol; ScrollRect: symbol; Snapshot: symbol; }' and 'symbol'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(149,34): error TS2339: Property '_snapshot' does not exist on type 'Selection'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(153,20): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(231,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(235,7): error TS2554: Expected 3 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(42,49): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(43,48): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(44,40): error TS2555: Expected at least 2 arguments, but got 1. @@ -7556,12 +7647,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/TransformController node_modules/chrome-devtools-frontend/front_end/layer_viewer/TransformController.js(283,29): error TS2339: Property 'clientX' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/TransformController.js(284,29): error TS2339: Property 'clientY' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/TransformController.js(292,18): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(63,53): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(138,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(150,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(160,58): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(169,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(187,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(79,32): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(88,32): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(107,24): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. @@ -7581,6 +7666,12 @@ node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(518,15) node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(552,32): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(560,24): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(561,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(63,53): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(138,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(150,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(160,58): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(169,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/layers/LayersPanel.js(187,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/layers_test_runner/LayersTestRunner.js(11,25): error TS2551: Property '_layerTreeModel' does not exist on type 'typeof LayersTestRunner'. Did you mean 'layerTreeModel'? node_modules/chrome-devtools-frontend/front_end/layers_test_runner/LayersTestRunner.js(12,22): error TS2551: Property '_layerTreeModel' does not exist on type 'typeof LayersTestRunner'. Did you mean 'layerTreeModel'? node_modules/chrome-devtools-frontend/front_end/layers_test_runner/LayersTestRunner.js(12,51): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. @@ -7650,9 +7741,9 @@ node_modules/chrome-devtools-frontend/front_end/main/Main.js(567,65): error TS23 node_modules/chrome-devtools-frontend/front_end/main/Main.js(591,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/main/Main.js(599,5): error TS2322: Type 'ToolbarMenuButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. Type 'ToolbarMenuButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. + Property 'item' is missing in type 'ToolbarMenuButton'. node_modules/chrome-devtools-frontend/front_end/main/Main.js(599,5): error TS2322: Type 'ToolbarMenuButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. Type 'ToolbarMenuButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. - Property 'item' is missing in type 'ToolbarMenuButton'. node_modules/chrome-devtools-frontend/front_end/main/Main.js(608,42): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/main/Main.js(609,34): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/main/Main.js(616,41): error TS2555: Expected at least 2 arguments, but got 1. @@ -8307,6 +8398,8 @@ node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(55 node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(81,26): error TS2554: Expected 4 arguments, but got 0. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(83,20): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(84,20): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/network/RequestHTMLView.js(56,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/network/RequestHTMLView.js(62,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(56,84): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(71,73): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(112,14): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. @@ -8359,8 +8452,6 @@ node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(48 node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(496,11): error TS2339: Property 'consume' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(514,44): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(514,77): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/network/RequestHTMLView.js(56,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/network/RequestHTMLView.js(62,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(60,33): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(93,31): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(46,34): error TS2694: Namespace 'NetworkRequest' has no exported member 'ContentData'. @@ -9122,8 +9213,8 @@ node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(943,8): er node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(944,41): error TS2339: Property 'standardFormatters' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(954,13): error TS2315: Type 'Object' is not generic. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(954,27): error TS1009: Trailing comma not allowed. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(954,29): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(954,29): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. +node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(954,29): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(961,8): error TS2339: Property 'format' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(963,51): error TS2345: Argument of type 'string' is not assignable to parameter of type 'Q'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(978,42): error TS2339: Property 'tokenizeFormatString' does not exist on type 'StringConstructor'. @@ -9243,19 +9334,11 @@ node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(404,7 node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(405,22): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(405,71): error TS2339: Property 'secondsToString' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(407,24): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(14,9): error TS2345: Argument of type '(HeapSnapshotProfileType | SamplingHeapProfileType)[]' is not assignable to parameter of type '({ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: an...'. - Type 'HeapSnapshotProfileType | SamplingHeapProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. - Type 'HeapSnapshotProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. - Type 'HeapSnapshotProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. - Property 'showProfile' is missing in type 'HeapSnapshotProfileType'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(56,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(88,24): error TS2694: Namespace 'Protocol' has no exported member 'HeapProfiler'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(100,14): error TS2339: Property 'selectLiveObject' does not exist on type 'Widget'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(31,16): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(33,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(43,5): error TS2322: Type 'HeapFlameChartDataProvider' is not assignable to type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(43,5): error TS2322: Type 'HeapFlameChartDataProvider' is not assignable to type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. Property '_profile' does not exist on type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(43,5): error TS2322: Type 'HeapFlameChartDataProvider' is not assignable to type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(52,52): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(54,38): error TS2339: Property 'instance' does not exist on type 'typeof SamplingHeapProfileType'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(82,30): error TS2555: Expected at least 2 arguments, but got 1. @@ -9279,13 +9362,21 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(389, node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(390,22): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(390,60): error TS2339: Property 'bytesToString' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(395,24): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(14,9): error TS2345: Argument of type '(HeapSnapshotProfileType | SamplingHeapProfileType)[]' is not assignable to parameter of type '({ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: an...'. + Type 'HeapSnapshotProfileType | SamplingHeapProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. + Type 'HeapSnapshotProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. + Type 'HeapSnapshotProfileType' is not assignable to type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. + Property 'showProfile' is missing in type 'HeapSnapshotProfileType'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(56,9): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(88,24): error TS2694: Namespace 'Protocol' has no exported member 'HeapProfiler'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfilerPanel.js(100,14): error TS2339: Property 'selectLiveObject' does not exist on type 'Widget'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(34,41): error TS2417: Class static side 'typeof HeapSnapshotSortableDataGrid' incorrectly extends base class static side 'typeof DataGrid'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; ContentShown: symbol; SortingComplete: symbol; }' is not assignable to type '{ [x: string]: any; SelectedNode: symbol; DeselectedNode: symbol; OpenedNode: symbol; SortingChan...'. + Property 'SelectedNode' is missing in type '{ [x: string]: any; ContentShown: symbol; SortingComplete: symbol; }'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(34,41): error TS2417: Class static side 'typeof HeapSnapshotSortableDataGrid' incorrectly extends base class static side 'typeof DataGrid'. Types of property 'Events' are incompatible. Type '{ [x: string]: any; ContentShown: symbol; SortingComplete: symbol; }' is not assignable to type '{ [x: string]: any; SelectedNode: symbol; DeselectedNode: symbol; OpenedNode: symbol; SortingChan...'. - Property 'SelectedNode' is missing in type '{ [x: string]: any; ContentShown: symbol; SortingComplete: symbol; }'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(37,41): error TS2694: Namespace 'DataGrid' has no exported member 'ColumnDescriptor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(124,27): error TS2339: Property 'enclosingNodeOrSelfWithNodeName' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(137,46): error TS2555: Expected at least 2 arguments, but got 1. @@ -9362,10 +9453,10 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(137,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(155,48): error TS2339: Property 'baseSystemDistance' does not exist on type 'typeof HeapSnapshotModel'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(156,95): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(163,5): error TS2322: Type '({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; is...' is not assignable to type 'DataGridNode[]'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(163,5): error TS2322: Type '({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; is...' is not assignable to type 'DataGridNode[]'. Type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...' is not assignable to type 'DataGridNode'. Property '_element' is missing in type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(163,5): error TS2322: Type '({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; is...' is not assignable to type 'DataGridNode[]'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(170,39): error TS2345: Argument of type 'this' is not assignable to parameter of type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. Type 'HeapSnapshotGridNode' is not assignable to type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. Type 'HeapSnapshotGridNode' is not assignable to type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. @@ -9397,19 +9488,19 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(580,12): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(581,10): error TS2339: Property 'heapSnapshotNode' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(602,75): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(682,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotObjectNode' is not assignable to the same property in base type 'HeapSnapshotGenericObjectNode'. - Type '() => HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. Property '_worker' does not exist on type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(682,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotObjectNode' is not assignable to the same property in base type 'HeapSnapshotGenericObjectNode'. + Type '() => HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(892,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotInstanceNode' is not assignable to the same property in base type 'HeapSnapshotGenericObjectNode'. Type '() => HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(966,23): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(968,29): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(969,30): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. @@ -9440,12 +9531,12 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1181,27): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1182,29): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1183,65): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1191,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotDiffNode' is not assignable to the same property in base type 'HeapSnapshotGridNode'. - Type '() => HeapSnapshotDiffNodesProvider' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise HeapSnapshotDiffNodesProvider' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. Property '_addedNodesProvider' does not exist on type '{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. +node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1191,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotDiffNode' is not assignable to the same property in base type 'HeapSnapshotGridNode'. + Type '() => HeapSnapshotDiffNodesProvider' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise'. @@ -9876,6 +9967,28 @@ node_modules/chrome-devtools-frontend/front_end/quick_open/HelpQuickOpen.js(58,1 node_modules/chrome-devtools-frontend/front_end/quick_open/QuickOpen.js(9,29): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/quick_open/QuickOpen.js(14,10): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/quick_open/QuickOpen.js(26,39): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(13,42): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(17,9): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(23,42): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(27,58): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(28,60): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(32,30): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(32,79): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(34,31): error TS2345: Argument of type 'ToolbarButton' is not assignable to parameter of type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(36,64): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(37,57): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(39,57): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(40,62): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(42,65): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(44,65): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(48,70): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(52,68): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(53,64): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(88,31): error TS2694: Namespace 'Protocol' has no exported member 'Page'. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(116,25): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(139,32): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(158,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheItemsView.js(31,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheItemsView.js(37,47): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheItemsView.js(42,28): error TS2339: Property 'style' does not exist on type 'Element'. @@ -9949,28 +10062,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSideba node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1518,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1530,55): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1555,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(13,42): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(17,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(23,42): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(27,58): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(28,60): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(32,30): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(32,79): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(34,31): error TS2345: Argument of type 'ToolbarButton' is not assignable to parameter of type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(36,64): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(37,57): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(39,57): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(40,62): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(42,65): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(44,65): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(48,70): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(52,68): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(53,64): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(88,31): error TS2694: Namespace 'Protocol' has no exported member 'Page'. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(116,25): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(139,32): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/AppManifestView.js(158,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(11,26): error TS2339: Property 'Storage' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(22,42): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(37,48): error TS2555: Expected at least 2 arguments, but got 1. @@ -10023,28 +10114,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(25 node_modules/chrome-devtools-frontend/front_end/resources/CookieItemsView.js(36,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/CookieItemsView.js(47,43): error TS2694: Namespace 'EventTarget' has no exported member 'EventDescriptor'. node_modules/chrome-devtools-frontend/front_end/resources/CookieItemsView.js(101,42): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(98,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(112,17): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(130,26): error TS2339: Property 'databaseAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(131,19): error TS2339: Property 'registerDatabaseDispatcher' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(191,24): error TS2694: Namespace 'Protocol' has no exported member 'Database'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(38,42): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(52,62): error TS2339: Property 'hasSelection' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(60,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(151,19): error TS2339: Property 'createTextChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(31,11): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(40,47): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(42,53): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(58,5): error TS2322: Type '(ToolbarButton | ToolbarInput)[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(58,5): error TS2322: Type '(ToolbarButton | ToolbarInput)[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. - Type 'ToolbarButton | ToolbarInput' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. - Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. - Property 'item' is missing in type 'ToolbarButton'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(77,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(114,37): error TS2339: Property 'valuesArray' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(130,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(139,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageItemsView.js(32,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageItemsView.js(38,56): error TS2694: Namespace 'DataGrid' has no exported member 'ColumnDescriptor'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageItemsView.js(39,26): error TS2555: Expected at least 2 arguments, but got 1. @@ -10072,23 +10141,45 @@ node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(298 node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(306,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(315,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(325,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(41,12): error TS2339: Property 'registerStorageDispatcher' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(43,35): error TS2339: Property 'indexedDBAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(44,33): error TS2339: Property 'storageAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(58,4): error TS1131: Property or signature expected. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(94,37): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(100,25): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(112,24): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(215,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(223,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(258,36): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(411,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(412,66): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(43,62): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(49,59): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(50,52): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(54,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(54,75): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(98,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(112,17): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(130,26): error TS2339: Property 'databaseAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(131,19): error TS2339: Property 'registerDatabaseDispatcher' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(191,24): error TS2694: Namespace 'Protocol' has no exported member 'Database'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(38,42): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(52,62): error TS2339: Property 'hasSelection' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(60,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(151,19): error TS2339: Property 'createTextChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(31,11): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(40,47): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(42,53): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(58,5): error TS2322: Type '(ToolbarButton | ToolbarInput)[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(58,5): error TS2322: Type '(ToolbarButton | ToolbarInput)[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. + Type 'ToolbarButton | ToolbarInput' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. + Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & any; }'. + Property 'item' is missing in type 'ToolbarButton'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(77,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(114,37): error TS2339: Property 'valuesArray' does not exist on type 'Set'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(130,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(139,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(41,12): error TS2339: Property 'registerStorageDispatcher' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(43,35): error TS2339: Property 'indexedDBAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(44,33): error TS2339: Property 'storageAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(58,4): error TS1131: Property or signature expected. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(94,37): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(100,25): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(112,24): error TS2694: Namespace 'Protocol' has no exported member 'IndexedDB'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(215,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(223,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(258,36): error TS2339: Property 'asParsedURL' does not exist on type 'string'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(411,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(412,66): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(43,62): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(49,59): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(50,52): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(54,9): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(54,75): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(58,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(59,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(68,5): error TS2322: Type 'number' is not assignable to type 'string'. @@ -10266,38 +10357,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/StorageItemsView.js(40 Type 'Function' provides no match for the signature '(arg0: any): any'. node_modules/chrome-devtools-frontend/front_end/resources/StorageItemsView.js(49,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/StorageItemsView.js(54,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(43,8): error TS2339: Property '_importScriptPathPrefix' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(95,28): error TS2339: Property 'response' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(147,37): error TS2339: Property '_importScriptPathPrefix' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(158,21): error TS2345: Argument of type 'Promise' is not assignable to parameter of type 'Promise'. - Type 'string' is not assignable to type 'undefined'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(161,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. - Type 'undefined[]' is not assignable to type 'undefined'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(187,12): error TS2339: Property 'eval' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(197,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(267,14): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(269,59): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(270,9): error TS2322: Type 'Promise' is not assignable to type 'Promise'. - Type 'void' is not assignable to type 'undefined'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(280,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(283,7): error TS2554: Expected 2-3 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(398,24): error TS1138: Parameter declaration expected. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(398,24): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(527,9): error TS2322: Type 'Function' is not assignable to type 'new () => any'. - Type 'Function' provides no match for the signature 'new (): any'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(527,49): error TS2352: Type 'Window' cannot be converted to type 'Function'. - Property 'apply' is missing in type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(539,20): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(693,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(693,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. - Type 'boolean' is not assignable to type 'undefined'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(705,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(715,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(721,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(729,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(854,36): error TS2339: Property 'eval' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(1083,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/Runtime.js(1088,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/screencast/InputModel.js(11,31): error TS2339: Property 'inputAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/screencast/InputModel.js(36,70): error TS2339: Property 'charCode' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/screencast/InputModel.js(43,28): error TS2339: Property 'keyIdentifier' does not exist on type 'Event'. @@ -10367,28 +10426,6 @@ node_modules/chrome-devtools-frontend/front_end/screencast/ScreencastView.js(675 node_modules/chrome-devtools-frontend/front_end/screencast/ScreencastView.js(676,25): error TS2339: Property 'select' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/screencast/ScreencastView.js(737,17): error TS2339: Property 'type' does not exist on type 'NetworkRequest'. node_modules/chrome-devtools-frontend/front_end/screencast/ScreencastView.js(766,19): error TS2339: Property 'style' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(10,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(30,29): error TS2339: Property 'sendMessageToBackend' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(34,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(41,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(71,27): error TS2339: Property 'reattach' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(87,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(168,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(14,24): error TS2694: Namespace 'Protocol' has no exported member 'Network'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(40,27): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(65,26): error TS2339: Property 'networkAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(95,39): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(97,10): error TS2339: Property 'networkAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(114,38): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(129,38): error TS2339: Property 'networkAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(79,29): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Request: number; Response: number; }'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(97,29): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Request: number; Response: number; }'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(161,26): error TS2694: Namespace 'Cookie' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(200,26): error TS2694: Namespace 'Cookie' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(225,27): error TS2694: Namespace 'Cookie' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(246,25): error TS2694: Namespace 'Protocol' has no exported member 'Network'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(250,33): error TS2694: Namespace 'Protocol' has no exported member 'Network'. -node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(325,53): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/sdk/CPUProfileDataModel.js(9,24): error TS2694: Namespace 'Protocol' has no exported member 'Profiler'. node_modules/chrome-devtools-frontend/front_end/sdk/CPUProfileDataModel.js(13,60): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/CPUProfileDataModel.js(35,24): error TS2694: Namespace 'Protocol' has no exported member 'Profiler'. @@ -10555,115 +10592,31 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js(9,39) node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js(41,47): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js(50,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(11,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_contentURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(41,12): error TS2339: Property 'registerDebuggerDispatcher' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(42,26): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(231,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(250,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(267,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(281,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(286,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(304,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(310,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(319,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(324,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(325,73): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(340,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(346,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(347,34): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(351,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(355,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(356,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(389,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(419,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(421,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(429,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(431,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(431,50): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(432,24): error TS2694: Namespace 'Protocol' has no exported member 'Error'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(433,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(434,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(435,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(436,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(498,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(502,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(503,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(504,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(521,31): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(522,27): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(523,19): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(540,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(546,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(700,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(711,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(763,32): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationOptions'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(764,42): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(772,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(780,36): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(816,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(822,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(829,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(830,31): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(838,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(839,31): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(852,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(899,22): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(907,78): error TS1003: Identifier expected. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(908,19): error TS2339: Property 'FunctionDetails' does not exist on type 'typeof DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(967,2): error TS1131: Property or signature expected. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(971,19): error TS2339: Property 'SetBreakpointResult' does not exist on type 'typeof DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(987,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(991,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(992,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(993,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1009,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1015,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1034,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1040,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1058,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1059,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1085,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1093,25): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1111,26): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1148,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1158,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1174,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1186,37): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1197,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1263,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1266,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1294,32): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationOptions'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1295,42): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1308,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1321,28): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1368,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1369,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1370,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1371,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1372,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1373,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1374,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1375,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1376,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1377,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1378,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1379,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1380,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1381,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1382,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1383,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1419,33): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1419,84): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1435,33): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1435,84): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1446,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1450,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1451,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1472,30): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1476,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1477,25): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(10,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(30,29): error TS2339: Property 'sendMessageToBackend' does not exist on type 'typeof InspectorFrontendHost'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(34,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(41,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(71,27): error TS2339: Property 'reattach' does not exist on type 'typeof InspectorFrontendHost'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(87,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. +node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(168,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(14,24): error TS2694: Namespace 'Protocol' has no exported member 'Network'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(40,27): error TS2339: Property 'asParsedURL' does not exist on type 'string'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(65,26): error TS2339: Property 'networkAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(95,39): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(97,10): error TS2339: Property 'networkAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(114,38): error TS2339: Property 'asParsedURL' does not exist on type 'string'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(129,38): error TS2339: Property 'networkAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(79,29): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Request: number; Response: number; }'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(97,29): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Request: number; Response: number; }'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(161,26): error TS2694: Namespace 'Cookie' has no exported member 'Type'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(200,26): error TS2694: Namespace 'Cookie' has no exported member 'Type'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(225,27): error TS2694: Namespace 'Cookie' has no exported member 'Type'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(246,25): error TS2694: Namespace 'Protocol' has no exported member 'Network'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(250,33): error TS2694: Namespace 'Protocol' has no exported member 'Network'. +node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(325,53): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(11,26): error TS2339: Property 'domdebuggerAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(69,50): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(78,50): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. @@ -10833,6 +10786,112 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1715,24): error node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1723,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1724,32): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1801,17): error TS2339: Property 'remove' does not exist on type 'DOMModel[]'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(41,12): error TS2339: Property 'registerDebuggerDispatcher' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(42,26): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(231,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(250,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(267,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(281,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(286,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(304,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(310,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(319,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(324,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(325,73): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(340,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(346,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(347,34): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(351,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(355,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(356,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(389,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(419,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(421,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(429,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(431,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(431,50): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(432,24): error TS2694: Namespace 'Protocol' has no exported member 'Error'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(433,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(434,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(435,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(436,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(498,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(502,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(503,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(504,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(521,31): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(522,27): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(523,19): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(540,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(546,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(700,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(711,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(763,32): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationOptions'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(764,42): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationResult'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(772,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(780,36): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(816,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(822,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(829,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(830,31): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(838,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(839,31): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(852,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(899,22): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(907,78): error TS1003: Identifier expected. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(908,19): error TS2339: Property 'FunctionDetails' does not exist on type 'typeof DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(967,2): error TS1131: Property or signature expected. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(971,19): error TS2339: Property 'SetBreakpointResult' does not exist on type 'typeof DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(987,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(991,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(992,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(993,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1009,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1015,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1034,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1040,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1058,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1059,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1085,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1093,25): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1111,26): error TS2339: Property '_continueToLocationCallback' does not exist on type 'DebuggerModel'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1148,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1158,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1174,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1186,37): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1197,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1263,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1266,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1294,32): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationOptions'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1295,42): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationResult'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1308,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1321,28): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1368,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1369,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1370,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1371,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1372,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1373,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1374,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1375,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1376,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1377,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1378,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1379,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1380,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1381,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1382,21): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1383,16): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1419,33): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1419,84): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1435,33): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1435,84): error TS2339: Property 'Debugger' does not exist on type 'typeof Protocol'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1446,32): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1450,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1451,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1472,30): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1476,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. +node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(1477,25): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/EmulationModel.js(11,35): error TS2339: Property 'emulationAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/EmulationModel.js(12,30): error TS2339: Property 'pageAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/EmulationModel.js(13,43): error TS2339: Property 'deviceOrientationAgent' does not exist on type 'Target'. @@ -11210,9 +11269,9 @@ node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(718,33): err node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(728,32): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(731,3): error TS2416: Property 'callFunctionJSON' in type 'RemoteObjectImpl' is not assignable to the same property in base type 'RemoteObject'. Type '(functionDeclaration: (this: any) => any, args: any[], callback: (arg0: any) => any) => void' is not assignable to type '(functionDeclaration: (this: any, ...arg1: any[]) => T, args: any[], callback: (arg0: T) => an...'. + Types of parameters 'functionDeclaration' and 'functionDeclaration' are incompatible. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(731,3): error TS2416: Property 'callFunctionJSON' in type 'RemoteObjectImpl' is not assignable to the same property in base type 'RemoteObject'. Type '(functionDeclaration: (this: any) => any, args: any[], callback: (arg0: any) => any) => void' is not assignable to type '(functionDeclaration: (this: any, ...arg1: any[]) => T, args: any[], callback: (arg0: T) => an...'. - Types of parameters 'functionDeclaration' and 'functionDeclaration' are incompatible. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(741,52): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(795,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(797,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. @@ -11231,10 +11290,10 @@ node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1179,3): err Types of parameters 'functionDeclaration' and 'functionDeclaration' are incompatible. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1234,21): error TS2694: Namespace 'SDK' has no exported member 'CallFunctionResult'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1265,21): error TS2694: Namespace 'SDK' has no exported member 'CallFunctionResult'. -node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1325,5): error TS2322: Type 'Promise<{ properties: RemoteObjectProperty[]; internalProperties: RemoteObjectProperty[]; }>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1325,5): error TS2322: Type 'Promise<{ properties: RemoteObjectProperty[]; internalProperties: RemoteObjectProperty[]; }>' is not assignable to type 'Promise'. Type '{ properties: RemoteObjectProperty[]; internalProperties: RemoteObjectProperty[]; }' is not assignable to type 'RemoteObject'. Property 'customPreview' is missing in type '{ properties: RemoteObjectProperty[]; internalProperties: RemoteObjectProperty[]; }'. +node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1325,5): error TS2322: Type 'Promise<{ properties: RemoteObjectProperty[]; internalProperties: RemoteObjectProperty[]; }>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1345,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1352,45): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. node_modules/chrome-devtools-frontend/front_end/sdk/RemoteObject.js(1363,35): error TS2694: Namespace 'DebuggerModel' has no exported member 'FunctionDetails'. @@ -11377,9 +11436,9 @@ node_modules/chrome-devtools-frontend/front_end/sdk/ScreenCaptureModel.js(152,24 node_modules/chrome-devtools-frontend/front_end/sdk/ScreenCaptureModel.js(160,24): error TS2694: Namespace 'Protocol' has no exported member 'Page'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(39,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(143,52): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(159,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(159,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_contentURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. +node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(159,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(174,43): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(190,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(190,50): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. @@ -11466,9 +11525,9 @@ node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(272,30): error node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(284,7): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(284,7): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_contentURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(285,5): error TS2322: Type 'CompilerSourceMappingContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(285,5): error TS2322: Type 'CompilerSourceMappingContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_sourceURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(285,5): error TS2322: Type 'CompilerSourceMappingContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(325,26): error TS2339: Property 'upperBound' does not exist on type 'SourceMapEntry[]'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(338,26): error TS2339: Property 'lowerBound' does not exist on type 'SourceMapEntry[]'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(339,25): error TS2339: Property 'upperBound' does not exist on type 'SourceMapEntry[]'. @@ -11538,9 +11597,9 @@ node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(333,36): er node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(347,36): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(351,35): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(356,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(364,7): error TS2322: Type 'WebSocketConnection' is not assignable to type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(364,7): error TS2322: Type 'WebSocketConnection' is not assignable to type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. Property '_socket' does not exist on type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. +node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(364,7): error TS2322: Type 'WebSocketConnection' is not assignable to type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(365,38): error TS2339: Property 'isHostedMode' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(366,7): error TS2322: Type 'StubConnection' is not assignable to type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. node_modules/chrome-devtools-frontend/front_end/sdk/TargetManager.js(366,7): error TS2322: Type 'StubConnection' is not assignable to type '{ [x: string]: any; sendMessage(message: string): void; disconnect(): Promise; }'. @@ -11841,9 +11900,9 @@ node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(51,48 Type 'ToolbarItem' is not assignable to type '{ [x: string]: any; item(): any & any; }'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(54,43): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(69,55): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(85,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(85,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. Property 'appendApplicableItems' is missing in type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }'. +node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(85,5): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(100,15): error TS2339: Property 'keyCode' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(119,31): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(121,42): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -11868,9 +11927,9 @@ node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(324,3 node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(336,31): error TS2339: Property 'bringToFront' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/settings/SettingsScreen.js(351,31): error TS2339: Property 'bringToFront' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(70,35): error TS2339: Property 'remove' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(113,5): error TS2322: Type 'SnippetsProject' is not assignable to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(113,5): error TS2322: Type 'SnippetsProject' is not assignable to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. Property '_model' does not exist on type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. +node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(113,5): error TS2322: Type 'SnippetsProject' is not assignable to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(137,18): error TS2339: Property 'addEventListener' does not exist on type 'UISourceCode'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(146,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(165,36): error TS2339: Property 'remove' does not exist on type 'Map'. @@ -11883,8 +11942,8 @@ node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(3 node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(379,33): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(380,42): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/snippets/ScriptSnippetModel.js(534,35): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/snippets/SnippetsQuickOpen.js(30,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/snippets/SnippetStorage.js(62,27): error TS2339: Property 'valuesArray' does not exist on type 'Map'. +node_modules/chrome-devtools-frontend/front_end/snippets/SnippetsQuickOpen.js(30,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/source_frame/FontView.js(38,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/source_frame/FontView.js(52,5): error TS2322: Type 'ToolbarText[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. node_modules/chrome-devtools-frontend/front_end/source_frame/FontView.js(52,5): error TS2322: Type 'ToolbarText[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. @@ -11958,11 +12017,11 @@ node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(2 node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(283,22): error TS2339: Property 'setGutterDecoration' does not exist on type 'CodeMirrorTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(284,22): error TS2339: Property 'toggleLineClass' does not exist on type 'CodeMirrorTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(41,11): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(115,5): error TS2322: Type 'ToolbarText[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(115,5): error TS2322: Type 'ToolbarText[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. Type 'ToolbarText' is not assignable to type '{ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; }'. Type 'ToolbarText' is not assignable to type '{ [x: string]: any; item(): any & any; }'. Property 'item' is missing in type 'ToolbarText'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(115,5): error TS2322: Type 'ToolbarText[]' is not assignable to type '({ [x: string]: any; item(): any & any; } & { [x: string]: any; item(): any & any; })[]'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(371,32): error TS2339: Property 'lowerBound' does not exist on type 'any[]'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(435,15): error TS2339: Property '__fromRegExpQuery' does not exist on type 'RegExp'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(459,15): error TS2339: Property '__fromRegExpQuery' does not exist on type 'RegExp'. @@ -12089,6 +12148,23 @@ node_modules/chrome-devtools-frontend/front_end/sources/AdvancedSearchView.js(29 node_modules/chrome-devtools-frontend/front_end/sources/AdvancedSearchView.js(296,58): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/AdvancedSearchView.js(318,19): error TS2339: Property 'keyCode' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/AdvancedSearchView.js(397,46): error TS2339: Property 'window' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(84,13): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(102,19): error TS2339: Property 'sprintf' does not exist on type 'StringConstructor'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(150,31): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(197,26): error TS2339: Property 'title' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(197,34): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(212,26): error TS2339: Property 'title' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(212,34): error TS2555: Expected at least 2 arguments, but got 1. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(223,11): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(247,45): error TS2345: Argument of type '{ [x: string]: any; Original: string; Nickname: string; HEX: string; ShortHEX: string; HEXA: stri...' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(252,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(259,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(266,25): error TS2339: Property 'setColor' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(288,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(292,25): error TS2339: Property 'setBezierText' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(315,22): error TS2694: Namespace 'Common' has no exported member 'Event'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(327,22): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. +node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(333,40): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(33,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(39,57): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(40,49): error TS2555: Expected at least 2 arguments, but got 1. @@ -12125,25 +12201,8 @@ node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js( node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(415,65): error TS1138: Parameter declaration expected. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(415,65): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(429,2): error TS1131: Property or signature expected. -node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(435,30): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(435,30): error TS2339: Property 'Item' does not exist on type 'typeof CallStackSidebarPane'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(84,13): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(102,19): error TS2339: Property 'sprintf' does not exist on type 'StringConstructor'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(150,31): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(197,26): error TS2339: Property 'title' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(197,34): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(212,26): error TS2339: Property 'title' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(212,34): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(223,11): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(247,45): error TS2345: Argument of type '{ [x: string]: any; Original: string; Nickname: string; HEX: string; ShortHEX: string; HEXA: stri...' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(252,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(259,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(266,25): error TS2339: Property 'setColor' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(288,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(292,25): error TS2339: Property 'setBezierText' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(315,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(327,22): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. -node_modules/chrome-devtools-frontend/front_end/sources/CSSPlugin.js(333,40): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. +node_modules/chrome-devtools-frontend/front_end/sources/CallStackSidebarPane.js(435,30): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/sources/DebuggerPausedMessage.js(11,33): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. node_modules/chrome-devtools-frontend/front_end/sources/DebuggerPausedMessage.js(54,37): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/DebuggerPausedMessage.js(56,37): error TS2555: Expected at least 2 arguments, but got 1. @@ -12162,8 +12221,8 @@ node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpoints node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(24,113): error TS2694: Namespace 'EventListenerBreakpointsSidebarPane' has no exported member 'Item'. node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(57,33): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(125,64): error TS1003: Identifier expected. -node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(126,45): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(126,45): error TS2339: Property 'Item' does not exist on type 'typeof EventListenerBreakpointsSidebarPane'. +node_modules/chrome-devtools-frontend/front_end/sources/EventListenerBreakpointsSidebarPane.js(126,45): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/sources/FilteredUISourceCodeListProvider.js(20,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/FilteredUISourceCodeListProvider.js(140,21): error TS2339: Property 'title' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/FilteredUISourceCodeListProvider.js(159,13): error TS2339: Property 'removeChildren' does not exist on type 'Element'. @@ -12573,8 +12632,8 @@ node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(108,25): node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(113,15): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(113,48): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(134,52): error TS2694: Namespace 'KeyboardShortcut' has no exported member 'Descriptor'. -node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(134,65): error TS1138: Parameter declaration expected. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(134,65): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. +node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(134,65): error TS1138: Parameter declaration expected. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(139,45): error TS2694: Namespace 'KeyboardShortcut' has no exported member 'Descriptor'. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(190,43): error TS2694: Namespace 'KeyboardShortcut' has no exported member 'Descriptor'. node_modules/chrome-devtools-frontend/front_end/sources/SourcesView.js(287,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -13062,8 +13121,8 @@ node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1016,1 node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1025,32): error TS2339: Property '_pageLoadedCallback' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1031,14): error TS2339: Property '_pageLoadedCallback' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1035,18): error TS1099: Type argument list cannot be empty. -node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1035,19): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1035,19): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. +node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1035,19): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1129,21): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1192,15): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1203,19): error TS2339: Property 'naturalOrderComparator' does not exist on type 'StringConstructor'. @@ -13079,65 +13138,6 @@ node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1424,1 node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1425,37): error TS2339: Property '_instanceForTest' does not exist on type 'typeof Main'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1426,27): error TS2339: Property '_instanceForTest' does not exist on type 'typeof Main'. node_modules/chrome-devtools-frontend/front_end/test_runner/TestRunner.js(1427,48): error TS2339: Property '_instanceForTest' does not exist on type 'typeof Main'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(107,5): error TS2322: Type 'Timer' is not assignable to type 'number'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(208,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(221,7): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(378,10): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(397,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(416,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(440,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(475,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(571,33): error TS2339: Property 'deprecatedRunAfterPendingDispatches' does not exist on type 'typeof InspectorBackend'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(590,27): error TS2554: Expected 0 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(687,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(711,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(735,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(769,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(775,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(781,28): error TS2339: Property 'networkPresets' does not exist on type 'typeof MobileThrottling'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(814,31): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(816,7): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(847,9): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(848,9): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(886,29): error TS2339: Property 'getPreferences' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(890,17): error TS2339: Property '_instanceForTest' does not exist on type 'typeof Main'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(893,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(894,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(895,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(897,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(898,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(899,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(917,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(918,7): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(929,33): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(934,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(935,7): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(959,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(960,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(961,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(965,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(966,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(967,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(968,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(969,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(970,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(974,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(975,11): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(976,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(977,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(978,11): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(986,5): error TS2554: Expected 3 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/Tests.js(988,5): error TS2554: Expected 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1033,25): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(1040,23): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(1084,20): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(1139,33): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1142,31): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1186,5): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1199,9): error TS2554: Expected 4 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1199,28): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? -node_modules/chrome-devtools-frontend/front_end/Tests.js(1229,10): error TS2339: Property 'uiTests' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/Tests.js(1229,41): error TS2339: Property 'domAutomationController' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(36,29): error TS2694: Namespace 'TextEditor' has no exported member 'Options'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(47,35): error TS2339: Property 'CodeMirror' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(165,18): error TS2339: Property 'style' does not exist on type 'Element'. @@ -13185,9 +13185,9 @@ node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1038,34): error TS2694: Namespace 'CodeMirror' has no exported member 'ChangeObject'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1052,23): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1053,23): error TS2339: Property 'clear' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1261,5): error TS2322: Type 'CodeMirrorPositionHandle' is not assignable to type '{ [x: string]: any; resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandl...'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1261,5): error TS2322: Type 'CodeMirrorPositionHandle' is not assignable to type '{ [x: string]: any; resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandl...'. Property '_codeMirror' does not exist on type '{ [x: string]: any; resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandl...'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1261,5): error TS2322: Type 'CodeMirrorPositionHandle' is not assignable to type '{ [x: string]: any; resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandl...'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1301,31): error TS2339: Property 'listSelections' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1305,38): error TS2339: Property 'findMatchingBracket' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1313,14): error TS2339: Property 'setSelections' does not exist on type 'CodeMirror'. @@ -13273,8 +13273,8 @@ node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(21,39): error node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(51,31): error TS2694: Namespace 'Text' has no exported member 'Position'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(55,34): error TS2339: Property 'lowerBound' does not exist on type 'number[]'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(121,59): error TS1003: Identifier expected. -node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(122,16): error TS2300: Duplicate identifier 'Position'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(122,16): error TS2339: Property 'Position' does not exist on type 'typeof Text'. +node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(122,16): error TS2300: Duplicate identifier 'Position'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(160,42): error TS2339: Property 'lowerBound' does not exist on type 'number[]'. node_modules/chrome-devtools-frontend/front_end/text_utils/TextRange.js(84,31): error TS2339: Property 'computeLineEndings' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/text_utils/TextUtils.js(30,11): error TS2339: Property 'TextUtils' does not exist on type 'typeof TextUtils'. @@ -13435,10 +13435,10 @@ node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.j node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(204,36): error TS2339: Property '_overviewIndex' does not exist on type 'TimelineCategory'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(246,68): error TS2339: Property 'peekLast' does not exist on type 'any[]'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(248,81): error TS2339: Property '_overviewIndex' does not exist on type 'TimelineCategory'. -node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(384,7): error TS2322: Type 'Promise HTMLImageElement>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(384,7): error TS2322: Type 'Promise HTMLImageElement>' is not assignable to type 'Promise'. Type 'new (width?: number, height?: number) => HTMLImageElement' is not assignable to type 'HTMLImageElement'. Property 'align' is missing in type 'new (width?: number, height?: number) => HTMLImageElement'. +node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(384,7): error TS2322: Type 'Promise HTMLImageElement>' is not assignable to type 'Promise'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(457,17): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(483,24): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineEventOverview.js(524,28): error TS2339: Property 'peekLast' does not exist on type 'TimelineFrame[]'. @@ -13776,21 +13776,21 @@ node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(712 node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(717,9): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(717,9): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. Property 'icon' is missing in type '{ name: string; color: string; }'. -node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(727,9): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(727,9): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. Property 'icon' is missing in type '{ name: string; color: string; }'. +node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(727,9): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(731,13): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(733,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(733,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. Property 'icon' is missing in type '{ name: any; color: string; }'. +node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(733,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(743,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'name' must be of type 'any', but here has type 'string'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(753,91): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(754,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(754,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. Property 'icon' is missing in type '{ name: any; color: string; }'. -node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(759,5): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. +node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(754,9): error TS2322: Type '{ name: any; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(759,5): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. Property 'icon' is missing in type '{ name: string; color: string; }'. +node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(759,5): error TS2322: Type '{ name: string; color: string; }' is not assignable to type '{ name: string; color: string; icon: Element; }'. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(770,15): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(771,15): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/timeline/TimelineTreeView.js(772,15): error TS2555: Expected at least 2 arguments, but got 1. @@ -14395,13 +14395,13 @@ node_modules/chrome-devtools-frontend/front_end/timeline_model/TracingLayerTree. node_modules/chrome-devtools-frontend/front_end/timeline_model/TracingLayerTree.js(448,90): error TS2339: Property 'name' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/timeline_model/TracingLayerTree.js(452,90): error TS2339: Property 'name' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/timeline_model/TracingLayerTree.js(456,90): error TS2339: Property 'name' does not exist on type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(91,41): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(109,41): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(120,40): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/ui/ActionRegistry.js(15,10): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/ui/ActionRegistry.js(33,53): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/ui/ActionRegistry.js(48,53): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/ui/ActionRegistry.js(210,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(91,41): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(109,41): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/ui/ARIAUtils.js(120,40): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/ui/Context.js(14,33): error TS1110: Type expected. node_modules/chrome-devtools-frontend/front_end/ui/Context.js(25,21): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/ui/Context.js(31,33): error TS1110: Type expected. @@ -14487,8 +14487,8 @@ node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(351,46): error T node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(351,59): error TS2339: Property 'shiftKey' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(352,37): error TS2339: Property 'typeName' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(374,73): error TS1003: Identifier expected. -node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(375,24): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(375,24): error TS2339: Property 'Item' does not exist on type 'typeof NamedBitSetFilterUI'. +node_modules/chrome-devtools-frontend/front_end/ui/FilterBar.js(375,24): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/ui/FilterSuggestionBuilder.js(21,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/ui/ForwardedInputEventHandler.js(14,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/Fragment.js(12,49): error TS2694: Namespace 'Fragment' has no exported member '_State'. @@ -14598,9 +14598,9 @@ node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(92,51): erro node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(116,7): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(116,7): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. Property 'appendApplicableItems' is missing in type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }'. -node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(118,7): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(118,7): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. Property 'appendApplicableItems' is missing in type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }'. +node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(118,7): error TS2322: Type '{ [x: string]: any; tabbedPane(): TabbedPane; enableMoreTabsButton(): void; }' is not assignable to type '{ [x: string]: any; appendApplicableItems(locationName: string): void; appendView(view: { [x: str...'. node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(247,73): error TS2339: Property 'altKey' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(247,89): error TS2339: Property 'shiftKey' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/InspectorView.js(254,17): error TS2339: Property 'keyCode' does not exist on type 'Event'. @@ -14995,8 +14995,8 @@ node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(58,15): error T node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(70,18): error TS2694: Namespace 'UI' has no exported member 'AutocompleteConfig'. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(79,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(91,2): error TS1131: Property or signature expected. -node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2300: Duplicate identifier 'Options'. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2339: Property 'Options' does not exist on type '{ (): void; Events: { [x: string]: any; TextChanged: symbol; }; }'. +node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2300: Duplicate identifier 'Options'. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(105,2): error TS1131: Property or signature expected. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(111,4): error TS2339: Property 'AutocompleteConfig' does not exist on type 'typeof UI'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(52,74): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. @@ -15027,9 +15027,9 @@ node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(592,35): error node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(601,32): error TS2339: Property 'isAncestor' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(610,54): error TS2339: Property 'isAncestor' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(622,35): error TS2339: Property 'getComponentSelection' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(627,7): error TS2322: Type 'Node' is not assignable to type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(627,7): error TS2322: Type 'Node' is not assignable to type 'Element'. Property 'assignedSlot' is missing in type 'Node'. +node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(627,7): error TS2322: Type 'Node' is not assignable to type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/Toolbar.js(43,50): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/Toolbar.js(48,45): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. node_modules/chrome-devtools-frontend/front_end/ui/Toolbar.js(75,24): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -15095,63 +15095,6 @@ node_modules/chrome-devtools-frontend/front_end/ui/Tooltip.js(134,24): error TS2 node_modules/chrome-devtools-frontend/front_end/ui/Tooltip.js(135,17): error TS2339: Property 'y' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/Tooltip.js(136,17): error TS2339: Property 'y' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/ui/Tooltip.js(178,17): error TS2304: Cannot find name 'ObjectPropertyDescriptor'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(49,52): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(61,23): error TS2339: Property 'root' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(123,50): error TS2551: Property 'deepElementFromPoint' does not exist on type 'Document'. Did you mean 'msElementsFromPoint'? -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(138,52): error TS2339: Property 'pageX' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(138,65): error TS2339: Property 'pageY' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(154,52): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(167,48): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(169,27): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(257,105): error TS2339: Property 'shiftKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(258,15): error TS2339: Property 'metaKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(258,32): error TS2339: Property 'ctrlKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(262,15): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(262,43): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(264,22): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(264,52): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(266,22): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(267,65): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(268,22): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(273,66): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(275,22): error TS2339: Property 'keyCode' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(275,61): error TS2339: Property 'keyCode' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(279,22): error TS2339: Property 'keyCode' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(281,22): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(283,22): error TS2339: Property 'key' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(288,13): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(297,20): error TS2339: Property 'window' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(330,48): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(369,45): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(370,24): error TS2339: Property 'treeElement' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(379,28): error TS2339: Property 'parentTreeElement' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(470,39): error TS2339: Property 'lowerBound' does not exist on type 'any[]'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(582,15): error TS2339: Property 'root' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(650,24): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(675,22): error TS2339: Property '_shadowRoot' does not exist on type 'TreeOutline'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(690,31): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(707,32): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(727,24): error TS2339: Property 'title' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(805,48): error TS2339: Property '_renderSelection' does not exist on type 'TreeOutline'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(810,30): error TS2339: Property 'style' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(819,17): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(819,49): error TS2339: Property 'hasSelection' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(822,30): error TS2339: Property 'toggleOnClick' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(828,17): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(833,17): error TS2339: Property 'altKey' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(838,11): error TS2339: Property 'consume' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(850,17): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(864,29): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(896,7): error TS2322: Type 'TreeElement' is not assignable to type 'this'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(945,7): error TS2322: Type 'TreeElement' is not assignable to type 'this'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1063,55): error TS2339: Property 'hasFocus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1064,28): error TS2339: Property 'focus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1078,51): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1105,39): error TS2339: Property 'hasFocus' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1209,32): error TS2339: Property 'root' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1217,29): error TS2339: Property 'root' does not exist on type 'TreeElement'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1259,35): error TS2339: Property 'totalOffsetLeft' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1273,18): error TS2339: Property '_imagePreload' does not exist on type 'typeof TreeElement'. node_modules/chrome-devtools-frontend/front_end/ui/UIUtils.js(31,4): error TS2339: Property 'highlightedSearchResultClassName' does not exist on type 'typeof UI'. node_modules/chrome-devtools-frontend/front_end/ui/UIUtils.js(32,4): error TS2339: Property 'highlightedCurrentSearchResultClassName' does not exist on type 'typeof UI'. node_modules/chrome-devtools-frontend/front_end/ui/UIUtils.js(69,13): error TS2339: Property 'style' does not exist on type 'Element'. @@ -15470,6 +15413,63 @@ node_modules/chrome-devtools-frontend/front_end/ui/XWidget.js(156,29): error TS2 node_modules/chrome-devtools-frontend/front_end/ui/XWidget.js(161,15): error TS2339: Property 'focus' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/ui/ZoomManager.js(15,43): error TS2339: Property 'zoomFactor' does not exist on type 'typeof InspectorFrontendHostAPI'. node_modules/chrome-devtools-frontend/front_end/ui/ZoomManager.js(44,43): error TS2339: Property 'zoomFactor' does not exist on type 'typeof InspectorFrontendHostAPI'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(49,52): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(61,23): error TS2339: Property 'root' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(123,50): error TS2551: Property 'deepElementFromPoint' does not exist on type 'Document'. Did you mean 'msElementsFromPoint'? +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(138,52): error TS2339: Property 'pageX' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(138,65): error TS2339: Property 'pageY' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(154,52): error TS2345: Argument of type '-1' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(167,48): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(169,27): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(257,105): error TS2339: Property 'shiftKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(258,15): error TS2339: Property 'metaKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(258,32): error TS2339: Property 'ctrlKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(262,15): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(262,43): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(264,22): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(264,52): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(266,22): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(267,65): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(268,22): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(273,66): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(275,22): error TS2339: Property 'keyCode' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(275,61): error TS2339: Property 'keyCode' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(279,22): error TS2339: Property 'keyCode' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(281,22): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(283,22): error TS2339: Property 'key' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(288,13): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(297,20): error TS2339: Property 'window' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(330,48): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(369,45): error TS2339: Property 'createChild' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(370,24): error TS2339: Property 'treeElement' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(379,28): error TS2339: Property 'parentTreeElement' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(470,39): error TS2339: Property 'lowerBound' does not exist on type 'any[]'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(582,15): error TS2339: Property 'root' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(650,24): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(675,22): error TS2339: Property '_shadowRoot' does not exist on type 'TreeOutline'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(690,31): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(707,32): error TS2339: Property 'removeChildren' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(727,24): error TS2339: Property 'title' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(805,48): error TS2339: Property '_renderSelection' does not exist on type 'TreeOutline'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(810,30): error TS2339: Property 'style' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(819,17): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(819,49): error TS2339: Property 'hasSelection' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(822,30): error TS2339: Property 'toggleOnClick' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(828,17): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(833,17): error TS2339: Property 'altKey' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(838,11): error TS2339: Property 'consume' does not exist on type 'Event'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(850,17): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(864,29): error TS2339: Property 'treeElement' does not exist on type 'EventTarget'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(896,7): error TS2322: Type 'TreeElement' is not assignable to type 'this'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(945,7): error TS2322: Type 'TreeElement' is not assignable to type 'this'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1063,55): error TS2339: Property 'hasFocus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1064,28): error TS2339: Property 'focus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1078,51): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1105,39): error TS2339: Property 'hasFocus' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1209,32): error TS2339: Property 'root' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1217,29): error TS2339: Property 'root' does not exist on type 'TreeElement'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1259,35): error TS2339: Property 'totalOffsetLeft' does not exist on type 'Element'. +node_modules/chrome-devtools-frontend/front_end/ui/treeoutline.js(1273,18): error TS2339: Property '_imagePreload' does not exist on type 'typeof TreeElement'. node_modules/chrome-devtools-frontend/front_end/worker_service/ServiceDispatcher.js(12,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/worker_service/ServiceDispatcher.js(17,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/worker_service/ServiceDispatcher.js(34,16): error TS2339: Property 'setHandlers' does not exist on type 'typeof ServicePort'. @@ -15536,10 +15536,10 @@ node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(188,15): node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(199,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(204,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(229,25): error TS2694: Namespace 'Workspace' has no exported member 'projectTypes'. -node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(243,25): error TS2352: Type 'this' cannot be converted to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(243,25): error TS2352: Type 'this' cannot be converted to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. Type 'ProjectStore' is not comparable to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. Property 'isServiceProject' is missing in type 'ProjectStore'. +node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(243,25): error TS2352: Type 'this' cannot be converted to type '{ [x: string]: any; workspace(): Workspace; id(): string; type(): string; isServiceProject(): boo...'. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(257,5): error TS2322: Type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...' is not assignable to type 'string'. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(432,27): error TS2339: Property 'valuesArray' does not exist on type 'Map any'. node_modules/enhanced-resolve/lib/CachedInputFileSystem.js(224,23): error TS2322: Type 'null' is not assignable to type '(path: any, callback: any) => void'. node_modules/enhanced-resolve/lib/CachedInputFileSystem.js(227,27): error TS2322: Type 'null' is not assignable to type '(path: any) => any'. -node_modules/enhanced-resolve/lib/concord.js(75,30): error TS2531: Object is possibly 'null'. -node_modules/enhanced-resolve/lib/concord.js(76,17): error TS2531: Object is possibly 'null'. -node_modules/enhanced-resolve/lib/createInnerCallback.js(16,20): error TS2339: Property 'stack' does not exist on type '(...args: any[]) => any'. -node_modules/enhanced-resolve/lib/createInnerCallback.js(17,20): error TS2339: Property 'missing' does not exist on type '(...args: any[]) => any'. node_modules/enhanced-resolve/lib/Resolver.js(162,17): error TS2339: Property 'push' does not exist on type 'Set'. node_modules/enhanced-resolve/lib/Resolver.js(178,11): error TS2339: Property 'details' does not exist on type 'Error'. node_modules/enhanced-resolve/lib/Resolver.js(179,11): error TS2339: Property 'missing' does not exist on type 'Error'. node_modules/enhanced-resolve/lib/Resolver.js(213,20): error TS2339: Property 'recursion' does not exist on type 'Error'. +node_modules/enhanced-resolve/lib/concord.js(75,30): error TS2531: Object is possibly 'null'. +node_modules/enhanced-resolve/lib/concord.js(76,17): error TS2531: Object is possibly 'null'. +node_modules/enhanced-resolve/lib/createInnerCallback.js(16,20): error TS2339: Property 'stack' does not exist on type '(...args: any[]) => any'. +node_modules/enhanced-resolve/lib/createInnerCallback.js(17,20): error TS2339: Property 'missing' does not exist on type '(...args: any[]) => any'. Standard error: diff --git a/tests/baselines/reference/user/lodash.log b/tests/baselines/reference/user/lodash.log index 25895bf2cc48f..53443ad51be8e 100644 --- a/tests/baselines/reference/user/lodash.log +++ b/tests/baselines/reference/user/lodash.log @@ -1,5 +1,10 @@ Exit Code: 1 Standard output: +node_modules/lodash/_Hash.js(20,17): error TS2532: Object is possibly 'undefined'. +node_modules/lodash/_ListCache.js(20,17): error TS2532: Object is possibly 'undefined'. +node_modules/lodash/_MapCache.js(20,17): error TS2532: Object is possibly 'undefined'. +node_modules/lodash/_SetCache.js(19,14): error TS2532: Object is possibly 'undefined'. +node_modules/lodash/_Stack.js(17,20): error TS2339: Property 'size' does not exist on type 'ListCache'. node_modules/lodash/_arrayAggregator.js(16,17): error TS2532: Object is possibly 'undefined'. node_modules/lodash/_arrayEach.js(15,18): error TS2532: Object is possibly 'undefined'. node_modules/lodash/_arrayEach.js(19,3): error TS2322: Type 'any[] | undefined' is not assignable to type 'any[]'. @@ -130,9 +135,8 @@ node_modules/lodash/_equalObjects.js(70,18): error TS2322: Type 'boolean' is not node_modules/lodash/_getHolder.js(10,17): error TS2339: Property 'placeholder' does not exist on type 'Function'. node_modules/lodash/_getRawTag.js(36,7): error TS2454: Variable 'unmasked' is used before being assigned. node_modules/lodash/_getSymbolsIn.js(19,23): error TS2554: Expected 0 arguments, but got 1. -node_modules/lodash/_Hash.js(20,17): error TS2532: Object is possibly 'undefined'. -node_modules/lodash/_hashDelete.js(7,20): error TS8024: JSDoc '@param' tag has name 'hash', but there is no parameter with that name. node_modules/lodash/_hasPath.js(35,50): error TS2454: Variable 'key' is used before being assigned. +node_modules/lodash/_hashDelete.js(7,20): error TS8024: JSDoc '@param' tag has name 'hash', but there is no parameter with that name. node_modules/lodash/_initCloneArray.js(16,16): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. node_modules/lodash/_initCloneArray.js(20,26): error TS2339: Property 'index' does not exist on type 'any[]'. node_modules/lodash/_initCloneArray.js(21,26): error TS2339: Property 'input' does not exist on type 'any[]'. @@ -140,8 +144,6 @@ node_modules/lodash/_insertWrapDetails.js(10,5): error TS1223: 'returns' tag alr node_modules/lodash/_insertWrapDetails.js(15,5): error TS2322: Type 'string' is not assignable to type 'any[]'. node_modules/lodash/_insertWrapDetails.js(20,3): error TS2322: Type 'string' is not assignable to type 'any[]'. node_modules/lodash/_isLaziable.js(24,14): error TS2554: Expected 0 arguments, but got 1. -node_modules/lodash/_ListCache.js(20,17): error TS2532: Object is possibly 'undefined'. -node_modules/lodash/_MapCache.js(20,17): error TS2532: Object is possibly 'undefined'. node_modules/lodash/_memoizeCapped.js(22,22): error TS2339: Property 'cache' does not exist on type 'Function'. node_modules/lodash/_mergeData.js(60,26): error TS2554: Expected 4 arguments, but got 3. node_modules/lodash/_mergeData.js(67,26): error TS2554: Expected 4 arguments, but got 3. @@ -155,8 +157,6 @@ node_modules/lodash/_overRest.js(27,27): error TS2532: Object is possibly 'undef node_modules/lodash/_overRest.js(28,22): error TS2532: Object is possibly 'undefined'. node_modules/lodash/_overRest.js(31,15): error TS2538: Type 'undefined' cannot be used as an index type. node_modules/lodash/_root.js(4,56): error TS2339: Property 'Object' does not exist on type 'Window'. -node_modules/lodash/_SetCache.js(19,14): error TS2532: Object is possibly 'undefined'. -node_modules/lodash/_Stack.js(17,20): error TS2339: Property 'size' does not exist on type 'ListCache'. node_modules/lodash/_unicodeWords.js(62,20): error TS8024: JSDoc '@param' tag has name 'The', but there is no parameter with that name. node_modules/lodash/_updateWrapDetails.js(34,5): error TS1223: 'returns' tag already specified. node_modules/lodash/ary.js(16,10): error TS1003: Identifier expected. @@ -181,8 +181,8 @@ node_modules/lodash/core.js(77,82): error TS2339: Property 'nodeType' does not e node_modules/lodash/core.js(540,19): error TS2322: Type '(value: any) => boolean' is not assignable to type 'boolean | undefined'. Type '(value: any) => boolean' is not assignable to type 'false'. node_modules/lodash/core.js(545,24): error TS2532: Object is possibly 'undefined'. -node_modules/lodash/core.js(545,24): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/lodash/core.js(545,24): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'Boolean' has no compatible call signatures. +node_modules/lodash/core.js(545,24): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/lodash/core.js(664,42): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'number'. node_modules/lodash/core.js(721,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'result' must be of type 'boolean', but here has type 'any'. node_modules/lodash/core.js(749,18): error TS8024: JSDoc '@param' tag has name 'value', but there is no parameter with that name. @@ -218,8 +218,8 @@ node_modules/lodash/core.js(1566,33): error TS2554: Expected 1 arguments, but go node_modules/lodash/core.js(1709,41): error TS2532: Object is possibly 'undefined'. node_modules/lodash/core.js(1872,12): error TS1003: Identifier expected. node_modules/lodash/core.js(1872,12): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. -node_modules/lodash/core.js(2142,12): error TS1003: Identifier expected. node_modules/lodash/core.js(2142,12): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/core.js(2142,12): error TS1003: Identifier expected. node_modules/lodash/core.js(2183,41): error TS8024: JSDoc '@param' tag has name 'iteratees', but there is no parameter with that name. node_modules/lodash/core.js(2473,21): error TS2554: Expected 0 arguments, but got 1. node_modules/lodash/core.js(2609,39): error TS2554: Expected 0 arguments, but got 1. @@ -235,11 +235,11 @@ node_modules/lodash/core.js(3830,45): error TS2304: Cannot find name 'define'. node_modules/lodash/core.js(3830,71): error TS2304: Cannot find name 'define'. node_modules/lodash/core.js(3839,5): error TS2304: Cannot find name 'define'. node_modules/lodash/core.js(3846,35): error TS2339: Property '_' does not exist on type 'typeof lodash'. -node_modules/lodash/curry.js(24,10): error TS1003: Identifier expected. node_modules/lodash/curry.js(24,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/curry.js(24,10): error TS1003: Identifier expected. node_modules/lodash/curry.js(50,10): error TS2339: Property 'placeholder' does not exist on type 'Function'. -node_modules/lodash/curryRight.js(21,10): error TS1003: Identifier expected. node_modules/lodash/curryRight.js(21,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/curryRight.js(21,10): error TS1003: Identifier expected. node_modules/lodash/curryRight.js(47,10): error TS2339: Property 'placeholder' does not exist on type 'Function'. node_modules/lodash/debounce.js(83,17): error TS2532: Object is possibly 'undefined'. node_modules/lodash/debounce.js(84,27): error TS2532: Object is possibly 'undefined'. @@ -255,22 +255,21 @@ node_modules/lodash/differenceBy.js(40,52): error TS2345: Argument of type '(val node_modules/lodash/differenceBy.js(40,78): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/differenceWith.js(36,52): error TS2345: Argument of type '(value: any) => boolean' is not assignable to parameter of type 'boolean | undefined'. Type '(value: any) => boolean' is not assignable to type 'false'. -node_modules/lodash/drop.js(13,10): error TS1003: Identifier expected. node_modules/lodash/drop.js(13,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/drop.js(13,10): error TS1003: Identifier expected. node_modules/lodash/dropRight.js(13,10): error TS1003: Identifier expected. node_modules/lodash/dropRight.js(13,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/lodash/dropRightWhile.js(41,24): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/dropWhile.js(41,24): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/escape.js(39,39): error TS2345: Argument of type 'Function' is not assignable to parameter of type '(substring: string, ...args: any[]) => string'. -node_modules/lodash/every.js(23,10): error TS1003: Identifier expected. node_modules/lodash/every.js(23,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/every.js(23,10): error TS1003: Identifier expected. node_modules/lodash/every.js(53,27): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/filter.js(45,27): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/findIndex.js(52,31): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/findKey.js(41,30): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/findLastIndex.js(56,31): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/findLastKey.js(41,30): error TS2554: Expected 0-1 arguments, but got 2. -node_modules/lodash/fp.js(2,18): error TS2554: Expected 3-4 arguments, but got 2. node_modules/lodash/fp/_baseConvert.js(144,5): error TS2322: Type 'Function' is not assignable to type '{ cap?: boolean; curry?: boolean; fixed?: boolean; immutable?: boolean; rearg?: boolean; } | unde...'. Type 'Function' has no properties in common with type '{ cap?: boolean; curry?: boolean; fixed?: boolean; immutable?: boolean; rearg?: boolean; }'. node_modules/lodash/fp/_baseConvert.js(145,5): error TS2322: Type 'string' is not assignable to type 'Function'. @@ -326,6 +325,7 @@ node_modules/lodash/fp/object.js(2,26): error TS2345: Argument of type '{ [x: st node_modules/lodash/fp/seq.js(2,26): error TS2345: Argument of type '{ [x: string]: any; 'at': Function; 'chain': (value: any) => any; 'commit': () => any; 'lodash': ...' is not assignable to parameter of type 'string'. node_modules/lodash/fp/string.js(2,26): error TS2345: Argument of type '{ [x: string]: any; 'camelCase': Function; 'capitalize': (string?: string | undefined) => string;...' is not assignable to parameter of type 'string'. node_modules/lodash/fp/util.js(2,26): error TS2345: Argument of type '{ [x: string]: any; 'attempt': Function; 'bindAll': Function; 'cond': (pairs: any[]) => Function;...' is not assignable to parameter of type 'string'. +node_modules/lodash/fp.js(2,18): error TS2554: Expected 3-4 arguments, but got 2. node_modules/lodash/includes.js(24,10): error TS1003: Identifier expected. node_modules/lodash/includes.js(24,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/lodash/intersectionBy.js(41,32): error TS2554: Expected 0-1 arguments, but got 2. @@ -371,10 +371,10 @@ node_modules/lodash/remove.js(41,15): error TS2554: Expected 0-1 arguments, but node_modules/lodash/repeat.js(15,10): error TS1003: Identifier expected. node_modules/lodash/repeat.js(15,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/lodash/replace.js(15,29): error TS8029: JSDoc '@param' tag has name 'replacement', but there is no parameter with that name. It would match 'arguments' if it had an array type. -node_modules/lodash/sampleSize.js(17,10): error TS1003: Identifier expected. node_modules/lodash/sampleSize.js(17,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. -node_modules/lodash/some.js(18,10): error TS1003: Identifier expected. +node_modules/lodash/sampleSize.js(17,10): error TS1003: Identifier expected. node_modules/lodash/some.js(18,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/some.js(18,10): error TS1003: Identifier expected. node_modules/lodash/some.js(48,27): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/sortedIndexBy.js(30,42): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/sortedLastIndexBy.js(30,42): error TS2554: Expected 0-1 arguments, but got 2. @@ -388,8 +388,8 @@ node_modules/lodash/takeRight.js(13,10): error TS1003: Identifier expected. node_modules/lodash/takeRight.js(13,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/lodash/takeRightWhile.js(41,24): error TS2554: Expected 0-1 arguments, but got 2. node_modules/lodash/takeWhile.js(41,24): error TS2554: Expected 0-1 arguments, but got 2. -node_modules/lodash/template.js(65,10): error TS1003: Identifier expected. node_modules/lodash/template.js(65,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/template.js(65,10): error TS1003: Identifier expected. node_modules/lodash/template.js(146,34): error TS2532: Object is possibly 'undefined'. node_modules/lodash/template.js(153,21): error TS2532: Object is possibly 'undefined'. node_modules/lodash/template.js(158,6): error TS2532: Object is possibly 'undefined'. @@ -414,8 +414,8 @@ node_modules/lodash/transform.js(59,3): error TS2349: Cannot invoke an expressio node_modules/lodash/transform.js(60,12): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/lodash/trim.js(20,10): error TS1003: Identifier expected. node_modules/lodash/trim.js(20,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. -node_modules/lodash/trimEnd.js(19,10): error TS1003: Identifier expected. node_modules/lodash/trimEnd.js(19,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. +node_modules/lodash/trimEnd.js(19,10): error TS1003: Identifier expected. node_modules/lodash/trimStart.js(19,10): error TS1003: Identifier expected. node_modules/lodash/trimStart.js(19,10): error TS8024: JSDoc '@param' tag has name '', but there is no parameter with that name. node_modules/lodash/truncate.js(60,36): error TS2532: Object is possibly 'undefined'. diff --git a/tests/baselines/reference/user/log4js.log b/tests/baselines/reference/user/log4js.log new file mode 100644 index 0000000000000..0e0765ae35903 --- /dev/null +++ b/tests/baselines/reference/user/log4js.log @@ -0,0 +1,12 @@ +Exit Code: 1 +Standard output: +node_modules/log4js/types/log4js.d.ts(4,2): error TS7008: Member 'getLogger' implicitly has an 'any' type. +node_modules/log4js/types/log4js.d.ts(5,2): error TS7008: Member 'configure' implicitly has an 'any' type. +node_modules/log4js/types/log4js.d.ts(6,2): error TS7008: Member 'addLayout' implicitly has an 'any' type. +node_modules/log4js/types/log4js.d.ts(7,2): error TS7008: Member 'connectLogger' implicitly has an 'any' type. +node_modules/log4js/types/log4js.d.ts(8,2): error TS7008: Member 'levels' implicitly has an 'any' type. +node_modules/log4js/types/log4js.d.ts(9,2): error TS7008: Member 'shutdown' implicitly has an 'any' type. + + + +Standard error: diff --git a/tests/baselines/reference/user/npm.log b/tests/baselines/reference/user/npm.log index 2fbf93b8d2b21..93ea207ee55be 100644 --- a/tests/baselines/reference/user/npm.log +++ b/tests/baselines/reference/user/npm.log @@ -2,28 +2,33 @@ Exit Code: 1 Standard output: node_modules/npm/bin/npm-cli.js(6,13): error TS2551: Property 'echo' does not exist on type '{ Echo(s: any): void; StdErr: TextStreamWriter; StdOut: TextStreamWriter; Arguments: { length: nu...'. Did you mean 'Echo'? node_modules/npm/bin/npm-cli.js(13,13): error TS2551: Property 'quit' does not exist on type '{ Echo(s: any): void; StdErr: TextStreamWriter; StdOut: TextStreamWriter; Arguments: { length: nu...'. Did you mean 'Quit'? -node_modules/npm/bin/npm-cli.js(30,23): error TS2307: Cannot find module '../package.json'. -node_modules/npm/bin/npm-cli.js(54,7): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(55,11): error TS2339: Property 'deref' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(55,21): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(55,35): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(55,49): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(59,21): error TS2339: Property 'version' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(64,9): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(66,9): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(69,35): error TS2339: Property 'version' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(74,25): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(75,9): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(75,26): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(76,9): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(82,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(84,9): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(84,22): error TS2339: Property 'command' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(84,35): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(86,23): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(86,55): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(86,82): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/bin/npm-cli.js(86,113): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(47,7): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(48,11): error TS2339: Property 'deref' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(48,21): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(48,35): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(48,49): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(52,21): error TS2339: Property 'version' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(57,9): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(59,9): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(62,35): error TS2339: Property 'version' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(67,25): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(68,9): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(68,26): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(69,9): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(75,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(78,27): error TS2307: Cannot find module '../package.json'. +node_modules/npm/bin/npm-cli.js(85,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(86,32): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(121,9): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(121,22): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(121,35): error TS2339: Property 'argv' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(125,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(126,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(127,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(128,13): error TS2339: Property 'command' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(132,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(134,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/bin/npm-cli.js(136,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/html/static/toc.js(3,40): error TS2531: Object is possibly 'null'. node_modules/npm/lib/access.js(58,46): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/access.js(65,18): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. @@ -39,6 +44,16 @@ node_modules/npm/lib/adduser.js(44,9): error TS2339: Property 'config' does not node_modules/npm/lib/adduser.js(45,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/adduser.js(46,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/adduser.js(47,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/audit.js(29,23): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/audit.js(47,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/audit.js(49,9): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/audit.js(60,11): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/audit.js(65,11): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/audit.js(75,27): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/audit.js(81,11): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/audit.js(88,61): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/audit.js(89,10): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/audit.js(90,10): error TS2339: Property 'wrapped' does not exist on type 'Error'. node_modules/npm/lib/auth/legacy.js(12,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/auth/legacy.js(35,16): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/auth/legacy.js(69,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -73,40 +88,15 @@ node_modules/npm/lib/ci.js(13,31): error TS2339: Property 'config' does not exis node_modules/npm/lib/ci.js(14,12): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/ci.js(15,12): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/ci.js(27,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/completion.js(26,24): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'. + Type 'undefined' is not assignable to type 'string'. +node_modules/npm/lib/completion.js(30,24): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'. + Type 'undefined' is not assignable to type 'string'. node_modules/npm/lib/completion.js(51,7): error TS2339: Property 'code' does not exist on type 'Error'. node_modules/npm/lib/completion.js(52,7): error TS2339: Property 'errno' does not exist on type 'Error'. node_modules/npm/lib/completion.js(129,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/completion.js(135,13): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/lib/completion.js(247,23): error TS2339: Property 'fullList' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(72,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(81,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(82,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(83,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(85,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(91,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(103,37): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. -node_modules/npm/lib/config.js(105,28): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. -node_modules/npm/lib/config.js(130,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(131,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(132,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(151,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(153,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(154,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(162,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(181,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(182,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(205,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(218,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(220,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(233,52): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(236,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(240,45): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(240,75): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(243,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(243,79): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(246,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/config.js(262,26): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. -node_modules/npm/lib/config.js(268,29): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/config/bin-links.js(11,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/config/bin-links.js(12,16): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/config/bin-links.js(13,20): error TS2339: Property 'globalBin' does not exist on type 'EventEmitter'. @@ -142,19 +132,19 @@ node_modules/npm/lib/config/core.js(144,10): error TS2339: Property 'once' does node_modules/npm/lib/config/core.js(145,10): error TS2339: Property 'once' does not exist on type 'Conf'. node_modules/npm/lib/config/core.js(154,14): error TS2339: Property 'get' does not exist on type 'Conf'. node_modules/npm/lib/config/core.js(155,35): error TS2339: Property 'get' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(167,23): error TS2339: Property 'get' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(172,10): error TS2339: Property 'once' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(183,23): error TS2339: Property 'get' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(197,5): error TS2323: Cannot redeclare exported variable 'loaded'. -node_modules/npm/lib/config/core.js(220,28): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/defaults")'. -node_modules/npm/lib/config/core.js(244,21): error TS2339: Property 'sources' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(252,17): error TS2339: Property 'emit' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(286,8): error TS2339: Property '_saving' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(314,8): error TS2339: Property 'sources' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(315,8): error TS2339: Property 'push' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(316,8): error TS2339: Property '_await' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(340,10): error TS2339: Property 'emit' does not exist on type 'Conf'. -node_modules/npm/lib/config/core.js(416,29): error TS2345: Argument of type '(orig: string, esc: any, name: any) => string | undefined' is not assignable to parameter of type '(substring: string, ...args: any[]) => string'. +node_modules/npm/lib/config/core.js(160,23): error TS2339: Property 'get' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(165,10): error TS2339: Property 'once' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(176,23): error TS2339: Property 'get' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(190,5): error TS2323: Cannot redeclare exported variable 'loaded'. +node_modules/npm/lib/config/core.js(213,28): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/defaults")'. +node_modules/npm/lib/config/core.js(237,21): error TS2339: Property 'sources' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(245,17): error TS2339: Property 'emit' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(279,8): error TS2339: Property '_saving' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(307,8): error TS2339: Property 'sources' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(308,8): error TS2339: Property 'push' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(309,8): error TS2339: Property '_await' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(333,10): error TS2339: Property 'emit' does not exist on type 'Conf'. +node_modules/npm/lib/config/core.js(409,29): error TS2345: Argument of type '(orig: string, esc: any, name: any) => string | undefined' is not assignable to parameter of type '(substring: string, ...args: any[]) => string'. Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'. node_modules/npm/lib/config/gentle-fs.js(16,11): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. @@ -216,6 +206,35 @@ node_modules/npm/lib/config/pacote.js(84,31): error TS2339: Property 'config' do node_modules/npm/lib/config/pacote.js(89,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/config/pacote.js(90,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/config/pacote.js(110,60): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(74,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(83,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(84,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(85,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(87,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(93,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(105,37): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. +node_modules/npm/lib/config.js(107,28): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. +node_modules/npm/lib/config.js(135,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(136,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(137,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(156,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(158,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(159,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(167,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(186,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(187,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(210,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(223,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(225,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(238,52): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(241,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(245,45): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(245,75): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(248,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(248,79): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(251,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/config.js(267,26): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/core")'. +node_modules/npm/lib/config.js(273,29): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/dedupe.js(35,32): error TS2339: Property 'dir' does not exist on type 'EventEmitter'. node_modules/npm/lib/dedupe.js(37,11): error TS2339: Property 'command' does not exist on type 'EventEmitter'. node_modules/npm/lib/dedupe.js(38,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -253,6 +272,9 @@ node_modules/npm/lib/dist-tag.js(109,11): error TS2339: Property 'registry' does node_modules/npm/lib/dist-tag.js(142,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/dist-tag.js(149,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. node_modules/npm/lib/docs.js(40,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/doctor/check-files-permission.js(11,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/doctor/check-files-permission.js(11,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/doctor/verify-cached-files.js(10,90): error TS2345: Argument of type '2' is not assignable to parameter of type '(string | number)[] | null | undefined'. node_modules/npm/lib/doctor.js(6,54): error TS2339: Property 'defaults' does not exist on type 'typeof import("/npm/node_modules/npm/lib/config/defaults")'. node_modules/npm/lib/doctor.js(23,41): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/doctor.js(24,40): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -262,9 +284,6 @@ node_modules/npm/lib/doctor.js(55,13): error TS2339: Property 'color' does not e node_modules/npm/lib/doctor.js(88,20): error TS2339: Property 'version' does not exist on type 'EventEmitter'. node_modules/npm/lib/doctor.js(90,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/doctor.js(108,92): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/doctor/check-files-permission.js(11,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/doctor/check-files-permission.js(11,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/doctor/verify-cached-files.js(10,90): error TS2345: Argument of type '2' is not assignable to parameter of type '(string | number)[] | null | undefined'. node_modules/npm/lib/edit.js(18,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/edit.js(27,28): error TS2339: Property 'dir' does not exist on type 'EventEmitter'. node_modules/npm/lib/edit.js(32,11): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. @@ -296,6 +315,7 @@ node_modules/npm/lib/help.js(146,7): error TS2322: Type '"cli"' is not assignabl node_modules/npm/lib/help.js(149,7): error TS2322: Type '"api"' is not assignable to type 'number'. node_modules/npm/lib/help.js(152,7): error TS2322: Type '"files"' is not assignable to type 'number'. node_modules/npm/lib/help.js(155,7): error TS2322: Type '"misc"' is not assignable to type 'number'. +node_modules/npm/lib/help.js(160,55): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. node_modules/npm/lib/help.js(164,7): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/help.js(170,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/help.js(179,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -306,51 +326,9 @@ node_modules/npm/lib/help.js(196,26): error TS2339: Property 'commands' does not node_modules/npm/lib/help.js(197,22): error TS2339: Property 'deref' does not exist on type 'EventEmitter'. node_modules/npm/lib/help.js(199,14): error TS2345: Argument of type 'any[]' is not assignable to parameter of type 'never'. node_modules/npm/lib/help.js(199,22): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/lib/init.js(16,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/init.js(17,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/init.js(31,31): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(181,36): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(183,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(185,17): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(189,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(191,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(199,36): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(223,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(225,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(226,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(229,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(234,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(235,63): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(236,51): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(238,85): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(266,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(267,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(270,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(271,7): error TS2532: Object is possibly 'undefined'. -node_modules/npm/lib/install.js(271,7): error TS2684: The 'this' context of type '((err: any, ...args: any[]) => any) | undefined' is not assignable to method's 'this' of type 'Function'. - Type 'undefined' is not assignable to type 'Function'. -node_modules/npm/lib/install.js(336,25): error TS2339: Property 'failing' does not exist on type 'Installer'. -node_modules/npm/lib/install.js(365,18): error TS2345: Argument of type '"time"' is not assignable to parameter of type '"warning"'. -node_modules/npm/lib/install.js(372,16): error TS2345: Argument of type '"timeEnd"' is not assignable to parameter of type '"warning"'. -node_modules/npm/lib/install.js(523,40): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(601,12): error TS2339: Property 'failing' does not exist on type 'Installer'. -node_modules/npm/lib/install.js(618,12): error TS2339: Property 'failing' does not exist on type 'Installer'. -node_modules/npm/lib/install.js(637,12): error TS2339: Property 'failing' does not exist on type 'Installer'. -node_modules/npm/lib/install.js(678,12): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/npm/lib/install.js(679,12): error TS2339: Property 'errno' does not exist on type 'Error'. -node_modules/npm/lib/install.js(739,32): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(745,12): error TS2339: Property 'failing' does not exist on type 'Installer'. -node_modules/npm/lib/install.js(757,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(759,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(877,26): error TS2345: Argument of type 'any' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(884,26): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(886,25): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(888,27): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(890,25): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(892,27): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. -node_modules/npm/lib/install.js(936,8): error TS2454: Variable 'previousPath' is used before being assigned. -node_modules/npm/lib/install.js(974,53): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install.js(996,53): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/init.js(38,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/init.js(39,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/init.js(53,31): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/access-error.js(4,18): error TS2554: Expected 0-1 arguments, but got 2. node_modules/npm/lib/install/action/build.js(10,50): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/action/extract.js(39,40): error TS2339: Property 'limit' does not exist on type 'EventEmitter'. @@ -366,27 +344,43 @@ node_modules/npm/lib/install/actions.js(126,24): error TS2339: Property 'limit' node_modules/npm/lib/install/actions.js(168,16): error TS2345: Argument of type '"time"' is not assignable to parameter of type '"warning"'. node_modules/npm/lib/install/actions.js(171,16): error TS2345: Argument of type '"timeEnd"' is not assignable to parameter of type '"warning"'. node_modules/npm/lib/install/and-add-parent-to-errors.js(9,10): error TS2339: Property 'parent' does not exist on type 'Error'. +node_modules/npm/lib/install/audit.js(32,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(89,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(91,23): error TS2339: Property 'projectScope' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(100,20): error TS2339: Property 'color' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(101,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(109,20): error TS2339: Property 'color' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(110,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(172,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/audit.js(216,26): error TS2339: Property 'version' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/check-permissions.js(36,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/decompose-actions.js(35,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(243,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(298,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(299,29): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(434,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(479,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(580,9): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/npm/lib/install/deps.js(795,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/deps.js(796,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(233,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(234,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(234,62): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(235,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(236,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/diff-trees.js(237,52): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/decompose-actions.js(47,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(253,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(309,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(310,29): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(401,28): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(402,36): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(402,64): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(403,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(404,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(409,54): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(459,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(599,9): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/install/deps.js(814,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/deps.js(815,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(242,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(243,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(244,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(244,62): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(245,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(246,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/diff-trees.js(247,52): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/exists.js(20,21): error TS2339: Property 'F_OK' does not exist on type 'typeof import("fs")'. node_modules/npm/lib/install/flatten-tree.js(16,15): error TS2532: Object is possibly 'undefined'. node_modules/npm/lib/install/flatten-tree.js(18,16): error TS2532: Object is possibly 'undefined'. -node_modules/npm/lib/install/inflate-shrinkwrap.js(29,12): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/install/inflate-shrinkwrap.js(29,45): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/inflate-shrinkwrap.js(30,12): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/inflate-shrinkwrap.js(30,45): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install/inflate-shrinkwrap.js(77,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/mutate-into-logical-tree.js(137,86): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/read-shrinkwrap.js(11,46): error TS2339: Property 'lockfileVersion' does not exist on type 'EventEmitter'. node_modules/npm/lib/install/save.js(48,12): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -414,6 +408,51 @@ node_modules/npm/lib/install/validate-tree.js(70,25): error TS2339: Property 'co node_modules/npm/lib/install/validate-tree.js(74,13): error TS2339: Property 'code' does not exist on type 'Error'. node_modules/npm/lib/install/validate-tree.js(89,15): error TS2339: Property 'code' does not exist on type 'Error'. node_modules/npm/lib/install/writable.js(22,21): error TS2339: Property 'W_OK' does not exist on type 'typeof import("fs")'. +node_modules/npm/lib/install.js(182,36): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(184,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(186,17): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(190,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(192,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(200,36): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(224,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(226,19): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(227,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(230,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(235,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(236,63): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(237,51): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(239,85): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(240,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(268,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(269,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(272,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(273,7): error TS2532: Object is possibly 'undefined'. +node_modules/npm/lib/install.js(273,7): error TS2684: The 'this' context of type '((err: any, ...args: any[]) => any) | undefined' is not assignable to method's 'this' of type 'Function'. + Type 'undefined' is not assignable to type 'Function'. +node_modules/npm/lib/install.js(340,25): error TS2339: Property 'failing' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(369,18): error TS2345: Argument of type '"time"' is not assignable to parameter of type '"warning"'. +node_modules/npm/lib/install.js(376,16): error TS2345: Argument of type '"timeEnd"' is not assignable to parameter of type '"warning"'. +node_modules/npm/lib/install.js(519,40): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(597,12): error TS2339: Property 'failing' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(614,12): error TS2339: Property 'failing' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(634,88): error TS2339: Property 'remove' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(643,12): error TS2339: Property 'failing' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(684,12): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/install.js(685,12): error TS2339: Property 'errno' does not exist on type 'Error'. +node_modules/npm/lib/install.js(745,32): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(751,12): error TS2339: Property 'failing' does not exist on type 'Installer'. +node_modules/npm/lib/install.js(768,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(770,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(771,14): error TS2554: Expected 0-1 arguments, but got 2. +node_modules/npm/lib/install.js(890,26): error TS2345: Argument of type 'any' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(897,26): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(899,25): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(901,27): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(903,25): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(905,27): error TS2345: Argument of type '{ [x: string]: any; action: any; name: any; version: any; path: any; }' is not assignable to parameter of type 'never'. +node_modules/npm/lib/install.js(948,8): error TS2454: Variable 'previousPath' is used before being assigned. +node_modules/npm/lib/install.js(985,53): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/install.js(1007,53): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/link.js(25,17): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. node_modules/npm/lib/link.js(39,9): error TS2339: Property 'code' does not exist on type 'Error'. node_modules/npm/lib/link.js(40,9): error TS2339: Property 'errno' does not exist on type 'Error'. @@ -495,31 +534,31 @@ node_modules/npm/lib/npm.js(228,11): error TS2339: Property 'config' does not ex node_modules/npm/lib/npm.js(231,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/npm.js(234,19): error TS2345: Argument of type 'true' is not assignable to parameter of type 'string'. node_modules/npm/lib/npm.js(253,17): error TS2339: Property 'installPrefix' does not exist on type 'Process'. -node_modules/npm/lib/npm.js(343,52): error TS2345: Argument of type 'PropertyDescriptor | undefined' is not assignable to parameter of type 'PropertyDescriptor & ThisType'. +node_modules/npm/lib/npm.js(347,52): error TS2345: Argument of type 'PropertyDescriptor | undefined' is not assignable to parameter of type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor'. -node_modules/npm/lib/npm.js(346,51): error TS2345: Argument of type 'PropertyDescriptor | undefined' is not assignable to parameter of type 'PropertyDescriptor & ThisType'. +node_modules/npm/lib/npm.js(350,51): error TS2345: Argument of type 'PropertyDescriptor | undefined' is not assignable to parameter of type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor'. -node_modules/npm/lib/npm.js(373,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(373,47): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(373,66): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(376,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(386,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(386,50): error TS2339: Property 'globalBin' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(387,33): error TS2339: Property 'root' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(395,21): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(404,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(404,50): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(405,33): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(414,33): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(415,33): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(421,37): error TS2339: Property 'dir' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(424,37): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(425,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(435,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(441,34): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/lib/npm.js(456,13): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(377,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(377,47): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(377,66): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(380,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(390,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(390,50): error TS2339: Property 'globalBin' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(391,33): error TS2339: Property 'root' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(399,21): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(408,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(408,50): error TS2339: Property 'globalDir' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(409,33): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(418,33): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(419,33): error TS2339: Property 'globalPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(425,37): error TS2339: Property 'dir' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(428,37): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(429,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(439,33): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(445,34): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/lib/npm.js(460,13): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/lib/outdated.js(36,16): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/outdated.js(71,30): error TS2339: Property 'dir' does not exist on type 'EventEmitter'. node_modules/npm/lib/outdated.js(74,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -559,15 +598,22 @@ node_modules/npm/lib/owner.js(223,28): error TS2339: Property 'config' does not node_modules/npm/lib/owner.js(226,11): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. node_modules/npm/lib/owner.js(246,37): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/owner.js(254,15): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(87,32): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(95,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(115,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(169,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(170,20): error TS2345: Argument of type 'string' is not assignable to parameter of type 'never'. -node_modules/npm/lib/pack.js(170,36): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/pack.js(205,17): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/npm/lib/pack.js(206,17): error TS2339: Property 'signal' does not exist on type 'Error'. -node_modules/npm/lib/pack.js(224,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(53,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(72,40): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(79,21): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(86,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(88,40): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(102,39): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(119,32): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(127,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(147,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(177,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(299,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(300,20): error TS2345: Argument of type 'string' is not assignable to parameter of type 'never'. +node_modules/npm/lib/pack.js(300,36): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/pack.js(335,17): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/pack.js(336,17): error TS2339: Property 'signal' does not exist on type 'Error'. +node_modules/npm/lib/pack.js(354,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. node_modules/npm/lib/ping.js(13,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/ping.js(15,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/ping.js(17,7): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. @@ -592,15 +638,20 @@ node_modules/npm/lib/prune.js(58,22): error TS2339: Property 'idealTree' does no node_modules/npm/lib/prune.js(61,32): error TS2339: Property 'idealTree' does not exist on type 'Pruner'. node_modules/npm/lib/prune.js(62,27): error TS2339: Property 'idealTree' does not exist on type 'Pruner'. node_modules/npm/lib/publish.js(45,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(62,11): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/npm/lib/publish.js(86,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(102,34): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(126,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(127,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(132,25): error TS2339: Property 'version' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(174,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(179,15): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/lib/publish.js(196,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(53,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(68,11): error TS2339: Property 'code' does not exist on type 'Error'. +node_modules/npm/lib/publish.js(93,36): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(97,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(111,34): error TS2339: Property 'tmp' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(120,24): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(138,9): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(139,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(144,25): error TS2339: Property 'version' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(166,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(180,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(191,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(196,15): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/lib/publish.js(213,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/rebuild.js(20,26): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/rebuild.js(21,21): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. node_modules/npm/lib/rebuild.js(26,24): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. @@ -623,6 +674,14 @@ node_modules/npm/lib/run-script.js(77,21): error TS2345: Argument of type 'strin node_modules/npm/lib/run-script.js(94,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/run-script.js(99,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/run-script.js(148,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/all-package-metadata.js(33,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/all-package-metadata.js(36,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/all-package-metadata.js(146,7): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/all-package-metadata.js(239,20): error TS2339: Property 'cache' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/esearch.js(15,36): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/esearch.js(35,7): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. +node_modules/npm/lib/search/format-package-stream.js(130,31): error TS2339: Property 'fd' does not exist on type 'WriteStream'. +node_modules/npm/lib/search/format-package-stream.js(130,63): error TS2339: Property 'getWindowSize' does not exist on type 'WriteStream'. node_modules/npm/lib/search.js(25,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/search.js(26,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/search.js(27,40): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -636,33 +695,26 @@ node_modules/npm/lib/search.js(71,20): error TS2339: Property 'config' does not node_modules/npm/lib/search.js(72,16): error TS2339: Property 'color' does not exist on type 'EventEmitter'. node_modules/npm/lib/search.js(82,28): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/search.js(82,55): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/all-package-metadata.js(33,30): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/all-package-metadata.js(36,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/all-package-metadata.js(146,7): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/all-package-metadata.js(239,20): error TS2339: Property 'cache' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/esearch.js(15,36): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/esearch.js(35,7): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/search/format-package-stream.js(130,31): error TS2339: Property 'fd' does not exist on type 'WriteStream'. -node_modules/npm/lib/search/format-package-stream.js(130,63): error TS2339: Property 'getWindowSize' does not exist on type 'WriteStream'. node_modules/npm/lib/set.js(8,22): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/lib/set.js(12,7): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/lib/shrinkwrap.js(30,29): error TS2339: Property 'lockfileVersion' does not exist on type 'EventEmitter'. -node_modules/npm/lib/shrinkwrap.js(48,22): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/shrinkwrap.js(49,22): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/shrinkwrap.js(53,38): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/shrinkwrap.js(60,34): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/shrinkwrap.js(115,13): error TS2339: Property 'version' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(117,15): error TS2339: Property 'bundled' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(120,17): error TS2339: Property 'resolved' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(126,17): error TS2339: Property 'integrity' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(127,22): error TS2339: Property 'integrity' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(128,19): error TS2339: Property 'integrity' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(132,33): error TS2339: Property 'dev' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(133,40): error TS2339: Property 'optional' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(135,15): error TS2339: Property 'requires' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(138,17): error TS2339: Property 'requires' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(142,15): error TS2339: Property 'dependencies' does not exist on type '{}'. -node_modules/npm/lib/shrinkwrap.js(143,30): error TS2339: Property 'dependencies' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(50,22): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/shrinkwrap.js(51,22): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/shrinkwrap.js(55,38): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/shrinkwrap.js(62,34): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/shrinkwrap.js(117,13): error TS2339: Property 'version' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(119,15): error TS2339: Property 'from' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(122,15): error TS2339: Property 'bundled' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(125,17): error TS2339: Property 'resolved' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(131,17): error TS2339: Property 'integrity' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(132,22): error TS2339: Property 'integrity' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(133,19): error TS2339: Property 'integrity' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(137,33): error TS2339: Property 'dev' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(138,40): error TS2339: Property 'optional' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(140,15): error TS2339: Property 'requires' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(143,17): error TS2339: Property 'requires' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(147,15): error TS2339: Property 'dependencies' does not exist on type '{}'. +node_modules/npm/lib/shrinkwrap.js(148,30): error TS2339: Property 'dependencies' does not exist on type '{}'. node_modules/npm/lib/star.js(24,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/star.js(25,15): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/star.js(26,21): error TS2339: Property 'command' does not exist on type 'EventEmitter'. @@ -753,9 +805,9 @@ node_modules/npm/lib/utils/error-handler.js(216,18): error TS2339: Property 'err node_modules/npm/lib/utils/error-handler.js(216,42): error TS2339: Property 'errno' does not exist on type 'Error'. node_modules/npm/lib/utils/error-handler.js(231,34): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/utils/error-handler.js(236,7): error TS2322: Type 'string' is not assignable to type 'any[]'. -node_modules/npm/lib/utils/error-message.js(66,37): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/utils/error-message.js(295,24): error TS2339: Property 'version' does not exist on type 'EventEmitter'. -node_modules/npm/lib/utils/error-message.js(296,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/utils/error-message.js(77,37): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/utils/error-message.js(300,24): error TS2339: Property 'version' does not exist on type 'EventEmitter'. +node_modules/npm/lib/utils/error-message.js(301,25): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/utils/git.js(9,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/utils/is-windows-bash.js(3,53): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'. @@ -782,7 +834,6 @@ node_modules/npm/lib/utils/metrics.js(65,9): error TS2339: Property 'registry' d node_modules/npm/lib/utils/parse-json.js(7,11): error TS2339: Property 'noExceptions' does not exist on type '(content: any) => any'. node_modules/npm/lib/utils/perf.js(9,12): error TS2345: Argument of type '"time"' is not assignable to parameter of type 'Signals'. node_modules/npm/lib/utils/perf.js(10,12): error TS2345: Argument of type '"timeEnd"' is not assignable to parameter of type 'Signals'. -node_modules/npm/lib/utils/perf.js(21,18): error TS2345: Argument of type '"timing"' is not assignable to parameter of type '"removeListener"'. node_modules/npm/lib/utils/read-local-package.js(7,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/utils/read-local-package.js(9,29): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. node_modules/npm/lib/utils/spawn.js(26,8): error TS2339: Property 'file' does not exist on type 'Error'. @@ -814,21 +865,23 @@ node_modules/npm/lib/version.js(297,20): error TS2339: Property 'config' does no node_modules/npm/lib/version.js(306,20): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/version.js(324,44): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. node_modules/npm/lib/version.js(336,19): error TS2339: Property 'localPrefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(26,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(27,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(30,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(80,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(85,19): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(107,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(109,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(112,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(257,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(260,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(264,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(267,74): error TS2339: Property 'color' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(269,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(272,16): error TS2339: Property 'config' does not exist on type 'EventEmitter'. -node_modules/npm/lib/view.js(281,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(35,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(36,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(39,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(89,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(94,19): error TS2339: Property 'prefix' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(116,35): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(118,27): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(121,9): error TS2339: Property 'registry' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(168,14): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(185,23): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(405,13): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(408,38): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(412,17): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(415,74): error TS2339: Property 'color' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(417,47): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(420,16): error TS2339: Property 'config' does not exist on type 'EventEmitter'. +node_modules/npm/lib/view.js(429,11): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/visnup.js(41,14): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/lib/whoami.js(15,22): error TS2339: Property 'config' does not exist on type 'EventEmitter'. node_modules/npm/lib/whoami.js(18,18): error TS2339: Property 'config' does not exist on type 'EventEmitter'. @@ -851,9 +904,9 @@ node_modules/npm/test/broken-under-nyc-and-travis/whoami.js(7,20): error TS2307: node_modules/npm/test/common-tap.js(5,47): error TS2339: Property '_extend' does not exist on type 'typeof import("util")'. node_modules/npm/test/common-tap.js(10,3): error TS2322: Type '(...args: any[]) => void' is not assignable to type 'typeof setImmediate'. Property '__promisify__' is missing in type '(...args: any[]) => void'. -node_modules/npm/test/common-tap.js(170,17): error TS2339: Property '_storage' does not exist on type 'Environment'. -node_modules/npm/test/common-tap.js(176,31): error TS2339: Property '_storage' does not exist on type 'Environment'. -node_modules/npm/test/common-tap.js(187,12): error TS2339: Property '_storage' does not exist on type 'Environment'. +node_modules/npm/test/common-tap.js(175,17): error TS2339: Property '_storage' does not exist on type 'Environment'. +node_modules/npm/test/common-tap.js(181,31): error TS2339: Property '_storage' does not exist on type 'Environment'. +node_modules/npm/test/common-tap.js(192,12): error TS2339: Property '_storage' does not exist on type 'Environment'. node_modules/npm/test/need-npm5-update/belongs-in-pacote/add-remote-git-get-resolved.js(2,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/need-npm5-update/belongs-in-pacote/add-remote-git-get-resolved.js(4,19): error TS2307: Cannot find module '../../lib/npm.js'. node_modules/npm/test/need-npm5-update/belongs-in-pacote/add-remote-git-get-resolved.js(5,22): error TS2307: Cannot find module '../common-tap.js'. @@ -1133,8 +1186,6 @@ node_modules/npm/test/tap/false-name.js(17,20): error TS2307: Cannot find module node_modules/npm/test/tap/fetch-package-metadata.js(5,18): error TS2307: Cannot find module 'npm-registry-mock'. node_modules/npm/test/tap/fetch-package-metadata.js(9,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/fetch-package-metadata.js(36,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. -node_modules/npm/test/tap/files-and-ignores.js(2,20): error TS2307: Cannot find module 'tap'. -node_modules/npm/test/tap/files-and-ignores.js(12,21): error TS2307: Cannot find module 'tacks'. node_modules/npm/test/tap/full-warning-messages.js(2,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/gently-rm-cmdshims.js(4,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/gently-rm-cmdshims.js(107,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. @@ -1185,6 +1236,14 @@ node_modules/npm/test/tap/graceful-restart.js(7,20): error TS2307: Cannot find m node_modules/npm/test/tap/help.js(1,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/ignore-install-link.js(6,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/ignore-scripts.js(6,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/init-create.js(2,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/init-create.js(3,29): error TS2307: Cannot find module 'require-inject'. +node_modules/npm/test/tap/init-create.js(25,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/init-create.js(42,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/init-create.js(47,16): error TS2339: Property 'parseArgs' does not exist on type '() => Promise'. +node_modules/npm/test/tap/init-create.js(53,16): error TS2339: Property 'parseArgs' does not exist on type '() => Promise'. +node_modules/npm/test/tap/init-create.js(68,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/init-create.js(74,16): error TS2339: Property 'parseArgs' does not exist on type '() => Promise'. node_modules/npm/test/tap/init-interrupt.js(3,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/init-interrupt.js(8,29): error TS2307: Cannot find module 'require-inject'. node_modules/npm/test/tap/init-interrupt.js(28,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. @@ -1251,11 +1310,12 @@ node_modules/npm/test/tap/install-scoped-with-bundled-dependency.js(3,20): error node_modules/npm/test/tap/install-scoped-with-bundled-dependency.js(4,21): error TS2307: Cannot find module 'tacks'. node_modules/npm/test/tap/install-scoped-with-bundled-dependency.js(7,47): error TS2339: Property '_extend' does not exist on type 'typeof import("util")'. node_modules/npm/test/tap/install-scoped-with-peer-dependency.js(7,20): error TS2307: Cannot find module 'tap'. -node_modules/npm/test/tap/install-shrinkwrapped-git.js(7,20): error TS2307: Cannot find module 'tap'. -node_modules/npm/test/tap/install-shrinkwrapped-git.js(53,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/test/tap/install-shrinkwrapped-git.js(57,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/test/tap/install-shrinkwrapped-git.js(62,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. -node_modules/npm/test/tap/install-shrinkwrapped-git.js(94,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/install-shrinkwrapped-git.js(9,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/install-shrinkwrapped-git.js(56,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/install-shrinkwrapped-git.js(60,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/install-shrinkwrapped-git.js(65,12): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/install-shrinkwrapped-git.js(106,7): error TS2339: Property 'load' does not exist on type 'EventEmitter'. +node_modules/npm/test/tap/install-test-cli-without-package-lock.js(7,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/install-windows-newlines.js(3,40): error TS2339: Property 'existsSync' does not exist on type 'typeof import("path")'. node_modules/npm/test/tap/install-windows-newlines.js(7,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/install-with-dev-dep-duplicate.js(5,18): error TS2307: Cannot find module 'npm-registry-mock'. @@ -1389,7 +1449,10 @@ node_modules/npm/test/tap/outdated.js(105,15): error TS2339: Property 'outdated' node_modules/npm/test/tap/override-bundled.js(3,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/owner.js(1,18): error TS2307: Cannot find module 'npm-registry-mock'. node_modules/npm/test/tap/owner.js(2,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/pack-files-and-ignores.js(2,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/pack-files-and-ignores.js(12,21): error TS2307: Cannot find module 'tacks'. node_modules/npm/test/tap/pack-scoped.js(2,20): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/pack.js(5,22): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/peer-deps.js(5,18): error TS2307: Cannot find module 'npm-registry-mock'. node_modules/npm/test/tap/peer-deps.js(8,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/pick-manifest-from-registry-metadata.js(2,20): error TS2307: Cannot find module 'tap'. @@ -1449,6 +1512,10 @@ node_modules/npm/test/tap/publish-invalid-semver-tag.js(64,7): error TS2339: Pro node_modules/npm/test/tap/publish-invalid-semver-tag.js(65,7): error TS2339: Property 'commands' does not exist on type 'EventEmitter'. node_modules/npm/test/tap/publish-scoped.js(4,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/publish-scoped.js(8,18): error TS2307: Cannot find module 'npm-registry-mock'. +node_modules/npm/test/tap/publish.js(8,33): error TS2307: Cannot find module 'npm-registry-mock'. +node_modules/npm/test/tap/publish.js(11,22): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/publish.js(56,47): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string | RegExp'. +node_modules/npm/test/tap/publish.js(117,45): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string | RegExp'. node_modules/npm/test/tap/pwd-prefix.js(5,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/referer.js(2,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/repo.js(2,18): error TS2307: Cannot find module 'npm-registry-mock'. @@ -1463,6 +1530,10 @@ node_modules/npm/test/tap/run-script.js(213,18): error TS2345: Argument of type Type 'undefined' is not assignable to type 'string'. node_modules/npm/test/tap/run-script.js(256,18): error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'. +node_modules/npm/test/tap/save-optional.js(3,22): error TS2307: Cannot find module 'tap'. +node_modules/npm/test/tap/save-optional.js(4,20): error TS2307: Cannot find module 'npm-registry-mock'. +node_modules/npm/test/tap/save-optional.js(5,23): error TS2307: Cannot find module 'tacks'. +node_modules/npm/test/tap/save-optional.js(70,30): error TS2345: Argument of type 'Buffer' is not assignable to parameter of type 'string'. node_modules/npm/test/tap/scope-header.js(3,20): error TS2307: Cannot find module 'tap'. node_modules/npm/test/tap/scope-header.js(4,18): error TS2307: Cannot find module 'npm-registry-mock'. node_modules/npm/test/tap/scope-header.js(5,21): error TS2307: Cannot find module 'tacks'. diff --git a/tests/baselines/reference/user/puppeteer.log b/tests/baselines/reference/user/puppeteer.log index 6f4ab35c81ce7..86623a0aafc9a 100644 --- a/tests/baselines/reference/user/puppeteer.log +++ b/tests/baselines/reference/user/puppeteer.log @@ -25,15 +25,6 @@ lib/ExecutionContext.js(19,7): error TS2300: Duplicate identifier 'ExecutionCont lib/ExecutionContext.js(22,15): error TS2503: Cannot find namespace 'Protocol'. lib/ExecutionContext.js(132,15): error TS2503: Cannot find namespace 'Protocol'. lib/ExecutionContext.js(225,19): error TS2300: Duplicate identifier 'ExecutionContext'. -lib/externs.d.ts(2,30): error TS2497: Module '"/puppeteer/puppeteer/lib/Browser"' resolves to a non-module entity and cannot be imported using this construct. -lib/externs.d.ts(3,29): error TS2497: Module '"/puppeteer/puppeteer/lib/Target"' resolves to a non-module entity and cannot be imported using this construct. -lib/externs.d.ts(5,32): error TS2497: Module '"/puppeteer/puppeteer/lib/TaskQueue"' resolves to a non-module entity and cannot be imported using this construct. -lib/externs.d.ts(9,37): error TS2497: Module '"/puppeteer/puppeteer/lib/ElementHandle"' resolves to a non-module entity and cannot be imported using this construct. -lib/externs.d.ts(16,26): error TS2503: Cannot find namespace 'Protocol'. -lib/externs.d.ts(16,69): error TS2503: Cannot find namespace 'Protocol'. -lib/externs.d.ts(17,28): error TS2503: Cannot find namespace 'Protocol'. -lib/externs.d.ts(17,81): error TS2503: Cannot find namespace 'Protocol'. -lib/externs.d.ts(17,121): error TS2503: Cannot find namespace 'Protocol'. lib/FrameManager.js(25,7): error TS2300: Duplicate identifier 'FrameManager'. lib/FrameManager.js(28,15): error TS2503: Cannot find namespace 'Protocol'. lib/FrameManager.js(54,15): error TS2503: Cannot find namespace 'Protocol'. @@ -41,9 +32,6 @@ lib/FrameManager.js(76,15): error TS2503: Cannot find namespace 'Protocol'. lib/FrameManager.js(127,15): error TS2503: Cannot find namespace 'Protocol'. lib/FrameManager.js(773,15): error TS2503: Cannot find namespace 'Protocol'. lib/FrameManager.js(998,19): error TS2300: Duplicate identifier 'FrameManager'. -lib/helper.js(59,15): error TS2503: Cannot find namespace 'Protocol'. -lib/helper.js(77,15): error TS2503: Cannot find namespace 'Protocol'. -lib/helper.js(101,15): error TS2503: Cannot find namespace 'Protocol'. lib/Input.js(29,7): error TS2300: Duplicate identifier 'Keyboard'. lib/Input.js(306,20): error TS2300: Duplicate identifier 'Keyboard'. lib/NetworkManager.js(129,15): error TS2503: Cannot find namespace 'Protocol'. @@ -62,6 +50,18 @@ lib/Page.js(185,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(394,22): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(407,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(731,19): error TS2503: Cannot find namespace 'Protocol'. +lib/externs.d.ts(2,30): error TS2497: Module '"/puppeteer/puppeteer/lib/Browser"' resolves to a non-module entity and cannot be imported using this construct. +lib/externs.d.ts(3,29): error TS2497: Module '"/puppeteer/puppeteer/lib/Target"' resolves to a non-module entity and cannot be imported using this construct. +lib/externs.d.ts(5,32): error TS2497: Module '"/puppeteer/puppeteer/lib/TaskQueue"' resolves to a non-module entity and cannot be imported using this construct. +lib/externs.d.ts(9,37): error TS2497: Module '"/puppeteer/puppeteer/lib/ElementHandle"' resolves to a non-module entity and cannot be imported using this construct. +lib/externs.d.ts(16,26): error TS2503: Cannot find namespace 'Protocol'. +lib/externs.d.ts(16,69): error TS2503: Cannot find namespace 'Protocol'. +lib/externs.d.ts(17,28): error TS2503: Cannot find namespace 'Protocol'. +lib/externs.d.ts(17,81): error TS2503: Cannot find namespace 'Protocol'. +lib/externs.d.ts(17,121): error TS2503: Cannot find namespace 'Protocol'. +lib/helper.js(59,15): error TS2503: Cannot find namespace 'Protocol'. +lib/helper.js(77,15): error TS2503: Cannot find namespace 'Protocol'. +lib/helper.js(101,15): error TS2503: Cannot find namespace 'Protocol'. node_modules/@types/node/index.d.ts(911,22): error TS2300: Duplicate identifier 'EventEmitter'. diff --git a/tests/baselines/reference/user/uglify-js.log b/tests/baselines/reference/user/uglify-js.log index 82a00d6cb105b..6857fedda3f8e 100644 --- a/tests/baselines/reference/user/uglify-js.log +++ b/tests/baselines/reference/user/uglify-js.log @@ -5,67 +5,67 @@ node_modules/uglify-js/lib/ast.js(329,33): error TS2339: Property 'transform' do node_modules/uglify-js/lib/ast.js(857,5): error TS2322: Type '{ [x: string]: any; _visit: (node: any, descend: any) => any; parent: (n: any) => any; push: type...' is not assignable to type 'TreeWalker'. Object literal may only specify known properties, but '_visit' does not exist in type 'TreeWalker'. Did you mean to write 'visit'? node_modules/uglify-js/lib/compress.js(165,27): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(500,26): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(813,18): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(1061,38): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(1075,51): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'true | ((node: any) => any)' has no compatible call signatures. -node_modules/uglify-js/lib/compress.js(1139,53): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(1181,112): error TS2532: Object is possibly 'undefined'. -node_modules/uglify-js/lib/compress.js(1182,29): error TS2532: Object is possibly 'undefined'. -node_modules/uglify-js/lib/compress.js(1191,87): error TS2322: Type 'false' is not assignable to type 'number'. -node_modules/uglify-js/lib/compress.js(1199,29): error TS2322: Type 'false' is not assignable to type 'never'. -node_modules/uglify-js/lib/compress.js(1297,38): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(1390,38): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(1487,27): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(1519,26): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(1933,44): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(2125,19): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(2385,27): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(3125,23): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(3138,33): error TS2322: Type '"f"' is not assignable to type 'boolean'. -node_modules/uglify-js/lib/compress.js(3275,18): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(3285,33): error TS2339: Property 'add' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3289,32): error TS2339: Property 'add' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3295,40): error TS2339: Property 'add' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3304,41): error TS2339: Property 'add' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3321,14): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(3323,40): error TS2339: Property 'get' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3331,33): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(3405,63): error TS2339: Property 'get' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3594,23): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(3611,36): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(3617,38): error TS2339: Property 'set' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3621,40): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. -node_modules/uglify-js/lib/compress.js(3646,22): error TS2339: Property 'each' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3651,30): error TS2339: Property 'del' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3656,30): error TS2339: Property 'set' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3667,41): error TS2339: Property 'has' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3669,48): error TS2339: Property 'get' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(506,26): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(820,18): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(1075,38): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(1089,51): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'true | ((node: any) => any)' has no compatible call signatures. +node_modules/uglify-js/lib/compress.js(1153,53): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(1195,112): error TS2532: Object is possibly 'undefined'. +node_modules/uglify-js/lib/compress.js(1196,29): error TS2532: Object is possibly 'undefined'. +node_modules/uglify-js/lib/compress.js(1205,87): error TS2322: Type 'false' is not assignable to type 'number'. +node_modules/uglify-js/lib/compress.js(1213,29): error TS2322: Type 'false' is not assignable to type 'never'. +node_modules/uglify-js/lib/compress.js(1311,38): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(1404,38): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(1501,27): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(1533,26): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(1947,44): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(2139,19): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(2399,27): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3139,23): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3152,33): error TS2322: Type '"f"' is not assignable to type 'boolean'. +node_modules/uglify-js/lib/compress.js(3289,18): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3299,33): error TS2339: Property 'add' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3303,32): error TS2339: Property 'add' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3309,40): error TS2339: Property 'add' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3318,41): error TS2339: Property 'add' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3335,14): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3337,40): error TS2339: Property 'get' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3345,33): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(3419,63): error TS2339: Property 'get' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3608,23): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3625,36): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(3631,38): error TS2339: Property 'set' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3635,40): error TS2339: Property 'parent' does not exist on type 'TreeTransformer'. +node_modules/uglify-js/lib/compress.js(3660,22): error TS2339: Property 'each' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3665,30): error TS2339: Property 'del' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3670,30): error TS2339: Property 'set' does not exist on type 'Dictionary'. node_modules/uglify-js/lib/compress.js(3681,41): error TS2339: Property 'has' does not exist on type 'Dictionary'. node_modules/uglify-js/lib/compress.js(3683,48): error TS2339: Property 'get' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3789,21): error TS2403: Subsequent variable declarations must have the same type. Variable 'defs' must be of type 'Dictionary', but here has type 'any'. -node_modules/uglify-js/lib/compress.js(3791,36): error TS2339: Property 'get' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3820,22): error TS2339: Property 'set' does not exist on type 'Dictionary'. -node_modules/uglify-js/lib/compress.js(3840,17): error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. -node_modules/uglify-js/lib/compress.js(3865,30): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(4003,18): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(4302,17): error TS2403: Subsequent variable declarations must have the same type. Variable 'body' must be of type 'any[]', but here has type 'any'. -node_modules/uglify-js/lib/compress.js(4386,22): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(4734,30): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(4741,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'code' must be of type 'string', but here has type '{ [x: string]: any; get: () => string; toString: () => string; indent: () => void; indentation: (...'. -node_modules/uglify-js/lib/compress.js(4745,36): error TS2532: Object is possibly 'undefined'. -node_modules/uglify-js/lib/compress.js(4750,41): error TS2339: Property 'get' does not exist on type 'string'. -node_modules/uglify-js/lib/compress.js(5237,18): error TS2454: Variable 'is_strict_comparison' is used before being assigned. -node_modules/uglify-js/lib/compress.js(5676,25): error TS2365: Operator '==' cannot be applied to types 'boolean' and '"f"'. -node_modules/uglify-js/lib/compress.js(5703,32): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(5763,24): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(5835,24): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(5841,26): error TS2554: Expected 0 arguments, but got 1. -node_modules/uglify-js/lib/compress.js(6191,43): error TS2454: Variable 'property' is used before being assigned. -node_modules/uglify-js/lib/compress.js(6205,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'value' must be of type 'number', but here has type 'any'. -node_modules/uglify-js/lib/compress.js(6208,46): error TS2339: Property 'has_side_effects' does not exist on type 'number'. -node_modules/uglify-js/lib/compress.js(6215,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'value' must be of type 'number', but here has type 'any'. -node_modules/uglify-js/lib/compress.js(6268,19): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(3695,41): error TS2339: Property 'has' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3697,48): error TS2339: Property 'get' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3803,21): error TS2403: Subsequent variable declarations must have the same type. Variable 'defs' must be of type 'Dictionary', but here has type 'any'. +node_modules/uglify-js/lib/compress.js(3805,36): error TS2339: Property 'get' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3834,22): error TS2339: Property 'set' does not exist on type 'Dictionary'. +node_modules/uglify-js/lib/compress.js(3854,17): error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. +node_modules/uglify-js/lib/compress.js(3879,30): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(4017,18): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(4316,17): error TS2403: Subsequent variable declarations must have the same type. Variable 'body' must be of type 'any[]', but here has type 'any'. +node_modules/uglify-js/lib/compress.js(4400,22): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(4748,30): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(4755,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'code' must be of type 'string', but here has type '{ [x: string]: any; get: () => string; toString: () => string; indent: () => void; indentation: (...'. +node_modules/uglify-js/lib/compress.js(4759,36): error TS2532: Object is possibly 'undefined'. +node_modules/uglify-js/lib/compress.js(4764,41): error TS2339: Property 'get' does not exist on type 'string'. +node_modules/uglify-js/lib/compress.js(5251,18): error TS2454: Variable 'is_strict_comparison' is used before being assigned. +node_modules/uglify-js/lib/compress.js(5690,25): error TS2365: Operator '==' cannot be applied to types 'boolean' and '"f"'. +node_modules/uglify-js/lib/compress.js(5717,32): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(5777,24): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(5849,24): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(5855,26): error TS2554: Expected 0 arguments, but got 1. +node_modules/uglify-js/lib/compress.js(6205,43): error TS2454: Variable 'property' is used before being assigned. +node_modules/uglify-js/lib/compress.js(6219,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'value' must be of type 'number', but here has type 'any'. +node_modules/uglify-js/lib/compress.js(6222,46): error TS2339: Property 'has_side_effects' does not exist on type 'number'. +node_modules/uglify-js/lib/compress.js(6229,25): error TS2403: Subsequent variable declarations must have the same type. Variable 'value' must be of type 'number', but here has type 'any'. +node_modules/uglify-js/lib/compress.js(6282,19): error TS2554: Expected 0 arguments, but got 1. node_modules/uglify-js/lib/minify.js(166,75): error TS2339: Property 'compress' does not exist on type 'Compressor'. node_modules/uglify-js/lib/mozilla-ast.js(569,18): error TS2554: Expected 0 arguments, but got 1. node_modules/uglify-js/lib/output.js(481,22): error TS2554: Expected 0 arguments, but got 1. diff --git a/tests/cases/user/acorn/package.json b/tests/cases/user/acorn/package.json index ce45da87eb3ca..495afde78f7e4 100644 --- a/tests/cases/user/acorn/package.json +++ b/tests/cases/user/acorn/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "acorn": "^5.5.3" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/adonis-framework/package.json b/tests/cases/user/adonis-framework/package.json index c03ed3a7cb919..0997e51d49407 100644 --- a/tests/cases/user/adonis-framework/package.json +++ b/tests/cases/user/adonis-framework/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "adonis-framework": "^3.0.14" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/assert/package.json b/tests/cases/user/assert/package.json index 375c21fece2a9..b9b3bf3ddca56 100644 --- a/tests/cases/user/assert/package.json +++ b/tests/cases/user/assert/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "assert": "^1.4.1" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/async/package.json b/tests/cases/user/async/package.json index ee08a02596080..fd5aa9eefb35d 100644 --- a/tests/cases/user/async/package.json +++ b/tests/cases/user/async/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "async": "^2.6.0" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/bcryptjs/package.json b/tests/cases/user/bcryptjs/package.json index 038830067afdc..b3ff85141e835 100644 --- a/tests/cases/user/bcryptjs/package.json +++ b/tests/cases/user/bcryptjs/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "bcryptjs": "^2.4.3" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/bluebird/package.json b/tests/cases/user/bluebird/package.json index 0e8fc0f15c85b..c9cb788b6143d 100644 --- a/tests/cases/user/bluebird/package.json +++ b/tests/cases/user/bluebird/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "bluebird": "^3.5.1" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/clear-require/package.json b/tests/cases/user/clear-require/package.json index f32b043570f10..8b15a344b3abd 100644 --- a/tests/cases/user/clear-require/package.json +++ b/tests/cases/user/clear-require/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "clear-require": "^2.0.0" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/clone/package.json b/tests/cases/user/clone/package.json index d1ea593e360db..333860b49bc41 100644 --- a/tests/cases/user/clone/package.json +++ b/tests/cases/user/clone/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "clone": "^2.1.1" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/content-disposition/package.json b/tests/cases/user/content-disposition/package.json index dc2e4dc510a83..351a3e0fe3197 100644 --- a/tests/cases/user/content-disposition/package.json +++ b/tests/cases/user/content-disposition/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "content-disposition": "^0.5.2" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/debug/package.json b/tests/cases/user/debug/package.json index 5bb2393173b57..18bdeb2594874 100644 --- a/tests/cases/user/debug/package.json +++ b/tests/cases/user/debug/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "debug": "^3.1.0" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/enhanced-resolve/package.json b/tests/cases/user/enhanced-resolve/package.json index 37d8d058f7946..d14b9069f4d3c 100644 --- a/tests/cases/user/enhanced-resolve/package.json +++ b/tests/cases/user/enhanced-resolve/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "enhanced-resolve": "^4.0.0" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/follow-redirects/package.json b/tests/cases/user/follow-redirects/package.json index 644345dd74deb..f77eac4a2de2e 100644 --- a/tests/cases/user/follow-redirects/package.json +++ b/tests/cases/user/follow-redirects/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "follow-redirects": "^1.4.1" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/graceful-fs/package.json b/tests/cases/user/graceful-fs/package.json index a9e56f9692124..6e5e5f6919f5f 100644 --- a/tests/cases/user/graceful-fs/package.json +++ b/tests/cases/user/graceful-fs/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "graceful-fs": "^4.1.11" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/jimp/package.json b/tests/cases/user/jimp/package.json index 18ebc2933e36f..88d326589e43d 100644 --- a/tests/cases/user/jimp/package.json +++ b/tests/cases/user/jimp/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "jimp": "latest" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/lodash/package.json b/tests/cases/user/lodash/package.json index 25292316dbe8e..4ce57032b84e9 100644 --- a/tests/cases/user/lodash/package.json +++ b/tests/cases/user/lodash/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.5" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/minimatch/package.json b/tests/cases/user/minimatch/package.json index 74f450fd46d66..72951b66b5fa4 100644 --- a/tests/cases/user/minimatch/package.json +++ b/tests/cases/user/minimatch/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "minimatch": "^3.0.4" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/npm/package.json b/tests/cases/user/npm/package.json index e0f0852144f9e..4dd45107f1b86 100644 --- a/tests/cases/user/npm/package.json +++ b/tests/cases/user/npm/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "npm": "^5.7.1" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/npmlog/package.json b/tests/cases/user/npmlog/package.json index 643038ef777dc..97513d1f887d6 100644 --- a/tests/cases/user/npmlog/package.json +++ b/tests/cases/user/npmlog/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "npmlog": "^4.1.2" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/octokit-rest/package.json b/tests/cases/user/octokit-rest/package.json index 75bcad00e6e6d..b6ef07e498238 100644 --- a/tests/cases/user/octokit-rest/package.json +++ b/tests/cases/user/octokit-rest/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "@octokit/rest": "latest" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/uglify-js/package.json b/tests/cases/user/uglify-js/package.json index b78163b810dc4..793c34465523f 100644 --- a/tests/cases/user/uglify-js/package.json +++ b/tests/cases/user/uglify-js/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "uglify-js": "^3.3.13" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/url-search-params/package.json b/tests/cases/user/url-search-params/package.json index f477a8194daa7..eb81fb1ec3483 100644 --- a/tests/cases/user/url-search-params/package.json +++ b/tests/cases/user/url-search-params/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "url-search-params": "^0.10.0" + }, + "devDependencies": { + "@types/node": "latest" } } diff --git a/tests/cases/user/util/package.json b/tests/cases/user/util/package.json index 3612c2534ede0..20091cbcc2d12 100644 --- a/tests/cases/user/util/package.json +++ b/tests/cases/user/util/package.json @@ -7,5 +7,8 @@ "license": "Apache-2.0", "dependencies": { "util": "^0.10.3" + }, + "devDependencies": { + "@types/node": "latest" } } From e1f22ac568e177eb25fc8a0cab3acc6ddd22947a Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 15 May 2018 12:34:53 -0700 Subject: [PATCH 35/69] Combine signatureHelp testing methods (#24132) --- src/harness/fourslash.ts | 259 ++++++++---------- .../cases/fourslash/augmentedTypesModule2.ts | 4 +- .../cases/fourslash/augmentedTypesModule3.ts | 4 +- .../cases/fourslash/augmentedTypesModule6.ts | 5 +- tests/cases/fourslash/callSignatureHelp.ts | 3 +- .../classExtendsInterfaceSigHelp1.ts | 8 +- tests/cases/fourslash/commentsClass.ts | 26 +- tests/cases/fourslash/commentsClassMembers.ts | 67 ++--- .../cases/fourslash/commentsCommentParsing.ts | 250 +++++++++-------- .../fourslash/commentsExternalModules.ts | 9 +- .../fourslash/commentsFunctionDeclaration.ts | 24 +- .../fourslash/commentsFunctionExpression.ts | 43 +-- .../fourslash/commentsImportDeclaration.ts | 3 +- tests/cases/fourslash/commentsInheritance.ts | 178 ++++-------- tests/cases/fourslash/commentsInterface.ts | 44 +-- tests/cases/fourslash/commentsModules.ts | 6 +- tests/cases/fourslash/commentsOverloads.ts | 214 ++++----------- tests/cases/fourslash/commentsVariables.ts | 12 +- .../externalModuleWithExportAssignment.ts | 24 +- tests/cases/fourslash/fourslash.ts | 35 ++- .../cases/fourslash/functionOverloadCount.ts | 3 +- tests/cases/fourslash/functionProperty.ts | 9 +- .../fourslash/genericFunctionReturnType.ts | 7 +- .../fourslash/genericFunctionReturnType2.ts | 6 +- .../genericFunctionSignatureHelp1.ts | 3 +- .../genericFunctionSignatureHelp2.ts | 3 +- .../genericFunctionSignatureHelp3.ts | 29 +- .../genericFunctionSignatureHelp3MultiFile.ts | 26 +- tests/cases/fourslash/genericParameterHelp.ts | 38 ++- .../genericParameterHelpConstructorCalls.ts | 49 ++-- .../genericParameterHelpTypeReferences.ts | 35 ++- .../fourslash/getJavaScriptCompletions16.ts | 13 +- tests/cases/fourslash/importJsNodeModule3.ts | 12 +- ...tionExpressionAboveInterfaceDeclaration.ts | 2 +- tests/cases/fourslash/javascriptModules24.ts | 3 +- .../fourslash/jsDocFunctionSignatures2.ts | 5 +- .../fourslash/jsDocFunctionSignatures5.ts | 15 +- .../fourslash/jsDocFunctionSignatures6.ts | 23 +- tests/cases/fourslash/jsDocTags.ts | 23 +- tests/cases/fourslash/jsdocReturnsTag.ts | 15 +- .../fourslash/noSignatureHelpOnNewKeyword.ts | 10 +- .../fourslash/overloadOnConstCallSignature.ts | 11 +- .../fourslash/paramHelpOnCommaInString.ts | 5 +- .../fourslash/parameterInfoOnParameterType.ts | 5 +- .../cases/fourslash/qualifyModuleTypeNames.ts | 3 +- .../quickInfoInFunctionTypeReference2.ts | 3 +- ...ckInfoOnConstructorWithGenericParameter.ts | 5 +- .../quickInfoOnPrivateConstructorCall.ts | 3 +- .../quickInfoOnProtectedConstructorCall.ts | 3 +- tests/cases/fourslash/restArgSignatureHelp.ts | 3 +- .../cases/fourslash/server/signatureHelp01.ts | 13 +- .../shims-pp/getSignatureHelpItems.ts | 5 +- .../fourslash/shims/getSignatureHelpItems.ts | 5 +- .../signatureHelpAnonymousFunction.ts | 24 +- tests/cases/fourslash/signatureHelpAtEOF.ts | 15 +- .../signatureHelpBeforeSemicolon1.ts | 15 +- .../fourslash/signatureHelpCallExpression.ts | 25 +- .../signatureHelpCallExpressionJs.ts | 32 ++- .../signatureHelpConstructExpression.ts | 26 +- ...atureHelpConstructorCallParamProperties.ts | 15 +- .../signatureHelpConstructorInheritance.ts | 15 +- .../signatureHelpConstructorOverload.ts | 26 +- .../cases/fourslash/signatureHelpEmptyList.ts | 21 +- .../signatureHelpExplicitTypeArguments.ts | 21 +- .../fourslash/signatureHelpForSuperCalls1.ts | 10 +- .../signatureHelpFunctionOverload.ts | 25 +- .../signatureHelpFunctionParameter.ts | 26 +- .../signatureHelpImplicitConstructor.ts | 9 +- ...signatureHelpImportStarFromExportEquals.ts | 2 +- .../fourslash/signatureHelpInCallback.ts | 6 +- .../signatureHelpInCompleteGenericsCall.ts | 3 +- .../fourslash/signatureHelpInFunctionCall.ts | 3 +- ...allOnFunctionDeclarationInMultipleFiles.ts | 3 +- ...ureHelpInIncompleteInvocationExpression.ts | 19 -- .../fourslash/signatureHelpInParenthetical.ts | 5 +- .../fourslash/signatureHelpIncompleteCalls.ts | 19 +- .../fourslash/signatureHelpNegativeTests.ts | 9 +- .../fourslash/signatureHelpNegativeTests2.ts | 6 +- .../fourslash/signatureHelpNoArguments.ts | 10 +- ...ctCreationExpressionNoArgs_NotAvailable.ts | 4 +- .../fourslash/signatureHelpObjectLiteral.ts | 27 +- .../signatureHelpOnNestedOverloads.ts | 23 +- .../signatureHelpOnOverloadOnConst.ts | 19 +- .../fourslash/signatureHelpOnOverloads.ts | 23 +- .../signatureHelpOnOverloadsDifferentArity.ts | 22 +- ...signatureHelpOnOverloadsDifferentArity2.ts | 22 +- ...signatureHelpOnOverloadsDifferentArity3.ts | 32 ++- ...ureHelpOnSuperWhenMembersAreNotResolved.ts | 2 +- .../signatureHelpOnTypePredicates.ts | 16 +- .../signatureHelpSimpleConstructorCall.ts | 25 +- .../signatureHelpSimpleFunctionCall.ts | 25 +- .../fourslash/signatureHelpSimpleSuperCall.ts | 11 +- .../signatureHelpSuperConstructorOverload.ts | 31 ++- .../signatureHelpTaggedTemplates1.ts | 17 +- .../signatureHelpTaggedTemplates2.ts | 17 +- .../signatureHelpTaggedTemplates3.ts | 17 +- .../signatureHelpTaggedTemplates4.ts | 17 +- .../signatureHelpTaggedTemplates5.ts | 17 +- .../signatureHelpTaggedTemplates6.ts | 17 +- .../signatureHelpTaggedTemplates7.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete1.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete2.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete3.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete4.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete5.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete6.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete7.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete8.ts | 17 +- ...signatureHelpTaggedTemplatesIncomplete9.ts | 17 +- .../signatureHelpTaggedTemplatesNegatives1.ts | 2 +- .../signatureHelpTaggedTemplatesNegatives2.ts | 2 +- .../signatureHelpTaggedTemplatesNegatives3.ts | 2 +- .../signatureHelpTaggedTemplatesNegatives4.ts | 2 +- .../signatureHelpTaggedTemplatesNegatives5.ts | 2 +- .../signatureHelpTaggedTemplatesNested1.ts | 11 +- .../signatureHelpTaggedTemplatesNested2.ts | 11 +- ...eHelpTaggedTemplatesWithOverloadedTags1.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags2.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags3.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags4.ts | 17 +- ...eHelpTaggedTemplatesWithOverloadedTags5.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags6.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags7.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags8.ts | 18 +- ...eHelpTaggedTemplatesWithOverloadedTags9.ts | 18 +- tests/cases/fourslash/signatureHelpThis.ts | 17 +- .../signatureHelpTypeParametersNotVariadic.ts | 4 +- .../signatureHelpWhenEditingCallExpression.ts | 36 +-- .../signatureHelpWithInterfaceAsIdentifier.ts | 3 +- .../signatureHelpWithInvalidArgumentList1.ts | 5 +- .../fourslash/signatureHelpWithUnknown.ts | 9 +- .../fourslash/staticGenericOverloads1.ts | 13 +- .../cases/fourslash/superInsideInnerClass.ts | 3 +- .../fourslash/trailingCommaSignatureHelp.ts | 11 +- tests/cases/fourslash/tsxSignatureHelp1.ts | 23 +- tests/cases/fourslash/tsxSignatureHelp2.ts | 17 +- 136 files changed, 1306 insertions(+), 1583 deletions(-) delete mode 100644 tests/cases/fourslash/signatureHelpInIncompleteInvocationExpression.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 9645e69c45c48..333ab42ef5108 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -23,7 +23,7 @@ namespace FourSlash { ts.disableIncrementalParsing = false; - import ArrayOrSingle = FourSlashInterface.Many; + import ArrayOrSingle = FourSlashInterface.ArrayOrSingle; // Represents a parsed source file with metadata interface FourSlashFile { @@ -378,7 +378,6 @@ namespace FourSlash { "getCompletionEntryDetails", "getCompletionEntrySymbol", "getQuickInfoAtPosition", - "getSignatureHelpItems", "getReferencesAtPosition", "getDocumentHighlights", ]; @@ -1062,8 +1061,8 @@ namespace FourSlash { if (tags !== undefined) { assert.equal(details.tags.length, tags.length, this.messageAtLastKnownMarker("QuickInfo tags")); ts.zipWith(tags, details.tags, (expectedTag, actualTag) => { - assert.equal(expectedTag.name, actualTag.name); - assert.equal(expectedTag.text, actualTag.text, this.messageAtLastKnownMarker("QuickInfo tag " + actualTag.name)); + assert.equal(actualTag.name, expectedTag.name); + assert.equal(actualTag.text, expectedTag.text, this.messageAtLastKnownMarker("QuickInfo tag " + actualTag.name)); }); } } @@ -1446,83 +1445,91 @@ Actual: ${stringify(fullActual)}`); } } - public verifyCurrentSignatureHelpIs(expected: string) { - const help = this.getActiveSignatureHelpItem(); - assert.equal( - ts.displayPartsToString(help.prefixDisplayParts) + - help.parameters.map(p => ts.displayPartsToString(p.displayParts)).join(ts.displayPartsToString(help.separatorDisplayParts)) + - ts.displayPartsToString(help.suffixDisplayParts), expected); - } - - public verifyCurrentParameterIsVariable(isVariable: boolean) { - const signature = this.getActiveSignatureHelpItem(); - assert.isOk(signature); - assert.equal(isVariable, signature.isVariadic); - } + public verifyNoSignatureHelp(markers: ReadonlyArray) { + if (markers.length) { + for (const marker of markers) { + this.goToMarker(marker); + this.verifyNoSignatureHelp(ts.emptyArray); + } + return; + } - public verifyCurrentParameterHelpName(name: string) { - const activeParameter = this.getActiveParameter(); - const activeParameterName = activeParameter.name; - assert.equal(activeParameterName, name); + const actual = this.getSignatureHelp(); + if (actual) { + this.raiseError(`Expected no signature help, but got "${stringify(actual)}"`); + } } - public verifyCurrentParameterSpanIs(parameter: string) { - const activeParameter = this.getActiveParameter(); - assert.equal(ts.displayPartsToString(activeParameter.displayParts), parameter); + public verifySignatureHelp(optionses: ReadonlyArray) { + for (const options of optionses) { + if (options.marker === undefined) { + this.verifySignatureHelpWorker(options); + } + else { + for (const marker of toArray(options.marker)) { + this.goToMarker(marker); + this.verifySignatureHelpWorker(options); + } + } + } } - public verifyCurrentParameterHelpDocComment(docComment: string) { - const activeParameter = this.getActiveParameter(); - const activeParameterDocComment = activeParameter.documentation; - assert.equal(ts.displayPartsToString(activeParameterDocComment), docComment, this.assertionMessageAtLastKnownMarker("current parameter Help DocComment")); - } + private verifySignatureHelpWorker(options: FourSlashInterface.VerifySignatureHelpOptions) { + const help = this.getSignatureHelp(); + const selectedItem = help.items[help.selectedItemIndex]; + // Argument index may exceed number of parameters + const currentParameter: ts.SignatureHelpParameter | undefined = selectedItem.parameters[help.argumentIndex]; - public verifyCurrentSignatureHelpParameterCount(expectedCount: number) { - assert.equal(this.getActiveSignatureHelpItem().parameters.length, expectedCount); - } + assert.equal(help.items.length, options.overloadsCount || 1, this.assertionMessageAtLastKnownMarker("signature help overloads count")); - public verifyCurrentSignatureHelpIsVariadic(expected: boolean) { - assert.equal(this.getActiveSignatureHelpItem().isVariadic, expected); - } + assert.equal(ts.displayPartsToString(selectedItem.documentation), options.docComment || "", this.assertionMessageAtLastKnownMarker("current signature help doc comment")); - public verifyCurrentSignatureHelpDocComment(docComment: string) { - const actualDocComment = this.getActiveSignatureHelpItem().documentation; - assert.equal(ts.displayPartsToString(actualDocComment), docComment, this.assertionMessageAtLastKnownMarker("current signature help doc comment")); - } + if (options.text !== undefined) { + assert.equal( + ts.displayPartsToString(selectedItem.prefixDisplayParts) + + selectedItem.parameters.map(p => ts.displayPartsToString(p.displayParts)).join(ts.displayPartsToString(selectedItem.separatorDisplayParts)) + + ts.displayPartsToString(selectedItem.suffixDisplayParts), options.text); + } + if (options.parameterName !== undefined) { + assert.equal(currentParameter!.name, options.parameterName); + } + if (options.parameterSpan !== undefined) { + assert.equal(ts.displayPartsToString(currentParameter!.displayParts), options.parameterSpan); + } + if (currentParameter) { + assert.equal(ts.displayPartsToString(currentParameter.documentation), options.parameterDocComment || "", this.assertionMessageAtLastKnownMarker("current parameter Help DocComment")); + } + if (options.parameterCount !== undefined) { + assert.equal(selectedItem.parameters.length, options.parameterCount); + } + if (options.argumentCount !== undefined) { + assert.equal(help.argumentCount, options.argumentCount); + } - public verifyCurrentSignatureHelpTags(tags: ts.JSDocTagInfo[]) { - const actualTags = this.getActiveSignatureHelpItem().tags; + assert.equal(selectedItem.isVariadic, !!options.isVariadic); - assert.equal(actualTags.length, tags.length, this.assertionMessageAtLastKnownMarker("signature help tags")); - ts.zipWith(tags, actualTags, (expectedTag, actualTag) => { + const actualTags = selectedItem.tags; + assert.equal(actualTags.length, (options.tags || ts.emptyArray).length, this.assertionMessageAtLastKnownMarker("signature help tags")); + ts.zipWith((options.tags || ts.emptyArray), actualTags, (expectedTag, actualTag) => { assert.equal(expectedTag.name, actualTag.name); assert.equal(expectedTag.text, actualTag.text, this.assertionMessageAtLastKnownMarker("signature help tag " + actualTag.name)); }); - } - public verifySignatureHelpCount(expected: number) { - const help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - const actual = help && help.items ? help.items.length : 0; - assert.equal(actual, expected); - } - - public verifySignatureHelpArgumentCount(expected: number) { - const signatureHelpItems = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - const actual = signatureHelpItems.argumentCount; - assert.equal(actual, expected); - } - - public verifySignatureHelpPresent(shouldBePresent = true) { - const actual = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - if (shouldBePresent) { - if (!actual) { - this.raiseError("Expected signature help to be present, but it wasn't"); - } - } - else { - if (actual) { - this.raiseError(`Expected no signature help, but got "${stringify(actual)}"`); - } + const allKeys: ReadonlyArray = [ + "marker", + "overloadsCount", + "docComment", + "text", + "parameterName", + "parameterSpan", + "parameterDocComment", + "parameterCount", + "isVariadic", + "tags", + "argumentCount", + ]; + for (const key in options) { + ts.Debug.assert(ts.contains(allKeys, key)); } } @@ -1564,19 +1571,6 @@ Actual: ${stringify(fullActual)}`); this.validate("error", message, renameInfo.localizedErrorMessage); } - private getActiveSignatureHelpItem() { - const help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - const index = help.selectedItemIndex; - return help.items[index]; - } - - private getActiveParameter(): ts.SignatureHelpParameter { - const help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - const item = help.items[help.selectedItemIndex]; - const currentParam = help.argumentIndex; - return item.parameters[currentParam]; - } - private alignmentForExtraInfo = 50; private spanInfoToString(spanInfo: ts.TextSpan, prefixString: string) { @@ -1790,8 +1784,12 @@ Actual: ${stringify(fullActual)}`); } public printCurrentSignatureHelp() { - const sigHelp = this.getActiveSignatureHelpItem(); - Harness.IO.log(stringify(sigHelp)); + const help = this.getSignatureHelp(); + Harness.IO.log(stringify(help.items[help.selectedItemIndex])); + } + + private getSignatureHelp(): ts.SignatureHelpItems | undefined { + return this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); } public printCompletionListMembers(preferences: ts.UserPreferences | undefined) { @@ -4042,8 +4040,12 @@ namespace FourSlashInterface { this.state.verifyCompletionListAllowsNewIdentifier(this.negative); } - public signatureHelpPresent() { - this.state.verifySignatureHelpPresent(!this.negative); + public noSignatureHelp(...markers: string[]): void { + this.state.verifyNoSignatureHelp(markers); + } + + public signatureHelp(...options: VerifySignatureHelpOptions[]): void { + this.state.verifySignatureHelp(options); } public errorExistsBetweenMarkers(startMarker: string, endMarker: string) { @@ -4108,7 +4110,7 @@ namespace FourSlashInterface { super(state); } - public completionsAt(markerName: Many, completions: ReadonlyArray, options?: CompletionsAtOptions) { + public completionsAt(markerName: ArrayOrSingle, completions: ReadonlyArray, options?: CompletionsAtOptions) { this.state.verifyCompletionsAt(markerName, completions, options); } @@ -4163,19 +4165,19 @@ namespace FourSlashInterface { this.state.verifyCurrentFileContent(text); } - public goToDefinitionIs(endMarkers: Many) { + public goToDefinitionIs(endMarkers: ArrayOrSingle) { this.state.verifyGoToDefinitionIs(endMarkers); } - public goToDefinition(startMarkerName: Many, endMarkerName: Many, range?: FourSlash.Range): void; - public goToDefinition(startsAndEnds: [Many, Many][] | { [startMarkerName: string]: Many }): void; - public goToDefinition(arg0: any, endMarkerName?: Many) { + public goToDefinition(startMarkerName: ArrayOrSingle, endMarkerName: ArrayOrSingle, range?: FourSlash.Range): void; + public goToDefinition(startsAndEnds: [ArrayOrSingle, ArrayOrSingle][] | { [startMarkerName: string]: ArrayOrSingle }): void; + public goToDefinition(arg0: any, endMarkerName?: ArrayOrSingle) { this.state.verifyGoToDefinition(arg0, endMarkerName); } - public goToType(startMarkerName: Many, endMarkerName: Many): void; - public goToType(startsAndEnds: [Many, Many][] | { [startMarkerName: string]: Many }): void; - public goToType(arg0: any, endMarkerName?: Many) { + public goToType(startMarkerName: ArrayOrSingle, endMarkerName: ArrayOrSingle): void; + public goToType(startsAndEnds: [ArrayOrSingle, ArrayOrSingle][] | { [startMarkerName: string]: ArrayOrSingle }): void; + public goToType(arg0: any, endMarkerName?: ArrayOrSingle) { this.state.verifyGoToType(arg0, endMarkerName); } @@ -4203,7 +4205,7 @@ namespace FourSlashInterface { this.state.verifyTypeOfSymbolAtLocation(range, symbol, expected); } - public referenceGroups(starts: Many | Many, parts: ReferenceGroup[]) { + public referenceGroups(starts: ArrayOrSingle | ArrayOrSingle, parts: ReferenceGroup[]) { this.state.verifyReferenceGroups(starts, parts); } @@ -4223,46 +4225,6 @@ namespace FourSlashInterface { this.state.verifyDisplayPartsOfReferencedSymbol(expected); } - public currentParameterHelpArgumentNameIs(name: string) { - this.state.verifyCurrentParameterHelpName(name); - } - - public currentParameterSpanIs(parameter: string) { - this.state.verifyCurrentParameterSpanIs(parameter); - } - - public currentParameterHelpArgumentDocCommentIs(docComment: string) { - this.state.verifyCurrentParameterHelpDocComment(docComment); - } - - public currentSignatureHelpDocCommentIs(docComment: string) { - this.state.verifyCurrentSignatureHelpDocComment(docComment); - } - - public currentSignatureHelpTagsAre(tags: ts.JSDocTagInfo[]) { - this.state.verifyCurrentSignatureHelpTags(tags); - } - - public signatureHelpCountIs(expected: number) { - this.state.verifySignatureHelpCount(expected); - } - - public signatureHelpCurrentArgumentListIsVariadic(expected: boolean) { - this.state.verifyCurrentSignatureHelpIsVariadic(expected); - } - - public signatureHelpArgumentCountIs(expected: number) { - this.state.verifySignatureHelpArgumentCount(expected); - } - - public currentSignatureParameterCountIs(expected: number) { - this.state.verifyCurrentSignatureHelpParameterCount(expected); - } - - public currentSignatureHelpIs(expected: string) { - this.state.verifyCurrentSignatureHelpIs(expected); - } - public noErrors() { this.state.verifyNoErrors(); } @@ -4435,7 +4397,7 @@ namespace FourSlashInterface { this.state.verifyRenameInfoFailed(message); } - public renameLocations(startRanges: Many, options: FourSlash.Range[] | { findInStrings?: boolean, findInComments?: boolean, ranges: FourSlash.Range[] }) { + public renameLocations(startRanges: ArrayOrSingle, options: FourSlash.Range[] | { findInStrings?: boolean, findInComments?: boolean, ranges: FourSlash.Range[] }) { this.state.verifyRenameLocations(startRanges, options); } @@ -4775,16 +4737,35 @@ namespace FourSlashInterface { } export interface VerifyCompletionsOptions { - readonly marker?: Many; + readonly marker?: ArrayOrSingle; readonly isNewIdentifierLocation?: boolean; - readonly exact?: Many; - readonly includes?: Many; - readonly excludes?: Many; + readonly exact?: ArrayOrSingle; + readonly includes?: ArrayOrSingle; + readonly excludes?: ArrayOrSingle; readonly preferences: ts.UserPreferences; readonly triggerCharacter?: ts.CompletionsTriggerCharacter; } - export type Many = T | ReadonlyArray; + export interface VerifySignatureHelpOptions { + readonly marker?: ArrayOrSingle; + /** @default 1 */ + readonly overloadsCount?: number; + /** @default undefined */ + readonly docComment?: string; + readonly text?: string; + readonly parameterName?: string; + readonly parameterSpan?: string; + /** @default undefined */ + readonly parameterDocComment?: string; + readonly parameterCount?: number; + readonly argumentCount?: number; + /** @default false */ + readonly isVariadic?: boolean; + /** @default ts.emptyArray */ + readonly tags?: ReadonlyArray; + } + + export type ArrayOrSingle = T | ReadonlyArray; export interface VerifyCompletionListContainsOptions extends ts.UserPreferences { triggerCharacter?: ts.CompletionsTriggerCharacter; diff --git a/tests/cases/fourslash/augmentedTypesModule2.ts b/tests/cases/fourslash/augmentedTypesModule2.ts index 3dc31476bb6ff..8cab9a42700fd 100644 --- a/tests/cases/fourslash/augmentedTypesModule2.ts +++ b/tests/cases/fourslash/augmentedTypesModule2.ts @@ -1,7 +1,7 @@ /// ////function /*11*/m2f(x: number) { }; -////namespace m2f { export interface I { foo(): void } } +////namespace m2f { export interface I { foo(): void } } ////var x: m2f./*1*/ ////var /*2*/r = m2f/*3*/; @@ -18,4 +18,4 @@ verify.quickInfoAt("2", "var r: (x: number) => void"); goTo.marker('3'); edit.insert('('); -verify.currentSignatureHelpIs('m2f(x: number): void'); +verify.signatureHelp({ text: "m2f(x: number): void" }); diff --git a/tests/cases/fourslash/augmentedTypesModule3.ts b/tests/cases/fourslash/augmentedTypesModule3.ts index dc4079997f236..9ab9850f99352 100644 --- a/tests/cases/fourslash/augmentedTypesModule3.ts +++ b/tests/cases/fourslash/augmentedTypesModule3.ts @@ -1,7 +1,7 @@ /// ////function m2g() { }; -////module m2g { export class C { foo(x: number) { } } } +////module m2g { export class C { foo(x: number) { } } } ////var x: m2g./*1*/; ////var /*2*/r = m2g/*3*/; @@ -16,4 +16,4 @@ verify.quickInfoAt("2", "var r: typeof m2g"); goTo.marker('3'); edit.insert('('); -verify.currentSignatureHelpIs('m2g(): void'); \ No newline at end of file +verify.signatureHelp({ text: "m2g(): void" }); diff --git a/tests/cases/fourslash/augmentedTypesModule6.ts b/tests/cases/fourslash/augmentedTypesModule6.ts index 3dcde637a7c8b..0d64ae6ab98a5 100644 --- a/tests/cases/fourslash/augmentedTypesModule6.ts +++ b/tests/cases/fourslash/augmentedTypesModule6.ts @@ -13,8 +13,7 @@ edit.insert('I;'); verify.completions({ marker: "2", includes: "m3f" }); -goTo.marker('3'); -verify.currentSignatureHelpIs('m3f(): m3f'); +verify.signatureHelp({ marker: "3", text: "m3f(): m3f" }); verify.quickInfoAt("4", "var r: m3f"); @@ -23,4 +22,4 @@ edit.insert('foo(1)'); verify.completions({ marker: "6", includes: "foo" }); edit.insert('foo('); -verify.currentSignatureHelpIs('foo(): void'); +verify.signatureHelp({ text: "foo(): void" }); diff --git a/tests/cases/fourslash/callSignatureHelp.ts b/tests/cases/fourslash/callSignatureHelp.ts index 4e813dd17c49a..b8fae9f60c5d1 100644 --- a/tests/cases/fourslash/callSignatureHelp.ts +++ b/tests/cases/fourslash/callSignatureHelp.ts @@ -6,5 +6,4 @@ ////var c: C; ////c(/**/ -goTo.marker(); -verify.currentSignatureHelpIs('c(): number'); \ No newline at end of file +verify.signatureHelp({ marker: "", text: "c(): number" }); diff --git a/tests/cases/fourslash/classExtendsInterfaceSigHelp1.ts b/tests/cases/fourslash/classExtendsInterfaceSigHelp1.ts index c2b4d5e70a0ed..9baf4432ddfca 100644 --- a/tests/cases/fourslash/classExtendsInterfaceSigHelp1.ts +++ b/tests/cases/fourslash/classExtendsInterfaceSigHelp1.ts @@ -13,6 +13,8 @@ ////var i: I; ////i.foo(/**/ -goTo.marker(); -verify.signatureHelpCountIs(2); -verify.currentParameterSpanIs('x: string'); \ No newline at end of file +verify.signatureHelp({ + marker: "", + overloadsCount: 2, + parameterSpan: "x: string", +}); diff --git a/tests/cases/fourslash/commentsClass.ts b/tests/cases/fourslash/commentsClass.ts index 8dbeca7009b2e..79f1d05af6611 100644 --- a/tests/cases/fourslash/commentsClass.ts +++ b/tests/cases/fourslash/commentsClass.ts @@ -38,7 +38,7 @@ ////var i6/*24*/_c = c/*25*/6; /////*26*/ ////class a { -//// /** +//// /** //// constructor for a //// @param a this is my a //// */ @@ -63,8 +63,7 @@ verify.quickInfos({ 2: "var i2: c2" }); -goTo.marker('3'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "3", docComment: "" }); verify.quickInfos({ 4: "var i2_c: typeof c2", @@ -73,8 +72,7 @@ verify.quickInfos({ 7: "var i3: c3" }); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("Constructor comment"); +verify.signatureHelp({ marker: "8", docComment: "Constructor comment" }); verify.quickInfos({ 9: "var i3_c: typeof c3", @@ -83,8 +81,7 @@ verify.quickInfos({ 12: "var i4: c4" }); -goTo.marker('13'); -verify.currentSignatureHelpDocCommentIs("Constructor comment"); +verify.signatureHelp({ marker: "13", docComment: "Constructor comment" }); verify.quickInfos({ 14: "var i4_c: typeof c4", @@ -93,8 +90,7 @@ verify.quickInfos({ 17: "var i5: c5" }); -goTo.marker('18'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "18", docComment: "" }); verify.quickInfos({ 19: "var i5_c: typeof c5", @@ -103,8 +99,7 @@ verify.quickInfos({ 22: "var i6: c6" }); -goTo.marker('23'); -verify.currentSignatureHelpDocCommentIs("constructor comment"); +verify.signatureHelp({ marker: "23", docComment: "constructor comment" }); verify.quickInfos({ 24: "var i6_c: typeof c6", @@ -128,9 +123,12 @@ verify.completionListContains("c6", "class c6", "class with statics and construc verify.completionListContains("i6", "var i6: c6", ""); verify.completionListContains("i6_c", "var i6_c: typeof c6", ""); -goTo.marker('27'); -verify.currentSignatureHelpDocCommentIs("constructor for a"); -verify.currentParameterHelpArgumentDocCommentIs("this is my a"); +verify.signatureHelp({ + marker: "27", + docComment: "constructor for a", + parameterDocComment: "this is my a", + tags: [{ name: "param", text: "a this is my a" }], +}); verify.quickInfos({ 28: "constructor c2(): c2", diff --git a/tests/cases/fourslash/commentsClassMembers.ts b/tests/cases/fourslash/commentsClassMembers.ts index 1c34584a26235..6b598ab458c13 100644 --- a/tests/cases/fourslash/commentsClassMembers.ts +++ b/tests/cases/fourslash/commentsClassMembers.ts @@ -171,9 +171,7 @@ verify.completionListContains("nc_pp1", "(property) c1.nc_pp1: number", ""); verify.completionListContains("nc_pp2", "(method) c1.nc_pp2(b: number): number", ""); verify.completionListContains("nc_pp3", "(property) c1.nc_pp3: number", ""); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "8", docComment: "sum with property", parameterDocComment: "number to add" }); verify.quickInfoAt("8q", "(method) c1.p2(b: number): number", "sum with property"); goTo.marker('9'); @@ -220,9 +218,7 @@ verify.completionListContains("nc_pp1", "(property) c1.nc_pp1: number", ""); verify.completionListContains("nc_pp2", "(method) c1.nc_pp2(b: number): number", ""); verify.completionListContains("nc_pp3", "(property) c1.nc_pp3: number", ""); -goTo.marker('13'); -verify.currentSignatureHelpDocCommentIs("sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "13", docComment: "sum with property", parameterDocComment: "number to add" }); verify.completionListContains("value", "(parameter) value: number", "this is value"); verify.quickInfos({ @@ -264,9 +260,7 @@ verify.completionListContains("nc_pp1", "(property) c1.nc_pp1: number", ""); verify.completionListContains("nc_pp2", "(method) c1.nc_pp2(b: number): number", ""); verify.completionListContains("nc_pp3", "(property) c1.nc_pp3: number", ""); -goTo.marker('20'); -verify.currentSignatureHelpDocCommentIs("sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "20", docComment: "sum with property", parameterDocComment: "number to add" }); verify.quickInfoAt("20q", "(method) c1.pp2(b: number): number", "sum with property"); goTo.marker('21'); @@ -313,9 +307,7 @@ verify.completionListContains("nc_pp1", "(property) c1.nc_pp1: number", ""); verify.completionListContains("nc_pp2", "(method) c1.nc_pp2(b: number): number", ""); verify.completionListContains("nc_pp3", "(property) c1.nc_pp3: number", ""); -goTo.marker('25'); -verify.currentSignatureHelpDocCommentIs("sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "25", docComment: "sum with property", parameterDocComment: "number to add" }); verify.completionListContains("value", "(parameter) value: number", "this is value"); verify.quickInfos({ @@ -352,9 +344,7 @@ verify.completionListContains("nc_s1", "(property) c1.nc_s1: number", ""); verify.completionListContains("nc_s2", "(method) c1.nc_s2(b: number): number", ""); verify.completionListContains("nc_s3", "(property) c1.nc_s3: number", ""); -goTo.marker('35'); -verify.currentSignatureHelpDocCommentIs("static sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "35", docComment: "static sum with property", parameterDocComment: "number to add" }); verify.completionListContains("c1", "class c1", "This is comment for c1"); verify.quickInfoAt("35q", "(method) c1.s2(b: number): number", "static sum with property"); @@ -390,9 +380,7 @@ verify.completionListContains("nc_s1", "(property) c1.nc_s1: number", ""); verify.completionListContains("nc_s2", "(method) c1.nc_s2(b: number): number", ""); verify.completionListContains("nc_s3", "(property) c1.nc_s3: number", ""); -goTo.marker('42'); -verify.currentSignatureHelpDocCommentIs("static sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "42", docComment: "static sum with property", parameterDocComment: "number to add" }); verify.completionListContains("value", "(parameter) value: number", "this is value"); verify.quickInfos({ "42q": ["(method) c1.s2(b: number): number", "static sum with property"], @@ -405,17 +393,13 @@ verify.completionListContains("b", "(parameter) b: number", ""); verify.quickInfoAt("46", "(property) c1.nc_p3: number"); -goTo.marker('47'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "47", docComment: "" }); verify.quickInfos({ "47q": "(method) c1.nc_p2(b: number): number", 48: "(property) c1.nc_p3: number" }); -goTo.marker('49'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "49", docComment: "" }); verify.completionListContains("value", "(parameter) value: number", ""); verify.quickInfos({ "49q": "(method) c1.nc_p2(b: number): number", @@ -428,17 +412,13 @@ verify.completionListContains("b", "(parameter) b: number", ""); verify.quickInfoAt("53", "(property) c1.nc_pp3: number"); -goTo.marker('54'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "54", docComment: "" }); verify.quickInfos({ "54q": "(method) c1.nc_pp2(b: number): number", 55: "(property) c1.nc_pp3: number" }); -goTo.marker('56'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "56", docComment: "" }); verify.completionListContains("value", "(parameter) value: number", ""); verify.quickInfos({ "56q": "(method) c1.nc_pp2(b: number): number", @@ -451,25 +431,20 @@ verify.completionListContains("b", "(parameter) b: number", ""); verify.quickInfoAt("60", "(property) c1.nc_s3: number"); -goTo.marker('61'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "61", docComment: "" }); verify.quickInfos({ "61q": "(method) c1.nc_s2(b: number): number", 62: "(property) c1.nc_s3: number" }); -goTo.marker('63'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "63", docComment: "" }); verify.completionListContains("value", "(parameter) value: number", ""); verify.quickInfos({ "63q": "(method) c1.nc_s2(b: number): number", 64: "var i1: c1" }); -goTo.marker('65'); -verify.currentSignatureHelpDocCommentIs("Constructor method"); +verify.signatureHelp({ marker: "65", docComment: "Constructor method" }); verify.quickInfos({ "65q": ["constructor c1(): c1", "Constructor method"], 66: "var i1_p: number" @@ -490,9 +465,7 @@ verify.quickInfos({ 70: "var i1_r: number" }); -goTo.marker('71'); -verify.currentSignatureHelpDocCommentIs("sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "71", docComment: "sum with property", parameterDocComment: "number to add" }); verify.quickInfos({ "71q": ["(method) c1.p2(b: number): number", "sum with property"], @@ -507,9 +480,7 @@ verify.quickInfos({ 80: "var i1_ncr: number" }); -goTo.marker('81'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "81", docComment: "" }); verify.quickInfos({ "81q": "(method) c1.nc_p2(b: number): number", @@ -539,9 +510,7 @@ verify.quickInfos({ 91: "var i1_s_r: number" }); -goTo.marker('92'); -verify.currentSignatureHelpDocCommentIs("static sum with property"); -verify.currentParameterHelpArgumentDocCommentIs("number to add"); +verify.signatureHelp({ marker: "92", docComment: "static sum with property", parameterDocComment: "number to add" }); verify.quickInfos({ "92q": ["(method) c1.s2(b: number): number", "static sum with property"], @@ -556,9 +525,7 @@ verify.quickInfos({ 101: "var i1_s_ncr: number" }); -goTo.marker('102'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "102", docComment: "" }); verify.quickInfos({ "102q": "(method) c1.nc_s2(b: number): number", 103: "var i1_s_ncprop: number", diff --git a/tests/cases/fourslash/commentsCommentParsing.ts b/tests/cases/fourslash/commentsCommentParsing.ts index 0cf239bf1ff67..6b0c880e9bbbe 100644 --- a/tests/cases/fourslash/commentsCommentParsing.ts +++ b/tests/cases/fourslash/commentsCommentParsing.ts @@ -202,76 +202,72 @@ ////class NoQuic/*50*/kInfoClass { ////} -goTo.marker('1'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "1", docComment: "" }); verify.quickInfoAt("1q", "function simple(): void"); -goTo.marker('2'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "2", docComment: "" }); verify.quickInfoAt("2q", "function multiLine(): void"); -goTo.marker('3'); -verify.currentSignatureHelpDocCommentIs("this is eg of single line jsdoc style comment "); +verify.signatureHelp({ marker: "3", docComment: "this is eg of single line jsdoc style comment " }); verify.quickInfoAt("3q", "function jsDocSingleLine(): void", "this is eg of single line jsdoc style comment "); -goTo.marker('4'); -verify.currentSignatureHelpDocCommentIs("this is multiple line jsdoc stule comment\nNew line1\nNew Line2"); +verify.signatureHelp({ marker: "4", docComment: "this is multiple line jsdoc stule comment\nNew line1\nNew Line2" }); verify.quickInfoAt("4q", "function jsDocMultiLine(): void", "this is multiple line jsdoc stule comment\nNew line1\nNew Line2"); -goTo.marker('5'); -verify.currentSignatureHelpDocCommentIs("this is multiple line jsdoc stule comment\nNew line1\nNew Line2\nShoul mege this line as well\nand this too\nAnother this one too"); +verify.signatureHelp({ marker: "5", docComment: "this is multiple line jsdoc stule comment\nNew line1\nNew Line2\nShoul mege this line as well\nand this too\nAnother this one too" }); verify.quickInfoAt("5q", "function jsDocMultiLineMerge(): void", "this is multiple line jsdoc stule comment\nNew line1\nNew Line2\nShoul mege this line as well\nand this too\nAnother this one too"); -goTo.marker('6'); -verify.currentSignatureHelpDocCommentIs("jsdoc comment "); +verify.signatureHelp({ marker: "6", docComment: "jsdoc comment " }); verify.quickInfoAt("6q", "function jsDocMixedComments1(): void", "jsdoc comment "); -goTo.marker('7'); -verify.currentSignatureHelpDocCommentIs("jsdoc comment \nanother jsDocComment"); +verify.signatureHelp({ marker: "7", docComment: "jsdoc comment \nanother jsDocComment" }); verify.quickInfoAt("7q", "function jsDocMixedComments2(): void", "jsdoc comment \nanother jsDocComment"); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("jsdoc comment \n* triplestar jsDocComment"); +verify.signatureHelp({ marker: "8", docComment: "jsdoc comment \n* triplestar jsDocComment" }); verify.quickInfoAt("8q", "function jsDocMixedComments3(): void", "jsdoc comment \n* triplestar jsDocComment"); -goTo.marker('9'); -verify.currentSignatureHelpDocCommentIs("jsdoc comment \nanother jsDocComment"); +verify.signatureHelp({ marker: "9", docComment: "jsdoc comment \nanother jsDocComment" }); verify.quickInfoAt("9q", "function jsDocMixedComments4(): void", "jsdoc comment \nanother jsDocComment"); -goTo.marker('10'); -verify.currentSignatureHelpDocCommentIs("jsdoc comment \nanother jsDocComment"); +verify.signatureHelp({ marker: "10", docComment: "jsdoc comment \nanother jsDocComment" }); verify.quickInfoAt("10q", "function jsDocMixedComments5(): void", "jsdoc comment \nanother jsDocComment"); -goTo.marker('11'); -verify.currentSignatureHelpDocCommentIs("another jsDocComment\njsdoc comment "); +verify.signatureHelp({ marker: "11", docComment: "another jsDocComment\njsdoc comment " }); verify.quickInfoAt("11q", "function jsDocMixedComments6(): void", "another jsDocComment\njsdoc comment "); -goTo.marker('12'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "12", docComment: "" }); verify.quickInfoAt("12q", "function noHelpComment1(): void"); -goTo.marker('13'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "13", docComment: "" }); verify.quickInfoAt("13q", "function noHelpComment2(): void"); -goTo.marker('14'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp({ marker: "14", docComment: "" }); verify.quickInfoAt("14q", "function noHelpComment3(): void"); goTo.marker('15'); verify.completionListContains("sum", "function sum(a: number, b: number): number", "Adds two integers and returns the result"); -goTo.marker('16'); -verify.currentSignatureHelpDocCommentIs("Adds two integers and returns the result"); -verify.currentParameterHelpArgumentDocCommentIs("first number"); +const addTags: ReadonlyArray = [ + { name: "param", text: "a first number" }, + { name: "param", text: "b second number" }, +]; +verify.signatureHelp({ + marker: "16", + docComment: "Adds two integers and returns the result", + parameterDocComment: "first number", + tags: addTags, +}); verify.quickInfos({ "16q": ["function sum(a: number, b: number): number", "Adds two integers and returns the result"], "16aq": ["(parameter) a: number", "first number"] }); -goTo.marker('17'); -verify.currentSignatureHelpDocCommentIs("Adds two integers and returns the result"); -verify.currentParameterHelpArgumentDocCommentIs("second number"); +verify.signatureHelp({ + marker: "17", + docComment: "Adds two integers and returns the result", + parameterDocComment: "second number", + tags: addTags, +}); verify.quickInfoAt("17aq", "(parameter) b: number", "second number"); goTo.marker('18'); @@ -279,9 +275,17 @@ verify.quickInfoIs("(parameter) a: number", "first number"); verify.completionListContains("a", "(parameter) a: number", "first number"); verify.completionListContains("b", "(parameter) b: number", "second number"); -goTo.marker('19'); -verify.currentSignatureHelpDocCommentIs("This is multiplication function"); -verify.currentParameterHelpArgumentDocCommentIs("first number"); +const multiplyTags: ReadonlyArray = [ + { name: "param", text: "" }, + { name: "param", text: "a first number" }, + { name: "param", text: "b" }, + { name: "param", text: "c" }, + { name: "param", text: "d" }, + { name: "anotherTag", text: undefined }, + { name: "param", text: "e LastParam " }, + { name: "anotherTag", text: undefined }, +]; +verify.signatureHelp({ marker: "19", docComment: "This is multiplication function", parameterDocComment: "first number", tags: multiplyTags }); verify.quickInfos({ "19q": [ "function multiply(a: number, b: number, c?: number, d?: any, e?: any): void", @@ -290,41 +294,34 @@ verify.quickInfos({ "19aq": ["(parameter) a: number", "first number"] }); -goTo.marker('20'); -verify.currentSignatureHelpDocCommentIs("This is multiplication function"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "20", docComment: "This is multiplication function", tags: multiplyTags }); verify.quickInfoAt("20aq", "(parameter) b: number"); -goTo.marker('21'); -verify.currentSignatureHelpDocCommentIs("This is multiplication function"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "21", docComment: "This is multiplication function", tags: multiplyTags }); verify.quickInfoAt("21aq", "(parameter) c: number"); -goTo.marker('22'); -verify.currentSignatureHelpDocCommentIs("This is multiplication function"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "22", docComment: "This is multiplication function", tags: multiplyTags }); verify.quickInfoAt("22aq", "(parameter) d: any"); -goTo.marker('23'); -verify.currentSignatureHelpDocCommentIs("This is multiplication function"); -verify.currentParameterHelpArgumentDocCommentIs("LastParam "); +verify.signatureHelp({ marker: "23", docComment: "This is multiplication function", parameterDocComment: "LastParam ", tags: multiplyTags }); verify.quickInfoAt("23aq", "(parameter) e: any", "LastParam "); goTo.marker('24'); verify.completionListContains("aOrb", "(parameter) aOrb: any", ""); verify.completionListContains("opt", "(parameter) opt: any", "optional parameter"); -goTo.marker('25'); -verify.currentSignatureHelpDocCommentIs("fn f1 with number"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ + marker: "25", + overloadsCount: 2, + docComment: "fn f1 with number", + tags: [{ name: "param", text: "b about b" }], +}); verify.quickInfos({ "25q": ["function f1(a: number): any (+1 overload)", "fn f1 with number"], "25aq": "(parameter) a: number" }); -goTo.marker('26'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "26", overloadsCount: 2, docComment: "" }); verify.quickInfos({ "26q": "function f1(b: string): any (+1 overload)", "26aq": "(parameter) b: string" @@ -335,9 +332,15 @@ verify.completionListContains("multiply", "function multiply(a: number, b: numbe verify.completionListContains("f1", "function f1(a: number): any (+1 overload)", "fn f1 with number"); const subtractDoc = "This is subtract function"; -goTo.marker('28'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs(""); +const subtractTags: ReadonlyArray = [ + { name: "param", text: "" }, + { name: "param", text: "b this is about b" }, + { name: "param", text: "c this is optional param c" }, + { name: "param", text: "d this is optional param d" }, + { name: "param", text: "e this is optional param e" }, + { name: "param", text: " { () => string; } } f this is optional param f" }, +]; +verify.signatureHelp({ marker: "28", docComment: subtractDoc, tags: subtractTags }); verify.quickInfos({ "28q": [ "function subtract(a: number, b: number, c?: () => string, d?: () => string, e?: () => string, f?: () => string): void", @@ -346,34 +349,31 @@ verify.quickInfos({ "28aq": "(parameter) a: number" }); -goTo.marker('29'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs("this is about b"); +verify.signatureHelp({ marker: "29", docComment: subtractDoc, tags: subtractTags, parameterDocComment: "this is about b" }); verify.quickInfoAt("29aq", "(parameter) b: number", "this is about b"); -goTo.marker('30'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs("this is optional param c"); +verify.signatureHelp({ marker: "30", docComment: subtractDoc, tags: subtractTags, parameterDocComment: "this is optional param c" }); verify.quickInfoAt("30aq", "(parameter) c: () => string", "this is optional param c"); -goTo.marker('31'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs("this is optional param d"); +verify.signatureHelp({ marker: "31", docComment: subtractDoc, tags: subtractTags, parameterDocComment: "this is optional param d" }); verify.quickInfoAt("31aq", "(parameter) d: () => string", "this is optional param d"); -goTo.marker('32'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs("this is optional param e"); +verify.signatureHelp({ marker: "32", docComment: subtractDoc, tags: subtractTags, parameterDocComment: "this is optional param e" }); verify.quickInfoAt("32aq", "(parameter) e: () => string", "this is optional param e"); -goTo.marker('33'); -verify.currentSignatureHelpDocCommentIs(subtractDoc); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "33", docComment: subtractDoc, tags: subtractTags }); verify.quickInfoAt("33aq", "(parameter) f: () => string"); -goTo.marker('34'); -verify.currentSignatureHelpDocCommentIs("this is square function"); -verify.currentParameterHelpArgumentDocCommentIs("this is input number"); +verify.signatureHelp({ + marker: "34", + docComment: "this is square function", + parameterDocComment: "this is input number", + tags: [ + { name: "paramTag", text: "{ number } a this is input number of paramTag" }, + { name: "param", text: "a this is input number" }, + { name: "returnType", text: "{ number } it is return type" }, + ], +}); verify.quickInfos({ "34q": [ "function square(a: number): number", @@ -385,9 +385,12 @@ verify.quickInfos({ ] }); -goTo.marker('35'); -verify.currentSignatureHelpDocCommentIs("this is divide function"); -verify.currentParameterHelpArgumentDocCommentIs("this is a"); +const divideTags: ReadonlyArray = [ + { name: "param", text: "a this is a" }, + { name: "paramTag", text: "{ number } g this is optional param g" }, + { name: "param", text: "b this is b" }, +]; +verify.signatureHelp({ marker: "35", docComment: "this is divide function", parameterDocComment: "this is a", tags: divideTags }); verify.quickInfos({ "35q": [ "function divide(a: number, b: number): void", @@ -399,22 +402,21 @@ verify.quickInfos({ ] }); -goTo.marker('36'); -verify.currentSignatureHelpDocCommentIs("this is divide function"); -verify.currentParameterHelpArgumentDocCommentIs("this is b"); +verify.signatureHelp({ marker: "36", docComment: "this is divide function", parameterDocComment: "this is b", tags: divideTags }); verify.quickInfoAt("36aq", "(parameter) b: number", "this is b"); -goTo.marker('37'); -verify.currentSignatureHelpDocCommentIs("Function returns string concat of foo and bar"); -verify.currentParameterHelpArgumentDocCommentIs("is string"); +const concatDoc = "Function returns string concat of foo and bar"; +const concatTags: ReadonlyArray = [ + { name: "param", text: "foo is string" }, + { name: "param", text: "bar is second string" }, +]; +verify.signatureHelp({ marker: "37", docComment: concatDoc, parameterDocComment: "is string", tags: concatTags }); verify.quickInfos({ - "37q": ["function fooBar(foo: string, bar: string): string", "Function returns string concat of foo and bar"], + "37q": ["function fooBar(foo: string, bar: string): string", concatDoc], "37aq": ["(parameter) foo: string", "is string"] }); -goTo.marker('38'); -verify.currentSignatureHelpDocCommentIs("Function returns string concat of foo and bar"); -verify.currentParameterHelpArgumentDocCommentIs("is second string"); +verify.signatureHelp({ marker: "38", docComment: concatDoc, parameterDocComment: "is second string", tags: concatTags }); verify.quickInfoAt("38aq", "(parameter) bar: string", "is second string"); goTo.marker('39'); @@ -423,13 +425,16 @@ verify.completionListContains("b", "(parameter) b: number", "this is inline comm verify.completionListContains("c", "(parameter) c: number", "it is third parameter"); verify.completionListContains("d", "(parameter) d: number", ""); -goTo.marker('40'); -verify.currentSignatureHelpDocCommentIs("this is jsdoc style function with param tag as well as inline parameter help"); -verify.currentParameterHelpArgumentDocCommentIs("it is first parameter\nthis is inline comment for a "); +const jsdocTestDocComment = "this is jsdoc style function with param tag as well as inline parameter help"; +const jsdocTestTags: ReadonlyArray = [ + { name: "param", text: "a it is first parameter" }, + { name: "param", text: "c it is third parameter" }, +]; +verify.signatureHelp({ marker: "40", docComment: jsdocTestDocComment, parameterDocComment: "it is first parameter\nthis is inline comment for a ", tags: jsdocTestTags }); verify.quickInfos({ "40q": [ "function jsDocParamTest(a: number, b: number, c: number, d: number): number", - "this is jsdoc style function with param tag as well as inline parameter help" + jsdocTestDocComment ], "40aq": [ "(parameter) a: number", @@ -437,41 +442,42 @@ verify.quickInfos({ ] }); -goTo.marker('41'); -verify.currentSignatureHelpDocCommentIs("this is jsdoc style function with param tag as well as inline parameter help"); -verify.currentParameterHelpArgumentDocCommentIs("this is inline comment for b"); +verify.signatureHelp({ marker: "41", docComment: jsdocTestDocComment, parameterDocComment: "this is inline comment for b", tags: jsdocTestTags }); verify.quickInfoAt("41aq", "(parameter) b: number", "this is inline comment for b"); -goTo.marker('42'); -verify.currentSignatureHelpDocCommentIs("this is jsdoc style function with param tag as well as inline parameter help"); -verify.currentParameterHelpArgumentDocCommentIs("it is third parameter"); +verify.signatureHelp({ marker: "42", docComment: jsdocTestDocComment, parameterDocComment: "it is third parameter", tags: jsdocTestTags }); verify.quickInfoAt("42aq", "(parameter) c: number", "it is third parameter"); -goTo.marker('43'); -verify.currentSignatureHelpDocCommentIs("this is jsdoc style function with param tag as well as inline parameter help"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "43", docComment: jsdocTestDocComment, tags: jsdocTestTags }); verify.quickInfoAt("43aq", "(parameter) d: number"); goTo.marker('44'); -verify.completionListContains("jsDocParamTest", "function jsDocParamTest(a: number, b: number, c: number, d: number): number", "this is jsdoc style function with param tag as well as inline parameter help"); +verify.completionListContains("jsDocParamTest", "function jsDocParamTest(a: number, b: number, c: number, d: number): number", jsdocTestDocComment); verify.completionListContains("x", "var x: any", "This is a comment "); verify.completionListContains("y", "var y: any", "This is a comment"); -goTo.marker('45'); -verify.currentSignatureHelpDocCommentIs("This is function comment\nAnd properly aligned comment"); +verify.signatureHelp({ marker: "45", docComment: "This is function comment\nAnd properly aligned comment" }); verify.quickInfoAt("45q", "function jsDocCommentAlignmentTest1(): void", "This is function comment\nAnd properly aligned comment"); -goTo.marker('46'); -verify.currentSignatureHelpDocCommentIs("This is function comment\n And aligned with 4 space char margin"); -verify.quickInfoAt("46q", "function jsDocCommentAlignmentTest2(): void", "This is function comment\n And aligned with 4 space char margin"); - -goTo.marker('47'); -verify.currentSignatureHelpDocCommentIs("This is function comment\n And aligned with 4 space char margin"); -verify.currentParameterHelpArgumentDocCommentIs("this is info about a\nspanning on two lines and aligned perfectly"); +const alignmentDocComment = "This is function comment\n And aligned with 4 space char margin"; +verify.signatureHelp({ marker: "46", docComment: alignmentDocComment }); +verify.quickInfoAt("46q", "function jsDocCommentAlignmentTest2(): void", alignmentDocComment); + +const alignmentTags: ReadonlyArray = [ + { name: "param", text: "a this is info about a\nspanning on two lines and aligned perfectly" }, + { name: "param", text: "b this is info about b\nspanning on two lines and aligned perfectly\nspanning one more line alined perfectly\n spanning another line with more margin" }, + { name: "param", text: "c this is info about b\nnot aligned text about parameter will eat only one space" }, +]; +verify.signatureHelp({ + marker: "47", + docComment: alignmentDocComment, + parameterDocComment: "this is info about a\nspanning on two lines and aligned perfectly", + tags: alignmentTags, +}); verify.quickInfos({ "47q": [ "function jsDocCommentAlignmentTest3(a: string, b: any, c: any): void", - "This is function comment\n And aligned with 4 space char margin" + alignmentDocComment ], "47aq": [ "(parameter) a: string", @@ -479,14 +485,20 @@ verify.quickInfos({ ] }); -goTo.marker('48'); -verify.currentSignatureHelpDocCommentIs("This is function comment\n And aligned with 4 space char margin"); -verify.currentParameterHelpArgumentDocCommentIs("this is info about b\nspanning on two lines and aligned perfectly\nspanning one more line alined perfectly\n spanning another line with more margin"); +verify.signatureHelp({ + marker: "48", + docComment: alignmentDocComment, + parameterDocComment: "this is info about b\nspanning on two lines and aligned perfectly\nspanning one more line alined perfectly\n spanning another line with more margin", + tags: alignmentTags, +}); verify.quickInfoAt("48aq", "(parameter) b: any", "this is info about b\nspanning on two lines and aligned perfectly\nspanning one more line alined perfectly\n spanning another line with more margin"); -goTo.marker('49'); -verify.currentSignatureHelpDocCommentIs("This is function comment\n And aligned with 4 space char margin"); -verify.currentParameterHelpArgumentDocCommentIs("this is info about b\nnot aligned text about parameter will eat only one space"); +verify.signatureHelp({ + marker: "49", + docComment: alignmentDocComment, + parameterDocComment: "this is info about b\nnot aligned text about parameter will eat only one space", + tags: alignmentTags, +}); verify.quickInfos({ "49aq": [ "(parameter) c: any", diff --git a/tests/cases/fourslash/commentsExternalModules.ts b/tests/cases/fourslash/commentsExternalModules.ts index 582c6a3135773..f9c619e5a1724 100644 --- a/tests/cases/fourslash/commentsExternalModules.ts +++ b/tests/cases/fourslash/commentsExternalModules.ts @@ -38,8 +38,7 @@ goTo.marker('2'); verify.completionListContains("b", "var b: number", "b's comment"); verify.completionListContains("foo", "function foo(): number", "foo's comment"); -goTo.marker('3'); -verify.currentSignatureHelpDocCommentIs("foo's comment"); +verify.signatureHelp({ marker: "3", docComment: "foo's comment" }); verify.quickInfoAt("3q", "function foo(): number", "foo's comment"); goTo.marker('4'); @@ -50,8 +49,7 @@ verify.completionListContains("b", "var m1.b: number", "b's comment"); verify.completionListContains("fooExport", "function m1.fooExport(): number", "exported function"); verify.completionListContains("m2", "namespace m1.m2"); -goTo.marker('6'); -verify.currentSignatureHelpDocCommentIs("exported function"); +verify.signatureHelp({ marker: "6", docComment: "exported function" }); verify.quickInfoAt("6q", "function m1.fooExport(): number", "exported function"); verify.quickInfoAt("7", "var myvar: m1.m2.c"); @@ -74,8 +72,7 @@ verify.completionListContains("b", "var extMod.m1.b: number", "b's comment"); verify.completionListContains("fooExport", "function extMod.m1.fooExport(): number", "exported function"); verify.completionListContains("m2", "namespace extMod.m1.m2"); -goTo.marker('13'); -verify.currentSignatureHelpDocCommentIs("exported function"); +verify.signatureHelp({ marker: "13", docComment: "exported function" }); verify.quickInfoAt("13q", "function extMod.m1.fooExport(): number", "exported function"); verify.quickInfoAt("14", "var newVar: extMod.m1.m2.c"); diff --git a/tests/cases/fourslash/commentsFunctionDeclaration.ts b/tests/cases/fourslash/commentsFunctionDeclaration.ts index b97ff414ccefa..7ecb46fb042a6 100644 --- a/tests/cases/fourslash/commentsFunctionDeclaration.ts +++ b/tests/cases/fourslash/commentsFunctionDeclaration.ts @@ -27,8 +27,7 @@ verify.quickInfoAt("2", "function foo(): void", "This comment should appear for goTo.marker('3'); verify.completionListContains('foo', 'function foo(): void', 'This comment should appear for foo'); -goTo.marker('4'); -verify.currentSignatureHelpDocCommentIs("This comment should appear for foo"); +verify.signatureHelp({ marker: "4", docComment: "This comment should appear for foo" }); verify.quickInfoAt("5", "function fooWithParameters(a: string, b: number): void", "This is comment for function signature"); @@ -43,14 +42,13 @@ verify.quickInfoAt("8", "function fooWithParameters(a: string, b: number): void" goTo.marker('9'); verify.completionListContains('fooWithParameters', 'function fooWithParameters(a: string, b: number): void', 'This is comment for function signature'); -goTo.marker('10'); -verify.currentSignatureHelpDocCommentIs("This is comment for function signature"); -verify.currentParameterHelpArgumentDocCommentIs("this is comment about a"); - -goTo.marker('11'); -verify.currentSignatureHelpDocCommentIs("This is comment for function signature"); -verify.currentParameterHelpArgumentDocCommentIs("this is comment for b"); - -goTo.marker('12'); -verify.currentSignatureHelpDocCommentIs("Does something"); -verify.currentParameterHelpArgumentDocCommentIs("a string"); +verify.signatureHelp( + { marker: "10", docComment: "This is comment for function signature", parameterDocComment: "this is comment about a" }, + { marker: "11", docComment: "This is comment for function signature", parameterDocComment: "this is comment for b" }, + { + marker: "12", + docComment: "Does something", + parameterDocComment: "a string", + tags: [{ name: "param", text: "a a string" }], + }, +); diff --git a/tests/cases/fourslash/commentsFunctionExpression.ts b/tests/cases/fourslash/commentsFunctionExpression.ts index 65a061d1f9101..bd9a5c934339f 100644 --- a/tests/cases/fourslash/commentsFunctionExpression.ts +++ b/tests/cases/fourslash/commentsFunctionExpression.ts @@ -1,7 +1,7 @@ /// // test arrow doc comments -/////** lamdaFoo var comment*/ +/////** lambdaFoo var comment*/ ////var lamb/*1*/daFoo = /** this is lambda comment*/ (/**param a*/a: number, /**param b*/b: number) => /*2*/a + b; ////var lambddaN/*3*/oVarComment = /** this is lambda multiplication*/ (/**param a*/a: number, /**param b*/b: number) => a * b; /////*4*/lambdaFoo(/*5*/10, /*6*/20); @@ -32,9 +32,7 @@ ////} ////assig/*16*/ned/*17*/(/*18*/"hey"); - - -verify.quickInfoAt("1", "var lambdaFoo: (a: number, b: number) => number", "lamdaFoo var comment\nthis is lambda comment"); +verify.quickInfoAt("1", "var lambdaFoo: (a: number, b: number) => number", "lambdaFoo var comment\nthis is lambda comment"); goTo.marker('2'); verify.completionListContains('a', '(parameter) a: number', 'param a'); @@ -44,17 +42,21 @@ verify.completionListContains('b', '(parameter) b: number', 'param b'); verify.quickInfoAt("3", "var lambddaNoVarComment: (a: number, b: number) => number", "this is lambda multiplication"); goTo.marker('4'); -verify.completionListContains('lambdaFoo', 'var lambdaFoo: (a: number, b: number) => number', 'lamdaFoo var comment\nthis is lambda comment'); +verify.completionListContains('lambdaFoo', 'var lambdaFoo: (a: number, b: number) => number', 'lambdaFoo var comment\nthis is lambda comment'); verify.completionListContains('lambddaNoVarComment', 'var lambddaNoVarComment: (a: number, b: number) => number', 'this is lambda multiplication'); -goTo.marker('5'); -verify.currentParameterHelpArgumentDocCommentIs("param a"); - -goTo.marker('6'); -verify.currentParameterHelpArgumentDocCommentIs("param b"); - - - +verify.signatureHelp( + { + marker: "5", + docComment: "lambdaFoo var comment\nthis is lambda comment", + parameterDocComment: "param a", + }, + { + marker: "6", + docComment: "lambdaFoo var comment\nthis is lambda comment", + parameterDocComment: "param b", + }, +); // no documentation from nested lambda verify.quickInfos({ @@ -76,7 +78,14 @@ verify.completionListContains('s', '(parameter) s: string', "the first parameter verify.quickInfoAt("16", "var assigned: (s: string) => number", "On variable\nSummary on expression"); goTo.marker('17'); verify.completionListContains("assigned", "var assigned: (s: string) => number", "On variable\nSummary on expression"); -goTo.marker('18'); -verify.currentSignatureHelpDocCommentIs("On variable\nSummary on expression"); -verify.currentParameterHelpArgumentDocCommentIs("the first parameter!\nparam on expression\nOn parameter "); - +verify.signatureHelp({ + marker: "18", + docComment: "On variable\nSummary on expression", + parameterDocComment: "the first parameter!\nparam on expression\nOn parameter ", + tags: [ + { name: "param", text: "s the first parameter!" }, + { name: "returns", text: "the parameter's length" }, + { name: "param", text: "s param on expression" }, + { name: "returns", text: "return on expression" }, + ], +}); diff --git a/tests/cases/fourslash/commentsImportDeclaration.ts b/tests/cases/fourslash/commentsImportDeclaration.ts index 7f8a328d6d1d0..bc343afeabf8d 100644 --- a/tests/cases/fourslash/commentsImportDeclaration.ts +++ b/tests/cases/fourslash/commentsImportDeclaration.ts @@ -40,8 +40,7 @@ verify.completions({ ] }) -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("exported function"); +verify.signatureHelp({ marker: "8", docComment: "exported function" }); verify.quickInfos({ "8q": ["function extMod.m1.fooExport(): number", "exported function"], 9: "var newVar: extMod.m1.m2.c" diff --git a/tests/cases/fourslash/commentsInheritance.ts b/tests/cases/fourslash/commentsInheritance.ts index a965bf213c867..3443ec23177b6 100644 --- a/tests/cases/fourslash/commentsInheritance.ts +++ b/tests/cases/fourslash/commentsInheritance.ts @@ -233,22 +233,10 @@ verify.completionListContains("l1", "(property) i1.l1: () => void", ""); verify.completionListContains("nc_p1", "(property) i1.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) i1.nc_f1(): void", ""); verify.completionListContains("nc_l1", "(property) i1.nc_l1: () => void", ""); -goTo.marker('2'); -verify.currentSignatureHelpDocCommentIs("i1_f1"); -goTo.marker('3'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('4'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('5'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l2'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l3'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l4'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l5'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "2", docComment: "i1_f1" }, + { marker: ["3", "4", "5", "l2", "l3", "l4", "l5"], docComment: "" }, +); verify.quickInfos({ "1iq": "var i1_i: i1", @@ -275,22 +263,14 @@ verify.completionListContains("l1", "(property) c1.l1: () => void", "c1_l1"); verify.completionListContains("nc_p1", "(property) c1.nc_p1: number", "c1_nc_p1"); verify.completionListContains("nc_f1", "(method) c1.nc_f1(): void", "c1_nc_f1"); verify.completionListContains("nc_l1", "(property) c1.nc_l1: () => void", "c1_nc_l1"); -goTo.marker('7'); -verify.currentSignatureHelpDocCommentIs("i1_f1"); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('9'); -verify.currentSignatureHelpDocCommentIs("c1_f1"); -goTo.marker('10'); -verify.currentSignatureHelpDocCommentIs("c1_nc_f1"); -goTo.marker('l7'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l8'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l9'); -verify.currentSignatureHelpDocCommentIs("c1_l1"); -goTo.marker('l10'); -verify.currentSignatureHelpDocCommentIs("c1_nc_l1"); +verify.signatureHelp( + { marker: "7", docComment: "i1_f1" }, + { marker: "9", docComment: "c1_f1" }, + { marker: "10", docComment: "c1_nc_f1" }, + { marker: "l9", docComment: "c1_l1" }, + { marker: "l10", docComment: "c1_nc_l1" }, + { marker: ["8", "l7", "l8"], docComment: "" }, +); verify.quickInfos({ "6iq": "var c1_i: c1", @@ -317,22 +297,10 @@ verify.completionListContains("l1", "(property) i1.l1: () => void", ""); verify.completionListContains("nc_p1", "(property) i1.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) i1.nc_f1(): void", ""); verify.completionListContains("nc_l1", "(property) i1.nc_l1: () => void", ""); -goTo.marker('12'); -verify.currentSignatureHelpDocCommentIs("i1_f1"); -goTo.marker('13'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('14'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('15'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l12'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l13'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l14'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l15'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "12", docComment: "i1_f1" }, + { marker: ["13", "14", "15", "l12", "l13", "l14", "l15"], docComment: "" }, +); verify.quickInfos({ "12q": ["(method) i1.i1_f1(): void", "i1_f1"], @@ -359,11 +327,10 @@ verify.quickInfos({ "18iq": "var c3_i: c3" }); -goTo.marker('17'); -verify.currentSignatureHelpDocCommentIs("c2 constructor"); - -goTo.marker('18'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "17", docComment: "c2 constructor" }, + { marker: "18", docComment: "" }, +); verify.quickInfos({ "18sq": ["constructor c2(a: number): c2", "c2 constructor"], @@ -388,14 +355,11 @@ verify.completionListContains("prop", "(property) c2.prop: number", "c2 prop"); verify.completionListContains("nc_p1", "(property) c2.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) c2.nc_f1(): void", ""); verify.completionListContains("nc_prop", "(property) c2.nc_prop: number", ""); -goTo.marker('20'); -verify.currentSignatureHelpDocCommentIs("c2 c2_f1"); -goTo.marker('21'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('22'); -verify.currentSignatureHelpDocCommentIs("c2 f1"); -goTo.marker('23'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "20", docComment: "c2 c2_f1" }, + { marker: "22", docComment: "c2 f1" }, + { marker: ["21", "23"], docComment: "" }, +); verify.quickInfos({ "20q": ["(method) c2.c2_f1(): void", "c2 c2_f1"], @@ -417,14 +381,11 @@ verify.completionListContains("prop", "(property) c3.prop: number", "c3 prop"); verify.completionListContains("nc_p1", "(property) c3.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) c3.nc_f1(): void", ""); verify.completionListContains("nc_prop", "(property) c3.nc_prop: number", ""); -goTo.marker('25'); -verify.currentSignatureHelpDocCommentIs("c2 c2_f1"); -goTo.marker('26'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('27'); -verify.currentSignatureHelpDocCommentIs("c3 f1"); -goTo.marker('28'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "25", docComment: "c2 c2_f1" }, + { marker: "27", docComment: "c3 f1" }, + { marker: ["26", "28"], docComment: "" }, +); verify.quickInfos({ "25q": ["(method) c2.c2_f1(): void", "c2 c2_f1"], @@ -446,14 +407,11 @@ verify.completionListContains("prop", "(property) c2.prop: number", "c2 prop"); verify.completionListContains("nc_p1", "(property) c2.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) c2.nc_f1(): void", ""); verify.completionListContains("nc_prop", "(property) c2.nc_prop: number", ""); -goTo.marker('30'); -verify.currentSignatureHelpDocCommentIs("c2 c2_f1"); -goTo.marker('31'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('32'); -verify.currentSignatureHelpDocCommentIs("c2 f1"); -goTo.marker('33'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "30", docComment: "c2 c2_f1" }, + { marker: "32", docComment: "c2 f1" }, + { marker: ["31", "33"], docComment: "" }, +); verify.quickInfos({ "30q": ["(method) c2.c2_f1(): void", "c2 c2_f1"], @@ -462,8 +420,7 @@ verify.quickInfos({ "33q": "(method) c2.nc_f1(): void" }); -goTo.marker('34'); -verify.currentSignatureHelpDocCommentIs("c2 constructor"); +verify.signatureHelp({ marker: "34", docComment: "c2 constructor" }); verify.quickInfos({ "34iq": "var c4_i: c4", "34q": ["constructor c4(a: number): c4", "c2 constructor"] @@ -490,22 +447,11 @@ verify.completionListContains("l1", "(property) i2.l1: () => void", ""); verify.completionListContains("nc_p1", "(property) i2.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) i2.nc_f1(): void", ""); verify.completionListContains("nc_l1", "(property) i2.nc_l1: () => void", ""); -goTo.marker('37'); -verify.currentSignatureHelpDocCommentIs("i2_f1"); -goTo.marker('38'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('39'); -verify.currentSignatureHelpDocCommentIs("i2 f1"); -goTo.marker('40'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l37'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l38'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l39'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l40'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "37", docComment: "i2_f1" }, + { marker: "39", docComment: "i2 f1" }, + { marker: ["38", "40", "l37", "l37", "l39", "l40"], docComment: "" }, +); verify.quickInfos({ "36iq": "var i2_i: i2", @@ -533,22 +479,11 @@ verify.completionListContains("l1", "(property) i3.l1: () => void", ""); verify.completionListContains("nc_p1", "(property) i3.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) i3.nc_f1(): void", ""); verify.completionListContains("nc_l1", "(property) i3.nc_l1: () => void", ""); -goTo.marker('42'); -verify.currentSignatureHelpDocCommentIs("i2_f1"); -goTo.marker('43'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('44'); -verify.currentSignatureHelpDocCommentIs("i3 f1"); -goTo.marker('45'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l42'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l43'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l44'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l45'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "42", docComment: "i2_f1" }, + { marker: "44", docComment: "i3 f1" }, + { marker: ["43", "45", "l42", "l43", "l44", "l45"], docComment: "" }, +); verify.quickInfos({ "42q": ["(method) i2.i2_f1(): void", "i2_f1"], @@ -574,22 +509,11 @@ verify.completionListContains("l1", "(property) i2.l1: () => void", ""); verify.completionListContains("nc_p1", "(property) i2.nc_p1: number", ""); verify.completionListContains("nc_f1", "(method) i2.nc_f1(): void", ""); verify.completionListContains("nc_l1", "(property) i2.nc_l1: () => void", ""); -goTo.marker('47'); -verify.currentSignatureHelpDocCommentIs("i2_f1"); -goTo.marker('48'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('49'); -verify.currentSignatureHelpDocCommentIs("i2 f1"); -goTo.marker('50'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l47'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l48'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l49'); -verify.currentSignatureHelpDocCommentIs(""); -goTo.marker('l50'); -verify.currentSignatureHelpDocCommentIs(""); +verify.signatureHelp( + { marker: "47", docComment: "i2_f1" }, + { marker: "49", docComment: "i2 f1" }, + { marker: ["48", "l47", "l48", "l49", "l50"], docComment: "" }, +); verify.quickInfos({ "47q": ["(method) i2.i2_f1(): void", "i2_f1"], diff --git a/tests/cases/fourslash/commentsInterface.ts b/tests/cases/fourslash/commentsInterface.ts index e222332627482..85c12118c3496 100644 --- a/tests/cases/fourslash/commentsInterface.ts +++ b/tests/cases/fourslash/commentsInterface.ts @@ -93,9 +93,7 @@ verify.quickInfos({ 11: "var i2_i_foo_r: string" }); -goTo.marker('12'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs("param help"); +verify.signatureHelp({ marker: "12", docComment: "", parameterDocComment: "param help" }); verify.quickInfos({ "12q": "(property) i2.foo: (b: number) => string", @@ -109,9 +107,7 @@ verify.quickInfos({ 15: "var i2_i_n: any" }); -goTo.marker('16'); -verify.currentSignatureHelpDocCommentIs("new method"); -verify.currentParameterHelpArgumentDocCommentIs("param"); +verify.signatureHelp({ marker: "16", docComment: "new method", parameterDocComment: "param" }); verify.quickInfos({ "16q": ["var i2_i: i2\nnew (i: i1) => any", "new method"], @@ -122,22 +118,16 @@ verify.quickInfos({ 21: "var i2_i_nc_foo_r: string" }); -goTo.marker('22'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "22", docComment: "" }); verify.quickInfos({ "22q": "(property) i2.nc_foo: (b: number) => string", 23: "var i2_i_r: number" }); -goTo.marker('24'); -verify.currentSignatureHelpDocCommentIs("this is call signature"); -verify.currentParameterHelpArgumentDocCommentIs("paramhelp a"); +verify.signatureHelp({ marker: "24", docComment: "this is call signature", parameterDocComment: "paramhelp a" }); verify.quickInfoAt("24q", "var i2_i: i2\n(a: number, b: number) => number", "this is call signature"); -goTo.marker('25'); -verify.currentSignatureHelpDocCommentIs("this is call signature"); -verify.currentParameterHelpArgumentDocCommentIs("paramhelp b"); +verify.signatureHelp({ marker: "25", docComment: "this is call signature", parameterDocComment: "paramhelp b" }); verify.quickInfos({ 26: "var i2_i_fnfoo: (b: number) => string", @@ -145,9 +135,7 @@ verify.quickInfos({ 28: "var i2_i_fnfoo_r: string" }); -goTo.marker('29'); -verify.currentSignatureHelpDocCommentIs("this is fnfoo"); -verify.currentParameterHelpArgumentDocCommentIs("param help"); +verify.signatureHelp({ marker: "29", docComment: "this is fnfoo", parameterDocComment: "param help" }); verify.quickInfos({ "29q": ["(method) i2.fnfoo(b: number): string", "this is fnfoo"], @@ -157,9 +145,7 @@ verify.quickInfos({ 32: "var i2_i_nc_fnfoo_r: string" }); -goTo.marker('33'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "33", docComment: "" }); verify.quickInfoAt("33q", "(method) i2.nc_fnfoo(b: number): string"); goTo.marker('34'); @@ -206,21 +192,13 @@ verify.completionListContains("nc_f", "(method) i3.nc_f(a: number): string", "") verify.completionListContains("nc_l", "(property) i3.nc_l: (b: number) => string", ""); verify.completionListContains("nc_x", "(property) i3.nc_x: number", ""); -goTo.marker('42'); -verify.currentSignatureHelpDocCommentIs("Function i3 f"); -verify.currentParameterHelpArgumentDocCommentIs("number parameter"); +verify.signatureHelp({ marker: "42", docComment: "Function i3 f", parameterDocComment: "number parameter" }); -goTo.marker('43'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs("comment i3 l b"); +verify.signatureHelp({ marker: "43", docComment: "", parameterDocComment: "comment i3 l b" }); verify.quickInfoAt("43q", "(property) i3.l: (b: number) => string"); -goTo.marker('44'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "44", docComment: "" }); verify.quickInfoAt("44q", "(method) i3.nc_f(a: number): string"); -goTo.marker('45'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "45", docComment: "" }); verify.quickInfoAt("45q", "(property) i3.nc_l: (b: number) => string"); diff --git a/tests/cases/fourslash/commentsModules.ts b/tests/cases/fourslash/commentsModules.ts index 0205b144f16de..d36e530d9bd08 100644 --- a/tests/cases/fourslash/commentsModules.ts +++ b/tests/cases/fourslash/commentsModules.ts @@ -102,8 +102,7 @@ goTo.marker('2'); verify.completionListContains("b", "var b: number", "b's comment"); verify.completionListContains("foo", "function foo(): number", "foo's comment"); -goTo.marker('3'); -verify.currentSignatureHelpDocCommentIs("foo's comment"); +verify.signatureHelp({ marker: "3", docComment: "foo's comment" }); verify.quickInfoAt("3q", "function foo(): number", "foo's comment"); goTo.marker('4'); @@ -115,8 +114,7 @@ verify.completionListContains("fooExport", "function m1.fooExport(): number", "e verify.completionListContains("m2", "namespace m1.m2"); verify.quickInfoIs("function m1.fooExport(): number", "exported function"); -goTo.marker('6'); -verify.currentSignatureHelpDocCommentIs("exported function"); +verify.signatureHelp({ marker: "6", docComment: "exported function" }); verify.quickInfoAt("7", "var myvar: m1.m2.c"); diff --git a/tests/cases/fourslash/commentsOverloads.ts b/tests/cases/fourslash/commentsOverloads.ts index 1068e1e6fe129..a6c7170d2e98e 100644 --- a/tests/cases/fourslash/commentsOverloads.ts +++ b/tests/cases/fourslash/commentsOverloads.ts @@ -233,12 +233,8 @@ verify.quickInfos({ o4q: ["function f1(a: number): number (+1 overload)", "this is signature 1"] }); -goTo.marker('4'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); -goTo.marker('o4'); -verify.currentSignatureHelpDocCommentIs("this is signature 1"); -verify.currentParameterHelpArgumentDocCommentIs("param a"); +verify.signatureHelp({ marker: "4", overloadsCount: 2 }); +verify.signatureHelp({ marker: "o4", overloadsCount: 2, docComment: "this is signature 1", parameterDocComment: "param a" }); verify.quickInfos({ 5: "function f2(a: number): number (+1 overload)", @@ -248,13 +244,10 @@ verify.quickInfos({ o8q: "function f2(a: number): number (+1 overload)" }); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("this is signature 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); - -goTo.marker('o8'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs("param a"); +verify.signatureHelp( + { marker: "8", overloadsCount: 2, docComment: "this is signature 2" }, + { marker: "o8", overloadsCount: 2, parameterDocComment: "param a" }, +); verify.quickInfos({ 9: "function f3(a: number): number (+1 overload)", @@ -264,13 +257,7 @@ verify.quickInfos({ o12q: "function f3(a: number): number (+1 overload)" }); -goTo.marker('12'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); - -goTo.marker('o12'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: ["12", "o12"], overloadsCount: 2 }); verify.quickInfos({ 13: ["function f4(a: number): number (+1 overload)", "this is signature 4 - with number parameter"], @@ -280,13 +267,10 @@ verify.quickInfos({ o16q: ["function f4(a: number): number (+1 overload)", "this is signature 4 - with number parameter"] }); -goTo.marker('16'); -verify.currentSignatureHelpDocCommentIs("this is signature 4 - with string parameter"); -verify.currentParameterHelpArgumentDocCommentIs(""); - -goTo.marker('o16'); -verify.currentSignatureHelpDocCommentIs("this is signature 4 - with number parameter"); -verify.currentParameterHelpArgumentDocCommentIs("param a"); +verify.signatureHelp( + { marker: "16", overloadsCount: 2, docComment: "this is signature 4 - with string parameter" }, + { marker: "o16", overloadsCount: 2, docComment: "this is signature 4 - with number parameter", parameterDocComment: "param a" }, +); goTo.marker('17'); verify.completionListContains('f1', 'function f1(a: number): number (+1 overload)', 'this is signature 1'); @@ -304,24 +288,16 @@ verify.completionListContains('i3_i', 'var i3_i: i3\nnew (a: string) => any (+1 verify.not.completionListContains('i4', 'interface i4', ''); verify.completionListContains('i4_i', 'var i4_i: i4\nnew (a: string) => any (+1 overload)', ''); -goTo.marker('19'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "19", overloadsCount: 2 }); verify.quickInfoAt("19q", "var i1_i: i1\nnew (b: number) => any (+1 overload)"); -goTo.marker('20'); -verify.currentSignatureHelpDocCommentIs("new 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "20", overloadsCount: 2, docComment: "new 1" }); verify.quickInfoAt("20q", "var i1_i: i1\nnew (a: string) => any (+1 overload)", "new 1"); -goTo.marker('21'); -verify.currentSignatureHelpDocCommentIs("this signature 1"); -verify.currentParameterHelpArgumentDocCommentIs("param a"); +verify.signatureHelp({ marker: "21", overloadsCount: 2, docComment: "this signature 1", parameterDocComment: "param a" }); verify.quickInfoAt("21q", "var i1_i: i1\n(a: number) => number (+1 overload)", "this signature 1"); -goTo.marker('22'); -verify.currentSignatureHelpDocCommentIs("this is signature 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "22", overloadsCount: 2, docComment: "this is signature 2" }); goTo.marker('22q'); verify.quickInfoAt("22q", "var i1_i: i1\n(b: string) => number (+1 overload)", "this is signature 2"); @@ -331,104 +307,64 @@ verify.completionListContains('foo2', '(method) i1.foo2(a: number): number (+1 o verify.completionListContains('foo3', '(method) i1.foo3(a: number): number (+1 overload)', ''); verify.completionListContains('foo4', '(method) i1.foo4(a: number): number (+1 overload)', 'foo4 1'); -goTo.marker('24'); -verify.currentSignatureHelpDocCommentIs("foo 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "24", overloadsCount: 2, docComment: "foo 1" }); verify.quickInfoAt("24q", "(method) i1.foo(a: number): number (+1 overload)", "foo 1"); -goTo.marker('25'); -verify.currentSignatureHelpDocCommentIs("foo 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "25", overloadsCount: 2, docComment: "foo 2" }); verify.quickInfoAt("25q", "(method) i1.foo(b: string): number (+1 overload)", "foo 2"); -goTo.marker('26'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "26", overloadsCount: 2 }); verify.quickInfoAt("26q", "(method) i1.foo2(a: number): number (+1 overload)"); -goTo.marker('27'); -verify.currentSignatureHelpDocCommentIs("foo2 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "27", overloadsCount: 2, docComment: "foo2 2" }); verify.quickInfoAt("27q", "(method) i1.foo2(b: string): number (+1 overload)", "foo2 2"); -goTo.marker('28'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "28", overloadsCount: 2 }); verify.quickInfoAt("28q", "(method) i1.foo3(a: number): number (+1 overload)"); -goTo.marker('29'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "29", overloadsCount: 2 }); verify.quickInfoAt("29q", "(method) i1.foo3(b: string): number (+1 overload)"); -goTo.marker('30'); -verify.currentSignatureHelpDocCommentIs("foo4 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "30", overloadsCount: 2, docComment: "foo4 1" }); verify.quickInfoAt("30q", "(method) i1.foo4(a: number): number (+1 overload)", "foo4 1"); -goTo.marker('31'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "31", overloadsCount: 2 }); verify.quickInfoAt("31q", "(method) i1.foo4(b: string): number (+1 overload)"); -goTo.marker('32'); -verify.currentSignatureHelpDocCommentIs("new 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "32", overloadsCount: 2, docComment: "new 2" }); verify.quickInfoAt("32q", "var i2_i: i2\nnew (b: number) => any (+1 overload)", "new 2"); -goTo.marker('33'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "33", overloadsCount: 2 }); verify.quickInfoAt("33q", "var i2_i: i2\nnew (a: string) => any (+1 overload)"); -goTo.marker('34'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "34", overloadsCount: 2 }); verify.quickInfoAt("34q", "var i2_i: i2\n(a: number) => number (+1 overload)"); -goTo.marker('35'); -verify.currentSignatureHelpDocCommentIs("this is signature 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "35", overloadsCount: 2, docComment: "this is signature 2" }); verify.quickInfoAt("35q", "var i2_i: i2\n(b: string) => number (+1 overload)", "this is signature 2"); -goTo.marker('36'); -verify.currentSignatureHelpDocCommentIs("new 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "36", overloadsCount: 2, docComment: "new 2" }); verify.quickInfoAt("36q", "var i3_i: i3\nnew (b: number) => any (+1 overload)", "new 2"); -goTo.marker('37'); -verify.currentSignatureHelpDocCommentIs("new 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "37", overloadsCount: 2, docComment: "new 1" }); verify.quickInfoAt("37q", "var i3_i: i3\nnew (a: string) => any (+1 overload)", "new 1"); -goTo.marker('38'); -verify.currentSignatureHelpDocCommentIs("this is signature 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "38", overloadsCount: 2, docComment: "this is signature 1" }); verify.quickInfoAt("38q", "var i3_i: i3\n(a: number) => number (+1 overload)", "this is signature 1"); -goTo.marker('39'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "39", overloadsCount: 2 }); verify.quickInfoAt("39q", "var i3_i: i3\n(b: string) => number (+1 overload)"); -goTo.marker('40'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "40", overloadsCount: 2 }); verify.quickInfoAt("40q", "var i4_i: i4\nnew (b: number) => any (+1 overload)"); -goTo.marker('41'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "41", overloadsCount: 2 }); verify.quickInfoAt("41q", "var i4_i: i4\nnew (a: string) => any (+1 overload)"); -goTo.marker('42'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "42", overloadsCount: 2 }); verify.quickInfoAt("42q", "var i4_i: i4\n(a: number) => number (+1 overload)"); -goTo.marker('43'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "43", overloadsCount: 2 }); verify.quickInfoAt("43q", "var i4_i: i4\n(b: string) => number (+1 overload)"); goTo.marker('44'); @@ -438,104 +374,64 @@ verify.completionListContains('prop3', '(method) c.prop3(a: number): number (+1 verify.completionListContains('prop4', '(method) c.prop4(a: number): number (+1 overload)', 'prop4 1'); verify.completionListContains('prop5', '(method) c.prop5(a: number): number (+1 overload)', 'prop5 1'); -goTo.marker('45'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "45", overloadsCount: 2 }); verify.quickInfoAt("45q", "(method) c.prop1(a: number): number (+1 overload)"); -goTo.marker('46'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "46", overloadsCount: 2 }); verify.quickInfoAt("46q", "(method) c.prop1(b: string): number (+1 overload)"); -goTo.marker('47'); -verify.currentSignatureHelpDocCommentIs("prop2 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "47", overloadsCount: 2, docComment: "prop2 1" }); verify.quickInfoAt("47q", "(method) c.prop2(a: number): number (+1 overload)", "prop2 1"); -goTo.marker('48'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "48", overloadsCount: 2 }); verify.quickInfoAt("48q", "(method) c.prop2(b: string): number (+1 overload)"); -goTo.marker('49'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "49", overloadsCount: 2 }); verify.quickInfoAt("49q", "(method) c.prop3(a: number): number (+1 overload)"); -goTo.marker('50'); -verify.currentSignatureHelpDocCommentIs("prop3 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "50", overloadsCount: 2, docComment: "prop3 2" }); verify.quickInfoAt("50q", "(method) c.prop3(b: string): number (+1 overload)", "prop3 2"); -goTo.marker('51'); -verify.currentSignatureHelpDocCommentIs("prop4 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "51", overloadsCount: 2, docComment: "prop4 1" }); verify.quickInfoAt("51q", "(method) c.prop4(a: number): number (+1 overload)", "prop4 1"); -goTo.marker('52'); -verify.currentSignatureHelpDocCommentIs("prop4 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "52", overloadsCount: 2, docComment: "prop4 2" }); verify.quickInfoAt("52q", "(method) c.prop4(b: string): number (+1 overload)", "prop4 2"); -goTo.marker('53'); -verify.currentSignatureHelpDocCommentIs("prop5 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "53", overloadsCount: 2, docComment: "prop5 1" }); verify.quickInfoAt("53q", "(method) c.prop5(a: number): number (+1 overload)", "prop5 1"); -goTo.marker('54'); -verify.currentSignatureHelpDocCommentIs("prop5 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "54", overloadsCount: 2, docComment: "prop5 2" }); verify.quickInfoAt("54q", "(method) c.prop5(b: string): number (+1 overload)", "prop5 2"); -goTo.marker('55'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "55", overloadsCount: 2 }); verify.quickInfoAt("55q", "constructor c1(a: number): c1 (+1 overload)"); -goTo.marker('56'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "56", overloadsCount: 2 }); verify.quickInfoAt("56q", "constructor c1(b: string): c1 (+1 overload)"); -goTo.marker('57'); -verify.currentSignatureHelpDocCommentIs("c2 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "57", overloadsCount: 2, docComment: "c2 1" }); verify.quickInfoAt("57q", "constructor c2(a: number): c2 (+1 overload)", "c2 1"); -goTo.marker('58'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "58", overloadsCount: 2 }); verify.quickInfoAt("58q", "constructor c2(b: string): c2 (+1 overload)"); -goTo.marker('59'); -verify.currentSignatureHelpDocCommentIs(""); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "59", overloadsCount: 2 }); verify.quickInfoAt("59q", "constructor c3(a: number): c3 (+1 overload)"); -goTo.marker('60'); -verify.currentSignatureHelpDocCommentIs("c3 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "60", overloadsCount: 2, docComment: "c3 2" }); verify.quickInfoAt("60q", "constructor c3(b: string): c3 (+1 overload)", "c3 2"); -goTo.marker('61'); -verify.currentSignatureHelpDocCommentIs("c4 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "61", overloadsCount: 2, docComment: "c4 1" }); verify.quickInfoAt("61q", "constructor c4(a: number): c4 (+1 overload)", "c4 1"); -goTo.marker('62'); -verify.currentSignatureHelpDocCommentIs("c4 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "62", overloadsCount: 2, docComment: "c4 2" }); verify.quickInfoAt("62q", "constructor c4(b: string): c4 (+1 overload)", "c4 2"); -goTo.marker('63'); -verify.currentSignatureHelpDocCommentIs("c5 1"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "63", overloadsCount: 2, docComment: "c5 1" }); verify.quickInfoAt("63q", "constructor c5(a: number): c5 (+1 overload)", "c5 1"); -goTo.marker('64'); -verify.currentSignatureHelpDocCommentIs("c5 2"); -verify.currentParameterHelpArgumentDocCommentIs(""); +verify.signatureHelp({ marker: "64", overloadsCount: 2, docComment: "c5 2" }); verify.quickInfoAt("64q", "constructor c5(b: string): c5 (+1 overload)", "c5 2"); goTo.marker('65'); diff --git a/tests/cases/fourslash/commentsVariables.ts b/tests/cases/fourslash/commentsVariables.ts index c8266e5e77647..ae3b036b4c6f9 100644 --- a/tests/cases/fourslash/commentsVariables.ts +++ b/tests/cases/fourslash/commentsVariables.ts @@ -64,12 +64,10 @@ verify.completions( }, ) -goTo.marker('5'); -verify.currentSignatureHelpDocCommentIs("foos comment"); +verify.signatureHelp({ marker: "5", docComment: "foos comment" }); verify.quickInfoAt("5q", "function foo(): void", "foos comment"); -goTo.marker('6'); -verify.currentSignatureHelpDocCommentIs("fooVar comment"); +verify.signatureHelp({ marker: "6", docComment: "fooVar comment" }); verify.quickInfoAt("6q", "var fooVar: () => void", "fooVar comment"); verify.completions({ @@ -80,12 +78,10 @@ verify.completions({ ], }); -goTo.marker('8'); -verify.currentSignatureHelpDocCommentIs("foos comment"); +verify.signatureHelp({ marker: "8", docComment: "foos comment" }); verify.quickInfoAt("8q", "function foo(): void", "foos comment"); -goTo.marker('9'); -verify.currentSignatureHelpDocCommentIs("fooVar comment"); +verify.signatureHelp({ marker: "9", docComment: "fooVar comment" }); verify.quickInfos({ "9q": ["var fooVar: () => void", "fooVar comment"], "9aq": ["var fooVar: () => void", "fooVar comment"] diff --git a/tests/cases/fourslash/externalModuleWithExportAssignment.ts b/tests/cases/fourslash/externalModuleWithExportAssignment.ts index e35a89f1d7ead..02f53b661d595 100644 --- a/tests/cases/fourslash/externalModuleWithExportAssignment.ts +++ b/tests/cases/fourslash/externalModuleWithExportAssignment.ts @@ -53,16 +53,14 @@ verify.completionListContains("test2", "(method) test2(): a1.connectModule", und verify.not.completionListContains("connectModule"); verify.not.completionListContains("connectExport"); -goTo.marker('4'); -verify.currentSignatureHelpIs("test1(res: any, req: any, next: any): void"); - -goTo.marker('5'); -verify.currentSignatureHelpIs("test2(): a1.connectModule"); +verify.signatureHelp( + { marker: "4", text: "test1(res: any, req: any, next: any): void" }, + { marker: "5", text: "test2(): a1.connectModule" }, +); verify.quickInfoAt("6", "var r1: a1.connectModule", undefined); -goTo.marker('7'); -verify.currentSignatureHelpIs("a(): a1.connectExport"); +verify.signatureHelp({ marker: "7", text: "a(): a1.connectExport" }); verify.quickInfoAt("8", "var r2: a1.connectExport", undefined); @@ -73,16 +71,14 @@ verify.completionListContains("test2", "(method) test2(): a1.connectModule", und verify.not.completionListContains("connectModule"); verify.not.completionListContains("connectExport"); -goTo.marker('10'); -verify.currentSignatureHelpIs("test1(res: any, req: any, next: any): void"); - -goTo.marker('11'); -verify.currentSignatureHelpIs("test2(): a1.connectModule"); +verify.signatureHelp( + { marker: "10", text: "test1(res: any, req: any, next: any): void" }, + { marker: "11", text: "test2(): a1.connectModule" }, +); verify.quickInfoAt("12", "var r3: a1.connectModule", undefined); -goTo.marker('13'); -verify.currentSignatureHelpIs("a1(): a1.connectExport"); +verify.signatureHelp({ marker: "13", text: "a1(): a1.connectExport" }); verify.quickInfoAt("14", "var r4: a1.connectExport", undefined); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 4c5134e02440c..704163ae5765c 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -169,7 +169,6 @@ declare namespace FourSlashInterface { completionListContainsClassElementKeywords(): void; completionListContainsConstructorParameterKeywords(): void; completionListAllowsNewIdentifier(): void; - signatureHelpPresent(): void; errorExistsBetweenMarkers(startMarker: string, endMarker: string): void; errorExistsAfterMarker(markerName?: string): void; errorExistsBeforeMarker(markerName?: string): void; @@ -263,17 +262,8 @@ declare namespace FourSlashInterface { rangesWithSameTextAreRenameLocations(): void; rangesAreRenameLocations(options?: Range[] | { findInStrings?: boolean, findInComments?: boolean, ranges?: Range[] }); findReferencesDefinitionDisplayPartsAtCaretAre(expected: ts.SymbolDisplayPart[]): void; - currentParameterHelpArgumentNameIs(name: string): void; - currentParameterSpanIs(parameter: string): void; - currentParameterHelpArgumentDocCommentIs(docComment: string): void; - currentSignatureHelpDocCommentIs(docComment: string): void; - currentSignatureHelpTagsAre(tags: ts.JSDocTagInfo[]): void; - signatureHelpCountIs(expected: number): void; - signatureHelpArgumentCountIs(expected: number): void; - signatureHelpCurrentArgumentListIsVariadic(expected: boolean); - currentSignatureParameterCountIs(expected: number): void; - currentSignatureTypeParameterCountIs(expected: number): void; - currentSignatureHelpIs(expected: string): void; + noSignatureHelp(...markers: string[]): void; + signatureHelp(...options: VerifySignatureHelpOptions[]): void; // Checks that there are no compile errors. noErrors(): void; numberOfErrorsInCurrentFile(expected: number): void; @@ -555,6 +545,27 @@ declare namespace FourSlashInterface { readonly sourceDisplay?: string, }; + interface VerifySignatureHelpOptions { + marker?: ArrayOrSingle; + /** @default 1 */ + overloadsCount?: number; + docComment?: string; + text?: string; + name?: string; + parameterName?: string; + parameterSpan?: string; + parameterDocComment?: string; + parameterCount?: number; + argumentCount?: number; + isVariadic?: boolean; + tags?: ReadonlyArray; + } + + interface JSDocTagInfo { + name: string; + text: string | undefined; + } + type ArrayOrSingle = T | ReadonlyArray; } declare function verifyOperationIsCancelled(f: any): void; diff --git a/tests/cases/fourslash/functionOverloadCount.ts b/tests/cases/fourslash/functionOverloadCount.ts index 71dad1d9d7267..1f10443692248 100644 --- a/tests/cases/fourslash/functionOverloadCount.ts +++ b/tests/cases/fourslash/functionOverloadCount.ts @@ -11,5 +11,4 @@ ////var i = new C1; ////i.attr(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(3); \ No newline at end of file +verify.signatureHelp({ marker: "1", overloadsCount: 3 }); diff --git a/tests/cases/fourslash/functionProperty.ts b/tests/cases/fourslash/functionProperty.ts index ee4f972e76012..9ba3bce35435b 100644 --- a/tests/cases/fourslash/functionProperty.ts +++ b/tests/cases/fourslash/functionProperty.ts @@ -21,14 +21,7 @@ ////b./*quickInfoB*/x; ////c./*quickInfoC*/x; -goTo.marker('signatureA'); -verify.currentSignatureHelpIs('x(a: number): void'); - -goTo.marker('signatureB'); -verify.currentSignatureHelpIs('x(a: number): void'); - -goTo.marker('signatureC'); -verify.currentSignatureHelpIs('x(a: number): void'); +verify.signatureHelp({ marker: ["signatureA", "signatureB", "signatureC"], text: "x(a: number): void" }); goTo.marker('completionA'); verify.completionListContains("x", "(method) x(a: number): void"); diff --git a/tests/cases/fourslash/genericFunctionReturnType.ts b/tests/cases/fourslash/genericFunctionReturnType.ts index b77f7746dba50..9cb41a30ffb07 100644 --- a/tests/cases/fourslash/genericFunctionReturnType.ts +++ b/tests/cases/fourslash/genericFunctionReturnType.ts @@ -8,12 +8,11 @@ ////var /*2*/r = foo(/*1*/1, ""); ////var /*4*/r2 = r(/*3*/""); -// goTo.marker('1'); -// verify.currentSignatureHelpIs('foo(x: number, y: string): (a: string) => number'); +// TODO: GH##23631 +// verify.signatureHelp({ marker: "1", text: "foo(x: number, y: string): (a: string) => number" }); verify.quickInfoAt("2", "var r: (a: string) => number"); -goTo.marker('3'); -verify.currentSignatureHelpIs('r(a: string): number'); +verify.signatureHelp({ marker: "3", text: "r(a: string): number" }); verify.quickInfoAt("4", "var r2: number"); diff --git a/tests/cases/fourslash/genericFunctionReturnType2.ts b/tests/cases/fourslash/genericFunctionReturnType2.ts index 194e53cfa4770..fbaaaa8e573b8 100644 --- a/tests/cases/fourslash/genericFunctionReturnType2.ts +++ b/tests/cases/fourslash/genericFunctionReturnType2.ts @@ -11,12 +11,10 @@ ////var /*2*/r = x.foo(/*1*/3); ////var /*4*/r2 = r(/*3*/4); -goTo.marker('1'); -verify.currentSignatureHelpIs('foo(x: number): (a: number) => number'); +verify.signatureHelp({ marker: "1", text: "foo(x: number): (a: number) => number" }); verify.quickInfoAt("2", "var r: (a: number) => number"); -goTo.marker('3'); -verify.currentSignatureHelpIs('r(a: number): number'); +verify.signatureHelp({ marker: "3", text: "r(a: number): number" }); verify.quickInfoAt("4", "var r2: number"); diff --git a/tests/cases/fourslash/genericFunctionSignatureHelp1.ts b/tests/cases/fourslash/genericFunctionSignatureHelp1.ts index 202f56adc0a31..7409fa249dd86 100644 --- a/tests/cases/fourslash/genericFunctionSignatureHelp1.ts +++ b/tests/cases/fourslash/genericFunctionSignatureHelp1.ts @@ -3,5 +3,4 @@ ////function f(a: T): T { return null; } ////f(/**/ -goTo.marker(); -verify.currentSignatureHelpIs('f(a: {}): {}'); +verify.signatureHelp({ marker: "", text: "f(a: {}): {}" }); diff --git a/tests/cases/fourslash/genericFunctionSignatureHelp2.ts b/tests/cases/fourslash/genericFunctionSignatureHelp2.ts index 1486983a2e9cf..a1999b10128a4 100644 --- a/tests/cases/fourslash/genericFunctionSignatureHelp2.ts +++ b/tests/cases/fourslash/genericFunctionSignatureHelp2.ts @@ -3,5 +3,4 @@ ////var f = (a: T) => a; ////f(/**/ -goTo.marker(); -verify.currentSignatureHelpIs('f(a: {}): {}'); +verify.signatureHelp({ marker: "", text: "f(a: {}): {}" }); diff --git a/tests/cases/fourslash/genericFunctionSignatureHelp3.ts b/tests/cases/fourslash/genericFunctionSignatureHelp3.ts index 5d4275d6ef944..dafa4f42a5d73 100644 --- a/tests/cases/fourslash/genericFunctionSignatureHelp3.ts +++ b/tests/cases/fourslash/genericFunctionSignatureHelp3.ts @@ -16,24 +16,19 @@ ////foo6(1, (/*7*/ // signature help shows y as T -goTo.marker('1'); -verify.currentSignatureHelpIs('foo1(x: number, callback: (y1: T) => number): void'); - -// goTo.marker('2'); -// verify.currentSignatureHelpIs('foo2(x: number, callback: (y2: {}) => number): void'); - -goTo.marker('3'); -verify.currentSignatureHelpIs('foo3(x: number, callback: (y3: T) => number): void'); - -// goTo.marker('4'); -// verify.currentSignatureHelpIs('foo4(x: number, callback: (y4: string) => number): void'); - -goTo.marker('5'); -verify.currentSignatureHelpIs('foo5(x: number, callback: (y5: string) => number): void'); +verify.signatureHelp( + { marker: "1", text: "foo1(x: number, callback: (y1: T) => number): void" }, + // TODO: GH#23631 + // { marker: "2", text: "foo2(x: number, callback: (y2: {}) => number): void" }, + { marker: "3", text: "foo3(x: number, callback: (y3: T) => number): void" }, + // TODO: GH#23631 + // { marker: "4", text: "foo4(x: number, callback: (y4: string) => number): void" }, + { marker: "5", text: "foo5(x: number, callback: (y5: string) => number): void" }, +); goTo.marker('6'); -// verify.currentSignatureHelpIs('foo6(x: number, callback: (y6: {}) => number): void'); +// TODO: GH#23631 +// verify.signatureHelp({ text: "foo6(x: number, callback: (y6: {}) => number): void" }); edit.insert('string>(null,null);'); // need to make this line parse so we can get reasonable LS answers to later tests -goTo.marker('7'); -verify.currentSignatureHelpIs('foo7(x: number, callback: (y7: T) => number): void'); +verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: T) => number): void" }); diff --git a/tests/cases/fourslash/genericFunctionSignatureHelp3MultiFile.ts b/tests/cases/fourslash/genericFunctionSignatureHelp3MultiFile.ts index b82d5e10664bc..4cffb1a4f417d 100644 --- a/tests/cases/fourslash/genericFunctionSignatureHelp3MultiFile.ts +++ b/tests/cases/fourslash/genericFunctionSignatureHelp3MultiFile.ts @@ -23,24 +23,16 @@ ////foo6(1, (/*7*/ // signature help shows y as T -goTo.marker('1'); -verify.currentSignatureHelpIs('foo1(x: number, callback: (y1: T) => number): void'); - -// goTo.marker('2'); -// verify.currentSignatureHelpIs('foo2(x: number, callback: (y2: {}) => number): void'); - -goTo.marker('3'); -verify.currentSignatureHelpIs('foo3(x: number, callback: (y3: T) => number): void'); - -// goTo.marker('4'); -// verify.currentSignatureHelpIs('foo4(x: number, callback: (y4: string) => number): void'); - -goTo.marker('5'); -verify.currentSignatureHelpIs('foo5(x: number, callback: (y5: string) => number): void'); +verify.signatureHelp( + { marker: "1", text: "foo1(x: number, callback: (y1: T) => number): void" }, + { marker: "2", text: "foo2(x: number, callback: (y2: T) => number): void" }, + { marker: "3", text: "foo3(x: number, callback: (y3: T) => number): void" }, + { marker: "4", text: "foo4(x: number, callback: (y4: string) => number): void" }, + { marker: "5", text: "foo5(x: number, callback: (y5: string) => number): void" }, +); goTo.marker('6'); -// verify.currentSignatureHelpIs('foo6(x: number, callback: (y6: {}) => number): void'); +verify.signatureHelp({ text: "foo6(x: number, callback: (y6: {}) => number): void" }); edit.insert('string>(null,null);'); // need to make this line parse so we can get reasonable LS answers to later tests -goTo.marker('7'); -verify.currentSignatureHelpIs('foo7(x: number, callback: (y7: T) => number): void'); +verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: T) => number): void" }) diff --git a/tests/cases/fourslash/genericParameterHelp.ts b/tests/cases/fourslash/genericParameterHelp.ts index 6a0b8a19bfdc1..320c159203cdf 100644 --- a/tests/cases/fourslash/genericParameterHelp.ts +++ b/tests/cases/fourslash/genericParameterHelp.ts @@ -13,25 +13,19 @@ ////testFunction(null, null, null); ////testFunction<, ,/*5*/>(null, null, null); -// goTo.marker("1"); -// verify.currentSignatureParameterCountIs(3); -// verify.currentSignatureHelpIs("testFunction(a: T, b: U, c: M): M"); - -// verify.currentParameterHelpArgumentNameIs("T"); -// verify.currentParameterSpanIs("T extends IFoo"); - -// goTo.marker("2"); -// verify.currentParameterHelpArgumentNameIs("U"); -// verify.currentParameterSpanIs("U"); - -goTo.marker("3"); -verify.currentParameterHelpArgumentNameIs("a"); -verify.currentParameterSpanIs("a: any"); - -goTo.marker("4"); -verify.currentParameterHelpArgumentNameIs("M"); -verify.currentParameterSpanIs("M extends IFoo"); - -goTo.marker("5"); -verify.currentParameterHelpArgumentNameIs("M"); -verify.currentParameterSpanIs("M extends IFoo"); \ No newline at end of file +verify.signatureHelp( + // TODO: GH#23631 + /* + { + marker: "1", + text: "testFunction(a: T, b: U, c: M): M", + parameterCount: 3, + parameterName: "T", + parameterSpan: "T extends IFoo", + }, + { marker: "2", parameterName: "U", parameterSpan: "U" }, + */ + { marker: "3", parameterName: "a", parameterSpan: "a: any" }, + { marker: "4", parameterName: "M", parameterSpan: "M extends IFoo" }, + { marker: "5", parameterName: "M", parameterSpan: "M extends IFoo" }, +); diff --git a/tests/cases/fourslash/genericParameterHelpConstructorCalls.ts b/tests/cases/fourslash/genericParameterHelpConstructorCalls.ts index 4cbe141fccec7..73ae1b91755d3 100644 --- a/tests/cases/fourslash/genericParameterHelpConstructorCalls.ts +++ b/tests/cases/fourslash/genericParameterHelpConstructorCalls.ts @@ -7,29 +7,28 @@ ////} //// ////// Constructor calls -////new testClass(null, null, null) -////new testClass<,,/*construcor4*/>(null, null, null) -////new testClass(null, null, null) +////new testClass(null, null, null) +////new testClass<,,/*constructor4*/>(null, null, null) +////new testClass(null, null, null) - // goTo.marker("construcor1"); - // verify.currentSignatureHelpIs("testClass(a: T, b: U, c: M): testClass"); - // verify.currentParameterHelpArgumentNameIs("T"); - // verify.currentParameterSpanIs("T extends IFoo"); - - // goTo.marker("construcor2"); - // verify.currentParameterHelpArgumentNameIs("U"); - // verify.currentParameterSpanIs("U"); - -goTo.marker("construcor3"); -verify.currentParameterHelpArgumentNameIs("T"); -verify.currentParameterSpanIs("T extends IFoo"); - -goTo.marker("construcor4"); -verify.currentParameterHelpArgumentNameIs("M"); -verify.currentParameterSpanIs("M extends IFoo"); - -goTo.marker("construcor5"); -verify.currentParameterHelpArgumentNameIs("U"); -verify.currentParameterSpanIs("U"); +verify.signatureHelp( + // TODO: GH#23631 + /* + { + marker: "constructor1", + text: "testClass(a: T, b: U, c: M): testClass", + parameterName: "T", + parameterSpan: "T extends IFoo", + }, + { + marker: "constructor2", + parameterName: "U", + parameterSpan: "U", + }, + */ + { marker: "constructor3", parameterName: "T", parameterSpan: "T extends IFoo" }, + { marker: "constructor4", parameterName: "M", parameterSpan: "M extends IFoo" }, + { marker: "constructor5", parameterName: "U", parameterSpan: "U" }, +); diff --git a/tests/cases/fourslash/genericParameterHelpTypeReferences.ts b/tests/cases/fourslash/genericParameterHelpTypeReferences.ts index 346cf7191c1e4..33d3d85d5658b 100644 --- a/tests/cases/fourslash/genericParameterHelpTypeReferences.ts +++ b/tests/cases/fourslash/genericParameterHelpTypeReferences.ts @@ -12,23 +12,20 @@ ////class Bar extends testClass; - // goTo.marker("type1"); - // verify.signatureHelpCountIs(1); - // verify.currentSignatureHelpIs("testClass"); - // verify.currentParameterHelpArgumentNameIs("T"); - // verify.currentParameterSpanIs("T extends IFoo"); +// TODO: GH#23631 - // goTo.marker("type2"); - // verify.signatureHelpCountIs(1); - // verify.currentParameterHelpArgumentNameIs("T"); - // verify.currentParameterSpanIs("T extends IFoo"); - - // goTo.marker("type3"); - // verify.signatureHelpCountIs(1); - // verify.currentParameterHelpArgumentNameIs("T"); - // verify.currentParameterSpanIs("T extends IFoo"); - - // goTo.marker("type4"); - // verify.signatureHelpCountIs(1); - // verify.currentParameterHelpArgumentNameIs("M"); - // verify.currentParameterSpanIs("M extends IFoo"); \ No newline at end of file +if (false) { + verify.signatureHelp( + { + marker: ["type1", "type2", "type3"], + text: "testClass", + parameterName: "T", + parameterSpan: "T extends IFoo", + }, + { + marker: "type4", + parameterName: "M", + parameterSpan: "M extends IFoo", + } + ); +} diff --git a/tests/cases/fourslash/getJavaScriptCompletions16.ts b/tests/cases/fourslash/getJavaScriptCompletions16.ts index 4d4b76d98d6c5..86adead3e1a0c 100644 --- a/tests/cases/fourslash/getJavaScriptCompletions16.ts +++ b/tests/cases/fourslash/getJavaScriptCompletions16.ts @@ -3,16 +3,16 @@ // @allowNonTsExtensions: true // @Filename: file.js //// "use strict"; -//// +//// //// class Something { -//// +//// //// /** //// * @param {number} a //// */ //// constructor(a, b) { //// a/*body*/ //// } -//// +//// //// /** //// * @param {number} a //// */ @@ -27,8 +27,11 @@ edit.insert('.'); verify.completionListContains('toFixed', undefined, undefined, 'method'); edit.backspace(); -goTo.marker('sig'); -verify.currentSignatureHelpIs('Something(a: number, b: any): Something'); +verify.signatureHelp({ + marker: "sig", + text: "Something(a: number, b: any): Something", + tags: [{ name: "param", text: "a" }], +}); goTo.marker('method'); edit.insert('.'); diff --git a/tests/cases/fourslash/importJsNodeModule3.ts b/tests/cases/fourslash/importJsNodeModule3.ts index b790d351a1f80..6c44dd65b63ca 100644 --- a/tests/cases/fourslash/importJsNodeModule3.ts +++ b/tests/cases/fourslash/importJsNodeModule3.ts @@ -35,4 +35,14 @@ edit.insert('y.'); verify.completionListContains("toUpperCase", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); edit.backspace(2); edit.insert('z('); -verify.currentSignatureHelpIs("z(a: number | boolean, b: string[]): string"); +verify.signatureHelp({ + text: "z(a: number | boolean, b: string[]): string", + // TODO: GH#24129 + parameterDocComment: "The first param\nThe first param", + tags: [ + { name: "param", text: "a The first param" }, + { name: "param", text: "b The second param" }, + { name: "param", text: "a The first param" }, + { name: "param", text: "b The second param" }, + ], +}); diff --git a/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts b/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts index 78152983dfde5..c8a73727e3551 100644 --- a/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts +++ b/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts @@ -9,7 +9,7 @@ // Do resolve without typeCheck goTo.marker('1'); edit.insert("alert("); -verify.currentSignatureHelpIs("alert(message?: any): void"); +verify.signatureHelp({ text: "alert(message?: any): void" }); // TypeCheck verify.errorExistsAfterMarker('1'); \ No newline at end of file diff --git a/tests/cases/fourslash/javascriptModules24.ts b/tests/cases/fourslash/javascriptModules24.ts index 5a0dd892db7b3..c868d0c9748f6 100644 --- a/tests/cases/fourslash/javascriptModules24.ts +++ b/tests/cases/fourslash/javascriptModules24.ts @@ -17,5 +17,4 @@ goTo.marker('1'); /**** BUG: Should be an error to invoke a call signature on a namespace import ****/ //verify.errorExistsBeforeMarker('1'); verify.quickInfoIs("(alias) foo(): number\nimport foo"); -goTo.marker('2'); -verify.signatureHelpArgumentCountIs(1); +verify.signatureHelp({ marker: "2", argumentCount: 1 }); diff --git a/tests/cases/fourslash/jsDocFunctionSignatures2.ts b/tests/cases/fourslash/jsDocFunctionSignatures2.ts index e6430cba5bd7d..28017d39f2414 100644 --- a/tests/cases/fourslash/jsDocFunctionSignatures2.ts +++ b/tests/cases/fourslash/jsDocFunctionSignatures2.ts @@ -5,8 +5,7 @@ //// /** @type {function(string, boolean=): number} */ //// var f6; -//// +//// //// f6('', /**/false) -goTo.marker(); -verify.currentSignatureHelpIs('f6(arg0: string, arg1?: boolean): number') +verify.signatureHelp({ marker: "", text: "f6(arg0: string, arg1?: boolean): number" }); diff --git a/tests/cases/fourslash/jsDocFunctionSignatures5.ts b/tests/cases/fourslash/jsDocFunctionSignatures5.ts index 08d0da990bcc6..ba7f5cf6bf969 100644 --- a/tests/cases/fourslash/jsDocFunctionSignatures5.ts +++ b/tests/cases/fourslash/jsDocFunctionSignatures5.ts @@ -14,5 +14,16 @@ //////... ////} ////pathFilter(/**/'foo', 'bar', 'baz', {}); -goTo.marker(); -verify.currentSignatureHelpDocCommentIs("Filters a path based on a regexp or glob pattern."); + +verify.signatureHelp({ + marker: "", + docComment: "Filters a path based on a regexp or glob pattern.", + parameterDocComment: "The base path where the search will be performed.", + tags: [ + { name: "param", text: "basePath The base path where the search will be performed." }, + { name: "param", text: "pattern A string defining a regexp of a glob pattern." }, + { name: "param", text: "type The search pattern type, can be a regexp or a glob." }, + { name: "param", text: "options A object containing options to the search." }, + { name: "return", text: "A list containing the filtered paths." }, + ], +}); diff --git a/tests/cases/fourslash/jsDocFunctionSignatures6.ts b/tests/cases/fourslash/jsDocFunctionSignatures6.ts index 10b290d6d02a2..bd396a4e68eca 100644 --- a/tests/cases/fourslash/jsDocFunctionSignatures6.ts +++ b/tests/cases/fourslash/jsDocFunctionSignatures6.ts @@ -3,17 +3,22 @@ // @Filename: Foo.js /////** //// * @param {string} p1 - A string param -//// * @param {string?} p2 - An optional param +//// * @param {string?} p2 - An optional param //// * @param {string} [p3] - Another optional param //// * @param {string} [p4="test"] - An optional param with a default value //// */ ////function f1(p1, p2, p3, p4){} ////f1(/*1*/'foo', /*2*/'bar', /*3*/'baz', /*4*/'qux'); -goTo.marker('1'); -verify.currentParameterHelpArgumentDocCommentIs("- A string param"); -goTo.marker('2'); -verify.currentParameterHelpArgumentDocCommentIs("- An optional param "); -goTo.marker('3'); -verify.currentParameterHelpArgumentDocCommentIs("- Another optional param"); -goTo.marker('4'); -verify.currentParameterHelpArgumentDocCommentIs("- An optional param with a default value"); + +const tags: ReadonlyArray = [ + { name: "param", text: "p1 - A string param" }, + { name: "param", text: "p2 - An optional param" }, + { name: "param", text: "p3 - Another optional param" }, + { name: "param", text: "p4 - An optional param with a default value" }, +]; +verify.signatureHelp( + { marker: "1", parameterDocComment: "- A string param", tags }, + { marker: "2", parameterDocComment: "- An optional param", tags }, + { marker: "3", parameterDocComment: "- Another optional param", tags }, + { marker: "4", parameterDocComment: "- An optional param with a default value", tags }, +); diff --git a/tests/cases/fourslash/jsDocTags.ts b/tests/cases/fourslash/jsDocTags.ts index 14ac14e633188..7cb5ae7198eb7 100644 --- a/tests/cases/fourslash/jsDocTags.ts +++ b/tests/cases/fourslash/jsDocTags.ts @@ -61,15 +61,20 @@ verify.baselineQuickInfo(); - -goTo.marker("10"); -verify.currentSignatureHelpTagsAre([{name: "myjsdoctag", text:"this is a comment"}]) -goTo.marker("11"); -verify.currentSignatureHelpTagsAre([{name: "mytag", text:"comment1 comment2"}]) -goTo.marker("12"); -verify.currentSignatureHelpTagsAre([{name: "mytag"}]) -goTo.marker("13"); -verify.currentSignatureHelpTagsAre([{ name: "returns", text: "a value" }]) +verify.signatureHelp( + { + marker: "10", + docComment: "This is the constructor.", + tags: [{ name: "myjsdoctag", text:"this is a comment" }], + }, + { + marker: "11", + docComment: "method1 documentation", + tags: [{ name: "mytag", text: "comment1 comment2" }], + }, + { marker: "12", tags: [{ name: "mytag", text: undefined }] }, + { marker: "13", tags: [{ name: "returns", text: "a value" }] }, +); goTo.marker('14'); verify.completionEntryDetailIs( diff --git a/tests/cases/fourslash/jsdocReturnsTag.ts b/tests/cases/fourslash/jsdocReturnsTag.ts index 9203bd9e03698..e91d350922278 100644 --- a/tests/cases/fourslash/jsdocReturnsTag.ts +++ b/tests/cases/fourslash/jsdocReturnsTag.ts @@ -12,6 +12,15 @@ ////} ////find(''/**/); -goTo.marker(); -verify.currentSignatureHelpIs("find(l: T[], x: T): T") -// There currently isn't a way to display the return tag comment +verify.signatureHelp({ + marker: "", + text: "find(l: T[], x: T): T", + docComment: "Find an item", + tags: [ + // TODO: GH#24130 + { name: "template", text: "T\n " }, + { name: "param", text: "l" }, + { name: "param", text: "x" }, + { name: "returns", text: "The names of the found item(s)." }, + ], +}); diff --git a/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts b/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts index 8dc942f275888..4269bfae2a5de 100644 --- a/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts +++ b/tests/cases/fourslash/noSignatureHelpOnNewKeyword.ts @@ -4,11 +4,5 @@ ////new/*1*/ Foo ////new /*2*/Foo(/*3*/) -goTo.marker('1'); -verify.not.signatureHelpPresent(); - -goTo.marker('2'); -verify.not.signatureHelpPresent(); - -goTo.marker('3'); -verify.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("1", "2"); +verify.signatureHelp({ marker: "3", text: "Foo(): Foo" }); diff --git a/tests/cases/fourslash/overloadOnConstCallSignature.ts b/tests/cases/fourslash/overloadOnConstCallSignature.ts index 101d7750e0424..61ae8da97cc84 100644 --- a/tests/cases/fourslash/overloadOnConstCallSignature.ts +++ b/tests/cases/fourslash/overloadOnConstCallSignature.ts @@ -9,10 +9,11 @@ ////var /*2*/x = foo(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs('foo(name: "order"): string'); +verify.signatureHelp({ + marker: "1", + overloadsCount: 4, + text: 'foo(name: "order"): string', +}) edit.insert('"hi"'); -goTo.marker('2'); -verify.quickInfoIs('var x: string'); +verify.quickInfoAt("2", "var x: string"); diff --git a/tests/cases/fourslash/paramHelpOnCommaInString.ts b/tests/cases/fourslash/paramHelpOnCommaInString.ts index 00271781582f6..258dbfa48e307 100644 --- a/tests/cases/fourslash/paramHelpOnCommaInString.ts +++ b/tests/cases/fourslash/paramHelpOnCommaInString.ts @@ -5,7 +5,4 @@ ////blah('hola/*1*/,/*2*/') // making sure the comma in a string literal doesn't trigger param help on the second function param -goTo.marker('1'); -verify.currentParameterHelpArgumentNameIs('foo'); -goTo.marker('2'); -verify.currentParameterHelpArgumentNameIs('foo'); \ No newline at end of file +verify.signatureHelp({ marker: test.markerNames(), parameterName: "foo" }); diff --git a/tests/cases/fourslash/parameterInfoOnParameterType.ts b/tests/cases/fourslash/parameterInfoOnParameterType.ts index d28e675e24fa8..117f07021db8a 100644 --- a/tests/cases/fourslash/parameterInfoOnParameterType.ts +++ b/tests/cases/fourslash/parameterInfoOnParameterType.ts @@ -5,7 +5,4 @@ ////foo("test"/*1*/); ////foo(b/*2*/); -goTo.marker("1"); -verify.currentParameterHelpArgumentNameIs("a"); -goTo.marker("2"); -verify.currentParameterHelpArgumentNameIs("a"); \ No newline at end of file +verify.signatureHelp({ marker: test.markerNames(), parameterName: "a" }); diff --git a/tests/cases/fourslash/qualifyModuleTypeNames.ts b/tests/cases/fourslash/qualifyModuleTypeNames.ts index 50a9f6c85f0e7..5accec5f1c95b 100644 --- a/tests/cases/fourslash/qualifyModuleTypeNames.ts +++ b/tests/cases/fourslash/qualifyModuleTypeNames.ts @@ -4,5 +4,4 @@ ////function x(arg: m.c) { return arg; } ////x(/**/ -goTo.marker(); -verify.currentSignatureHelpIs('x(arg: m.c): m.c'); +verify.signatureHelp({ marker: "", text: "x(arg: m.c): m.c" }); diff --git a/tests/cases/fourslash/quickInfoInFunctionTypeReference2.ts b/tests/cases/fourslash/quickInfoInFunctionTypeReference2.ts index 5138aa98ed2dc..ed16e2a785196 100644 --- a/tests/cases/fourslash/quickInfoInFunctionTypeReference2.ts +++ b/tests/cases/fourslash/quickInfoInFunctionTypeReference2.ts @@ -13,5 +13,4 @@ verify.quickInfos({ 2: "(parameter) value: T" }); -goTo.marker('3'); -verify.currentSignatureHelpIs('map(fn: (k: string, value: number, context: any) => void, context: any): void'); \ No newline at end of file +verify.signatureHelp({ marker: "3", text: "map(fn: (k: string, value: number, context: any) => void, context: any): void" }); diff --git a/tests/cases/fourslash/quickInfoOnConstructorWithGenericParameter.ts b/tests/cases/fourslash/quickInfoOnConstructorWithGenericParameter.ts index 93e2863d1c330..89402931edb10 100644 --- a/tests/cases/fourslash/quickInfoOnConstructorWithGenericParameter.ts +++ b/tests/cases/fourslash/quickInfoOnConstructorWithGenericParameter.ts @@ -16,10 +16,9 @@ ////} ////var x = new /*2*/B(/*1*/ -goTo.marker("1"); -verify.currentSignatureHelpIs("B(a: Foo, b: number): B"); +verify.signatureHelp({ marker: "1", text: "B(a: Foo, b: number): B" }); edit.insert("null,"); -verify.currentSignatureHelpIs("B(a: Foo, b: number): B"); +verify.signatureHelp({ text: "B(a: Foo, b: number): B" }); edit.insert("10);"); verify.quickInfoAt("2", "constructor B(a: Foo, b: number): B"); diff --git a/tests/cases/fourslash/quickInfoOnPrivateConstructorCall.ts b/tests/cases/fourslash/quickInfoOnPrivateConstructorCall.ts index 5ebdcd815b293..45da7484b715e 100644 --- a/tests/cases/fourslash/quickInfoOnPrivateConstructorCall.ts +++ b/tests/cases/fourslash/quickInfoOnPrivateConstructorCall.ts @@ -5,5 +5,4 @@ ////} ////var x = new A(/*1*/ -goTo.marker("1"); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("1"); diff --git a/tests/cases/fourslash/quickInfoOnProtectedConstructorCall.ts b/tests/cases/fourslash/quickInfoOnProtectedConstructorCall.ts index 094a07f3d5104..7144f3d98f0d4 100644 --- a/tests/cases/fourslash/quickInfoOnProtectedConstructorCall.ts +++ b/tests/cases/fourslash/quickInfoOnProtectedConstructorCall.ts @@ -5,5 +5,4 @@ ////} ////var x = new A(/*1*/ -goTo.marker("1"); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("1"); diff --git a/tests/cases/fourslash/restArgSignatureHelp.ts b/tests/cases/fourslash/restArgSignatureHelp.ts index baa8702a5f664..4d22dd1f4f779 100644 --- a/tests/cases/fourslash/restArgSignatureHelp.ts +++ b/tests/cases/fourslash/restArgSignatureHelp.ts @@ -3,5 +3,4 @@ ////function f(...x: any[]) { } ////f(/**/); -goTo.marker(); -verify.currentParameterHelpArgumentNameIs('x'); +verify.signatureHelp({ marker: "", parameterName: "x", isVariadic: true }); diff --git a/tests/cases/fourslash/server/signatureHelp01.ts b/tests/cases/fourslash/server/signatureHelp01.ts index 73303ecce4c90..f358eae2b490f 100644 --- a/tests/cases/fourslash/server/signatureHelp01.ts +++ b/tests/cases/fourslash/server/signatureHelp01.ts @@ -7,10 +7,9 @@ //// foo(/*1*/) ////} -goTo.marker('1'); -verify.signatureHelpPresent(); -verify.signatureHelpCountIs(1); -verify.signatureHelpArgumentCountIs(0); - -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpDocCommentIs(''); \ No newline at end of file +verify.signatureHelp({ + marker: "1", + argumentCount: 0, + parameterCount: 1, + docComment: "", +}); diff --git a/tests/cases/fourslash/shims-pp/getSignatureHelpItems.ts b/tests/cases/fourslash/shims-pp/getSignatureHelpItems.ts index 846c2d5244a1d..672e9069a42c5 100644 --- a/tests/cases/fourslash/shims-pp/getSignatureHelpItems.ts +++ b/tests/cases/fourslash/shims-pp/getSignatureHelpItems.ts @@ -1,4 +1,4 @@ -/// +/// // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file0.ts ////declare function fn(x: string, y: number); @@ -9,5 +9,4 @@ // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file2.ts ////fn(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(2); \ No newline at end of file +verify.signatureHelp({ marker: "1", overloadsCount: 2 }); diff --git a/tests/cases/fourslash/shims/getSignatureHelpItems.ts b/tests/cases/fourslash/shims/getSignatureHelpItems.ts index 846c2d5244a1d..672e9069a42c5 100644 --- a/tests/cases/fourslash/shims/getSignatureHelpItems.ts +++ b/tests/cases/fourslash/shims/getSignatureHelpItems.ts @@ -1,4 +1,4 @@ -/// +/// // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file0.ts ////declare function fn(x: string, y: number); @@ -9,5 +9,4 @@ // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file2.ts ////fn(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(2); \ No newline at end of file +verify.signatureHelp({ marker: "1", overloadsCount: 2 }); diff --git a/tests/cases/fourslash/signatureHelpAnonymousFunction.ts b/tests/cases/fourslash/signatureHelpAnonymousFunction.ts index ba812a2f8d31a..7ea11b19cc13d 100644 --- a/tests/cases/fourslash/signatureHelpAnonymousFunction.ts +++ b/tests/cases/fourslash/signatureHelpAnonymousFunction.ts @@ -5,13 +5,17 @@ ////} ////anonymousFunctionTest(5, "")(/*anonymousFunction1*/1, /*anonymousFunction2*/""); -goTo.marker('anonymousFunction1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs('(a: number, b: string): string'); -verify.currentParameterHelpArgumentNameIs("a"); -verify.currentParameterSpanIs("a: number"); - -goTo.marker('anonymousFunction2'); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: string"); +verify.signatureHelp( + { + marker: "anonymousFunction1", + text: '(a: number, b: string): string', + parameterCount: 2, + parameterName: "a", + parameterSpan: "a: number", + }, + { + marker: "anonymousFunction2", + parameterName: "b", + parameterSpan: "b: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpAtEOF.ts b/tests/cases/fourslash/signatureHelpAtEOF.ts index d2e1fa0418dad..970ab8fd4af7a 100644 --- a/tests/cases/fourslash/signatureHelpAtEOF.ts +++ b/tests/cases/fourslash/signatureHelpAtEOF.ts @@ -5,11 +5,10 @@ //// ////Foo(/**/ -goTo.marker(); -verify.signatureHelpPresent(); -verify.signatureHelpCountIs(1); - -verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParameterCountIs(2); -verify.currentParameterHelpArgumentNameIs("arg1"); -verify.currentParameterSpanIs("arg1: string"); \ No newline at end of file +verify.signatureHelp({ + marker: "", + text: "Foo(arg1: string, arg2: string): void", + parameterCount: 2, + parameterName: "arg1", + parameterSpan: "arg1: string", +}) diff --git a/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts b/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts index d3bdd42ef1af8..d60f8175c8df2 100644 --- a/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts +++ b/tests/cases/fourslash/signatureHelpBeforeSemicolon1.ts @@ -5,11 +5,10 @@ //// ////Foo(/**/; -goTo.marker(); -verify.signatureHelpPresent(); -verify.signatureHelpCountIs(1); - -verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParameterCountIs(2); -verify.currentParameterHelpArgumentNameIs("arg1"); -verify.currentParameterSpanIs("arg1: string"); \ No newline at end of file +verify.signatureHelp({ + marker: "", + text: "Foo(arg1: string, arg2: string): void", + parameterCount: 2, + parameterName: "arg1", + parameterSpan: "arg1: string", +}); diff --git a/tests/cases/fourslash/signatureHelpCallExpression.ts b/tests/cases/fourslash/signatureHelpCallExpression.ts index 61606b77bc045..16df643b3acd1 100644 --- a/tests/cases/fourslash/signatureHelpCallExpression.ts +++ b/tests/cases/fourslash/signatureHelpCallExpression.ts @@ -3,14 +3,17 @@ ////function fnTest(str: string, num: number) { } ////fnTest(/*1*/'', /*2*/5); -goTo.marker('1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs('fnTest(str: string, num: number): void'); - -verify.currentParameterHelpArgumentNameIs('str'); -verify.currentParameterSpanIs("str: string"); - -goTo.marker('2'); -verify.currentParameterHelpArgumentNameIs('num'); -verify.currentParameterSpanIs("num: number"); +verify.signatureHelp( + { + marker: "1", + text: 'fnTest(str: string, num: number): void', + parameterCount: 2, + parameterName: "str", + parameterSpan: "str: string", + }, + { + marker: "2", + parameterName: "num", + parameterSpan: "num: number", + }, +); diff --git a/tests/cases/fourslash/signatureHelpCallExpressionJs.ts b/tests/cases/fourslash/signatureHelpCallExpressionJs.ts index 17045a747170c..3b19ddb393ac5 100644 --- a/tests/cases/fourslash/signatureHelpCallExpressionJs.ts +++ b/tests/cases/fourslash/signatureHelpCallExpressionJs.ts @@ -12,17 +12,21 @@ ////someOptional(1, 2, 3); ////someOptional(); // no error here; x and y are optional in JS -goTo.marker('1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs('allOptional(...args: any[]): void'); -verify.currentParameterHelpArgumentNameIs('args'); -verify.currentParameterSpanIs("...args: any[]"); - -goTo.marker('2'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(3); -verify.currentSignatureHelpIs('someOptional(x: any, y: any, ...args: any[]): void'); -verify.currentParameterHelpArgumentNameIs('x'); -verify.currentParameterSpanIs("x: any"); -verify.numberOfErrorsInCurrentFile(0); +verify.noErrors(); +verify.signatureHelp( + { + marker: "1", + text: "allOptional(...args: any[]): void", + parameterCount: 1, + parameterName: "args", + parameterSpan: "...args: any[]", + isVariadic: true, + }, + { + marker: "2", + text: "someOptional(x: any, y: any, ...args: any[]): void", + parameterCount: 3, + parameterName: "x", + parameterSpan: "x: any", + isVariadic: true, + }); diff --git a/tests/cases/fourslash/signatureHelpConstructExpression.ts b/tests/cases/fourslash/signatureHelpConstructExpression.ts index a64c0123e6f5d..8a9849e96548c 100644 --- a/tests/cases/fourslash/signatureHelpConstructExpression.ts +++ b/tests/cases/fourslash/signatureHelpConstructExpression.ts @@ -3,15 +3,17 @@ ////class sampleCls { constructor(str: string, num: number) { } } ////var x = new sampleCls(/*1*/"", /*2*/5); -goTo.marker('1'); -verify.signatureHelpCountIs(1); - -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs('sampleCls(str: string, num: number): sampleCls'); - -verify.currentParameterHelpArgumentNameIs('str'); -verify.currentParameterSpanIs("str: string"); - -goTo.marker('2'); -verify.currentParameterHelpArgumentNameIs('num'); -verify.currentParameterSpanIs("num: number"); +verify.signatureHelp( + { + marker: "1", + text: "sampleCls(str: string, num: number): sampleCls", + parameterCount: 2, + parameterName: "str", + parameterSpan: "str: string", + }, + { + marker: "2", + parameterName: "num", + parameterSpan: "num: number", + }, +) diff --git a/tests/cases/fourslash/signatureHelpConstructorCallParamProperties.ts b/tests/cases/fourslash/signatureHelpConstructorCallParamProperties.ts index aab276403fe2d..9a26f7968ba63 100644 --- a/tests/cases/fourslash/signatureHelpConstructorCallParamProperties.ts +++ b/tests/cases/fourslash/signatureHelpConstructorCallParamProperties.ts @@ -10,9 +10,12 @@ ////} ////var a = new Circle(/**/ -goTo.marker(''); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("Circle(radius: number): Circle"); -verify.currentParameterHelpArgumentNameIs("radius"); -verify.currentParameterSpanIs("radius: number"); -verify.currentParameterHelpArgumentDocCommentIs("The radius of the circle."); \ No newline at end of file +verify.signatureHelp({ + marker: "", + text: "Circle(radius: number): Circle", + parameterName: "radius", + parameterSpan: "radius: number", + docComment: "Initialize a circle.", + parameterDocComment: "The radius of the circle.", + tags: [{ name: "param", text: "radius The radius of the circle." }], +}); diff --git a/tests/cases/fourslash/signatureHelpConstructorInheritance.ts b/tests/cases/fourslash/signatureHelpConstructorInheritance.ts index 23f802f10b52a..49292039752dd 100644 --- a/tests/cases/fourslash/signatureHelpConstructorInheritance.ts +++ b/tests/cases/fourslash/signatureHelpConstructorInheritance.ts @@ -13,10 +13,11 @@ //// } ////} - -goTo.marker('indirectSuperCall'); -verify.signatureHelpCountIs(2); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs('B2(n: number): B2'); -verify.currentParameterHelpArgumentNameIs("n"); -verify.currentParameterSpanIs("n: number"); +verify.signatureHelp({ + marker: "indirectSuperCall", + overloadsCount: 2, + text: "B2(n: number): B2", + parameterCount: 1, + parameterName: "n", + parameterSpan: "n: number", +}); diff --git a/tests/cases/fourslash/signatureHelpConstructorOverload.ts b/tests/cases/fourslash/signatureHelpConstructorOverload.ts index b562d4f54c7e6..db4378ce70b4b 100644 --- a/tests/cases/fourslash/signatureHelpConstructorOverload.ts +++ b/tests/cases/fourslash/signatureHelpConstructorOverload.ts @@ -4,13 +4,19 @@ ////var x = new clsOverload(/*1*/); ////var y = new clsOverload(/*2*/''); -goTo.marker('1'); -verify.signatureHelpCountIs(2); -verify.currentSignatureParameterCountIs(0); -verify.currentSignatureHelpIs('clsOverload(): clsOverload'); - -goTo.marker('2'); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs('clsOverload(test: string): clsOverload'); -verify.currentParameterHelpArgumentNameIs('test'); -verify.currentParameterSpanIs("test: string"); \ No newline at end of file +verify.signatureHelp( + { + marker: "1", + overloadsCount: 2, + text: "clsOverload(): clsOverload", + parameterCount: 0, + }, + { + marker: "2", + overloadsCount: 2, + text: "clsOverload(test: string): clsOverload", + parameterCount: 1, + parameterName: "test", + parameterSpan: "test: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpEmptyList.ts b/tests/cases/fourslash/signatureHelpEmptyList.ts index b6318656f4fc2..87b25340557b3 100644 --- a/tests/cases/fourslash/signatureHelpEmptyList.ts +++ b/tests/cases/fourslash/signatureHelpEmptyList.ts @@ -7,14 +7,13 @@ ////function Bar(arg1: string, arg2: string) { } ////Bar(); -goTo.marker('1'); -verify.signatureHelpPresent(); -verify.signatureHelpCountIs(1); - -verify.currentSignatureHelpIs("Foo(arg1: string, arg2: string): void"); -verify.currentSignatureParameterCountIs(2); -verify.currentParameterHelpArgumentNameIs("arg1"); -verify.currentParameterSpanIs("arg1: string"); - -goTo.marker('2'); -verify.signatureHelpPresent(); \ No newline at end of file +verify.signatureHelp( + { + marker: "1", + text: "Foo(arg1: string, arg2: string): void", + parameterCount: 2, + parameterName: "arg1", + parameterSpan: "arg1: string", + }, + { marker: "2", text: "Bar(arg1: string, arg2: string): void" }, +); diff --git a/tests/cases/fourslash/signatureHelpExplicitTypeArguments.ts b/tests/cases/fourslash/signatureHelpExplicitTypeArguments.ts index d5c68e41354bb..2e5854e20135f 100644 --- a/tests/cases/fourslash/signatureHelpExplicitTypeArguments.ts +++ b/tests/cases/fourslash/signatureHelpExplicitTypeArguments.ts @@ -6,16 +6,11 @@ ////f(/*3*/); ////f(/*4*/); -goTo.marker("1"); -verify.currentSignatureHelpIs("f(x: number, y: string): number"); - -goTo.marker("2"); -verify.currentSignatureHelpIs("f(x: T, y: U): T"); - -goTo.marker("3"); -// too few -- fill in rest with {} -verify.currentSignatureHelpIs("f(x: number, y: {}): number"); - -goTo.marker("4"); -// too many -- ignore extra type arguments -verify.currentSignatureHelpIs("f(x: number, y: string): number"); +verify.signatureHelp( + { marker: "1", text: "f(x: number, y: string): number" }, + { marker: "2", text: "f(x: T, y: U): T" }, + // too few -- fill in rest with {} + { marker: "3", text: "f(x: number, y: {}): number" }, + // too many -- ignore extra type arguments + { marker: "4", text: "f(x: number, y: string): number" }, +); diff --git a/tests/cases/fourslash/signatureHelpForSuperCalls1.ts b/tests/cases/fourslash/signatureHelpForSuperCalls1.ts index 6857cf76eadd3..80df285807aeb 100644 --- a/tests/cases/fourslash/signatureHelpForSuperCalls1.ts +++ b/tests/cases/fourslash/signatureHelpForSuperCalls1.ts @@ -17,9 +17,7 @@ //// } ////} -goTo.marker('1'); -verify.signatureHelpPresent(); -verify.currentSignatureHelpIs('B(): B'); - -goTo.marker('2'); -verify.currentSignatureHelpIs('B2(x: number): B2'); \ No newline at end of file +verify.signatureHelp( + { marker: "1", text: "B(): B" }, + { marker: "2", text: "B2(x: number): B2" }, +); diff --git a/tests/cases/fourslash/signatureHelpFunctionOverload.ts b/tests/cases/fourslash/signatureHelpFunctionOverload.ts index 219e718f81153..24c9cb8f28308 100644 --- a/tests/cases/fourslash/signatureHelpFunctionOverload.ts +++ b/tests/cases/fourslash/signatureHelpFunctionOverload.ts @@ -6,13 +6,18 @@ ////functionOverload(/*functionOverload1*/); ////functionOverload(""/*functionOverload2*/); -goTo.marker('functionOverload1'); -verify.signatureHelpCountIs(2); -verify.currentSignatureParameterCountIs(0); -verify.currentSignatureHelpIs('functionOverload(): any'); - -goTo.marker('functionOverload2'); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs('functionOverload(test: string): any'); -verify.currentParameterHelpArgumentNameIs("test"); -verify.currentParameterSpanIs("test: string"); \ No newline at end of file +verify.signatureHelp( + { + marker: "functionOverload1", + overloadsCount: 2, + text: "functionOverload(): any", + parameterCount: 0, + }, + { + marker: "functionOverload2", + overloadsCount: 2, + text: "functionOverload(test: string): any", + parameterName: "test", + parameterSpan: "test: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpFunctionParameter.ts b/tests/cases/fourslash/signatureHelpFunctionParameter.ts index 9105ee067ce05..afe20e1c6ac5e 100644 --- a/tests/cases/fourslash/signatureHelpFunctionParameter.ts +++ b/tests/cases/fourslash/signatureHelpFunctionParameter.ts @@ -4,14 +4,18 @@ //// callback(/*parameterFunction1*/5, /*parameterFunction2*/""); ////} -goTo.marker('parameterFunction1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs('callback(a: number, b: string): void'); -verify.currentParameterHelpArgumentNameIs("a"); -verify.currentParameterSpanIs("a: number"); - -goTo.marker('parameterFunction2'); -verify.currentSignatureHelpIs('callback(a: number, b: string): void'); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: string"); \ No newline at end of file +verify.signatureHelp( + { + marker: "parameterFunction1", + text: "callback(a: number, b: string): void", + parameterCount: 2, + parameterName: "a", + parameterSpan: "a: number", + }, + { + marker: "parameterFunction2", + text: "callback(a: number, b: string): void", + parameterName: "b", + parameterSpan: "b: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpImplicitConstructor.ts b/tests/cases/fourslash/signatureHelpImplicitConstructor.ts index c22087b9d1d09..5bf1ecb54af17 100644 --- a/tests/cases/fourslash/signatureHelpImplicitConstructor.ts +++ b/tests/cases/fourslash/signatureHelpImplicitConstructor.ts @@ -4,7 +4,8 @@ ////} ////var implicitConstructor = new ImplicitConstructor(/**/); -goTo.marker(); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("ImplicitConstructor(): ImplicitConstructor"); -verify.currentSignatureParameterCountIs(0); +verify.signatureHelp({ + marker: "", + text: "ImplicitConstructor(): ImplicitConstructor", + parameterCount: 0, +}); diff --git a/tests/cases/fourslash/signatureHelpImportStarFromExportEquals.ts b/tests/cases/fourslash/signatureHelpImportStarFromExportEquals.ts index cdf4b0a5c64c5..9b7313f3ada6b 100644 --- a/tests/cases/fourslash/signatureHelpImportStarFromExportEquals.ts +++ b/tests/cases/fourslash/signatureHelpImportStarFromExportEquals.ts @@ -12,4 +12,4 @@ goTo.marker(); edit.insert('('); -verify.currentSignatureHelpIs('abs(str: string): string'); +verify.signatureHelp({ text: "abs(str: string): string" }); diff --git a/tests/cases/fourslash/signatureHelpInCallback.ts b/tests/cases/fourslash/signatureHelpInCallback.ts index dd4856b48eff3..391cac62df92c 100644 --- a/tests/cases/fourslash/signatureHelpInCallback.ts +++ b/tests/cases/fourslash/signatureHelpInCallback.ts @@ -5,7 +5,5 @@ //// /*2*/ ////}); -goTo.marker('1'); -verify.signatureHelpPresent(); -goTo.marker('2'); -verify.not.signatureHelpPresent(); +verify.signatureHelp({ marker: "1", text: "forEach(f: () => void): any" }) +verify.noSignatureHelp("2"); diff --git a/tests/cases/fourslash/signatureHelpInCompleteGenericsCall.ts b/tests/cases/fourslash/signatureHelpInCompleteGenericsCall.ts index 0bcde9a2aa1ee..a3ea10bd0dc19 100644 --- a/tests/cases/fourslash/signatureHelpInCompleteGenericsCall.ts +++ b/tests/cases/fourslash/signatureHelpInCompleteGenericsCall.ts @@ -4,5 +4,4 @@ ////} ////foo(/*1*/ -goTo.marker('1'); -verify.currentSignatureHelpIs("foo(x: number, callback: (x: {}) => number): void"); \ No newline at end of file +verify.signatureHelp({ marker: "1", text: "foo(x: number, callback: (x: {}) => number): void" }); diff --git a/tests/cases/fourslash/signatureHelpInFunctionCall.ts b/tests/cases/fourslash/signatureHelpInFunctionCall.ts index 48c3b4a4ccf9e..1d4b6152dab66 100644 --- a/tests/cases/fourslash/signatureHelpInFunctionCall.ts +++ b/tests/cases/fourslash/signatureHelpInFunctionCall.ts @@ -5,5 +5,4 @@ //// for (/**/ ////}); -goTo.marker(); -verify.not.signatureHelpPresent(); +verify.noSignatureHelp(""); diff --git a/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts b/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts index 846c2d5244a1d..6bbd208385141 100644 --- a/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts +++ b/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts @@ -9,5 +9,4 @@ // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file2.ts ////fn(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(2); \ No newline at end of file +verify.signatureHelp({ marker: "1", overloadsCount: 2 }); diff --git a/tests/cases/fourslash/signatureHelpInIncompleteInvocationExpression.ts b/tests/cases/fourslash/signatureHelpInIncompleteInvocationExpression.ts deleted file mode 100644 index 2e097b2a76ad3..0000000000000 --- a/tests/cases/fourslash/signatureHelpInIncompleteInvocationExpression.ts +++ /dev/null @@ -1,19 +0,0 @@ -/// - -/////** -//// * Returns the substring at the specified location within a String object. -//// * @param start The zero-based index integer indicating the beginning of the substring. -//// * @param end Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. -//// * If end is omitted, the characters from start through the end of the original string are returned. -//// */ -////function foo(start: number, end?: number) { -//// return ""; -////} -//// -////foo(/*1*/ -goTo.marker('1'); -verify.currentParameterHelpArgumentDocCommentIs("The zero-based index integer indicating the beginning of the substring."); -edit.insert("10,"); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); -edit.insert(" "); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); diff --git a/tests/cases/fourslash/signatureHelpInParenthetical.ts b/tests/cases/fourslash/signatureHelpInParenthetical.ts index 0628d904fdc24..7f34453fb8a83 100644 --- a/tests/cases/fourslash/signatureHelpInParenthetical.ts +++ b/tests/cases/fourslash/signatureHelpInParenthetical.ts @@ -3,7 +3,6 @@ //// class base { constructor (public n: number, public y: string) { } } //// (new base(/**/ -goTo.marker(); -verify.currentParameterHelpArgumentNameIs('n'); +verify.signatureHelp({ marker: "", parameterName: "n" }); edit.insert('0, '); -verify.currentParameterHelpArgumentNameIs('y'); +verify.signatureHelp({ parameterName: "y" }); diff --git a/tests/cases/fourslash/signatureHelpIncompleteCalls.ts b/tests/cases/fourslash/signatureHelpIncompleteCalls.ts index 7403b98733db0..2b771ac70e627 100644 --- a/tests/cases/fourslash/signatureHelpIncompleteCalls.ts +++ b/tests/cases/fourslash/signatureHelpIncompleteCalls.ts @@ -15,17 +15,8 @@ //// x.f3(5,/*incompleteCalls3*/ ////} -goTo.marker('incompleteCalls1'); -verify.currentSignatureHelpIs("f1(): void"); -verify.currentSignatureParameterCountIs(0); - -goTo.marker('incompleteCalls2'); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs("f2(n: number): number"); -goTo.marker('incompleteCalls3'); -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs("f3(n: number, s: string): string"); - -verify.currentParameterHelpArgumentNameIs("s"); -verify.currentParameterSpanIs("s: string"); - +verify.signatureHelp( + { marker: "incompleteCalls1", text: "f1(): void", parameterCount: 0 }, + { marker: "incompleteCalls2", text: "f2(n: number): number", parameterCount: 1 }, + { marker: "incompleteCalls3", text: "f3(n: number, s: string): string", parameterCount: 2, parameterName: "s", parameterSpan: "s: string" }, +); diff --git a/tests/cases/fourslash/signatureHelpNegativeTests.ts b/tests/cases/fourslash/signatureHelpNegativeTests.ts index 32d76d158a65b..70b67fe3fe1be 100644 --- a/tests/cases/fourslash/signatureHelpNegativeTests.ts +++ b/tests/cases/fourslash/signatureHelpNegativeTests.ts @@ -6,11 +6,4 @@ ////cl/*invalidContext*/ass InvalidSignatureHelpLocation { } ////InvalidSignatureHelpLocation(/*validContext*/); -goTo.marker('insideComment'); -verify.not.signatureHelpPresent(); - -goTo.marker('invalidContext'); -verify.not.signatureHelpPresent(); - -goTo.marker('validContext'); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("insideComment", "invalidContext", "validContext"); diff --git a/tests/cases/fourslash/signatureHelpNegativeTests2.ts b/tests/cases/fourslash/signatureHelpNegativeTests2.ts index a7341225c7302..a740a80d1a4c2 100644 --- a/tests/cases/fourslash/signatureHelpNegativeTests2.ts +++ b/tests/cases/fourslash/signatureHelpNegativeTests2.ts @@ -3,8 +3,4 @@ ////class clsOverload { constructor(); constructor(test: string); constructor(test?: string) { } } ////var x = new clsOverload/*beforeOpenParen*/()/*afterCloseParen*/; -goTo.marker('beforeOpenParen'); -verify.not.signatureHelpPresent(); - -goTo.marker('afterCloseParen'); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("beforeOpenParen", "afterCloseParen"); diff --git a/tests/cases/fourslash/signatureHelpNoArguments.ts b/tests/cases/fourslash/signatureHelpNoArguments.ts index 16a1896a7418c..abab3ca3470c5 100644 --- a/tests/cases/fourslash/signatureHelpNoArguments.ts +++ b/tests/cases/fourslash/signatureHelpNoArguments.ts @@ -6,7 +6,9 @@ //// ////foo(/**/ -goTo.marker(); -verify.currentSignatureHelpIs("foo(n: number): string"); -verify.currentParameterHelpArgumentNameIs("n"); -verify.currentParameterSpanIs("n: number"); +verify.signatureHelp({ + marker: "", + text: "foo(n: number): string", + parameterName: "n", + parameterSpan: "n: number", +}); diff --git a/tests/cases/fourslash/signatureHelpObjectCreationExpressionNoArgs_NotAvailable.ts b/tests/cases/fourslash/signatureHelpObjectCreationExpressionNoArgs_NotAvailable.ts index 40a0a316a0e89..64ceb61230c1b 100644 --- a/tests/cases/fourslash/signatureHelpObjectCreationExpressionNoArgs_NotAvailable.ts +++ b/tests/cases/fourslash/signatureHelpObjectCreationExpressionNoArgs_NotAvailable.ts @@ -3,6 +3,4 @@ ////class sampleCls { constructor(str: string, num: number) { } } ////var x = new sampleCls/**/; -goTo.marker(); -verify.signatureHelpCountIs(0); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp(""); diff --git a/tests/cases/fourslash/signatureHelpObjectLiteral.ts b/tests/cases/fourslash/signatureHelpObjectLiteral.ts index 6853c3fee366c..02384cf221cff 100644 --- a/tests/cases/fourslash/signatureHelpObjectLiteral.ts +++ b/tests/cases/fourslash/signatureHelpObjectLiteral.ts @@ -3,15 +3,18 @@ ////var objectLiteral = { n: 5, s: "", f: (a: number, b: string) => "" }; ////objectLiteral.f(/*objectLiteral1*/4, /*objectLiteral2*/""); -goTo.marker('objectLiteral1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureParameterCountIs(2); -verify.currentSignatureHelpIs('f(a: number, b: string): string'); - -verify.currentParameterHelpArgumentNameIs("a"); -verify.currentParameterSpanIs("a: number"); - -goTo.marker('objectLiteral2'); -verify.currentSignatureHelpIs('f(a: number, b: string): string'); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: string"); \ No newline at end of file +verify.signatureHelp( + { + marker: "objectLiteral1", + text: "f(a: number, b: string): string", + parameterCount: 2, + parameterName: "a", + parameterSpan: "a: number", + }, + { + marker: "objectLiteral2", + text: "f(a: number, b: string): string", + parameterName: "b", + parameterSpan: "b: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpOnNestedOverloads.ts b/tests/cases/fourslash/signatureHelpOnNestedOverloads.ts index e657000c11394..4e241fbcb4d51 100644 --- a/tests/cases/fourslash/signatureHelpOnNestedOverloads.ts +++ b/tests/cases/fourslash/signatureHelpOnNestedOverloads.ts @@ -6,15 +6,18 @@ ////declare function fn2(x: string, y: number); ////fn('', fn2(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(2); -verify.currentSignatureHelpIs("fn2(x: string): any"); -verify.currentParameterHelpArgumentNameIs("x"); -verify.currentParameterSpanIs("x: string"); +verify.signatureHelp({ + marker: "1", + overloadsCount: 2, + text: "fn2(x: string): any", + parameterName: "x", + parameterSpan: "x: string", +}); edit.insert("'',"); - -verify.signatureHelpCountIs(2); -verify.currentSignatureHelpIs("fn2(x: string, y: number): any"); -verify.currentParameterHelpArgumentNameIs("y"); -verify.currentParameterSpanIs("y: number"); +verify.signatureHelp({ + overloadsCount: 2, + text: "fn2(x: string, y: number): any", + parameterName: "y", + parameterSpan: "y: number", +}); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadOnConst.ts b/tests/cases/fourslash/signatureHelpOnOverloadOnConst.ts index e312b71aebe58..babc79c79d531 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadOnConst.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadOnConst.ts @@ -10,17 +10,8 @@ ////x1('hi'/*2*/); ////x1('bye'/*3*/); -goTo.marker('1'); -verify.signatureHelpCountIs(3); -verify.currentParameterHelpArgumentNameIs("z"); -verify.currentParameterSpanIs("z: string"); - -goTo.marker('2'); -verify.signatureHelpCountIs(3); -verify.currentParameterHelpArgumentNameIs("x"); -verify.currentParameterSpanIs("x: \"hi\""); - -goTo.marker('3'); -verify.signatureHelpCountIs(3); -verify.currentParameterHelpArgumentNameIs("y"); -verify.currentParameterSpanIs("y: \"bye\""); +verify.signatureHelp( + { marker: "1", overloadsCount: 3, parameterName: "z", parameterSpan: "z: string" }, + { marker: "2", overloadsCount: 3, parameterName: "x", parameterSpan: 'x: "hi"' }, + { marker: "3", overloadsCount: 3, parameterName: "y", parameterSpan: 'y: "bye"' }, +); diff --git a/tests/cases/fourslash/signatureHelpOnOverloads.ts b/tests/cases/fourslash/signatureHelpOnOverloads.ts index 9712c9dc301ad..679ab118d3a76 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloads.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloads.ts @@ -4,15 +4,18 @@ ////declare function fn(x: string, y: number); ////fn(/*1*/ -goTo.marker('1'); -verify.signatureHelpCountIs(2); -verify.currentSignatureHelpIs("fn(x: string): any"); -verify.currentParameterHelpArgumentNameIs("x"); -verify.currentParameterSpanIs("x: string"); +verify.signatureHelp({ + marker: "1", + overloadsCount: 2, + text: "fn(x: string): any", + parameterName: "x", + parameterSpan: "x: string", +}); edit.insert("'',"); - -verify.signatureHelpCountIs(2); -verify.currentSignatureHelpIs("fn(x: string, y: number): any"); -verify.currentParameterHelpArgumentNameIs("y"); -verify.currentParameterSpanIs("y: number"); +verify.signatureHelp({ + overloadsCount: 2, + text: "fn(x: string, y: number): any", + parameterName: "y", + parameterSpan: "y: number", +}); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts index ff20d2ca5c21a..4e7ba421bc139 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts @@ -7,14 +7,18 @@ //// ////f(1/**/ -goTo.marker(); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(n: number): any"); -verify.currentParameterHelpArgumentNameIs("n"); -verify.currentParameterSpanIs("n: number"); +verify.signatureHelp({ + marker: "", + overloadsCount: 4, + text: "f(n: number): any", + parameterName: "n", + parameterSpan: "n: number", +}); edit.insert(", "); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(n: number, b: boolean): any"); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: boolean"); \ No newline at end of file +verify.signatureHelp({ + overloadsCount: 4, + text: "f(n: number, b: boolean): any", + parameterName: "b", + parameterSpan: "b: boolean", +}); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts index 1290859d84876..dee93f99f5a51 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts @@ -7,14 +7,18 @@ //// ////f(1/**/ var -goTo.marker(); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(n: number): any"); -verify.currentParameterHelpArgumentNameIs("n"); -verify.currentParameterSpanIs("n: number"); +verify.signatureHelp({ + marker: "", + overloadsCount: 4, + text: "f(n: number): any", + parameterName: "n", + parameterSpan: "n: number", +}); edit.insert(", "); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(n: number, b: boolean): any"); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: boolean"); \ No newline at end of file +verify.signatureHelp({ + overloadsCount: 4, + text: "f(n: number, b: boolean): any", + parameterName: "b", + parameterSpan: "b: boolean", +}); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts index d445997338bb7..371d3e3cc95c2 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts @@ -7,20 +7,26 @@ //// ////f(/**/ -goTo.marker(); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(): any"); -verify.currentSignatureParameterCountIs(0); -verify.signatureHelpArgumentCountIs(0); +verify.signatureHelp({ + marker: "", + overloadsCount: 4, + text: "f(): any", + parameterCount: 0, + argumentCount: 0, +}); edit.insert("x, "); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(s: string, b: boolean): any"); -verify.currentSignatureParameterCountIs(2); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: boolean"); +verify.signatureHelp({ + overloadsCount: 4, + text: "f(s: string, b: boolean): any", + parameterCount: 2, + parameterName: "b", + parameterSpan: "b: boolean", +}); edit.insert("x, "); -verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(s: string, b: boolean): any"); -verify.currentSignatureParameterCountIs(2); \ No newline at end of file +verify.signatureHelp({ + overloadsCount: 4, + text: "f(s: string, b: boolean): any", + parameterCount: 2, +}); diff --git a/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts b/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts index dcb1463510109..495ad064579e5 100644 --- a/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts +++ b/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts @@ -10,4 +10,4 @@ goTo.marker("1"); edit.insert("super("); -verify.currentSignatureHelpIs("B(x: string): B"); \ No newline at end of file +verify.signatureHelp({ text: "B(x: string): B" }); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpOnTypePredicates.ts b/tests/cases/fourslash/signatureHelpOnTypePredicates.ts index bfaa7df2502bb..4e7423128bad9 100644 --- a/tests/cases/fourslash/signatureHelpOnTypePredicates.ts +++ b/tests/cases/fourslash/signatureHelpOnTypePredicates.ts @@ -7,14 +7,8 @@ //// f2(/*2*/) //// f3(/*3*/) -goTo.marker("1"); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("f1(a: any): a is number"); - -goTo.marker("2"); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("f2(a: any): a is T"); - -goTo.marker("3"); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("f3(a: any, ...b: any[]): a is number"); \ No newline at end of file +verify.signatureHelp( + { marker: "1", text: "f1(a: any): a is number" }, + { marker: "2", text: "f2(a: any): a is T" }, + { marker: "3", text: "f3(a: any, ...b: any[]): a is number", isVariadic: true }, +) diff --git a/tests/cases/fourslash/signatureHelpSimpleConstructorCall.ts b/tests/cases/fourslash/signatureHelpSimpleConstructorCall.ts index 8a5fa60ace8a8..96ca6dbf1914c 100644 --- a/tests/cases/fourslash/signatureHelpSimpleConstructorCall.ts +++ b/tests/cases/fourslash/signatureHelpSimpleConstructorCall.ts @@ -1,17 +1,22 @@ /// -////class ConstructorCall { +////class ConstructorCall { //// constructor(str: string, num: number) { //// } ////} ////var x = new ConstructorCall(/*constructorCall1*/1,/*constructorCall2*/2); -goTo.marker('constructorCall1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("ConstructorCall(str: string, num: number): ConstructorCall"); -verify.currentParameterHelpArgumentNameIs("str"); -verify.currentParameterSpanIs("str: string"); -goTo.marker('constructorCall2'); -verify.currentSignatureHelpIs("ConstructorCall(str: string, num: number): ConstructorCall"); -verify.currentParameterHelpArgumentNameIs("num"); -verify.currentParameterSpanIs("num: number"); +verify.signatureHelp( + { + marker: "constructorCall1", + text: "ConstructorCall(str: string, num: number): ConstructorCall", + parameterName: "str", + parameterSpan: "str: string", + }, + { + marker: "constructorCall2", + text: "ConstructorCall(str: string, num: number): ConstructorCall", + parameterName: "num", + parameterSpan: "num: number", + }, +); diff --git a/tests/cases/fourslash/signatureHelpSimpleFunctionCall.ts b/tests/cases/fourslash/signatureHelpSimpleFunctionCall.ts index 0dc76c0eb0a2d..202b12488d6ef 100644 --- a/tests/cases/fourslash/signatureHelpSimpleFunctionCall.ts +++ b/tests/cases/fourslash/signatureHelpSimpleFunctionCall.ts @@ -6,14 +6,17 @@ ////functionCall(/*functionCall1*/); ////functionCall("", /*functionCall2*/1); - -goTo.marker('functionCall1'); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("functionCall(str: string, num: number): void"); -verify.currentParameterHelpArgumentNameIs("str"); -verify.currentParameterSpanIs("str: string"); -goTo.marker('functionCall2'); -verify.currentSignatureHelpIs("functionCall(str: string, num: number): void"); -verify.currentParameterHelpArgumentNameIs("num"); -verify.currentParameterSpanIs("num: number"); - +verify.signatureHelp( + { + marker: "functionCall1", + text: "functionCall(str: string, num: number): void", + parameterName: "str", + parameterSpan: "str: string", + }, + { + marker: "functionCall2", + text: "functionCall(str: string, num: number): void", + parameterName: "num", + parameterSpan: "num: number", + }, +); diff --git a/tests/cases/fourslash/signatureHelpSimpleSuperCall.ts b/tests/cases/fourslash/signatureHelpSimpleSuperCall.ts index 01d140f29ea5b..773179e521737 100644 --- a/tests/cases/fourslash/signatureHelpSimpleSuperCall.ts +++ b/tests/cases/fourslash/signatureHelpSimpleSuperCall.ts @@ -10,8 +10,9 @@ //// } ////} -goTo.marker('superCall'); -verify.signatureHelpCountIs(1); -verify.currentSignatureHelpIs("SuperCallBase(b: boolean): SuperCallBase"); -verify.currentParameterHelpArgumentNameIs("b"); -verify.currentParameterSpanIs("b: boolean"); +verify.signatureHelp({ + marker: "superCall", + text: "SuperCallBase(b: boolean): SuperCallBase", + parameterName: "b", + parameterSpan: "b: boolean", +}); diff --git a/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts b/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts index c65ce2824c03e..9c2b5272ceda1 100644 --- a/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts +++ b/tests/cases/fourslash/signatureHelpSuperConstructorOverload.ts @@ -1,28 +1,35 @@ /// -////class SuperOverloadlBase { +////class SuperOverloadBase { //// constructor(); //// constructor(test: string); //// constructor(test?: string) { //// } ////} -////class SuperOverLoad1 extends SuperOverloadlBase { +////class SuperOverLoad1 extends SuperOverloadBase { //// constructor() { //// super(/*superOverload1*/); //// } ////} -////class SuperOverLoad2 extends SuperOverloadlBase { +////class SuperOverLoad2 extends SuperOverloadBase { //// constructor() { //// super(""/*superOverload2*/); //// } ////} -goTo.marker('superOverload1'); -verify.signatureHelpCountIs(2); -verify.currentSignatureHelpIs("SuperOverloadlBase(): SuperOverloadlBase"); -verify.currentSignatureParameterCountIs(0); -goTo.marker('superOverload2'); -verify.currentSignatureParameterCountIs(1); -verify.currentSignatureHelpIs("SuperOverloadlBase(test: string): SuperOverloadlBase"); -verify.currentParameterHelpArgumentNameIs("test"); -verify.currentParameterSpanIs("test: string"); \ No newline at end of file +verify.signatureHelp( + { + marker: "superOverload1", + overloadsCount: 2, + text: "SuperOverloadBase(): SuperOverloadBase", + parameterCount: 0, + }, + { + marker: "superOverload2", + overloadsCount: 2, + text: "SuperOverloadBase(test: string): SuperOverloadBase", + parameterCount: 1, + parameterName: "test", + parameterSpan: "test: string", + }, +); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts index 87c9262f89396..3824d238af3ec 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates1.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/ qwe/*2*/rty /*3*/$/*4*/{ 123 }/*5*/ as/*6*/df /*7*/$/*8*/{ 41234 }/*9*/ zxc/*10*/vb /*11*/$/*12*/{ g ` ` }/*13*/ /*14*/ /*15*/` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 4, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts index ef306a2293467..dc8fafdf7b433 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates2.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/ qwe/*2*/rty /*3*/$/*4*/{ 123 }/*5*/ as/*6*/df /*7*/$/*8*/{ 41234 }/*9*/ zxc/*10*/vb /*11*/$/*12*/{ g ` ` }/*13*/ /*14*/ /*15*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 4, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts index 7859fd6f457e7..8ec7d55e0c8de 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates3.ts @@ -5,12 +5,11 @@ //// //// f ` qwerty ${/*1*/ /*2*/123/*3*/ /*4*/} asdf ${ 41234 } zxcvb ${ g ` ` } ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("x"); - verify.currentParameterSpanIs("x: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 4, + parameterCount: 4, + parameterName: "x", + parameterSpan: "x: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts index 4c8ce2cd917fc..526aea3595742 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates4.ts @@ -5,12 +5,11 @@ //// //// f ` qwerty ${ 123 } asdf ${/*1*/ /*2*/ /*3*/41/*4*/234/*5*/ /*6*/} zxcvb ${ g ` ` } ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("y"); - verify.currentParameterSpanIs("y: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 4, + parameterCount: 4, + parameterName: "y", + parameterSpan: "y: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts index 03ef244e719c5..4b29879047faa 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates5.ts @@ -5,12 +5,11 @@ //// //// f ` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${/*1*/ /*2*/g/*3*/ /*4*/` `/*5*/ /*6*/} ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("z"); - verify.currentParameterSpanIs("z: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 4, + parameterCount: 4, + parameterName: "z", + parameterSpan: "z: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts index 67ab1199be817..a0455fe01166c 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates6.ts @@ -5,12 +5,11 @@ //// //// f ` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${ g `/*1*/ /*2*/ /*3*/` } ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "g(templateStrings: any, x: any, y: any, z: any): string", + argumentCount: 1, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts index cd17ddd102789..bd5456ccdd068 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplates7.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/ /*2*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 1, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts index 2995c6cdcd8ed..7c50431f62fa8 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete1.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/ /*2*/${ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(2); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 2, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts index d1ceebfb1b025..c8ed457422e24 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete2.ts @@ -5,12 +5,11 @@ //// //// f ` ${/*1*/ /*2*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(2); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("x"); - verify.currentParameterSpanIs("x: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 2, + parameterCount: 4, + parameterName: "x", + parameterSpan: "x: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts index 211fa66f594a1..375a3d919ecb2 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete3.ts @@ -5,12 +5,11 @@ //// //// f ` ${ }/*1*/ /*2*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(2); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 2, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts index 79432077ce9a6..275dd2b536029 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete4.ts @@ -5,12 +5,11 @@ //// //// f ` ${ } ${/*1*/ /*2*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("y"); - verify.currentParameterSpanIs("y: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 3, + parameterCount: 4, + parameterName: "y", + parameterSpan: "y: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts index 18ffdbe3bf039..fa02e910637cc 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete5.ts @@ -5,12 +5,11 @@ //// //// f ` ${ } ${ }/*1*/ /*2*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 3, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts index fdd6f22554dec..c283d2e005383 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete6.ts @@ -5,12 +5,11 @@ //// //// f ` ${ 123 } ${/*1*/ } ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("y"); - verify.currentParameterSpanIs("y: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 3, + parameterCount: 4, + parameterName: "y", + parameterSpan: "y: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete7.ts index 9bc4a53556475..b375bcc30d2e4 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete7.ts @@ -8,12 +8,11 @@ //// /*6*/\\\/*7*/ //// /*8*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 3, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete8.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete8.ts index 05ab05c3e6cfe..1224f317f014d 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete8.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete8.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/\/*2*/`/*3*/ /*4*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 1, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete9.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete9.ts index 597ec928bb960..5635cf2a41867 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete9.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesIncomplete9.ts @@ -5,12 +5,11 @@ //// //// f `/*1*/ \\\/*2*/`/*3*/ /*4*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - verify.signatureHelpArgumentCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: any"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + argumentCount: 1, + parameterCount: 4, + parameterName: "templateStrings", + parameterSpan: "templateStrings: any", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts index 10f9f81fa61b9..7d3fcdb10b385 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives1.ts @@ -5,4 +5,4 @@ //// //// /*1*/f/*2*/ /*3*/` qwerty ${ 123 } asdf ${ 41234 } zxcvb ${ g ` ` } `/*4*/ -goTo.eachMarker(() => verify.not.signatureHelpPresent()); \ No newline at end of file +verify.noSignatureHelp(...test.markerNames()); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives2.ts index da21fda631cab..bc1c25e93fd7f 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives2.ts @@ -5,4 +5,4 @@ //// //// /*1*/fo/*2*/o /*3*/`abcd${0 + 1}abcd{1 + 1}`/*4*/ /*5*/ -goTo.eachMarker(() => verify.not.signatureHelpPresent()); \ No newline at end of file +verify.noSignatureHelp(...test.markerNames()); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives3.ts index 9ccbe927a57ad..ce6eae0911e1f 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives3.ts @@ -5,4 +5,4 @@ //// //// /*1*/fo/*2*/o /*3*/`abcd${0 + 1}abcd{1 + 1}abcd`/*4*/ /*5*/ -goTo.eachMarker(() => verify.not.signatureHelpPresent()); \ No newline at end of file +verify.noSignatureHelp(...test.markerNames()); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives4.ts index 825afd265ab6f..7f0f554f56882 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives4.ts @@ -5,4 +5,4 @@ //// //// /*1*/fo/*2*/o /*3*/``/*4*/ /*5*/ -goTo.eachMarker(() => verify.not.signatureHelpPresent()); \ No newline at end of file +verify.noSignatureHelp(...test.markerNames()); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives5.ts index 5b14b627f6aa3..cbcd570cc5650 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNegatives5.ts @@ -5,4 +5,4 @@ //// //// /*1*/fo/*2*/o /*3*/`abcd`/*4*/ -goTo.eachMarker(() => verify.not.signatureHelpPresent()); \ No newline at end of file +verify.noSignatureHelp(...test.markerNames()); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts index 313e55bf51722..e8c39a633a0d1 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested1.ts @@ -5,9 +5,8 @@ //// //// f `a ${ g `/*1*/alpha/*2*/ ${/*3*/ 12/*4*/3 /*5*/} beta /*6*/${ /*7*/456 /*8*/} gamma/*9*/` } b ${ g `/*10*/txt/*11*/` } c ${ g `/*12*/aleph /*13*/$/*14*/{ 12/*15*/3 } beit/*16*/` } d`; -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('g(templateStrings: any, x: any, y: any, z: any): string'); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "g(templateStrings: any, x: any, y: any, z: any): string", + parameterCount: 4, +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts index aa04e42599804..32a64402ee36a 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesNested2.ts @@ -5,9 +5,8 @@ //// //// f `/*1*/a $/*2*/{ /*3*/g /*4*/`alpha ${ 123 } beta ${ 456 } gamma`/*5*/ }/*6*/ b $/*7*/{ /*8*/g /*9*/`txt`/*10*/ } /*11*/c ${ /*12*/g /*13*/`aleph ${ 123 } beit`/*14*/ } d/*15*/`; -goTo.eachMarker(() => { - verify.signatureHelpCountIs(1); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: any, x: any, y: any, z: any): number'); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + text: "f(templateStrings: any, x: any, y: any, z: any): number", + parameterCount: 4, +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts index 54aee5887b82c..7d119a4d3e8e3 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags1.ts @@ -7,12 +7,12 @@ //// //// f `/*1*/ /*2*/$/*3*/{ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(2); - - verify.currentSignatureParameterCountIs(2); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); - verify.currentParameterHelpArgumentNameIs("templateStrings"); - verify.currentParameterSpanIs("templateStrings: string[]"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o1: string): number", + argumentCount: 2, + parameterCount: 2, + parameterName: "templateStrings", + parameterSpan: "templateStrings: string[]", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts index 9cbd20a49d2ab..9bd062cf62f3f 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags2.ts @@ -7,12 +7,12 @@ //// //// f `${/*1*/ /*2*/ /*3*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(2); - - verify.currentSignatureParameterCountIs(2); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o1: string): number'); - verify.currentParameterHelpArgumentNameIs("p1_o1"); - verify.currentParameterSpanIs("p1_o1: string"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o1: string): number", + argumentCount: 2, + parameterCount: 2, + parameterName: "p1_o1", + parameterSpan: "p1_o1: string", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts index a9b91dbf43888..3a76cbc1adad5 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts @@ -7,12 +7,12 @@ //// //// f `${/*1*/ "s/*2*/tring" /*3*/ } ${ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); - verify.currentParameterHelpArgumentNameIs("p1_o3"); - verify.currentParameterSpanIs("p1_o3: string"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", + argumentCount: 3, + parameterCount: 4, + parameterName: "p1_o3", + parameterSpan: "p1_o3: string", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts index 96ff7c4683ab8..fbf66ddd58e9b 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags4.ts @@ -7,12 +7,11 @@ //// //// f `${/*1*/ 123.456/*2*/ /*3*/ } ${ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); - verify.currentParameterHelpArgumentNameIs("p1_o2"); - verify.currentParameterSpanIs("p1_o2: number"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string", + parameterCount: 4, + parameterName: "p1_o2", + parameterSpan: "p1_o2: number", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts index 52a1e3f74be5c..dc4dc4db7ae3e 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags5.ts @@ -7,12 +7,12 @@ //// //// f `${ } ${/*1*/ /*2*/ /*3*/ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); - verify.currentParameterHelpArgumentNameIs("p2_o2"); - verify.currentParameterSpanIs("p2_o2: number"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string", + argumentCount: 3, + parameterCount: 4, + parameterName: "p2_o2", + parameterSpan: "p2_o2: number", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts index b34df14e92610..e012ec63665ad 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags6.ts @@ -7,12 +7,12 @@ //// //// f `${ } ${/*1*/ /*2*/ /*3*/} -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); - verify.currentParameterHelpArgumentNameIs("p2_o2"); - verify.currentParameterSpanIs("p2_o2: number"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string", + argumentCount: 3, + parameterCount: 4, + parameterName: "p2_o2", + parameterSpan: "p2_o2: number", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts index 26a80e36f6fe4..f61b0921ebf69 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts @@ -7,12 +7,12 @@ //// //// f `${ } ${/*1*/ fa/*2*/lse /*3*/} -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean'); - verify.currentParameterHelpArgumentNameIs("p2_o3"); - verify.currentParameterSpanIs("p2_o3: boolean"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", + argumentCount: 3, + parameterCount: 4, + parameterName: "p2_o3", + parameterSpan: "p2_o3: boolean", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts index 6b9daa60dcc4a..58ad3426f786d 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags8.ts @@ -7,12 +7,12 @@ //// //// f `${ undefined } ${ undefined } ${/*1*/ 10/*2*/./*3*/01 /*4*/} ` -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(4); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); - verify.currentParameterHelpArgumentNameIs("p3_o2"); - verify.currentParameterSpanIs("p3_o2: number"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string", + argumentCount: 4, + parameterCount: 4, + parameterName: "p3_o2", + parameterSpan: "p3_o2: number", +}); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts index cbcc55a2f22d7..daf0a55965e38 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags9.ts @@ -7,12 +7,12 @@ //// //// f `${/*1*/ /*2*/ /*3*/} ${ -goTo.eachMarker(() => { - verify.signatureHelpCountIs(3); - verify.signatureHelpArgumentCountIs(3); - - verify.currentSignatureParameterCountIs(4); - verify.currentSignatureHelpIs('f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string'); - verify.currentParameterHelpArgumentNameIs("p1_o2"); - verify.currentParameterSpanIs("p1_o2: number"); -}); \ No newline at end of file +verify.signatureHelp({ + marker: test.markerNames(), + overloadsCount: 3, + text: "f(templateStrings: string[], p1_o2: number, p2_o2: number, p3_o2: number): string", + argumentCount: 3, + parameterCount: 4, + parameterName: "p1_o2", + parameterSpan: "p1_o2: number", +}); diff --git a/tests/cases/fourslash/signatureHelpThis.ts b/tests/cases/fourslash/signatureHelpThis.ts index 2ac19c823c05a..b5600b8b77814 100644 --- a/tests/cases/fourslash/signatureHelpThis.ts +++ b/tests/cases/fourslash/signatureHelpThis.ts @@ -28,16 +28,7 @@ ////let o = { n: 14, m: explicitLiteral }; ////o.m(/*6*/); - -goTo.marker('1'); -verify.currentParameterHelpArgumentNameIs("n"); -goTo.marker('2'); -verify.currentParameterHelpArgumentNameIs("n"); -goTo.marker('3'); -verify.currentParameterHelpArgumentNameIs("n"); -goTo.marker('4'); -verify.currentParameterHelpArgumentNameIs("x"); -goTo.marker('5'); -verify.currentParameterHelpArgumentNameIs("x"); -goTo.marker('6'); -verify.currentParameterHelpArgumentNameIs("x"); +verify.signatureHelp( + { marker: ["1", "2", "3"], parameterName: "n" }, + { marker: ["4", "5", "6"], parameterName: "x" }, +); diff --git a/tests/cases/fourslash/signatureHelpTypeParametersNotVariadic.ts b/tests/cases/fourslash/signatureHelpTypeParametersNotVariadic.ts index 30b0bac7e7117..54b576ad7f8a4 100644 --- a/tests/cases/fourslash/signatureHelpTypeParametersNotVariadic.ts +++ b/tests/cases/fourslash/signatureHelpTypeParametersNotVariadic.ts @@ -3,6 +3,4 @@ //// declare function f(a: any, ...b: any[]): any; //// f(1, 2); -goTo.marker("1"); -verify.signatureHelpArgumentCountIs(0); -verify.signatureHelpCurrentArgumentListIsVariadic(false); \ No newline at end of file +verify.signatureHelp({ marker: "1", argumentCount: 0, isVariadic: false }); diff --git a/tests/cases/fourslash/signatureHelpWhenEditingCallExpression.ts b/tests/cases/fourslash/signatureHelpWhenEditingCallExpression.ts index 61e51d0a4e7c6..334a6f30058b4 100644 --- a/tests/cases/fourslash/signatureHelpWhenEditingCallExpression.ts +++ b/tests/cases/fourslash/signatureHelpWhenEditingCallExpression.ts @@ -1,30 +1,32 @@ /// /////** -//// * Returns the substring at the specified location within a String object. -//// * @param start The zero-based index integer indicating the beginning of the substring. -//// * @param end Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. -//// * If end is omitted, the characters from start through the end of the original string are returned. -//// */ -////function foo(start: number, end?: number) { -//// return ""; -////} +//// * @param start The start +//// * @param end The end +//// * More text +//// */ +////declare function foo(start: number, end?: number); //// ////fo/*1*/ -goTo.marker('1'); -verify.not.signatureHelpPresent(); + +const tags: ReadonlyArray = [ + { name: "param", text: "start The start" }, + { name: "param", text: "end The end\nMore text" }, +]; +verify.noSignatureHelp("1"); edit.insert("o"); -verify.not.signatureHelpPresent(); +verify.noSignatureHelp(); edit.insert("("); -verify.currentParameterHelpArgumentDocCommentIs("The zero-based index integer indicating the beginning of the substring."); +verify.signatureHelp({ parameterDocComment: "The start", tags }); edit.insert("10,"); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); +const help2: FourSlashInterface.VerifySignatureHelpOptions = { parameterDocComment: "The end\nMore text", tags }; +verify.signatureHelp(help2); edit.insert(" "); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); +verify.signatureHelp(help2); edit.insert(", "); edit.backspace(3); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); +verify.signatureHelp(help2); edit.insert("12"); -verify.currentParameterHelpArgumentDocCommentIs("Zero-based index integer indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\nIf end is omitted, the characters from start through the end of the original string are returned."); +verify.signatureHelp(help2); edit.insert(")"); -verify.not.signatureHelpPresent(); +verify.noSignatureHelp(); diff --git a/tests/cases/fourslash/signatureHelpWithInterfaceAsIdentifier.ts b/tests/cases/fourslash/signatureHelpWithInterfaceAsIdentifier.ts index cf89b4f476907..a9018217556a3 100644 --- a/tests/cases/fourslash/signatureHelpWithInterfaceAsIdentifier.ts +++ b/tests/cases/fourslash/signatureHelpWithInterfaceAsIdentifier.ts @@ -5,5 +5,4 @@ ////} ////C(/*1*/); -goTo.marker('1'); -verify.not.signatureHelpPresent(); \ No newline at end of file +verify.noSignatureHelp("1"); diff --git a/tests/cases/fourslash/signatureHelpWithInvalidArgumentList1.ts b/tests/cases/fourslash/signatureHelpWithInvalidArgumentList1.ts index f280adb1d9e2e..041cb8b76eb10 100644 --- a/tests/cases/fourslash/signatureHelpWithInvalidArgumentList1.ts +++ b/tests/cases/fourslash/signatureHelpWithInvalidArgumentList1.ts @@ -3,7 +3,4 @@ ////function foo(a) { } ////foo(hello my name /**/is -goTo.marker(); -verify.signatureHelpPresent(); -verify.signatureHelpCountIs(1); - +verify.signatureHelp({ marker: "", text: "foo(a: any): void" }); diff --git a/tests/cases/fourslash/signatureHelpWithUnknown.ts b/tests/cases/fourslash/signatureHelpWithUnknown.ts index e2ade663484d2..894deb8c93841 100644 --- a/tests/cases/fourslash/signatureHelpWithUnknown.ts +++ b/tests/cases/fourslash/signatureHelpWithUnknown.ts @@ -2,5 +2,10 @@ ////eval(\/*1*/ -goTo.marker("1"); -verify.signatureHelpCountIs(1); +verify.signatureHelp({ + marker: "1", + text: "eval(x: string): any", + docComment: "Evaluates JavaScript code and executes it.", + parameterDocComment: "A String value that contains valid JavaScript code.", + tags: [{ name: "param", text: "x A String value that contains valid JavaScript code." }], +}); diff --git a/tests/cases/fourslash/staticGenericOverloads1.ts b/tests/cases/fourslash/staticGenericOverloads1.ts index 547e8d5d2bf50..e67b9df8d2d41 100644 --- a/tests/cases/fourslash/staticGenericOverloads1.ts +++ b/tests/cases/fourslash/staticGenericOverloads1.ts @@ -11,12 +11,13 @@ ////var a = new A(); ////A.B(/**/ -goTo.marker(); -verify.signatureHelpCountIs(2); +verify.signatureHelp({ marker: "", overloadsCount: 2 }); edit.insert('a'); -verify.signatureHelpCountIs(2); -// verify.currentSignatureHelpIs('B(v: A): A') +verify.signatureHelp({ overloadsCount: 2 }); +// TODO: GH#23631 +// verify.signatureHelp({ text: "B(v: A): A" }); edit.insert('); A.B('); -verify.currentSignatureHelpIs('B(v: A<{}>): A<{}>'); +verify.signatureHelp({ overloadsCount: 2, text: "B(v: A<{}>): A<{}>" }); edit.insert('a'); -// verify.currentSignatureHelpIs('B(v: A): A') +// TODO: GH#23631 +// verify.signatureHelp({ text: "B(v: A): A" }); diff --git a/tests/cases/fourslash/superInsideInnerClass.ts b/tests/cases/fourslash/superInsideInnerClass.ts index 3b85179b0d83e..98407179badc5 100644 --- a/tests/cases/fourslash/superInsideInnerClass.ts +++ b/tests/cases/fourslash/superInsideInnerClass.ts @@ -11,5 +11,4 @@ //// } ////} -goTo.marker('1'); -verify.signatureHelpCountIs(0); +verify.noSignatureHelp("1"); diff --git a/tests/cases/fourslash/trailingCommaSignatureHelp.ts b/tests/cases/fourslash/trailingCommaSignatureHelp.ts index 4881571cd2b0b..1b7c097eece14 100644 --- a/tests/cases/fourslash/trailingCommaSignatureHelp.ts +++ b/tests/cases/fourslash/trailingCommaSignatureHelp.ts @@ -9,7 +9,10 @@ ////function str(n: number, radix?: number): string { return ""; } edit.insert("str(1,"); -verify.currentParameterHelpArgumentNameIs("radix"); -verify.currentParameterHelpArgumentDocCommentIs("The radix"); -verify.currentSignatureHelpIs("str(n: number, radix: number): string"); -verify.currentSignatureHelpDocCommentIs("Stringifies a number with radix"); +verify.signatureHelp({ + text: "str(n: number, radix: number): string", + parameterName: "radix", + parameterDocComment: "The radix", + docComment: "Stringifies a number with radix", + tags: [{ name: "param", text: "radix The radix" }], +}); diff --git a/tests/cases/fourslash/tsxSignatureHelp1.ts b/tests/cases/fourslash/tsxSignatureHelp1.ts index a0fd59d11ecda..56d4d8b5f7e69 100644 --- a/tests/cases/fourslash/tsxSignatureHelp1.ts +++ b/tests/cases/fourslash/tsxSignatureHelp1.ts @@ -16,7 +16,7 @@ //// } //// function _buildMainButton({ onClick, children, className }: ButtonProps): JSX.Element { -//// return(); +//// return(); //// } //// export function MainButton(props: ButtonProps): JSX.Element { @@ -24,12 +24,15 @@ //// } //// let e1 = { children || 'MAIN BUTTON'}); +//// return(); //// } //// export function MainButton(buttonProps: ButtonProps): JSX.Element; @@ -30,12 +30,9 @@ //// } //// let e1 = Date: Tue, 15 May 2018 12:35:08 -0700 Subject: [PATCH 36/69] Copy allowTextChangesInNewFiles property to protocol.ts (#24127) --- src/server/protocol.ts | 1 + tests/baselines/reference/api/tsserverlibrary.d.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 289478e745317..20854c7597b2e 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -2682,6 +2682,7 @@ namespace ts.server.protocol { */ readonly includeCompletionsWithInsertText?: boolean; readonly importModuleSpecifierPreference?: "relative" | "non-relative"; + readonly allowTextChangesInNewFiles?: boolean; } export interface CompilerOptions { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 3801b18938f0d..6c3e0c9b7a193 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -7579,6 +7579,7 @@ declare namespace ts.server.protocol { */ readonly includeCompletionsWithInsertText?: boolean; readonly importModuleSpecifierPreference?: "relative" | "non-relative"; + readonly allowTextChangesInNewFiles?: boolean; } interface CompilerOptions { allowJs?: boolean; From 0ba8998c8200621ff5de11329bf74c85f3019869 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 15 May 2018 12:49:54 -0700 Subject: [PATCH 37/69] Fix stack overflow in merge symbol (#24134) * JS initializers use original valueDecl, not mutated target's valueDeclaration is set to the source's if it is not present. This makes it incorrect to use getJSInitializerSymbol because it relies on the symbol's valueDeclaration. This fix just saves the original valueDeclaration before mutating and uses that. * Compare merged targetInitializer to target Instead of the unmerged one * Add test of stack overflow --- src/compiler/checker.ts | 12 ++++++---- .../jsContainerMergeJsContainer.symbols | 18 +++++++++++++++ .../jsContainerMergeJsContainer.types | 23 +++++++++++++++++++ .../salsa/jsContainerMergeJsContainer.ts | 10 ++++++++ 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/jsContainerMergeJsContainer.symbols create mode 100644 tests/baselines/reference/jsContainerMergeJsContainer.types create mode 100644 tests/cases/conformance/salsa/jsContainerMergeJsContainer.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b85acc03d468f..5e9a0ae9dc883 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -892,6 +892,7 @@ namespace ts { function mergeSymbol(target: Symbol, source: Symbol) { if (!(target.flags & getExcludedSymbolFlags(source.flags)) || (source.flags | target.flags) & SymbolFlags.JSContainer) { + const targetValueDeclaration = target.valueDeclaration; Debug.assert(!!(target.flags & SymbolFlags.Transient)); // Javascript static-property-assignment declarations always merge, even though they are also values if (source.flags & SymbolFlags.ValueModule && target.flags & SymbolFlags.ValueModule && target.constEnumOnlyModule && !source.constEnumOnlyModule) { @@ -916,12 +917,13 @@ namespace ts { } if ((source.flags | target.flags) & SymbolFlags.JSContainer) { const sourceInitializer = getJSInitializerSymbol(source); - let targetInitializer = getJSInitializerSymbol(target); + const init = getDeclaredJavascriptInitializer(targetValueDeclaration) || getAssignedJavascriptInitializer(targetValueDeclaration); + let targetInitializer = init && init.symbol ? init.symbol : target; + if (!(targetInitializer.flags & SymbolFlags.Transient)) { + const mergedInitializer = getMergedSymbol(targetInitializer); + targetInitializer = mergedInitializer === targetInitializer ? cloneSymbol(targetInitializer) : mergedInitializer; + } if (sourceInitializer !== source || targetInitializer !== target) { - if (!(targetInitializer.flags & SymbolFlags.Transient)) { - const mergedInitializer = getMergedSymbol(targetInitializer); - targetInitializer = mergedInitializer === targetInitializer ? cloneSymbol(targetInitializer) : mergedInitializer; - } mergeSymbol(targetInitializer, sourceInitializer); } } diff --git a/tests/baselines/reference/jsContainerMergeJsContainer.symbols b/tests/baselines/reference/jsContainerMergeJsContainer.symbols new file mode 100644 index 0000000000000..1f4728d50de75 --- /dev/null +++ b/tests/baselines/reference/jsContainerMergeJsContainer.symbols @@ -0,0 +1,18 @@ +=== tests/cases/conformance/salsa/a.js === +// #24131 +const a = {}; +>a : Symbol(a, Decl(a.js, 1, 5), Decl(a.js, 1, 13), Decl(b.js, 0, 0)) + +a.d = function() {}; +>a.d : Symbol(d, Decl(a.js, 1, 13), Decl(b.js, 0, 2)) +>a : Symbol(a, Decl(a.js, 1, 5), Decl(a.js, 1, 13), Decl(b.js, 0, 0)) +>d : Symbol(d, Decl(a.js, 1, 13), Decl(b.js, 0, 2)) + +=== tests/cases/conformance/salsa/b.js === +a.d.prototype = {}; +>a.d.prototype : Symbol(d.prototype, Decl(b.js, 0, 0)) +>a.d : Symbol(d, Decl(a.js, 1, 13), Decl(b.js, 0, 2)) +>a : Symbol(a, Decl(a.js, 1, 5), Decl(a.js, 1, 13), Decl(b.js, 0, 0)) +>d : Symbol(d, Decl(a.js, 1, 13), Decl(b.js, 0, 2)) +>prototype : Symbol(d.prototype, Decl(b.js, 0, 0)) + diff --git a/tests/baselines/reference/jsContainerMergeJsContainer.types b/tests/baselines/reference/jsContainerMergeJsContainer.types new file mode 100644 index 0000000000000..fa5c74f5b05db --- /dev/null +++ b/tests/baselines/reference/jsContainerMergeJsContainer.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/salsa/a.js === +// #24131 +const a = {}; +>a : { [x: string]: any; d: typeof d; } +>{} : { [x: string]: any; d: typeof d; } + +a.d = function() {}; +>a.d = function() {} : typeof d +>a.d : typeof d +>a : { [x: string]: any; d: typeof d; } +>d : typeof d +>function() {} : typeof d + +=== tests/cases/conformance/salsa/b.js === +a.d.prototype = {}; +>a.d.prototype = {} : { [x: string]: any; } +>a.d.prototype : { [x: string]: any; } +>a.d : typeof d +>a : { [x: string]: any; d: typeof d; } +>d : typeof d +>prototype : { [x: string]: any; } +>{} : { [x: string]: any; } + diff --git a/tests/cases/conformance/salsa/jsContainerMergeJsContainer.ts b/tests/cases/conformance/salsa/jsContainerMergeJsContainer.ts new file mode 100644 index 0000000000000..3d6cbb35b75ee --- /dev/null +++ b/tests/cases/conformance/salsa/jsContainerMergeJsContainer.ts @@ -0,0 +1,10 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true + +// #24131 +// @Filename: a.js +const a = {}; +a.d = function() {}; +// @Filename: b.js +a.d.prototype = {}; From 86dce41ec0be40ceba690ce9a4e041d046bfc747 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 15 May 2018 13:11:38 -0700 Subject: [PATCH 38/69] Move synthetic comments from arrow body expressions to return statement (#24135) --- src/compiler/factory.ts | 9 ++++++ src/compiler/transformers/es2015.ts | 1 + src/harness/unittests/transform.ts | 29 +++++++++++++++++++ .../reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + ...y.transformAddCommentToArrowReturnValue.js | 4 +++ 6 files changed, 45 insertions(+) create mode 100644 tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToArrowReturnValue.js diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 766b87ae941d0..a286c9fae3566 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -2900,6 +2900,15 @@ namespace ts { return setSyntheticTrailingComments(node, append(getSyntheticTrailingComments(node), { kind, pos: -1, end: -1, hasTrailingNewLine, text })); } + export function moveSyntheticComments(node: T, original: Node): T { + setSyntheticLeadingComments(node, getSyntheticLeadingComments(original)); + setSyntheticTrailingComments(node, getSyntheticTrailingComments(original)); + const emit = getOrCreateEmitNode(original); + emit.leadingComments = undefined; + emit.trailingComments = undefined; + return node; + } + /** * Gets the constant value to emit for an expression. */ diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 2685f1da88d95..7e356ca4a3a65 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -1885,6 +1885,7 @@ namespace ts { const expression = visitNode(body, visitor, isExpression); const returnStatement = createReturn(expression); setTextRange(returnStatement, body); + moveSyntheticComments(returnStatement, body); setEmitFlags(returnStatement, EmitFlags.NoTokenSourceMaps | EmitFlags.NoTrailingSourceMap | EmitFlags.NoTrailingComments); statements.push(returnStatement); diff --git a/src/harness/unittests/transform.ts b/src/harness/unittests/transform.ts index 14b9ccdbfb8a7..61d8dc04e183b 100644 --- a/src/harness/unittests/transform.ts +++ b/src/harness/unittests/transform.ts @@ -270,6 +270,35 @@ namespace ts { program.emit(program.getSourceFiles()[1], (p, s, bom) => host.writeFile(p, s, bom), /*cancellationToken*/ undefined, /*onlyDts*/ true, opts.transformers); return fs.readFileSync("/.src/index.d.ts").toString(); } + + // https://github.com/Microsoft/TypeScript/issues/24096 + testBaseline("transformAddCommentToArrowReturnValue", () => { + return transpileModule(`const foo = () => + void 0 +`, { + transformers: { + before: [addSyntheticComment], + }, + compilerOptions: { + target: ScriptTarget.ES5, + newLine: NewLineKind.CarriageReturnLineFeed, + } + }).outputText; + + function addSyntheticComment(context: TransformationContext) { + return (sourceFile: SourceFile): SourceFile => { + return visitNode(sourceFile, rootTransform, isSourceFile); + }; + function rootTransform(node: T): VisitResult { + if (isVoidExpression(node)) { + setEmitFlags(node, EmitFlags.NoLeadingComments); + setSyntheticLeadingComments(node, [{ kind: SyntaxKind.SingleLineCommentTrivia, text: "// comment!", pos: -1, end: -1, hasTrailingNewLine: true }]); + return node; + } + return visitEachChild(node, rootTransform, context); + } + } + }); }); } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 6c3e0c9b7a193..d3c9bb8849fb9 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -3860,6 +3860,7 @@ declare namespace ts { function getSyntheticTrailingComments(node: Node): SynthesizedComment[] | undefined; function setSyntheticTrailingComments(node: T, comments: SynthesizedComment[]): T; function addSyntheticTrailingComment(node: T, kind: SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia, text: string, hasTrailingNewLine?: boolean): T; + function moveSyntheticComments(node: T, original: Node): T; /** * Gets the constant value to emit for an expression. */ diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 2b4f6fe5beb8b..4f1b38c2c8a1b 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3860,6 +3860,7 @@ declare namespace ts { function getSyntheticTrailingComments(node: Node): SynthesizedComment[] | undefined; function setSyntheticTrailingComments(node: T, comments: SynthesizedComment[]): T; function addSyntheticTrailingComment(node: T, kind: SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia, text: string, hasTrailingNewLine?: boolean): T; + function moveSyntheticComments(node: T, original: Node): T; /** * Gets the constant value to emit for an expression. */ diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToArrowReturnValue.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToArrowReturnValue.js new file mode 100644 index 0000000000000..37ff0597054e3 --- /dev/null +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToArrowReturnValue.js @@ -0,0 +1,4 @@ +var foo = function () { + //// comment! + return void 0; +}; From cbbe34b35e548fa282ff18b3d9111e5963ea4bca Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 15 May 2018 13:55:26 -0700 Subject: [PATCH 39/69] Fix conversion of TextChanges to FileCodeEdits for new file (#24126) --- src/server/project.ts | 2 +- src/server/session.ts | 23 +++++++++++++++---- src/services/textChanges.ts | 2 +- src/services/types.ts | 1 + .../reference/api/tsserverlibrary.d.ts | 4 +++- tests/baselines/reference/api/typescript.d.ts | 1 + 6 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/server/project.ts b/src/server/project.ts index 6073cd9caef6e..5b1dbddfc2018 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -964,7 +964,7 @@ namespace ts.server { return this.missingFilesMap && this.missingFilesMap.has(path); } - getScriptInfoForNormalizedPath(fileName: NormalizedPath) { + getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined { const scriptInfo = this.projectService.getScriptInfoForPath(this.toPath(fileName)); if (scriptInfo && !scriptInfo.isAttached(this)) { return Errors.ThrowProjectDoesNotContainDocument(fileName, this); diff --git a/src/server/session.ts b/src/server/session.ts index d0c58b209229f..40f26785113cf 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -1766,11 +1766,17 @@ namespace ts.server { return textChanges.map(change => this.mapTextChangesToCodeEditsUsingScriptinfo(change, project.getScriptInfoForNormalizedPath(toNormalizedPath(change.fileName)))); } - private mapTextChangesToCodeEditsUsingScriptinfo(textChanges: FileTextChanges, scriptInfo: ScriptInfo): protocol.FileCodeEdits { - return { - fileName: textChanges.fileName, - textChanges: textChanges.textChanges.map(textChange => this.convertTextChangeToCodeEdit(textChange, scriptInfo)) - }; + private mapTextChangesToCodeEditsUsingScriptinfo(textChanges: FileTextChanges, scriptInfo: ScriptInfo | undefined): protocol.FileCodeEdits { + Debug.assert(!!textChanges.isNewFile === !scriptInfo); + if (scriptInfo) { + return { + fileName: textChanges.fileName, + textChanges: textChanges.textChanges.map(textChange => this.convertTextChangeToCodeEdit(textChange, scriptInfo)) + }; + } + else { + return this.convertNewFileTextChangeToCodeEdit(textChanges); + } } private convertTextChangeToCodeEdit(change: TextChange, scriptInfo: ScriptInfo): protocol.CodeEdit { @@ -1781,6 +1787,13 @@ namespace ts.server { }; } + private convertNewFileTextChangeToCodeEdit(textChanges: FileTextChanges): protocol.FileCodeEdits { + Debug.assert(textChanges.textChanges.length === 1); + const change = first(textChanges.textChanges); + Debug.assert(change.span.start === 0 && change.span.length === 0); + return { fileName: textChanges.fileName, textChanges: [{ start: { line: 0, offset: 0 }, end: { line: 0, offset: 0 }, newText: change.newText }] }; + } + private getBraceMatching(args: protocol.FileLocationRequestArgs, simplifiedResult: boolean): protocol.TextSpan[] | TextSpan[] { const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index de588120db124..1ddfa2e64485f 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -719,7 +719,7 @@ namespace ts.textChanges { export function newFileChanges(oldFile: SourceFile, fileName: string, statements: ReadonlyArray, newLineCharacter: string): FileTextChanges { const text = statements.map(s => getNonformattedText(s, oldFile, newLineCharacter).text).join(newLineCharacter); - return { fileName, textChanges: [createTextChange(createTextSpan(0, 0), text)] }; + return { fileName, textChanges: [createTextChange(createTextSpan(0, 0), text)], isNewFile: true }; } function computeNewText(change: Change, sourceFile: SourceFile, newLineCharacter: string, formatContext: formatting.FormatContext, validate: ValidateNonFormattedText): string { diff --git a/src/services/types.ts b/src/services/types.ts index 0d15213cb1204..0e9dbccbd1bbd 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -439,6 +439,7 @@ namespace ts { export interface FileTextChanges { fileName: string; textChanges: TextChange[]; + isNewFile?: boolean; } export interface CodeAction { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index d3c9bb8849fb9..67bd6cbe9801b 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -4618,6 +4618,7 @@ declare namespace ts { interface FileTextChanges { fileName: string; textChanges: TextChange[]; + isNewFile?: boolean; } interface CodeAction { /** Description of the code action to display in the UI of the editor */ @@ -7898,7 +7899,7 @@ declare namespace ts.server { private detachScriptInfoFromProject; private addMissingFileWatcher; private isWatchedMissingFile; - getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo; + getScriptInfoForNormalizedPath(fileName: NormalizedPath): ScriptInfo | undefined; getScriptInfo(uncheckedFileName: string): ScriptInfo; filesToString(writeProjectFileNames: boolean): string; setCompilerOptions(compilerOptions: CompilerOptions): void; @@ -8492,6 +8493,7 @@ declare namespace ts.server { private mapTextChangesToCodeEdits; private mapTextChangesToCodeEditsUsingScriptinfo; private convertTextChangeToCodeEdit; + private convertNewFileTextChangeToCodeEdit; private getBraceMatching; private getDiagnosticsForProject; getCanonicalFileName(fileName: string): string; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 4f1b38c2c8a1b..ef435632a3667 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4618,6 +4618,7 @@ declare namespace ts { interface FileTextChanges { fileName: string; textChanges: TextChange[]; + isNewFile?: boolean; } interface CodeAction { /** Description of the code action to display in the UI of the editor */ From 339a56fbf014dfdf9f9fd7a41affd242ae70137f Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 15 May 2018 15:12:29 -0700 Subject: [PATCH 40/69] Avoid duplicates when finding jsdoc (#24086) * Avoid duplicates when finding jsdoc 1. Add a cheap assert for detecting duplicates. getJSDocTags must find either [1] 0 or 1 comments or [2] the first two comments must not be identical. This does not always find duplicates for nodes with 3 or more comments, but these nodes are exceptionally rare. This assert fired for over 20 of the around 250 tests we have that retrieve JSDoc at all. So I fixed the asserts in [2] and [3]. 2. There were overlapping cases from calls to getSourceOfAssignment and getSpecialPropertyAssignment. getSpecialPropertyAssignment is too restrictive, but was in the correct location (parent vs parent.parent), so I removed the getSourceOfAssignment call and replaced the getSpecialPropertyAssignment calls with a less restrictive check. 3. When a node's parent is a PropertyDeclaration, getJSDocCOmmentsAndTags would check the parent for jsdoc. But when the *node* is a PropertyDeclaration, getJSDocCommentsAndTags would use the jsdoc from the initializer. This second case is useful to make sure that property declarations get all their jsdoc, but results in duplicates for their initializers. I couldn't think of a better fix than tracking the previous node in the recursive lookup of getJSDocCommentsAndTags, which is a little clunky. * Fix lint; remove new context parameter * Update importJsNodeModule3 with fix --- src/compiler/utilities.ts | 16 +++++++++------- tests/cases/fourslash/importJsNodeModule3.ts | 5 +---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 29bd38803d048..d5cd22d7b7cc6 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1842,9 +1842,9 @@ namespace ts { (node as ModuleDeclaration).body; } - export function getJSDocCommentsAndTags(node: Node): ReadonlyArray { + export function getJSDocCommentsAndTags(hostNode: Node): ReadonlyArray { let result: (JSDoc | JSDocTag)[] | undefined; - getJSDocCommentsAndTagsWorker(node); + getJSDocCommentsAndTagsWorker(hostNode); return result || emptyArray; function getJSDocCommentsAndTagsWorker(node: Node): void { @@ -1860,7 +1860,7 @@ namespace ts { // */ // var x = function(name) { return name.length; } if (parent.parent && - (getSingleVariableOfVariableStatement(parent.parent) === node || getSourceOfAssignment(parent.parent))) { + (getSingleVariableOfVariableStatement(parent.parent) === node)) { getJSDocCommentsAndTagsWorker(parent.parent); } if (parent.parent && parent.parent.parent && @@ -1869,8 +1869,8 @@ namespace ts { getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } - if (isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) !== SpecialPropertyAssignmentKind.None || - isBinaryExpression(parent) && getSpecialPropertyAssignmentKind(parent) !== SpecialPropertyAssignmentKind.None || + if (isBinaryExpression(node) && node.operatorToken.kind === SyntaxKind.EqualsToken || + isBinaryExpression(parent) && parent.operatorToken.kind === SyntaxKind.EqualsToken || node.kind === SyntaxKind.PropertyAccessExpression && node.parent && node.parent.kind === SyntaxKind.ExpressionStatement) { getJSDocCommentsAndTagsWorker(parent); } @@ -1880,7 +1880,7 @@ namespace ts { result = addRange(result, getJSDocParameterTags(node as ParameterDeclaration)); } - if (isVariableLike(node) && hasInitializer(node) && hasJSDocNodes(node.initializer)) { + if (isVariableLike(node) && hasInitializer(node) && node.initializer !== hostNode && hasJSDocNodes(node.initializer)) { result = addRange(result, node.initializer.jsDoc); } @@ -4771,7 +4771,9 @@ namespace ts { let tags = (node as JSDocContainer).jsDocCache; // If cache is 'null', that means we did the work of searching for JSDoc tags and came up with nothing. if (tags === undefined) { - (node as JSDocContainer).jsDocCache = tags = flatMap(getJSDocCommentsAndTags(node), j => isJSDoc(j) ? j.tags : j); + const comments = getJSDocCommentsAndTags(node); + Debug.assert(comments.length < 2 || comments[0] !== comments[1]); + (node as JSDocContainer).jsDocCache = tags = flatMap(comments, j => isJSDoc(j) ? j.tags : j); } return tags; } diff --git a/tests/cases/fourslash/importJsNodeModule3.ts b/tests/cases/fourslash/importJsNodeModule3.ts index 6c44dd65b63ca..46ff4d009bebf 100644 --- a/tests/cases/fourslash/importJsNodeModule3.ts +++ b/tests/cases/fourslash/importJsNodeModule3.ts @@ -37,12 +37,9 @@ edit.backspace(2); edit.insert('z('); verify.signatureHelp({ text: "z(a: number | boolean, b: string[]): string", - // TODO: GH#24129 - parameterDocComment: "The first param\nThe first param", + parameterDocComment: "The first param", tags: [ { name: "param", text: "a The first param" }, { name: "param", text: "b The second param" }, - { name: "param", text: "a The first param" }, - { name: "param", text: "b The second param" }, ], }); From d4a3c9c61ab0b532ac9404fbe457666d08a000fe Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 15 May 2018 16:21:15 -0700 Subject: [PATCH 41/69] Fix placement of indent for @ts-ignore comment (#24143) --- src/services/textChanges.ts | 3 ++- ...ableJsDiagnosticsInFile_tsIgnore_indent.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixDisableJsDiagnosticsInFile_tsIgnore_indent.ts diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 1ddfa2e64485f..37d760ac8f55b 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -360,7 +360,8 @@ namespace ts.textChanges { // Otherwise, add an extra new line immediately before the error span. const insertAtLineStart = isValidLocationToAddComment(sourceFile, startPosition); const token = getTouchingToken(sourceFile, insertAtLineStart ? startPosition : position, /*includeJsDocComment*/ false); - const text = `${insertAtLineStart ? "" : this.newLineCharacter}${sourceFile.text.slice(lineStartPosition, startPosition)}//${commentText}${this.newLineCharacter}`; + const indent = sourceFile.text.slice(lineStartPosition, startPosition); + const text = `${insertAtLineStart ? "" : this.newLineCharacter}//${commentText}${this.newLineCharacter}${indent}`; this.insertText(sourceFile, token.getStart(sourceFile), text); } diff --git a/tests/cases/fourslash/codeFixDisableJsDiagnosticsInFile_tsIgnore_indent.ts b/tests/cases/fourslash/codeFixDisableJsDiagnosticsInFile_tsIgnore_indent.ts new file mode 100644 index 0000000000000..7368ce1f3367b --- /dev/null +++ b/tests/cases/fourslash/codeFixDisableJsDiagnosticsInFile_tsIgnore_indent.ts @@ -0,0 +1,19 @@ +/// + +// @allowjs: true +// @checkJs: true + +// @Filename: /a.js +////{ +//// a; +////} + +verify.codeFix({ + description: "Ignore this error message", + index: 0, + newFileContent: +`{ + // @ts-ignore + a; +}`, +}); From 2200c94a43d306b6be741dc587e07d826eb47d70 Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 15 May 2018 16:22:13 -0700 Subject: [PATCH 42/69] Fix unused diagnostic for rename-destructuring `{ a: b }` (#24145) --- src/compiler/checker.ts | 4 ++-- .../reference/unusedDestructuring.errors.txt | 14 +++++++++----- .../baselines/reference/unusedDestructuring.js | 2 ++ .../reference/unusedDestructuring.symbols | 18 +++++++++++------- .../reference/unusedDestructuring.types | 5 +++++ tests/cases/compiler/unusedDestructuring.ts | 1 + 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5e9a0ae9dc883..629e2f1819d8c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22619,11 +22619,11 @@ namespace ts { const kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? UnusedKind.Parameter : UnusedKind.Local; if (!bindingPattern.elements.every(e => contains(bindingElements, e))) { for (const e of bindingElements) { - addDiagnostic(kind, createDiagnosticForNode(e, Diagnostics._0_is_declared_but_its_value_is_never_read, getBindingElementNameText(e))); + addDiagnostic(kind, createDiagnosticForNode(e, Diagnostics._0_is_declared_but_its_value_is_never_read, idText(cast(e.name, isIdentifier)))); } } else if (bindingElements.length === 1) { - addDiagnostic(kind, createDiagnosticForNode(bindingPattern, Diagnostics._0_is_declared_but_its_value_is_never_read, getBindingElementNameText(first(bindingElements)))); + addDiagnostic(kind, createDiagnosticForNode(bindingPattern, Diagnostics._0_is_declared_but_its_value_is_never_read, idText(cast(first(bindingElements).name, isIdentifier)))); } else { addDiagnostic(kind, createDiagnosticForNode(bindingPattern, Diagnostics.All_destructured_elements_are_unused)); diff --git a/tests/baselines/reference/unusedDestructuring.errors.txt b/tests/baselines/reference/unusedDestructuring.errors.txt index 6f6bb82d9d0bb..c148eea620abe 100644 --- a/tests/baselines/reference/unusedDestructuring.errors.txt +++ b/tests/baselines/reference/unusedDestructuring.errors.txt @@ -1,13 +1,14 @@ tests/cases/compiler/unusedDestructuring.ts(3,7): error TS6198: All destructured elements are unused. tests/cases/compiler/unusedDestructuring.ts(4,9): error TS6133: 'c' is declared but its value is never read. tests/cases/compiler/unusedDestructuring.ts(6,7): error TS6133: 'e' is declared but its value is never read. -tests/cases/compiler/unusedDestructuring.ts(8,1): error TS6133: 'f' is declared but its value is never read. -tests/cases/compiler/unusedDestructuring.ts(8,12): error TS6198: All destructured elements are unused. -tests/cases/compiler/unusedDestructuring.ts(8,24): error TS6133: 'c' is declared but its value is never read. -tests/cases/compiler/unusedDestructuring.ts(8,32): error TS6133: 'e' is declared but its value is never read. +tests/cases/compiler/unusedDestructuring.ts(7,7): error TS6133: 'g' is declared but its value is never read. +tests/cases/compiler/unusedDestructuring.ts(9,1): error TS6133: 'f' is declared but its value is never read. +tests/cases/compiler/unusedDestructuring.ts(9,12): error TS6198: All destructured elements are unused. +tests/cases/compiler/unusedDestructuring.ts(9,24): error TS6133: 'c' is declared but its value is never read. +tests/cases/compiler/unusedDestructuring.ts(9,32): error TS6133: 'e' is declared but its value is never read. -==== tests/cases/compiler/unusedDestructuring.ts (7 errors) ==== +==== tests/cases/compiler/unusedDestructuring.ts (8 errors) ==== export {}; declare const o: any; const { a, b } = o; @@ -20,6 +21,9 @@ tests/cases/compiler/unusedDestructuring.ts(8,32): error TS6133: 'e' is declared const { e } = o; ~~~~~ !!! error TS6133: 'e' is declared but its value is never read. + const { f: g } = o; + ~~~~~~~~ +!!! error TS6133: 'g' is declared but its value is never read. function f({ a, b }, { c, d }, { e }) { ~~~~~~~~~~ diff --git a/tests/baselines/reference/unusedDestructuring.js b/tests/baselines/reference/unusedDestructuring.js index d025b22654280..afac434cfafd4 100644 --- a/tests/baselines/reference/unusedDestructuring.js +++ b/tests/baselines/reference/unusedDestructuring.js @@ -5,6 +5,7 @@ const { a, b } = o; const { c, d } = o; d; const { e } = o; +const { f: g } = o; function f({ a, b }, { c, d }, { e }) { d; @@ -18,6 +19,7 @@ var a = o.a, b = o.b; var c = o.c, d = o.d; d; var e = o.e; +var g = o.f; function f(_a, _b, _c) { var a = _a.a, b = _a.b; var c = _b.c, d = _b.d; diff --git a/tests/baselines/reference/unusedDestructuring.symbols b/tests/baselines/reference/unusedDestructuring.symbols index 0490774919b1d..c7767480eb8fe 100644 --- a/tests/baselines/reference/unusedDestructuring.symbols +++ b/tests/baselines/reference/unusedDestructuring.symbols @@ -20,15 +20,19 @@ const { e } = o; >e : Symbol(e, Decl(unusedDestructuring.ts, 5, 7)) >o : Symbol(o, Decl(unusedDestructuring.ts, 1, 13)) +const { f: g } = o; +>g : Symbol(g, Decl(unusedDestructuring.ts, 6, 7)) +>o : Symbol(o, Decl(unusedDestructuring.ts, 1, 13)) + function f({ a, b }, { c, d }, { e }) { ->f : Symbol(f, Decl(unusedDestructuring.ts, 5, 16)) ->a : Symbol(a, Decl(unusedDestructuring.ts, 7, 12)) ->b : Symbol(b, Decl(unusedDestructuring.ts, 7, 15)) ->c : Symbol(c, Decl(unusedDestructuring.ts, 7, 22)) ->d : Symbol(d, Decl(unusedDestructuring.ts, 7, 25)) ->e : Symbol(e, Decl(unusedDestructuring.ts, 7, 32)) +>f : Symbol(f, Decl(unusedDestructuring.ts, 6, 19)) +>a : Symbol(a, Decl(unusedDestructuring.ts, 8, 12)) +>b : Symbol(b, Decl(unusedDestructuring.ts, 8, 15)) +>c : Symbol(c, Decl(unusedDestructuring.ts, 8, 22)) +>d : Symbol(d, Decl(unusedDestructuring.ts, 8, 25)) +>e : Symbol(e, Decl(unusedDestructuring.ts, 8, 32)) d; ->d : Symbol(d, Decl(unusedDestructuring.ts, 7, 25)) +>d : Symbol(d, Decl(unusedDestructuring.ts, 8, 25)) } diff --git a/tests/baselines/reference/unusedDestructuring.types b/tests/baselines/reference/unusedDestructuring.types index 605f08c3bbd19..bbc40cd359b80 100644 --- a/tests/baselines/reference/unusedDestructuring.types +++ b/tests/baselines/reference/unusedDestructuring.types @@ -20,6 +20,11 @@ const { e } = o; >e : any >o : any +const { f: g } = o; +>f : any +>g : any +>o : any + function f({ a, b }, { c, d }, { e }) { >f : ({ a, b }: { a: any; b: any; }, { c, d }: { c: any; d: any; }, { e }: { e: any; }) => void >a : any diff --git a/tests/cases/compiler/unusedDestructuring.ts b/tests/cases/compiler/unusedDestructuring.ts index 9e2bb443ade8a..bfec022ab52ee 100644 --- a/tests/cases/compiler/unusedDestructuring.ts +++ b/tests/cases/compiler/unusedDestructuring.ts @@ -7,6 +7,7 @@ const { a, b } = o; const { c, d } = o; d; const { e } = o; +const { f: g } = o; function f({ a, b }, { c, d }, { e }) { d; From b4ca23d8f9133036e2bb19e848960cfd8dd8bd31 Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 15 May 2018 16:22:58 -0700 Subject: [PATCH 43/69] Fix bug: Converting 'module.exports = {...}' to ES6 doesn't introduce a default export (#24141) --- src/harness/fourslash.ts | 30 ++++++++++++++----- src/services/codefixes/convertToEs6Module.ts | 2 +- tests/cases/fourslash/fourslash.ts | 2 +- ..._export_moduleDotExports_changesImports.ts | 12 ++++---- ...efactorConvertToEs6Module_export_object.ts | 3 ++ 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 333ab42ef5108..47f0a91b286d0 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2293,9 +2293,13 @@ Actual: ${stringify(fullActual)}`); } public verifyCurrentFileContent(text: string) { - const actual = this.getFileContent(this.activeFile.fileName); + this.verifyFileContent(this.activeFile.fileName, text); + } + + private verifyFileContent(fileName: string, text: string) { + const actual = this.getFileContent(fileName); if (actual !== text) { - throw new Error(`verifyCurrentFileContent failed:\n${showTextDiff(text, actual)}`); + throw new Error(`verifyFileContent failed:\n${showTextDiff(text, actual)}`); } } @@ -2483,7 +2487,7 @@ Actual: ${stringify(fullActual)}`); this.applyCodeActions(details.codeActions); - this.verifyNewContent(options); + this.verifyNewContent(options, ts.flatMap(details.codeActions, a => a.changes.map(c => c.fileName))); } public verifyRangeIs(expectedText: string, includeWhiteSpace?: boolean) { @@ -2570,13 +2574,25 @@ Actual: ${stringify(fullActual)}`); this.applyEdits(change.fileName, change.textChanges, /*isFormattingEdit*/ false); } - this.verifyNewContent(options); + this.verifyNewContent(options, action.changes.map(c => c.fileName)); } - private verifyNewContent(options: FourSlashInterface.NewContentOptions) { + private verifyNewContent(options: FourSlashInterface.NewContentOptions, changedFiles: ReadonlyArray) { + const assertedChangedFiles = !options.newFileContent || typeof options.newFileContent === "string" + ? [this.activeFile.fileName] + : ts.getOwnKeys(options.newFileContent); + assert.deepEqual(assertedChangedFiles, changedFiles); + if (options.newFileContent !== undefined) { assert(!options.newRangeContent); - this.verifyCurrentFileContent(options.newFileContent); + if (typeof options.newFileContent === "string") { + this.verifyCurrentFileContent(options.newFileContent); + } + else { + for (const fileName in options.newFileContent) { + this.verifyFileContent(fileName, options.newFileContent[fileName]); + } + } } else { this.verifyRangeIs(options.newRangeContent, /*includeWhitespace*/ true); @@ -4781,7 +4797,7 @@ namespace FourSlashInterface { export interface NewContentOptions { // Exactly one of these should be defined. - newFileContent?: string; + newFileContent?: string | { readonly [filename: string]: string }; newRangeContent?: string; } diff --git a/src/services/codefixes/convertToEs6Module.ts b/src/services/codefixes/convertToEs6Module.ts index 57af2edcd017b..92a14b1d20d33 100644 --- a/src/services/codefixes/convertToEs6Module.ts +++ b/src/services/codefixes/convertToEs6Module.ts @@ -233,7 +233,7 @@ namespace ts.codefix { Debug.assertNever(prop); } }); - return statements && [statements, true]; + return statements && [statements, false]; } function convertNamedExport( diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 704163ae5765c..b8b06edca15a6 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -179,7 +179,7 @@ declare namespace FourSlashInterface { isInCommentAtPosition(onlyMultiLineDiverges?: boolean): void; codeFix(options: { description: string, - newFileContent?: string, + newFileContent?: string | { readonly [fileName: string]: string }, newRangeContent?: string, errorCode?: number, index?: number, diff --git a/tests/cases/fourslash/refactorConvertToEs6Module_export_moduleDotExports_changesImports.ts b/tests/cases/fourslash/refactorConvertToEs6Module_export_moduleDotExports_changesImports.ts index 277525e10fe7e..ddc6a77721e41 100644 --- a/tests/cases/fourslash/refactorConvertToEs6Module_export_moduleDotExports_changesImports.ts +++ b/tests/cases/fourslash/refactorConvertToEs6Module_export_moduleDotExports_changesImports.ts @@ -14,11 +14,9 @@ verify.codeFix({ description: "Convert to ES6 module", - newFileContent: "export default 0;", + newFileContent: { + "/a.js": "export default 0;", + "/b.ts": 'import a from "./a";', + "/c.js": 'const a = require("./a").default;', + } }); - -goTo.file("/b.ts"); -verify.currentFileContentIs('import a from "./a";'); - -goTo.file("/c.js"); -verify.currentFileContentIs('const a = require("./a").default;'); diff --git a/tests/cases/fourslash/refactorConvertToEs6Module_export_object.ts b/tests/cases/fourslash/refactorConvertToEs6Module_export_object.ts index 5b9107f275cd0..97056ceefdad4 100644 --- a/tests/cases/fourslash/refactorConvertToEs6Module_export_object.ts +++ b/tests/cases/fourslash/refactorConvertToEs6Module_export_object.ts @@ -12,6 +12,9 @@ //// C: class {}, ////}; +// @Filename: /b.js +////const a = require("./a.js"); + verify.codeFix({ description: "Convert to ES6 module", newFileContent: From 6f4ed3afa6cf60015476d3b3f62dd8247a558d8f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 15 May 2018 22:08:01 -0700 Subject: [PATCH 44/69] Handel synthetic rest parameter declarations --- src/compiler/checker.ts | 3 ++- tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f308348fb4612..8a64e585e4a66 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3613,7 +3613,8 @@ namespace ts { const parameterTypeNode = typeToTypeNodeHelper(parameterType, context); const modifiers = !(context.flags & NodeBuilderFlags.OmitParameterModifiers) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedClone); - const dotDotDotToken = !parameterDeclaration || isRestParameter(parameterDeclaration) ? createToken(SyntaxKind.DotDotDotToken) : undefined; + const isRest = parameterDeclaration ? isRestParameter(parameterDeclaration) : (parameterSymbol as TransientSymbol).isRestParameter; + const dotDotDotToken = isRest ? createToken(SyntaxKind.DotDotDotToken) : undefined; const name = parameterDeclaration ? parameterDeclaration.name ? parameterDeclaration.name.kind === SyntaxKind.Identifier ? diff --git a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts index c7ce7cc6bdd88..250673d91fc40 100644 --- a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts +++ b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts @@ -37,4 +37,4 @@ //// } -verify.rangeAfterCodeFix("props: { isLoading: any; update: (...arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file +verify.rangeAfterCodeFix("props: { isLoading: any; update: (arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file From c52b06992277d41192988da7d43f40190152cb50 Mon Sep 17 00:00:00 2001 From: csigs Date: Wed, 16 May 2018 06:38:51 +0000 Subject: [PATCH 45/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 24 ++++++++++++ .../diagnosticMessages.generated.json.lcl | 39 ++++++++++++++++--- .../diagnosticMessages.generated.json.lcl | 30 ++++++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl index 916f34d4e4224..3eb5854c5c0a1 100644 --- a/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3102,6 +3102,9 @@ + + + @@ -5289,6 +5292,9 @@ + + + @@ -6558,6 +6564,15 @@ + + + + + + + + + @@ -6588,6 +6603,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl index 1dc680c5cae25..4f11a5ceaf94b 100644 --- a/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3081,20 +3081,20 @@ - + - + - + - + - + - + @@ -5280,6 +5280,15 @@ + + + + + + + + + @@ -6546,6 +6555,15 @@ + + + + + + + + + @@ -6576,6 +6594,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl index aebef0476e82c..afce2f070426d 100644 --- a/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3083,6 +3083,9 @@ + + + @@ -5267,6 +5270,15 @@ + + + + + + + + + @@ -6530,6 +6542,15 @@ + + + + + + + + + @@ -6560,6 +6581,15 @@ + + + + + + + + + From 0fde07f1c517c720b96e69248a73bc2fcf67a9df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 16 May 2018 14:47:44 +0800 Subject: [PATCH 46/69] fix trailing comma in accessor generator --- .../generateGetAccessorAndSetAccessor.ts | 4 +++- src/services/textChanges.ts | 15 ++++++++++--- ...efactorConvertToGetAccessAndSetAccess34.ts | 21 +++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess34.ts diff --git a/src/services/refactors/generateGetAccessorAndSetAccessor.ts b/src/services/refactors/generateGetAccessorAndSetAccessor.ts index 53adfac26b3ed..e0276708b74a6 100644 --- a/src/services/refactors/generateGetAccessorAndSetAccessor.ts +++ b/src/services/refactors/generateGetAccessorAndSetAccessor.ts @@ -204,7 +204,9 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { function insertAccessor(changeTracker: textChanges.ChangeTracker, file: SourceFile, accessor: AccessorDeclaration, declaration: AcceptedDeclaration, container: ContainerDeclaration) { isParameterPropertyDeclaration(declaration) ? changeTracker.insertNodeAtClassStart(file, container, accessor) - : changeTracker.insertNodeAfter(file, declaration, accessor); + : isPropertyAssignment(declaration) + ? changeTracker.insertNodeAfterComma(file, declaration, accessor) + : changeTracker.insertNodeAfter(file, declaration, accessor); } function updateReadonlyPropertyInitializerStatementConstructor(changeTracker: textChanges.ChangeTracker, context: RefactorContext, constructor: ConstructorDeclaration, fieldName: AcceptedNameType, originalName: AcceptedNameType) { diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 37d760ac8f55b..3994259a6400b 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -320,10 +320,14 @@ namespace ts.textChanges { return this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, startNode, endNode, options), newNodes, options); } + private nextCommaToken (sourceFile: SourceFile, node: Node): Node | undefined { + const next = findNextToken(node, node.parent, sourceFile); + return next && next.kind === SyntaxKind.CommaToken ? next : undefined; + } + public replacePropertyAssignment(sourceFile: SourceFile, oldNode: PropertyAssignment, newNode: PropertyAssignment) { - return this.replaceNode(sourceFile, oldNode, newNode, { - suffix: "," + this.newLineCharacter - }); + const suffix = this.nextCommaToken(sourceFile, oldNode) ? "" : ("," + this.newLineCharacter); + return this.replaceNode(sourceFile, oldNode, newNode, { suffix }); } private insertNodeAt(sourceFile: SourceFile, pos: number, newNode: Node, options: InsertNodeOptions = {}) { @@ -465,6 +469,11 @@ namespace ts.textChanges { } } + public insertNodeAfterComma(sourceFile: SourceFile, after: Node, newNode: Node): void { + const endPosition = this.insertNodeAfterWorker(sourceFile, this.nextCommaToken(sourceFile, after) || after, newNode); + this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); + } + public insertNodeAfter(sourceFile: SourceFile, after: Node, newNode: Node): void { const endPosition = this.insertNodeAfterWorker(sourceFile, after, newNode); this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess34.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess34.ts new file mode 100644 index 0000000000000..d745aa2412d33 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess34.ts @@ -0,0 +1,21 @@ +/// + +//// const A = { +//// /*a*/a/*b*/: 1, +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + /*RENAME*/_a: 1, + get a() { + return this._a; + }, + set a(value) { + this._a = value; + }, +};`, +}); From b79986e99cf3d3a6f67a6d1c9527a2767abb0c6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kh=E1=BA=A3i?= Date: Wed, 16 May 2018 13:58:10 +0700 Subject: [PATCH 47/69] Give checklist checkboxes Prior to this commit, checkboxes appear as bracket pairs instead of checkboxes. --- .github/pull_request_template.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9c74ff2d6e8dc..daec1666314a7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,15 +2,16 @@ Thank you for submitting a pull request! Here's a checklist you might find useful. -[ ] There is an associated issue that is labeled +* [ ] There is an associated issue that is labeled 'Bug' or 'help wanted' or is in the Community milestone -[ ] Code is up-to-date with the `master` branch -[ ] You've successfully run `jake runtests` locally -[ ] You've signed the CLA -[ ] There are new or updated unit tests validating the change +* [ ] Code is up-to-date with the `master` branch +* [ ] You've successfully run `jake runtests` locally +* [ ] You've signed the CLA +* [ ] There are new or updated unit tests validating the change Refer to CONTRIBUTING.MD for more details. https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md --> Fixes # + From 4264629f2f3ec71fe9e4cfcf263bdaa849e76846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kh=E1=BA=A3i?= Date: Wed, 16 May 2018 14:00:58 +0700 Subject: [PATCH 48/69] Give issue template's checklist checkboxes Prior to this commit, checkboxes appear as pairs of brackets rather than proper checkboxes --- .github/ISSUE_TEMPLATE/Feature_request.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md index 522e77c0b7b19..bddacd1f2fc2d 100644 --- a/.github/ISSUE_TEMPLATE/Feature_request.md +++ b/.github/ISSUE_TEMPLATE/Feature_request.md @@ -32,8 +32,8 @@ What shortcomings exist with current approaches? ## Checklist My suggestion meets these guidelines: - [ ] This wouldn't be a breaking change in existing TypeScript / JavaScript code - [ ] This wouldn't change the runtime behavior of existing JavaScript code - [ ] This could be implemented without emitting different JS based on the types of the expressions - [ ] This isn't a runtime feature (e.g. new expression-level syntax) +* [ ] This wouldn't be a breaking change in existing TypeScript / JavaScript code +* [ ] This wouldn't change the runtime behavior of existing JavaScript code +* [ ] This could be implemented without emitting different JS based on the types of the expressions +* [ ] This isn't a runtime feature (e.g. new expression-level syntax) From b7f725d1b8e6a0549d117109cf271a14b03c58fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Wed, 16 May 2018 15:34:11 +0800 Subject: [PATCH 49/69] fix generate accessor if starting with underscore --- .../generateGetAccessorAndSetAccessor.ts | 20 ++++++++--- ...efactorConvertToGetAccessAndSetAccess15.ts | 35 ++++--------------- ...efactorConvertToGetAccessAndSetAccess23.ts | 10 +++--- ...refactorConvertToGetAccessAndSetAccess4.ts | 10 +++--- ...refactorConvertToGetAccessAndSetAccess5.ts | 10 +++--- ...refactorConvertToGetAccessAndSetAccess6.ts | 10 +++--- ...refactorConvertToGetAccessAndSetAccess7.ts | 10 +++--- 7 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/services/refactors/generateGetAccessorAndSetAccessor.ts b/src/services/refactors/generateGetAccessorAndSetAccessor.ts index 53adfac26b3ed..76039b272643c 100644 --- a/src/services/refactors/generateGetAccessorAndSetAccessor.ts +++ b/src/services/refactors/generateGetAccessorAndSetAccessor.ts @@ -17,6 +17,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { fieldName: AcceptedNameType; accessorName: AcceptedNameType; originalName: AcceptedNameType; + renameAccessor: boolean; } function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined { @@ -43,7 +44,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { const isJS = isSourceFileJavaScript(file); const changeTracker = textChanges.ChangeTracker.fromContext(context); - const { isStatic, isReadonly, fieldName, accessorName, originalName, type, container, declaration } = fieldInfo; + const { isStatic, isReadonly, fieldName, accessorName, originalName, type, container, declaration, renameAccessor } = fieldInfo; suppressLeadingAndTrailingTrivia(fieldName); suppressLeadingAndTrailingTrivia(declaration); @@ -80,8 +81,10 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { const edits = changeTracker.getChanges(); const renameFilename = file.fileName; - const renameLocationOffset = isIdentifier(fieldName) ? 0 : -1; - const renameLocation = renameLocationOffset + getRenameLocation(edits, renameFilename, fieldName.text, /*preferLastLocation*/ isParameter(declaration)); + + const nameNeedRename = renameAccessor ? accessorName : fieldName; + const renameLocationOffset = isIdentifier(nameNeedRename) ? 0 : -1; + const renameLocation = renameLocationOffset + getRenameLocation(edits, renameFilename, nameNeedRename.text, /*preferLastLocation*/ isParameter(declaration)); return { renameFilename, renameLocation, edits }; } @@ -110,6 +113,10 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { return modifiers && createNodeArray(modifiers); } + function startsWithUnderscore(name: string): boolean { + return name.charCodeAt(0) === CharacterCodes._; + } + function getConvertibleFieldAtPosition(file: SourceFile, startPosition: number): Info | undefined { const node = getTokenAtPosition(file, startPosition, /*includeJsDocComment*/ false); const declaration = findAncestor(node.parent, isAcceptedDeclaration); @@ -117,8 +124,10 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { const meaning = ModifierFlags.AccessibilityModifier | ModifierFlags.Static | ModifierFlags.Readonly; if (!declaration || !isConvertableName(declaration.name) || (getModifierFlags(declaration) | meaning) !== meaning) return undefined; - const fieldName = createPropertyName(getUniqueName(`_${declaration.name.text}`, file.text), declaration.name); - const accessorName = createPropertyName(declaration.name.text, declaration.name); + const name = declaration.name.text; + const startWithUnderscore = startsWithUnderscore(name); + const fieldName = createPropertyName(startWithUnderscore ? name : getUniqueName(`_${name}`, file.text), declaration.name); + const accessorName = createPropertyName(startWithUnderscore ? getUniqueName(name.substring(1), file.text) : name, declaration.name); return { isStatic: hasStaticModifier(declaration), isReadonly: hasReadonlyModifier(declaration), @@ -128,6 +137,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { declaration, fieldName, accessorName, + renameAccessor: startWithUnderscore }; } diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts index 172842ef27194..0d68052ab6aac 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts @@ -2,7 +2,7 @@ //// class A { //// /*a*/public _a: number = 1;/*b*/ -//// /*c*/public a: string = "foo";/*d*/ +//// public a: string = "foo"; //// } goTo.select("a", "b"); @@ -11,36 +11,13 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: number = 1; - public get _a(): number { - return this.__a; + private _a: number = 1; + public get /*RENAME*/a_1(): number { + return this._a; } - public set _a(value: number) { - this.__a = value; + public set a_1(value: number) { + this._a = value; } public a: string = "foo"; }`, }); - -goTo.select("c", "d"); -edit.applyRefactor({ - refactorName: "Generate 'get' and 'set' accessors", - actionName: "Generate 'get' and 'set' accessors", - actionDescription: "Generate 'get' and 'set' accessors", - newContent: `class A { - private __a: number = 1; - public get _a(): number { - return this.__a; - } - public set _a(value: number) { - this.__a = value; - } - private /*RENAME*/_a_1: string = "foo"; - public get a(): string { - return this._a_1; - } - public set a(value: string) { - this._a_1 = value; - } -}`, -}); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts index 6be970539877b..32f4bfe009dd1 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts @@ -28,12 +28,12 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: number = 1; - public get _a(): number { - return this.__a; + private _a: number = 1; + public get /*RENAME*/a_2(): number { + return this._a; } - public set _a(value: number) { - this.__a = value; + public set a_2(value: number) { + this._a = value; } private _a_1: string = "foo"; public get a(): string { diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts index 2b6ccbeaa1a61..c2d9a7eea7e02 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts @@ -10,12 +10,12 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: string; - public get _a(): string { - return this.__a; + private _a: string; + public get /*RENAME*/a_1(): string { + return this._a; } - public set _a(value: string) { - this.__a = value; + public set a_1(value: string) { + this._a = value; } }`, }); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts index 6299cc0142946..9d2526d8a7d79 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts @@ -10,12 +10,12 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: string; - public get _a(): string { - return this.__a; + private _a: string; + public get /*RENAME*/a_1(): string { + return this._a; } - public set _a(value: string) { - this.__a = value; + public set a_1(value: string) { + this._a = value; } }`, }); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts index 5f713df203cdb..b3899c0647a5e 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts @@ -10,12 +10,12 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: string; - public get _a(): string { - return this.__a; + private _a: string; + public get /*RENAME*/a_1(): string { + return this._a; } - public set _a(value: string) { - this.__a = value; + public set a_1(value: string) { + this._a = value; } }`, }); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts index 4fc5641d65726..114cfd39d8757 100644 --- a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts @@ -10,12 +10,12 @@ edit.applyRefactor({ actionName: "Generate 'get' and 'set' accessors", actionDescription: "Generate 'get' and 'set' accessors", newContent: `class A { - private /*RENAME*/__a: string; - protected get _a(): string { - return this.__a; + private _a: string; + protected get /*RENAME*/a_1(): string { + return this._a; } - protected set _a(value: string) { - this.__a = value; + protected set a_1(value: string) { + this._a = value; } }`, }); From da3724e7932bcf6b31933dbd363ec53e9b623285 Mon Sep 17 00:00:00 2001 From: csigs Date: Wed, 16 May 2018 10:10:29 +0000 Subject: [PATCH 50/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 30 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/loc/lcl/cht/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/cht/diagnosticMessages/diagnosticMessages.generated.json.lcl index 96c3dd0c2efe4..f08745d21c6ae 100644 --- a/src/loc/lcl/cht/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/cht/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3093,6 +3093,9 @@ + + + @@ -5277,6 +5280,15 @@ + + + + + + + + + @@ -6543,6 +6555,15 @@ + + + + + + + + + @@ -6573,6 +6594,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl index ab3b344d5a0ec..7c6b790800acd 100644 --- a/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3093,6 +3093,9 @@ + + + @@ -5280,6 +5283,9 @@ + + + @@ -6549,6 +6555,15 @@ + + + + + + + + + @@ -6579,6 +6594,15 @@ + + + + + + + + + From 06eabf749852c3e0b2b86a14251b923d1433f1f9 Mon Sep 17 00:00:00 2001 From: csigs Date: Wed, 16 May 2018 16:10:34 +0000 Subject: [PATCH 51/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 30 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++ .../diagnosticMessages.generated.json.lcl | 30 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++ 5 files changed, 132 insertions(+) diff --git a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl index 1d9625bd88d2c..3607e3e8488cf 100644 --- a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3093,6 +3093,9 @@ + + + @@ -5277,6 +5280,15 @@ + + + + + + + + + @@ -6543,6 +6555,15 @@ + + + + + + + + + @@ -6573,6 +6594,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl index dcc9b3136f76b..d64721cd90e31 100644 --- a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3102,6 +3102,9 @@ + + + @@ -5289,6 +5292,9 @@ + + + @@ -6558,6 +6564,15 @@ + + + + + + + + + @@ -6588,6 +6603,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl index 8bc1db5c5a9d4..d034fc6882f2e 100644 --- a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3093,6 +3093,9 @@ + + + @@ -5280,6 +5283,9 @@ + + + @@ -6549,6 +6555,15 @@ + + + + + + + + + @@ -6579,6 +6594,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/plk/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/plk/diagnosticMessages/diagnosticMessages.generated.json.lcl index 8492ff600006a..50dcbfc1f8ea8 100644 --- a/src/loc/lcl/plk/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/plk/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3083,6 +3083,9 @@ + + + @@ -5267,6 +5270,15 @@ + + + + + + + + + @@ -6530,6 +6542,15 @@ + + + + + + + + + @@ -6560,6 +6581,15 @@ + + + + + + + + + diff --git a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl index 6a3fb08c28733..bdc5b984f48bb 100644 --- a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3092,6 +3092,9 @@ + + + @@ -5279,6 +5282,9 @@ + + + @@ -6548,6 +6554,15 @@ + + + + + + + + + @@ -6578,6 +6593,15 @@ + + + + + + + + + From 60df4671d04fcf1060dc08001c0ebf61b98ea6be Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 09:28:22 -0700 Subject: [PATCH 52/69] Fix jsx element parsing within ternary (#24149) --- src/compiler/parser.ts | 28 +++++++++---- .../jsxNestedWithinTernaryParsesCorrectly.js | 25 +++++++++++ ...NestedWithinTernaryParsesCorrectly.symbols | 20 +++++++++ ...sxNestedWithinTernaryParsesCorrectly.types | 42 +++++++++++++++++++ .../jsxNestedWithinTernaryParsesCorrectly.tsx | 14 +++++++ 5 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js create mode 100644 tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.symbols create mode 100644 tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.types create mode 100644 tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ad3f80710db58..bbd4edc8507fd 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2436,20 +2436,24 @@ namespace ts { return finishNode(node); } + /** + * @returns If return type parsing succeeds + */ function fillSignature( returnToken: SyntaxKind.ColonToken | SyntaxKind.EqualsGreaterThanToken, flags: SignatureFlags, - signature: SignatureDeclaration): void { + signature: SignatureDeclaration): boolean { if (!(flags & SignatureFlags.JSDoc)) { signature.typeParameters = parseTypeParameters(); } signature.parameters = parseParameterList(flags); - signature.type = parseReturnType(returnToken, !!(flags & SignatureFlags.Type)); + if (shouldParseReturnType(returnToken, !!(flags & SignatureFlags.Type))) { + signature.type = parseTypeOrTypePredicate(); + return signature.type !== undefined; + } + return true; } - function parseReturnType(returnToken: SyntaxKind.ColonToken | SyntaxKind.EqualsGreaterThanToken, isType: boolean): TypeNode | undefined { - return shouldParseReturnType(returnToken, isType) ? parseTypeOrTypePredicate() : undefined; - } function shouldParseReturnType(returnToken: SyntaxKind.ColonToken | SyntaxKind.EqualsGreaterThanToken, isType: boolean): boolean { if (returnToken === SyntaxKind.EqualsGreaterThanToken) { parseExpected(returnToken); @@ -2758,6 +2762,9 @@ namespace ts { const node = createNode(SyntaxKind.ParenthesizedType); parseExpected(SyntaxKind.OpenParenToken); node.type = parseType(); + if (!node.type) { + return undefined; + } parseExpected(SyntaxKind.CloseParenToken); return finishNode(node); } @@ -2767,7 +2774,12 @@ namespace ts { if (kind === SyntaxKind.ConstructorType) { parseExpected(SyntaxKind.NewKeyword); } - fillSignature(SyntaxKind.EqualsGreaterThanToken, SignatureFlags.Type, node); + if (!fillSignature(SyntaxKind.EqualsGreaterThanToken, SignatureFlags.Type | (sourceFile.languageVariant === LanguageVariant.JSX ? SignatureFlags.RequireCompleteParameterList : 0), node)) { + return undefined; + } + if (!node.parameters) { + return undefined; + } return finishNode(node); } @@ -3598,7 +3610,9 @@ namespace ts { // a => (b => c) // And think that "(b =>" was actually a parenthesized arrow function with a missing // close paren. - fillSignature(SyntaxKind.ColonToken, isAsync | (allowAmbiguity ? SignatureFlags.None : SignatureFlags.RequireCompleteParameterList), node); + if (!fillSignature(SyntaxKind.ColonToken, isAsync | (allowAmbiguity ? SignatureFlags.None : SignatureFlags.RequireCompleteParameterList), node)) { + return undefined; + } // If we couldn't get parameters, we definitely could not parse out an arrow function. if (!node.parameters) { diff --git a/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js new file mode 100644 index 0000000000000..f431e1224cc6e --- /dev/null +++ b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.js @@ -0,0 +1,25 @@ +//// [jsxNestedWithinTernaryParsesCorrectly.tsx] +const emptyMessage = null as any; +const a = ( +
+ {0 ? ( + emptyMessage // must be identifier? + ) : ( + // must be exactly two expression holes + + {0}{0} + + )} +
+); + +//// [jsxNestedWithinTernaryParsesCorrectly.jsx] +var emptyMessage = null; +var a = (
+ {0 ? (emptyMessage // must be identifier? +) : ( +// must be exactly two expression holes + + {0}{0} + )} +
); diff --git a/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.symbols b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.symbols new file mode 100644 index 0000000000000..73ee27251ae56 --- /dev/null +++ b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.symbols @@ -0,0 +1,20 @@ +=== tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx === +const emptyMessage = null as any; +>emptyMessage : Symbol(emptyMessage, Decl(jsxNestedWithinTernaryParsesCorrectly.tsx, 0, 5)) + +const a = ( +>a : Symbol(a, Decl(jsxNestedWithinTernaryParsesCorrectly.tsx, 1, 5)) + +
+ {0 ? ( + emptyMessage // must be identifier? +>emptyMessage : Symbol(emptyMessage, Decl(jsxNestedWithinTernaryParsesCorrectly.tsx, 0, 5)) + + ) : ( + // must be exactly two expression holes + + {0}{0} + + )} +
+); diff --git a/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.types b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.types new file mode 100644 index 0000000000000..0daa04fc39fed --- /dev/null +++ b/tests/baselines/reference/jsxNestedWithinTernaryParsesCorrectly.types @@ -0,0 +1,42 @@ +=== tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx === +const emptyMessage = null as any; +>emptyMessage : any +>null as any : any +>null : null + +const a = ( +>a : any +>(
{0 ? ( emptyMessage // must be identifier? ) : ( // must be exactly two expression holes {0}{0} )}
) : any + +
+>
{0 ? ( emptyMessage // must be identifier? ) : ( // must be exactly two expression holes {0}{0} )}
: any +>div : any + + {0 ? ( +>0 ? ( emptyMessage // must be identifier? ) : ( // must be exactly two expression holes {0}{0} ) : any +>0 : 0 +>( emptyMessage // must be identifier? ) : any + + emptyMessage // must be identifier? +>emptyMessage : any + + ) : ( +>( // must be exactly two expression holes {0}{0} ) : any + + // must be exactly two expression holes + +> {0}{0} : any +>span : any + + {0}{0} +>0 : 0 +>0 : 0 + + +>span : any + + )} +
+>div : any + +); diff --git a/tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx b/tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx new file mode 100644 index 0000000000000..4e69092aa8a8e --- /dev/null +++ b/tests/cases/compiler/jsxNestedWithinTernaryParsesCorrectly.tsx @@ -0,0 +1,14 @@ +// @jsx: preserve +const emptyMessage = null as any; +const a = ( +
+ {0 ? ( + emptyMessage // must be identifier? + ) : ( + // must be exactly two expression holes + + {0}{0} + + )} +
+); \ No newline at end of file From aab8d651075a8a6990b09f579ff2c8518e06e7f7 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 16 May 2018 11:04:37 -0700 Subject: [PATCH 53/69] Update authors for release-2.9 --- .mailmap | 23 +++++++++++++++++++++-- AUTHORS.md | 21 ++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/.mailmap b/.mailmap index 8ca4efe110e68..2be2abbdfd2d3 100644 --- a/.mailmap +++ b/.mailmap @@ -308,7 +308,7 @@ Remo H. Jansen Sean Barag Sharon Rolel Stanislav Iliev -Wenlu Wang <805037171@163.com> wenlu.wang <805037171@163.com> kingwl <805037171@163.com> +Wenlu Wang <805037171@163.com> wenlu.wang <805037171@163.com> kingwl <805037171@163.com> 王文璐 王文璐 Wilson Hobbs Yuval Greenfield Daniel # @nieltg @@ -321,4 +321,23 @@ AdityaDaflapurkar # Aditya Daflapurkar Eric Grube Martyn Janes Ricardo N Feliciano -Sergii Bezliudnyi \ No newline at end of file +Sergii Bezliudnyi +Adrien Gibrat +Alex Ryan +Alexader Alexander T # Alexander Tarasyuk +Andrew Faulkner +Artem Tyurin +Brandon Slade +Derek P Sifford +Dhruv Rajvanshi +Holger Jeromin +Jordi Oliveras Rovira +Joscha Feth Joscha Feth +Ken703 # Bowden Kenny +Kevin Donnelly +Maarten Sijm +Paul Koerbitz +EcoleKeine # Ecole Keine +Khải +rhysd # @rhysd +Zen <843968788@qq.com> Zzzen <843968788@qq.com> # @Zzzen \ No newline at end of file diff --git a/AUTHORS.md b/AUTHORS.md index 679261876c8ae..8ffe4b73c2981 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -6,14 +6,17 @@ TypeScript is authored by: * Aditya Daflapurkar * Adnan Chowdhury * Adrian Leonhard +* Adrien Gibrat * Ahmad Farid * Akshar Patel * Alan Agius * Alex Chugaev * Alex Eagle * Alex Khomchenko +* Alex Ryan * Alexander Kuvaev * Alexander Rusakov +* Alexander Tarasyuk * Ali Sabzevari * Aliaksandr Radzivanovich * Aluan Haddad @@ -22,6 +25,7 @@ TypeScript is authored by: * Andreas Martin * Andrej Baran * Andrew Casey +* Andrew Faulkner * Andrew Ochsner * Andrew Stegmaier * Andrew Z Allen @@ -34,6 +38,7 @@ TypeScript is authored by: * Armando Aguirre * Arnaud Tournier * Arnav Singh +* Artem Tyurin * Arthur Ozga * Asad Saeeduddin * Avery Morin @@ -49,6 +54,8 @@ TypeScript is authored by: * Blake Embrey * @bootstraponline * Bowden Kelly +* Bowden Kenny +* Brandon Slade * Brett Mayen * Bryan Forbes * Caitlin Potter @@ -76,6 +83,8 @@ TypeScript is authored by: * David Sheldrick * David Souther * Denis Nedelyaev +* Derek P Sifford +* Dhruv Rajvanshi * Dick van den Brink * Diogo Franco (Kovensky) * Dirk Bäumer @@ -84,6 +93,7 @@ TypeScript is authored by: * Donald Pipowitch * Doug Ilijev * @e-cloud +* Ecole Keine * Elisée Maurer * Emilio García-Pumarino * Eric Grube @@ -118,6 +128,7 @@ TypeScript is authored by: * Hendrik Liebau * Henry Mercer * Herrington Darkholme +* Holger Jeromin * Homa Wong * Iain Monro * @IdeaHunter @@ -155,6 +166,8 @@ TypeScript is authored by: * Jonathan Toland * Jonathan Turner * Jonathon Smith +* Jordi Oliveras Rovira +* Joscha Feth * Josh Abernathy * Josh Goldberg * Josh Kalderimis @@ -170,7 +183,9 @@ TypeScript is authored by: * Keith Mashinter * Ken Howard * Kenji Imamula +* Kevin Donnelly * Kevin Lang +* Khải * Kitson Kelly * Klaus Meinhardt * Kris Zyp @@ -179,6 +194,7 @@ TypeScript is authored by: * Lorant Pinter * Lucien Greathouse * Lukas Elmer +* Maarten Sijm * Magnus Hiie * Magnus Kulke * Manish Giri @@ -223,6 +239,7 @@ TypeScript is authored by: * Oussama Ben Brahim * Patrick Zhong * Paul Jolly +* Paul Koerbitz * Paul van Brenk * @pcbro * Pedro Maltez @@ -240,6 +257,7 @@ TypeScript is authored by: * Raj Dosanjh * Reiner Dolp * Remo H. Jansen +* @rhysd * Ricardo N Feliciano * Richard Karmazín * Richard Knoll @@ -309,4 +327,5 @@ TypeScript is authored by: * Yuval Greenfield * Zeeshan Ahmed * Zev Spitz -* Zhengbo Li \ No newline at end of file +* Zhengbo Li +* @Zzzen \ No newline at end of file From 424dba1d691a7668c37f483a9cc7e21d319bb41c Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 16 May 2018 12:28:27 -0700 Subject: [PATCH 54/69] codeFixInferFromUsage: Avoid duplicate fix for variable declaration (#24169) * codeFixInferFromUsage: Avoid duplicate fix for variable declaration * Include VariableDeclaration initializer as a candidate type --- src/services/codefixes/inferFromUsage.ts | 27 +++++++++++++------ src/services/utilities.ts | 3 ++- .../fourslash/codeFixInferFromUsage_all.ts | 11 ++++++++ 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index 8b36d3e5d5105..92f4ab05e3c8b 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -32,16 +32,16 @@ namespace ts.codefix { const token = getTokenAtPosition(sourceFile, start, /*includeJsDocComment*/ false); let declaration!: Declaration; - const changes = textChanges.ChangeTracker.with(context, changes => { declaration = doChange(changes, sourceFile, token, errorCode, program, cancellationToken); }); + const changes = textChanges.ChangeTracker.with(context, changes => { declaration = doChange(changes, sourceFile, token, errorCode, program, cancellationToken, /*markSeenseen*/ returnTrue); }); return changes.length === 0 ? undefined : [createCodeFixAction(fixId, changes, [getDiagnostic(errorCode, token), getNameOfDeclaration(declaration).getText(sourceFile)], fixId, Diagnostics.Infer_all_types_from_usage)]; }, fixIds: [fixId], getAllCodeActions(context) { const { sourceFile, program, cancellationToken } = context; - const seenFunctions = createMap(); + const markSeen = nodeSeenTracker(); return codeFixAll(context, errorCodes, (changes, err) => { - doChange(changes, sourceFile, getTokenAtPosition(err.file!, err.start!, /*includeJsDocComment*/ false), err.code, program, cancellationToken, seenFunctions); + doChange(changes, sourceFile, getTokenAtPosition(err.file!, err.start!, /*includeJsDocComment*/ false), err.code, program, cancellationToken, markSeen); }); }, }); @@ -57,7 +57,7 @@ namespace ts.codefix { } } - function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, token: Node, errorCode: number, program: Program, cancellationToken: CancellationToken, seenFunctions?: Map): Declaration | undefined { + function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, token: Node, errorCode: number, program: Program, cancellationToken: CancellationToken, markSeen: NodeSeenTracker): Declaration | undefined { if (!isParameterPropertyModifier(token.kind) && token.kind !== SyntaxKind.Identifier && token.kind !== SyntaxKind.DotDotDotToken) { return undefined; } @@ -67,7 +67,7 @@ namespace ts.codefix { // Variable and Property declarations case Diagnostics.Member_0_implicitly_has_an_1_type.code: case Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code: - if (isVariableDeclaration(parent) || isPropertyDeclaration(parent) || isPropertySignature(parent)) { // handle bad location + if ((isVariableDeclaration(parent) && markSeen(parent)) || isPropertyDeclaration(parent) || isPropertySignature(parent)) { // handle bad location annotateVariableDeclaration(changes, sourceFile, parent, program, cancellationToken); return parent; } @@ -75,10 +75,11 @@ namespace ts.codefix { case Diagnostics.Variable_0_implicitly_has_an_1_type.code: { const symbol = program.getTypeChecker().getSymbolAtLocation(token); - if (symbol && symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration)) { + if (symbol && symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration) && markSeen(symbol.valueDeclaration)) { annotateVariableDeclaration(changes, sourceFile, symbol.valueDeclaration, program, cancellationToken); return symbol.valueDeclaration; } + return undefined; } } @@ -96,7 +97,7 @@ namespace ts.codefix { } // falls through case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: - if (!seenFunctions || addToSeen(seenFunctions, getNodeId(containingFunction))) { + if (markSeen(containingFunction)) { const param = cast(parent, isParameter); annotateParameters(changes, param, containingFunction, sourceFile, program, cancellationToken); return param; @@ -318,6 +319,16 @@ namespace ts.codefix { case SyntaxKind.ElementAccessExpression: inferTypeFromPropertyElementExpressionContext(node.parent, node, checker, usageContext); break; + case SyntaxKind.VariableDeclaration: { + const { name, initializer } = node.parent as VariableDeclaration; + if (node === name) { + if (initializer) { // This can happen for `let x = null;` which still has an implicit-any error. + addCandidateType(usageContext, checker.getTypeAtLocation(initializer)); + } + break; + } + } + // falls through default: return inferTypeFromContextualType(node, checker, usageContext); } @@ -511,7 +522,7 @@ namespace ts.codefix { return checker.getStringType(); } else if (usageContext.candidateTypes) { - return checker.getWidenedType(checker.getUnionType(map(usageContext.candidateTypes, t => checker.getBaseTypeOfLiteralType(t)), UnionReduction.Subtype)); + return checker.getWidenedType(checker.getUnionType(usageContext.candidateTypes.map(t => checker.getBaseTypeOfLiteralType(t)), UnionReduction.Subtype)); } else if (usageContext.properties && hasCallContext(usageContext.properties.get("then" as __String))) { const paramType = getParameterTypeFromCallContexts(0, usageContext.properties.get("then" as __String).callContexts, /*isRestParameter*/ false, checker); diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 228af7afdb912..430dc2196e0f1 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1188,7 +1188,8 @@ namespace ts { } /** Returns `true` the first time it encounters a node and `false` afterwards. */ - export function nodeSeenTracker(): (node: T) => boolean { + export type NodeSeenTracker = (node: T) => boolean; + export function nodeSeenTracker(): NodeSeenTracker { const seen: true[] = []; return node => { const id = getNodeId(node); diff --git a/tests/cases/fourslash/codeFixInferFromUsage_all.ts b/tests/cases/fourslash/codeFixInferFromUsage_all.ts index a093b9ab12c4a..85c6905072346 100644 --- a/tests/cases/fourslash/codeFixInferFromUsage_all.ts +++ b/tests/cases/fourslash/codeFixInferFromUsage_all.ts @@ -1,6 +1,7 @@ /// // @noImplicitAny: true +// @strictNullChecks: true ////function f(x, y) { //// x += 0; @@ -10,6 +11,11 @@ ////function g(z) { //// return z * 2; ////} +//// +////let x = null; +////function h() { +//// if (!x) x = 2; +////} verify.codeFixAll({ fixId: "inferFromUsage", @@ -22,5 +28,10 @@ verify.codeFixAll({ function g(z: number) { return z * 2; +} + +let x: number | null = null; +function h() { + if (!x) x = 2; }`, }); From 8ce581149ceba29dfba99261f4325779383bf534 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 12:42:46 -0700 Subject: [PATCH 55/69] Bump user test enumeration timeout --- src/harness/externalCompileRunner.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/harness/externalCompileRunner.ts b/src/harness/externalCompileRunner.ts index e80fb17db37eb..fe1f2413a2d6c 100644 --- a/src/harness/externalCompileRunner.ts +++ b/src/harness/externalCompileRunner.ts @@ -27,8 +27,10 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { // Read in and evaluate the test list const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles(); - describe(`${this.kind()} code samples`, () => { - const cwd = path.join(Harness.IO.getWorkspaceRoot(), this.testDir); + const cls = this; + describe(`${this.kind()} code samples`, function(this: Mocha.ISuiteCallbackContext) { + this.timeout(600_000); // 10 minutes + const cwd = path.join(Harness.IO.getWorkspaceRoot(), cls.testDir); const placeholderName = ".node_modules"; const moduleDirName = "node_modules"; before(() => { @@ -42,7 +44,7 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { }); }); for (const test of testList) { - this.runTest(typeof test === "string" ? test : test.file); + cls.runTest(typeof test === "string" ? test : test.file); } after(() => { ts.forEachAncestorDirectory(cwd, dir => { From e509ee59dff11f9b23c9cfe64f7d07fd3a143839 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 12:44:03 -0700 Subject: [PATCH 56/69] Have bot force push his branch so he can run multiple times a day --- scripts/open-user-pr.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/open-user-pr.ts b/scripts/open-user-pr.ts index 75dfff5b2c8b0..c2b31951612d1 100644 --- a/scripts/open-user-pr.ts +++ b/scripts/open-user-pr.ts @@ -27,7 +27,7 @@ runSequence([ ["git", ["add", "."]], // Add all changes ["git", ["commit", "-m", `"Update user baselines"`]], // Commit all changes ["git", ["remote", "add", "fork", remoteUrl]], // Add the remote fork - ["git", ["push", "--set-upstream", "fork", branchName]] // push the branch + ["git", ["push", "--set-upstream", "fork", branchName, "-f"]] // push the branch ]); const gh = new Octokit(); From 15c09ef66b675ff6c9d111036201bf78b7c4dc2f Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 12:45:27 -0700 Subject: [PATCH 57/69] Add temp module dir to gitignore to reduce git intellisense load when running user tests --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2b38063a0b71a..1b218945a188f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ +.node_modules/ built/* tests/cases/rwc/* tests/cases/test262/* From 5bf6e30f8e839d8e8887ec4ffaa63e70c02e29a4 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 12:58:36 -0700 Subject: [PATCH 58/69] Use jsdoc aliases if visible when printing types (#24153) * Use jsdoc aliases if visible when printing types * Modify implementation a bit, add test that aughta change in the new future * Accept baselines- hold off on typedef template lookup change --- src/compiler/checker.ts | 10 +- src/compiler/utilities.ts | 8 +- .../checkJsdocTypedefInParamTag1.types | 24 +- tests/baselines/reference/jsDocTypedef1.js | 136 +---------- .../jsdocTemplateConstructorFunction2.types | 2 +- .../reference/jsdocTypedefMissingType.types | 2 +- .../jsdocTypedef_propertyWithNoType.types | 2 +- .../reference/typedefTagNested.types | 4 +- .../jsQuickInfoGenerallyAcceptableSize.ts | 212 ++++++++++++++++++ 9 files changed, 243 insertions(+), 157 deletions(-) create mode 100644 tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 629e2f1819d8c..58cbc2f12b7c3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4024,6 +4024,10 @@ namespace ts { function determineIfDeclarationIsVisible() { switch (node.kind) { + case SyntaxKind.JSDocTypedefTag: + // Top-level jsdoc typedefs are considered exported + // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file + return !!(node.parent && node.parent.parent && node.parent.parent.parent && isSourceFile(node.parent.parent.parent)); case SyntaxKind.BindingElement: return isDeclarationVisible(node.parent.parent); case SyntaxKind.VariableDeclaration: @@ -5163,8 +5167,8 @@ namespace ts { let result: TypeParameter[]; for (const node of symbol.declarations) { if (node.kind === SyntaxKind.InterfaceDeclaration || node.kind === SyntaxKind.ClassDeclaration || - node.kind === SyntaxKind.ClassExpression || node.kind === SyntaxKind.TypeAliasDeclaration) { - const declaration = node; + node.kind === SyntaxKind.ClassExpression || node.kind === SyntaxKind.TypeAliasDeclaration || node.kind === SyntaxKind.JSDocTypedefTag) { + const declaration = node; const typeParameters = getEffectiveTypeParameterDeclarations(declaration); if (typeParameters) { result = appendTypeParameters(result, typeParameters); @@ -9046,7 +9050,7 @@ namespace ts { } function getAliasSymbolForTypeNode(node: TypeNode) { - return node.parent.kind === SyntaxKind.TypeAliasDeclaration ? getSymbolOfNode(node.parent) : undefined; + return (node.parent.kind === SyntaxKind.TypeAliasDeclaration || node.parent.kind === SyntaxKind.JSDocTypedefTag) ? getSymbolOfNode(node.parent) : undefined; } function getAliasTypeArgumentsForTypeNode(node: TypeNode) { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index d5cd22d7b7cc6..e10d40a70ba16 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3093,11 +3093,13 @@ namespace ts { * Gets the effective type parameters. If the node was parsed in a * JavaScript file, gets the type parameters from the `@template` tag from JSDoc. */ - export function getEffectiveTypeParameterDeclarations(node: DeclarationWithTypeParameters) { - return node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : undefined); + export function getEffectiveTypeParameterDeclarations(node: DeclarationWithTypeParameters | JSDocTypedefTag) { + return isJSDocTypedefTag(node) + ? getJSDocTypeParameterDeclarations(node) + : node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : undefined); } - export function getJSDocTypeParameterDeclarations(node: DeclarationWithTypeParameters) { + export function getJSDocTypeParameterDeclarations(node: DeclarationWithTypeParameters | JSDocTypedefTag) { const templateTag = getJSDocTemplateTag(node); return templateTag && templateTag.typeParameters; } diff --git a/tests/baselines/reference/checkJsdocTypedefInParamTag1.types b/tests/baselines/reference/checkJsdocTypedefInParamTag1.types index b0847a71522b5..ffc7fe505e6d1 100644 --- a/tests/baselines/reference/checkJsdocTypedefInParamTag1.types +++ b/tests/baselines/reference/checkJsdocTypedefInParamTag1.types @@ -10,18 +10,18 @@ * @param {Opts} opts */ function foo(opts) { ->foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void ->opts : { x: string; y?: string; z?: string; w?: string; } +>foo : (opts: Opts) => void +>opts : Opts opts.x; >opts.x : string ->opts : { x: string; y?: string; z?: string; w?: string; } +>opts : Opts >x : string } foo({x: 'abc'}); >foo({x: 'abc'}) : void ->foo : (opts: { x: string; y?: string; z?: string; w?: string; }) => void +>foo : (opts: Opts) => void >{x: 'abc'} : { x: string; } >x : string >'abc' : "abc" @@ -34,18 +34,18 @@ foo({x: 'abc'}); * @param {AnotherOpts} opts */ function foo1(opts) { ->foo1 : (opts: { anotherX: string; anotherY?: string; }) => void ->opts : { anotherX: string; anotherY?: string; } +>foo1 : (opts: AnotherOpts) => void +>opts : AnotherOpts opts.anotherX; >opts.anotherX : string ->opts : { anotherX: string; anotherY?: string; } +>opts : AnotherOpts >anotherX : string } foo1({anotherX: "world"}); >foo1({anotherX: "world"}) : void ->foo1 : (opts: { anotherX: string; anotherY?: string; }) => void +>foo1 : (opts: AnotherOpts) => void >{anotherX: "world"} : { anotherX: string; } >anotherX : string >"world" : "world" @@ -60,17 +60,17 @@ foo1({anotherX: "world"}); * @param {Opts1} opts */ function foo2(opts) { ->foo2 : (opts: { x: string; y?: string; z?: string; w?: string; }) => void ->opts : { x: string; y?: string; z?: string; w?: string; } +>foo2 : (opts: Opts1) => void +>opts : Opts1 opts.x; >opts.x : string ->opts : { x: string; y?: string; z?: string; w?: string; } +>opts : Opts1 >x : string } foo2({x: 'abc'}); >foo2({x: 'abc'}) : void ->foo2 : (opts: { x: string; y?: string; z?: string; w?: string; }) => void +>foo2 : (opts: Opts1) => void >{x: 'abc'} : { x: string; } >x : string >'abc' : "abc" diff --git a/tests/baselines/reference/jsDocTypedef1.js b/tests/baselines/reference/jsDocTypedef1.js index e1b34f14c2bfa..bc00dcafb5d92 100644 --- a/tests/baselines/reference/jsDocTypedef1.js +++ b/tests/baselines/reference/jsDocTypedef1.js @@ -41,140 +41,8 @@ "kind": "space" }, { - "text": "{", - "kind": "punctuation" - }, - { - "text": "\n", - "kind": "lineBreak" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "x", - "kind": "propertyName" - }, - { - "text": ":", - "kind": "punctuation" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "string", - "kind": "keyword" - }, - { - "text": ";", - "kind": "punctuation" - }, - { - "text": "\n", - "kind": "lineBreak" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "y", - "kind": "propertyName" - }, - { - "text": "?", - "kind": "punctuation" - }, - { - "text": ":", - "kind": "punctuation" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "string", - "kind": "keyword" - }, - { - "text": ";", - "kind": "punctuation" - }, - { - "text": "\n", - "kind": "lineBreak" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "z", - "kind": "propertyName" - }, - { - "text": "?", - "kind": "punctuation" - }, - { - "text": ":", - "kind": "punctuation" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "string", - "kind": "keyword" - }, - { - "text": ";", - "kind": "punctuation" - }, - { - "text": "\n", - "kind": "lineBreak" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "w", - "kind": "propertyName" - }, - { - "text": "?", - "kind": "punctuation" - }, - { - "text": ":", - "kind": "punctuation" - }, - { - "text": " ", - "kind": "space" - }, - { - "text": "string", - "kind": "keyword" - }, - { - "text": ";", - "kind": "punctuation" - }, - { - "text": "\n", - "kind": "lineBreak" - }, - { - "text": "}", - "kind": "punctuation" + "text": "Opts", + "kind": "aliasName" } ], "documentation": [], diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction2.types b/tests/baselines/reference/jsdocTemplateConstructorFunction2.types index 5737f8caaf9f1..787d9ab106bb1 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction2.types +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction2.types @@ -79,7 +79,7 @@ z.u = false */ /** @type {A} */ const options = { value: null }; ->options : { value: any; } +>options : A >{ value: null } : { value: null; } >value : null >null : null diff --git a/tests/baselines/reference/jsdocTypedefMissingType.types b/tests/baselines/reference/jsdocTypedefMissingType.types index 18cd68abfcb8b..b161c6ca489de 100644 --- a/tests/baselines/reference/jsdocTypedefMissingType.types +++ b/tests/baselines/reference/jsdocTypedefMissingType.types @@ -14,7 +14,7 @@ const t = 0; /** @type Person */ const person = { name: "" }; ->person : { name: string; } +>person : Person >{ name: "" } : { name: string; } >name : string >"" : "" diff --git a/tests/baselines/reference/jsdocTypedef_propertyWithNoType.types b/tests/baselines/reference/jsdocTypedef_propertyWithNoType.types index 7d7326fc80c7b..553c1b544aead 100644 --- a/tests/baselines/reference/jsdocTypedef_propertyWithNoType.types +++ b/tests/baselines/reference/jsdocTypedef_propertyWithNoType.types @@ -6,7 +6,7 @@ /** @type {Foo} */ const x = { foo: 0 }; ->x : { foo: any; } +>x : Foo >{ foo: 0 } : { foo: number; } >foo : number >0 : 0 diff --git a/tests/baselines/reference/typedefTagNested.types b/tests/baselines/reference/typedefTagNested.types index 6fe8c251205fe..52707d55cecc3 100644 --- a/tests/baselines/reference/typedefTagNested.types +++ b/tests/baselines/reference/typedefTagNested.types @@ -10,7 +10,7 @@ var ex; /** @type {App} */ const app = { ->app : { name: string; icons: { image32: string; image64: string; }; } +>app : App >{ name: 'name', icons: { image32: 'x.png', image64: 'y.png', }} : { name: string; icons: { image32: string; image64: string; }; } name: 'name', @@ -40,5 +40,5 @@ const app = { /** @type {Opp} */ var mistake; ->mistake : { name: string; oops: { horrible: string; }; } +>mistake : Opp diff --git a/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts b/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts new file mode 100644 index 0000000000000..a6fa8059481c4 --- /dev/null +++ b/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts @@ -0,0 +1,212 @@ +/// + +// @allowJs: true +// @checkJs: true +// @Filename: index.js +////// Data table +/////** +//// @typedef DataTableThing +//// @type {Thing} +//// @property {function(TagCollection, Location, string, string, Infotable):void} AddDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add multiple data table entries. +//// @property {function(TagCollection, Location, string, string, Infotable):string} AddDataTableEntry - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add a new data table entry. +//// @property {function(TagCollection, Location, string, string, Infotable):void} AddOrUpdateDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add or update multiple data table entries. +//// @property {function(TagCollection, Location, string, string, Infotable):string} AddOrUpdateDataTableEntry - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add a new data table entry, or if it exists, update an existing entry. +//// @property {function(TagCollection, Location, string, string, Infotable):void} AssignDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Replaces existing data table entries. +//// @property {function():Infotable} CreateValues - Create an empty info table of the correct datashape for this data table. +//// @property {function(*):Infotable} CreateValuesWithData - (arg0: values as JSONObject) Create an info table of the correct datashape for this stream and include data values. +//// @property {function(Infotable):void} DeleteDataTableEntries - (arg0: values as Infotable) Delete all table entries that match the provided values. +//// @property {function(TagCollection, Location, string, string, Infotable, *):void} DeleteDataTableEntriesWithQuery - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values, arg5: query as JSONObject) Delete multiple data table entries based on a query. +//// @property {function(Infotable):void} DeleteDataTableEntry - (arg0: values as Infotable) Delete an existing data table entry +//// @property {function(string):void} DeleteDataTableEntryByKey - (arg0: key) Delete an existing data table entry using its key value. +//// @property {function(Infotable):Infotable} FindDataTableEntries - (arg0: values as Infotable) Retrieve all table entries that match the provided values. +//// @property {function():DataShapeDefinition} getDataShape +//// @property {function():string} GetDataShape - Get the currently assigned data shape. +//// @property {function():string} getDataShapeName +//// @property {function(number):Infotable} GetDataTableEntries - (arg0: maxItems) Retrieve all table entries up to max items number. +//// @property {function(Infotable):Infotable} GetDataTableEntry - (arg0: values as Infotable) Get an existing data table entry. +//// @property {function(string):Infotable} GetDataTableEntryByKey - (arg0: key) Get an existing data table entry using its key value. +//// @property {function():number} GetDataTableEntryCount - Get an count of data table entries. +//// @property {function():ThingworxRelationshipTypes} getDataType +//// @property {function():EntityReferenceTypeMap} getDependencies +//// @property {function():IDataEntryCloseableIterator} getEntryIterator - Returns an iterator over all entries inside this data table thing. +//// @property {function():Infotable} GetFieldNames - Retrieve a list of field names for the data shape associated with this stream. +//// @property {function(string):Infotable} GetFieldNamesByType - (arg0: key) Retrieve a list of field names for the data shape associated with this stream, of a specific type. +//// @property {function():string} getItemCollectionName +//// @property {function():string} getItemEntityName +//// @property {function():ThingworxRelationshipTypes} getItemEntityType +//// @property {function():void} initializeEntity +//// @property {function():void} initializeThing +//// @property {function():boolean} isStoredAsEncrypted +//// @property {function():void} PurgeDataTableEntries - Remove all data table entries. +//// @property {function(Infotable, number, TagCollection, string, *):Infotable} QueryDataTableEntries - (arg0: values, arg1: maxItems, arg2: tags, arg3: source, arg4: query as JSONObject) Retrieve all table entries that match the query parameters. +//// @property {function():void} Reindex - Reindex the custom indexes on the data table. +//// @property {function(number, string, TagCollection, *, string):Infotable} SearchDataTableEntries - (arg0: maxItems, arg1: searchExpression, arg2: tags, arg3: query as JSONObject, arg4: source) Retrieve all table entries that match the search query parameters. +//// @property {function(string):void} SetDataShape - (arg0: name) Sets the data shape. +//// @property {function(TagCollection, Location, string, string, Infotable):void} UpdateDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Update multiple data table entries. +//// @property {function(TagCollection, Location, string, string, Infotable, *, Infotable):void} UpdateDataTableEntriesWithQuery - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values, arg5: query as JSONObject, arg6: updatValues) Add or update multiple data table entries based on a query. +//// @property {function(TagCollection, Location, string, string, Infotable):void} UpdateDataTableEntry - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) update an existing data table entry. +//// @property {function(ImportedEntityCollection):void} validateConfiguration - (arg0: importedEntityCollections) +////*/ +//// +/////** +//// @typedef Infotable +//// @type {object} +//// @property {boolean} isCompressed +//// @property {DataShape} dataShape +//// @property {function(FieldDefinition):int} addField - Adds a field to the DataShapeDefinition of this InfoTable, given a FieldDefinition +//// @property {function(*):void} AddField - *FROM SNIPPET* adds a new field definition to the datashape (arg0 is an object that should match with datashape) +//// @property {function(object):void} AddRow - *FROM SNIPPET* adds a row to the infotable (arg0 is an object that should match with datashape) +//// @property {function(ValueCollection):int} addRow - Adds a row to this InfoTable's ValueCollectionList given a ValueCollection +//// @property {ValueCollectionList} rows - returns the ValueCollectionList of the rows in this InfoTable +//// @property {function(Infotable, boolean):int} addRowsFrom - Adds the rows from an InfoTable to this InfoTable given: the InfoTable to be copied from and a Boolean indicating whether the copied values should be references or cloned values. (arg 0: infotable, arg1: clone) +//// @property {function():Infotable} clone +//// @property {function():Infotable} cloneStructure +//// @property {function():ValueCollection} currentRow - Returns the current row in this InfoTable as a ValueCollection +//// @property {function(object):void} Delete - *FROM SNIPPET* delete rows by value filter (arg0 is an object that should match with datashape) +//// @property {function(IFilter):int} delete +//// @property {function(ValueCollection):int} delete - Creates an AndFilterCollection based on the given ValueCollection and deletes all rows falling within the parameters of that filter +//// @property {function(IFilter):Infotable} deleteRowsToNewTable +//// @property {function(object):void} Filter - *FROM SNIPPET* filters the infotable (arg0 is an object that should match with datashape) +//// @property {function(ValueCollection):void} filter - Creates an AndFilterCollection based on the given ValueCollection and applies it to this InfoTable +//// @property {function(IFilter):void} filterRows +//// @property {function(IFilter):Infotable} filterRowsToNewTable +//// @property {function(*):Infotable} FilterToNewTable - Finds rows in this InfoTable with values that match the values given as a JSONObject and returns them as a new InfoTable +//// @property {function(object):void} Find - *FROM SNIPPET* retrieve rows by value filter (arg0 is an object that should match with datashape) +//// @property {function(IFilter):ValueCollection} find - Finds and returns a row from this InfoTable that falls within the parameters of the given IFilter +//// @property {function(ValueCollection):ValueCollection} find - Finds and returns a row from this InfoTable that matches the values of all fields given as a (ValueCollection) +//// @property {function(ValueCollection, string[]):ValueCollection} find - Finds and returns a row in this InfoTable given the fields to search as a String Array and the values to match as a ( ValueCollection) +//// @property {function(ValueCollection):int} findIndex - Finds and returns the index of a row from this InfoTable that matches the values of all fields given as a ( ValueCollection) +//// @property {function(*):Infotable} fromJSON +//// @property {function():DataShapeDefinition} getDataShape - Returns the DataShapeDefinition for this InfoTable +//// @property {function(string):FieldDefinition} getField - Returns a FieldDefinition from this InfoTable's DataShapeDefinition, given the name of the field as a String +//// @property {function():int} getFieldCount - Returns the number of fields in this InfoTable's DataShape as an int +//// @property {function():ValueCollection} getFirstRow - Returns the first row (ValueCollection) of this InfoTable +//// @property {function():InfoTableRowIndex} getIndex - +//// @property {function():ValueCollection} getLastRow - Returns the last row in this InfoTable as a ValueCollection +//// @property {function():number} getLength - Returns the number of rows in this InfoTable as an Integer +//// @property {function():DataShapeDefinition} getPublicDataShape - Returns a DataShapeDefinition for this InfoTable containing only the public fields +//// @property {function():*} getReturnValue - Returns the first value of the first field in the first row of this InfoTable +//// @property {function(number):ValueCollection} getRow - *FROM SNIPPET* retrieves a row by index +//// @property {function():number} getRowCount - *FROM SNIPPET* gets the count of rows +//// @property {function():ValueCollectionList} getRows - Returns a ValueCollectionList of the rows in this InfoTable +//// @property {function(string):IPrimitiveType} getRowValue - Returns a value as an IPrimitiveType from the first row of this InfoTable, given a field name as a String +//// @property {function(string):boolean} hasField - Verifies a field exists in this InfoTable's DataShape given the field name as a String +//// @property {function(string[],boolean):void} indexOn +//// @property {function(string, boolean):void} indexOn +//// @property {function():boolean} isEmpty - Returns a boolean indicating whether this InfoTable has a size of zero +//// @property {function(BaseTypes):boolean} isType +//// @property {function():void} moveToFirst - Moves to the first row of this InfoTable. +//// @property {function():ValueCollection} nextRow - Returns the row after the current row in this InfoTable as a ValueCollection +//// @property {function(string):void} quickSort - (arg0: fieldName) +//// @property {function(string, boolean):void} quickSort - (arg0: fieldName, arg1: isAscending) +//// @property {function():void} RemoveAllRows - *FROM SNIPPET* remove all rows from infotable +//// @property {function():void} removeAllRows - remove all rows from infotable +//// @property {function(string):void} RemoveField - *FROM SNIPPET* remove a datashape field by name +//// @property {function(number):void} RemoveRow - *FROM SNIPPET* removes a row by index +//// @property {function(number):void} removeRow - Removes a ValueCollection from the InfoTable given the row as an int +//// @property {function(DataShapeDefinition):void} setDataShape - Sets DataShapeDefinition for this InfoTable +//// @property {function():void} setRow - Sets a single row in this InfoTable given a ValueCollection as a row and the index of the row to be replaced +//// @property {function(ValueCollectionList):void} setRows - Sets the rows in this InfoTable given a ValueCollectionList +//// @property {function(Sort):void} Sort - *FROM SNIPPET* sorts the table +//// @property {function(ISort):void} sortRows +//// @property {function():Infotable} sortRowsToNewTable +//// @property {function():*} toJSON +//// @property {function():JsonInfotable} ToJSON - *FROM SNIPPET* returns the table as JsonInfotable +//// @property {function(number):void} topN - (arg0: maxItems) +//// @property {function(number):Infotable} topNToNewTable - (arg0: maxItems) +//// @property {function(IFIlter, ValueCollection):Infotable} updateRowsToNewTable - (arg0: filters, arg1: values) +////*/ +//// +/////** +//// @typedef DataShapeDefinition +//// @type {object} +//// @property {function(FieldDefinition):void} addFieldDefinition - Adds a new field definition to this data shape definition. +//// @property {function():DataShapeDefinition} clone - Creates a deep clone of this data shape definition +//// @property {function():FieldDefinition} getFieldDefinition - Returns the field definition with the specified name. +//// @property {function():FieldDefinitionCollection} getFields - Returns the collection of field definitions belonging to this data shape definition. +//// @property {function():boolean} hasField - Tests if the field named exists in this definition. +//// @property {function():boolean} hasPrimaryKey - Tests if this definition contains any fields that are designated as primary keys. +//// @property {function():boolean} matches - Determines if this data shape definition has the same fields with the same base types as the provided data shape definition. +//// @property {function():void} setFields - Replaces the fields belonging to this data shape definition with the fields provided in the specified collection. +//// @property {function():*} toJSON - Serializes this data shape definition into JSON format. +////*/ +//// +/////** +//// @typedef FieldDefinition +//// @type {object} +//// @property {function(AspectCollection):boolean} aspectsMatch - Determines whether or not the aspects assigned to this field are equivalent to the aspects in the provided collection. +//// @property {function():FieldDefinition} clone - Creates a deep clone of this field definition. +//// @property {function():AspectCollection} getAspects - Returns the collection of aspects belonging to this field. +//// @property {function():BaseTypes} getBaseType - Returns the base type assigned to this field. +//// @property {function():string} getDataShapeName - Returns the data shape name assigned to the ASPECT_DATASHAPE aspect, if the base type for this field is set to INFOTABLE. +//// @property {function():IPrimitiveType} getDefaultValue - Returns the default value assigned to this field, if one has been defined according to the ASPECT_DEFAULTVALUE aspect. +//// @property {function():number} getOrdinal - Returns the ordinal value assigned to this field. +//// @property {function():boolean} hasDataShape - Determines if, when the base type of this field is an INFOTABLE, a data shape has been assigned. +//// @property {function():boolean} hasDefaultValue - Determines if this field has a default value according to the ASPECT_DEFAULTVALUE aspect. +//// @property {function():boolean} isDataTableEntry - Determines if, when the base type of this field is an INFOTABLE, the contents of the info table will be derived from a data table entry. +//// @property {function():boolean} isPrimaryKey - Determines if this field has the ASPECT_ISPRIMARYKEY aspect set to true. +//// @property {function():boolean} isPrivate - Determines if this field has the ASPECT_ISPRIVATE aspect set to true. +//// @property {function():boolean} isRequired - Determines if this field has the ASPECT_ISREQUIRED aspect set to true. +//// @property {function():boolean} isStreamEntry - Determines if, when the base type of this field is an INFOTABLE, the contents of the info table will be derived from a stream entry. +//// @property {function(AspectCollection):void} setAspects - Replaces all aspects on this field with the aspects in the specified collection. +//// @property {function(BaseTypes):void} setBaseType - Assigns the specified base type to this field. +//// @property {function(number):void} setOrdinal - Sets the ordinal value for this field. +////*/ +//// +/////** +//// @typedef ValueCollectionList +//// @type {ArrayList} +//// @property {function():Infotable} convertToTypedInfoTable +//// @property {function():ValueCollection} currentRow +//// @property {function(ValueCollection):ValueCollection} find - arg0: values +//// @property {function(ValueCollection, string[]):ValueCollection} find - arg0: values, arg1: columns +//// @property {function(ValueCollection):number} findIndex +//// @property {function():ValueCollection} getFirstRow +//// @property {function():ValueCollection} getLastRow +//// @property {function():number} getLength +//// @property {function(number):ValueCollection} getRow - arg0: index +//// @property {function():number} getRowCount +//// @property {function(string):IPrimitiveType} getRowValue - arg0: name +//// @property {function():void} moveToFirst +//// @property {function():ValueCollection} nextRow +////*/ +//// +/////** +//// @typedef ValueCollection +//// @type {NamedObject} +//// @property {function():ValueCollection} clone +//// @property {function(*,DataShapeDefinition):ValueCollection} fromJSONTyped +//// @property {function(string):*} getJSONSerializedValue +//// @property {function(string):IPrimitiveType} getPrimitive +//// @property {function(string):string} getStringValue +//// @property {function(string):*} getValue +//// @property {function(string):boolean} has +//// @property {function(ValueCollection):boolean} matches +//// @property {function():Infotable} toInfoTable +//// @property {function():*} toJSON +//// @property {function(DataShapeDefinition):*} toJSONTyped +//// @property {function():NamedValueCollection} toNamedValueCollection +////*/ +//// +//// +/////** +//// * Do something +//// * @param {DataTableThing} dataTable +//// */ +////var doSome/*1*/thing = function (dataTable) { +////}; +//// +/////** +//// * @callback SomeCallback +//// * @param {number} foo +//// * @param {string} bar +//// */ +//// +//// /** +//// * Another thing +//// * @type {SomeCallback} +//// */ +////var another/*2*/Thing = function(a, b) {} + +verify.quickInfoAt("1", "var doSomething: (dataTable: DataTableThing) => void", "Do something"); +verify.quickInfoAt("2", "var anotherThing: any", "Another thing"); // TODO: #23947 From e01c7d23e11d20ffcce35a2415b9d9f6280f7a33 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 13:09:54 -0700 Subject: [PATCH 59/69] Correctly show instantiated signatures for JSX element signature help and quick info (#23492) * Correctly show instantiated signatures for JSX element signature help * Also bundle fix for quickinfo * Use more complete cache to avoid duplicate errors --- src/compiler/checker.ts | 105 +++++++++++------- src/compiler/types.ts | 1 + tests/cases/fourslash/jsxGenericQuickInfo.tsx | 22 ++++ ...ParametershasInstantiatedSignatureHelp.tsx | 19 ++++ 4 files changed, 105 insertions(+), 42 deletions(-) create mode 100644 tests/cases/fourslash/jsxGenericQuickInfo.tsx create mode 100644 tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 58cbc2f12b7c3..086f581e15384 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -401,6 +401,7 @@ namespace ts { const unknownSignature = createSignature(undefined, undefined, undefined, emptyArray, unknownType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); const resolvingSignature = createSignature(undefined, undefined, undefined, emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); const silentNeverSignature = createSignature(undefined, undefined, undefined, emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, /*hasRestParameter*/ false, /*hasLiteralTypes*/ false); + const resolvingSignaturesArray = [resolvingSignature]; const enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true); const jsObjectLiteralIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false); @@ -15359,8 +15360,17 @@ namespace ts { } } - if (context.typeArguments) { - signatures = mapDefined(signatures, s => getJsxSignatureTypeArgumentInstantiation(s, context, isJs)); + const links = getNodeLinks(context); + if (!links.resolvedSignatures) { + links.resolvedSignatures = createMap(); + } + const cacheKey = "" + getTypeId(valueType); + if (links.resolvedSignatures.get(cacheKey) && links.resolvedSignatures.get(cacheKey) !== resolvingSignaturesArray) { + signatures = links.resolvedSignatures.get(cacheKey); + } + else if (!links.resolvedSignatures.get(cacheKey)) { + links.resolvedSignatures.set(cacheKey, resolvingSignaturesArray); + links.resolvedSignatures.set(cacheKey, signatures = instantiateJsxSignatures(context, signatures)); } return getUnionType(map(signatures, ctor ? t => getJsxPropsTypeFromClassType(t, isJs, context, /*reportErrors*/ false) : t => getJsxPropsTypeFromCallSignature(t, context)), UnionReduction.None); @@ -16341,6 +16351,40 @@ namespace ts { return undefined; } + function getInstantiatedJsxSignatures(openingLikeElement: JsxOpeningLikeElement, elementType: Type, reportErrors?: boolean) { + const links = getNodeLinks(openingLikeElement); + if (!links.resolvedSignatures) { + links.resolvedSignatures = createMap(); + } + const cacheKey = "" + getTypeId(elementType); + if (links.resolvedSignatures.get(cacheKey) && links.resolvedSignatures.get(cacheKey) === resolvingSignaturesArray) { + return; + } + else if (links.resolvedSignatures.get(cacheKey)) { + return links.resolvedSignatures.get(cacheKey); + } + + links.resolvedSignatures.set(cacheKey, resolvingSignaturesArray); + // Resolve the signatures, preferring constructor + let signatures = getSignaturesOfType(elementType, SignatureKind.Construct); + if (signatures.length === 0) { + // No construct signatures, try call signatures + signatures = getSignaturesOfType(elementType, SignatureKind.Call); + if (signatures.length === 0) { + // We found no signatures at all, which is an error + if (reportErrors) { + error(openingLikeElement.tagName, Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, getTextOfNode(openingLikeElement.tagName)); + } + return; + } + } + + // Instantiate in context of source type + const results = instantiateJsxSignatures(openingLikeElement, signatures); + links.resolvedSignatures.set(cacheKey, results); + return results; + } + /** * Resolve attributes type of the given opening-like element. The attributes type is a type of attributes associated with the given elementType. * For instance: @@ -16403,20 +16447,10 @@ namespace ts { // Get the element instance type (the result of newing or invoking this tag) - // Resolve the signatures, preferring constructor - let signatures = getSignaturesOfType(elementType, SignatureKind.Construct); - if (signatures.length === 0) { - // No construct signatures, try call signatures - signatures = getSignaturesOfType(elementType, SignatureKind.Call); - if (signatures.length === 0) { - // We found no signatures at all, which is an error - error(openingLikeElement.tagName, Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, getTextOfNode(openingLikeElement.tagName)); - return unknownType; - } + const instantiatedSignatures = getInstantiatedJsxSignatures(openingLikeElement, elementType, /*reportErrors*/ true); + if (!length(instantiatedSignatures)) { + return unknownType; } - - // Instantiate in context of source type - const instantiatedSignatures = instantiateJsxSignatures(openingLikeElement, signatures); const elemInstanceType = getUnionType(map(instantiatedSignatures, getReturnTypeOfSignature), UnionReduction.Subtype); // If we should include all stateless attributes type, then get all attributes type from all stateless function signature. @@ -18106,11 +18140,11 @@ namespace ts { let typeArguments: NodeArray; - if (!isDecorator && !isJsxOpeningOrSelfClosingElement) { + if (!isDecorator) { typeArguments = (node).typeArguments; // We already perform checking on the type arguments on the class declaration itself. - if (isTaggedTemplate || (node).expression.kind !== SyntaxKind.SuperKeyword) { + if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || (node).expression.kind !== SyntaxKind.SuperKeyword) { forEach(typeArguments, checkSourceElement); } } @@ -18699,30 +18733,6 @@ namespace ts { */ function getResolvedJsxStatelessFunctionSignature(openingLikeElement: JsxOpeningLikeElement, elementType: Type, candidatesOutArray: Signature[]): Signature | undefined { Debug.assert(!(elementType.flags & TypeFlags.Union)); - return resolveStatelessJsxOpeningLikeElement(openingLikeElement, elementType, candidatesOutArray); - } - - /** - * Try treating a given opening-like element as stateless function component and resolve a tagName to a function signature. - * @param openingLikeElement an JSX opening-like element we want to try resolve its stateless function if possible - * @param elementType a type of the opening-like JSX element, a result of resolving tagName in opening-like element. - * @param candidatesOutArray an array of signature to be filled in by the function. It is passed by signature help in the language service; - * the function will fill it up with appropriate candidate signatures - * @return a resolved signature if we can find function matching function signature through resolve call or a first signature in the list of functions. - * otherwise return undefined if tag-name of the opening-like element doesn't have call signatures - */ - function resolveStatelessJsxOpeningLikeElement(openingLikeElement: JsxOpeningLikeElement, elementType: Type, candidatesOutArray: Signature[]): Signature | undefined { - // If this function is called from language service, elementType can be a union type. This is not possible if the function is called from compiler (see: resolveCustomJsxElementAttributesType) - if (elementType.flags & TypeFlags.Union) { - const types = (elementType as UnionType).types; - let result: Signature; - for (const type of types) { - result = result || resolveStatelessJsxOpeningLikeElement(openingLikeElement, type, candidatesOutArray); - } - - return result; - } - const callSignatures = elementType && getSignaturesOfType(elementType, SignatureKind.Call); if (callSignatures && callSignatures.length > 0) { return resolveCall(openingLikeElement, callSignatures, candidatesOutArray); @@ -18744,7 +18754,18 @@ namespace ts { case SyntaxKind.JsxOpeningElement: case SyntaxKind.JsxSelfClosingElement: // This code-path is called by language service - return resolveStatelessJsxOpeningLikeElement(node, checkExpression(node.tagName), candidatesOutArray) || unknownSignature; + const exprTypes = checkExpression(node.tagName); + return forEachType(exprTypes, exprType => { + const sfcResult = getResolvedJsxStatelessFunctionSignature(node, exprType, candidatesOutArray); + if (sfcResult && sfcResult !== unknownSignature) { + return sfcResult; + } + const sigs = getInstantiatedJsxSignatures(node, exprType); + if (candidatesOutArray && length(sigs)) { + candidatesOutArray.push(...sigs); + } + return length(sigs) ? sigs[0] : unknownSignature; + }) || unknownSignature; } Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 5c1069538d0a1..f2a6f001a21a6 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3625,6 +3625,7 @@ namespace ts { flags?: NodeCheckFlags; // Set of flags specific to Node resolvedType?: Type; // Cached type of type node resolvedSignature?: Signature; // Cached signature of signature node or call expression + resolvedSignatures?: Map; // Cached signatures of jsx node resolvedSymbol?: Symbol; // Cached name resolution result resolvedIndexInfo?: IndexInfo; // Cached indexing info resolution result maybeTypePredicate?: boolean; // Cached check whether call expression might reference a type predicate diff --git a/tests/cases/fourslash/jsxGenericQuickInfo.tsx b/tests/cases/fourslash/jsxGenericQuickInfo.tsx new file mode 100644 index 0000000000000..898c7c17790a0 --- /dev/null +++ b/tests/cases/fourslash/jsxGenericQuickInfo.tsx @@ -0,0 +1,22 @@ +/// +//@Filename: file.tsx +//// declare module JSX { +//// interface Element { } +//// interface IntrinsicElements { +//// } +//// interface ElementAttributesProperty { props } +//// } +//// interface Props { +//// items: T[]; +//// renderItem: (item: T) => string; +//// } +//// class Component { +//// constructor(props: Props) {} +//// props: Props; +//// } +//// var b = new Component({items: [0, 1, 2], render/*0*/Item: it/*1*/em => item.toFixed()}); +//// var c = item.toFixed()} +verify.quickInfoAt("0", "(property) Props.renderItem: (item: number) => string"); +verify.quickInfoAt("1", "(parameter) item: number"); +verify.quickInfoAt("2", "(JSX attribute) renderItem: (item: number) => string"); +verify.quickInfoAt("3", "(parameter) item: number"); diff --git a/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx new file mode 100644 index 0000000000000..e317fe338edb8 --- /dev/null +++ b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx @@ -0,0 +1,19 @@ +/// + +//// declare namespace JSX { +//// interface Element { +//// render(): Element | string | false; +//// } +//// } +//// +//// function SFC(_props: Record) { +//// return ''; +//// } +//// +//// (); +//// (/>); + +goTo.marker("1"); +verify.currentSignatureHelpIs("SFC(_props: Record): string"); +goTo.marker("2"); +verify.currentSignatureHelpIs("SFC(_props: Record): string"); From a85f1d5c1e7b194bb8091e84a7724b67e2b896dd Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 13:11:25 -0700 Subject: [PATCH 60/69] Fix lint --- src/harness/externalCompileRunner.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/harness/externalCompileRunner.ts b/src/harness/externalCompileRunner.ts index fe1f2413a2d6c..8cc5201228f7d 100644 --- a/src/harness/externalCompileRunner.ts +++ b/src/harness/externalCompileRunner.ts @@ -27,6 +27,7 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { // Read in and evaluate the test list const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles(); + // tslint:disable-next-line:no-this-assignment const cls = this; describe(`${this.kind()} code samples`, function(this: Mocha.ISuiteCallbackContext) { this.timeout(600_000); // 10 minutes From a9ff9c2231a3e18a68ffed44e38bccbd343d19fa Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 13:12:17 -0700 Subject: [PATCH 61/69] Have the bot link the build associated with the PR (#24176) --- scripts/open-user-pr.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/open-user-pr.ts b/scripts/open-user-pr.ts index c2b31951612d1..9e14bd5f37dc0 100644 --- a/scripts/open-user-pr.ts +++ b/scripts/open-user-pr.ts @@ -44,6 +44,7 @@ gh.pullRequests.create({ base: "master", body: `Please review the diff and merge if no changes are unexpected. +You can view the build log [here](https://typescript.visualstudio.com/TypeScript/_build/index?buildId=${process.env.BUILD_BUILDID}&_a=summary). cc ${reviewers.map(r => "@" + r).join(" ")}`, }).then(r => { From 0b89460c18eecc0ee39ae562ab6bb44616ea59c5 Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Wed, 16 May 2018 13:36:02 -0700 Subject: [PATCH 62/69] Don't collect open-file telemetry on the syntax server It's throwing an exception (since there's no program from which to retrieve the SourceFile) and there's no reason to fix it since the same files are open in the semantic server. --- src/server/editorServices.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 459b4b12d8314..bb3560cbde521 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2123,7 +2123,7 @@ namespace ts.server { } private telemetryOnOpenFile(scriptInfo: ScriptInfo): void { - if (!this.eventHandler || !scriptInfo.isJavaScript() || !addToSeen(this.allJsFilesForOpenFileTelemetry, scriptInfo.path)) { + if (this.syntaxOnly || !this.eventHandler || !scriptInfo.isJavaScript() || !addToSeen(this.allJsFilesForOpenFileTelemetry, scriptInfo.path)) { return; } From d70da6478ac5b1e2988b7f531516353bf0186609 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 13:53:40 -0700 Subject: [PATCH 63/69] Use newer signature help check (#24179) --- .../jsxWithTypeParametershasInstantiatedSignatureHelp.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx index e317fe338edb8..71859594cea04 100644 --- a/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx +++ b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx @@ -14,6 +14,6 @@ //// (/>); goTo.marker("1"); -verify.currentSignatureHelpIs("SFC(_props: Record): string"); +verify.signatureHelp({ text: "SFC(_props: Record): string" }); goTo.marker("2"); -verify.currentSignatureHelpIs("SFC(_props: Record): string"); +verify.signatureHelp({ text: "SFC(_props: Record): string" }); From 7c52cab219ef103b8e251d6b498fc8e94986f034 Mon Sep 17 00:00:00 2001 From: csigs Date: Wed, 16 May 2018 22:11:01 +0000 Subject: [PATCH 64/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 3 ++ .../diagnosticMessages.generated.json.lcl | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl index 1b6070bf4bacb..40bfcf5873f32 100644 --- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -6582,6 +6582,9 @@ + + + diff --git a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl index 636853315c073..4c1b7b81a5044 100644 --- a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3102,6 +3102,9 @@ + + + @@ -5286,6 +5289,15 @@
+ + + + + + + + + @@ -6552,6 +6564,15 @@ + + + + + + + + + @@ -6582,6 +6603,15 @@ + + + + + + + + + From 6af5d8b94094af82aa79702b117e55581a34a2ab Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 16 May 2018 15:44:59 -0700 Subject: [PATCH 65/69] Add Unicode ThirdPartyNotice --- ThirdPartyNoticeText.txt | 91 +++++++++++++++++++++++++++++++++------- 1 file changed, 76 insertions(+), 15 deletions(-) diff --git a/ThirdPartyNoticeText.txt b/ThirdPartyNoticeText.txt index a9ffbddbd8974..b82f2497a6c21 100644 --- a/ThirdPartyNoticeText.txt +++ b/ThirdPartyNoticeText.txt @@ -1,35 +1,96 @@ /*!----------------- TypeScript ThirdPartyNotices ------------------------------------------------------- -The TypeScript software is based on or incorporates material and code from the projects listed below -(collectively "Third Party Code"). Microsoft is not the original author of the -Third Party Code. The original copyright notice and the license, under which -Microsoft received such Third Party Code, are set forth below. Such license and -notices are provided for informational purposes only. Microsoft licenses the Third +The TypeScript software is based on or incorporates material and code from the projects listed below +(collectively "Third Party Code"). Microsoft is not the original author of the +Third Party Code. The original copyright notice and the license, under which +Microsoft received such Third Party Code, are set forth below. Such license and +notices are provided for informational purposes only. Microsoft licenses the Third Party Code to you under the terms of the Apache 2.0 License. -All Third Party Code licensed by Microsoft under the Apache License, Version 2.0 (the "License"); you -may not use this file except in compliance with the License. You may obtain a copy +All Third Party Code licensed by Microsoft under the Apache License, Version 2.0 (the "License"); you +may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR -CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR +CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. -See the Apache Version 2.0 License for specific language governing permissions and +See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. --------------------------------------------- Third Party Code Components -------------------------------------------- ------------------- DefinitelyTyped -------------------- -This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. +This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. DefinitelyTyped This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Provided for Informational Purposes Only - -MIT License -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +MIT License +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------------- + +------------------- Unicode -------------------- +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +Unicode Data Files do not include PDF online code charts under the +directory http://www.unicode.org/Public/. + +Software includes any source code published in the Unicode Standard +or under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------------- + ------------- End of ThirdPartyNotices --------------------------------------------------- */ From 159c808a0df745bd3cadfee41ec085f6e3fb5773 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 18:17:59 -0700 Subject: [PATCH 66/69] Sort the whole diagnostic, plus giving up on isolating tests (#24186) * Sort the whole diagnostic * Also strip references to our repos node_modules, since removing it is hard --- src/harness/externalCompileRunner.ts | 36 +++++++--------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/src/harness/externalCompileRunner.ts b/src/harness/externalCompileRunner.ts index 8cc5201228f7d..eac5d92d3e406 100644 --- a/src/harness/externalCompileRunner.ts +++ b/src/harness/externalCompileRunner.ts @@ -31,32 +31,9 @@ abstract class ExternalCompileRunnerBase extends RunnerBase { const cls = this; describe(`${this.kind()} code samples`, function(this: Mocha.ISuiteCallbackContext) { this.timeout(600_000); // 10 minutes - const cwd = path.join(Harness.IO.getWorkspaceRoot(), cls.testDir); - const placeholderName = ".node_modules"; - const moduleDirName = "node_modules"; - before(() => { - ts.forEachAncestorDirectory(cwd, dir => { - try { - fs.renameSync(path.join(dir, moduleDirName), path.join(dir, placeholderName)); - } - catch { - // empty - } - }); - }); for (const test of testList) { cls.runTest(typeof test === "string" ? test : test.file); } - after(() => { - ts.forEachAncestorDirectory(cwd, dir => { - try { - fs.renameSync(path.join(dir, placeholderName), path.join(dir, moduleDirName)); - } - catch { - // empty - } - }); - }); }); } private runTest(directoryName: string) { @@ -137,14 +114,16 @@ ${stripAbsoluteImportPaths(result.stderr.toString().replace(/\r\n/g, "\n"))}`; function stripAbsoluteImportPaths(result: string) { return result .replace(/import\(".*?\/tests\/cases\/user\//g, `import("/`) - .replace(/Module '".*?\/tests\/cases\/user\//g, `Module '"/`); + .replace(/Module '".*?\/tests\/cases\/user\//g, `Module '"/`) + .replace(/import\(".*?\/TypeScript\/node_modules\//g, `import("../../../node_modules`) + .replace(/Module '".*?\/TypeScript\/node_modules\//g, `Module '"../../../node_modules`); } function sortErrors(result: string) { return ts.flatten(splitBy(result.split("\n"), s => /^\S+/.test(s)).sort(compareErrorStrings)).join("\n"); } -const errorRegexp = /^(.+\.[tj]sx?)\((\d+),(\d+)\): error TS/; +const errorRegexp = /^(.+\.[tj]sx?)\((\d+),(\d+)\)(: error TS.*)/; function compareErrorStrings(a: string[], b: string[]) { ts.Debug.assertGreaterThanOrEqual(a.length, 1); ts.Debug.assertGreaterThanOrEqual(b.length, 1); @@ -156,11 +135,12 @@ function compareErrorStrings(a: string[], b: string[]) { if (!matchB) { return 1; } - const [, errorFileA, lineNumberStringA, columnNumberStringA] = matchA; - const [, errorFileB, lineNumberStringB, columnNumberStringB] = matchB; + const [, errorFileA, lineNumberStringA, columnNumberStringA, remainderA] = matchA; + const [, errorFileB, lineNumberStringB, columnNumberStringB, remainderB] = matchB; return ts.comparePathsCaseSensitive(errorFileA, errorFileB) || ts.compareValues(parseInt(lineNumberStringA), parseInt(lineNumberStringB)) || - ts.compareValues(parseInt(columnNumberStringA), parseInt(columnNumberStringB)); + ts.compareValues(parseInt(columnNumberStringA), parseInt(columnNumberStringB)) || + ts.compareStringsCaseSensitive(remainderA, remainderB); } class DefinitelyTypedRunner extends ExternalCompileRunnerBase { From 63a72636a90718d408aa631fbc5b422dcceee8ea Mon Sep 17 00:00:00 2001 From: csigs Date: Thu, 17 May 2018 04:10:22 +0000 Subject: [PATCH 67/69] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 9 ++++++ .../diagnosticMessages.generated.json.lcl | 30 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl index 40bfcf5873f32..ea95d1bda8c65 100644 --- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3090,6 +3090,9 @@ + + + @@ -5277,6 +5280,9 @@ + + + @@ -6546,6 +6552,9 @@ + + + diff --git a/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl index 420331075cf19..e279a6d066ce4 100644 --- a/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3086,6 +3086,9 @@ + + + @@ -5270,6 +5273,15 @@ + + + + + + + + + @@ -6536,6 +6548,15 @@ + + + + + + + + + @@ -6566,6 +6587,15 @@ + + + + + + + + + From 5d233054c36b1e4b9180dcfba04920dcd80723e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Thu, 17 May 2018 16:35:11 +0800 Subject: [PATCH 68/69] add quick fix for import type missing typeof --- src/compiler/diagnosticMessages.json | 4 +++ src/harness/tsconfig.json | 1 + src/server/tsconfig.json | 1 + src/server/tsconfig.library.json | 1 + .../fixAddModuleReferTypeMissingTypeof.ts | 32 +++++++++++++++++++ src/services/tsconfig.json | 1 + .../fourslash/codeFixAddMissingTypeof1.ts | 16 ++++++++++ .../fourslash/codeFixAddMissingTypeof2.ts | 13 ++++++++ 8 files changed, 69 insertions(+) create mode 100644 src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts create mode 100644 tests/cases/fourslash/codeFixAddMissingTypeof1.ts create mode 100644 tests/cases/fourslash/codeFixAddMissingTypeof2.ts diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 2956faef0b3ba..6196191328016 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -4257,5 +4257,9 @@ "Remove all unreachable code": { "category": "Message", "code": 95051 + }, + "Add missing typeof": { + "category": "Message", + "code": 95052 } } diff --git a/src/harness/tsconfig.json b/src/harness/tsconfig.json index 4a95cd4492824..4fb96dbe93dc1 100644 --- a/src/harness/tsconfig.json +++ b/src/harness/tsconfig.json @@ -116,6 +116,7 @@ "../services/codefixes/moduleSpecifiers.ts", "../services/codefixes/requireInTs.ts", "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts", "../services/refactors/extractSymbol.ts", "../services/refactors/generateGetAccessorAndSetAccessor.ts", "../services/refactors/moveToNewFile.ts", diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index fee3a8723708d..50e06eb3f2339 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -112,6 +112,7 @@ "../services/codefixes/moduleSpecifiers.ts", "../services/codefixes/requireInTs.ts", "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts", "../services/refactors/extractSymbol.ts", "../services/refactors/generateGetAccessorAndSetAccessor.ts", "../services/refactors/moveToNewFile.ts", diff --git a/src/server/tsconfig.library.json b/src/server/tsconfig.library.json index b87bf9b5e92d2..43e8fd1857b9a 100644 --- a/src/server/tsconfig.library.json +++ b/src/server/tsconfig.library.json @@ -118,6 +118,7 @@ "../services/codefixes/moduleSpecifiers.ts", "../services/codefixes/requireInTs.ts", "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixAddModuleReferTypeMissingTypeof.ts", "../services/refactors/extractSymbol.ts", "../services/refactors/generateGetAccessorAndSetAccessor.ts", "../services/refactors/moveToNewFile.ts", diff --git a/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts b/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts new file mode 100644 index 0000000000000..8b58dba5450aa --- /dev/null +++ b/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts @@ -0,0 +1,32 @@ +/* @internal */ +namespace ts.codefix { + const fixIdAddMissingTypeof = "fixAddModuleReferTypeMissingTypeof"; + const fixId = fixIdAddMissingTypeof; + const errorCodes = [Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here.code]; + registerCodeFix({ + errorCodes, + getCodeActions: context => { + const { sourceFile, span } = context; + const typeContainer = getImportTypeNode(sourceFile, span.start); + if (!typeContainer) return undefined; + + const changes = textChanges.ChangeTracker.with(context, t => doChange(t, sourceFile, typeContainer)); + return [createCodeFixAction(fixId, changes, Diagnostics.Add_missing_typeof, fixId, Diagnostics.Add_missing_typeof)]; + }, + fixIds: [fixId], + getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => + doChange(changes, context.sourceFile, getImportTypeNode(diag.file, diag.start!))), + }); + + function getImportTypeNode(sourceFile: SourceFile, pos: number): ImportTypeNode | undefined { + const token = getTokenAtPosition(sourceFile, pos, /*includeJsDocComment*/ false); + Debug.assert(token.kind === SyntaxKind.ImportKeyword); + Debug.assert(token.parent.kind === SyntaxKind.ImportType); + return token.parent; + } + + function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, typeContainer: ImportTypeNode) { + const newTypeNode = updateImportTypeNode(typeContainer, typeContainer.argument, typeContainer.qualifier, typeContainer.typeArguments, /* isTypeOf */ true); + changes.replaceNode(sourceFile, typeContainer, newTypeNode); + } +} diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 0fe4b16e2acf0..d78086504c926 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -109,6 +109,7 @@ "codefixes/moduleSpecifiers.ts", "codefixes/requireInTs.ts", "codefixes/useDefaultImport.ts", + "codefixes/fixAddModuleReferTypeMissingTypeof.ts", "refactors/extractSymbol.ts", "refactors/generateGetAccessorAndSetAccessor.ts", "refactors/moveToNewFile.ts", diff --git a/tests/cases/fourslash/codeFixAddMissingTypeof1.ts b/tests/cases/fourslash/codeFixAddMissingTypeof1.ts new file mode 100644 index 0000000000000..ab728c07455b6 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingTypeof1.ts @@ -0,0 +1,16 @@ +/// + +//// declare module "foo" { +//// const a = "foo" +//// export = a +//// } +//// const x: import("foo") = import("foo"); + +verify.codeFix({ + description: "Add missing typeof", + newFileContent: `declare module "foo" { + const a = "foo" + export = a +} +const x: typeof import("foo") = import("foo");` +}); diff --git a/tests/cases/fourslash/codeFixAddMissingTypeof2.ts b/tests/cases/fourslash/codeFixAddMissingTypeof2.ts new file mode 100644 index 0000000000000..bb863e8db3725 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingTypeof2.ts @@ -0,0 +1,13 @@ +/// + +// @Filename: a.ts +//// export = 1; + +// @Filename: b.ts +//// const a: import("./a") = import("./a") + +goTo.file("b.ts") +verify.codeFix({ + description: "Add missing typeof", + newFileContent: `const a: typeof import("./a") = import("./a")` +}); From aa7e2b0f076dca09a157f9cc6a4ecbf7680baa33 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Thu, 17 May 2018 09:28:11 -0700 Subject: [PATCH 69/69] Add callback tag, with type parameters (#23947) * Add initial tests * Add types * Half of parsing (builds but does not pass tests) * Parsing done; types are uglier; doesn't crash but doesn't pass * Bind callback tag Builds but tests still don't pass * Only bind param tags inside callback tags * Fix binding switch to only handle param tags once * Checking is 1/3 done or so. Now I'm going to go rename some members to be more uniform. I hate unnnecessary conditionals. * Rename typeExpression to type (for some jsdoc) (maybe I'll rename more later) * Rename the rest of typeExpressions Turns out there is a constraint in services such that they all need to be named the same. * Few more checker changes * Revert "Rename the rest of typeExpressions" This reverts commit f41a96b24d44a6b696d39eee9e91ef7f606bea52. * Revert "Rename typeExpression to type (for some jsdoc)" This reverts commit 7d2233a00e5c6d794c1de32c03802e8ccce1914c. * Finish undoing typeExpression rename * Rename and improve getTypeParametersForAliasSymbol Plus some other small fixes * Core checking works, but is flabbergastingly messy I'm serious. * Callback return types work now * Fix crash in services * Make github diff smaller * Try to make github diff even smaller * Fix rename for callback tag * Fix nav bar for callback tag Also clean up some now-redundant code there to find the name of typedefs. * Handle ooorder callback tags Also get rid of redundant typedef name code *in the binder*. It's everywhere! * Add ooorder callback tag test * Parse comments for typedef/callback+display param comments * Always export callbacks This requires almost no new code since it is basically the same as typedefs * Update baselines * Fix support for nested namespaced callbacks And add test * Callbacks support type parameters 1. Haven't run it with all tests 2. Haven't tested typedef tags yet 3. Still allows shared symbols when on function or class declarations. * Template tags are now bound correctly * Test oorder template tags It works. * Parser cleanup * Cleanup types and utilities As much as possible, and not as much as I would like. * Handle callback more often in services * Cleanup of binder and checker * More checker cleanup * Remove TODOs and one more cleanup * Support parameter-less callback tags * Remove extra bind call on template type parameters * Bind template tag containers Doesn't quite work with typedefs, but that's because it's now stricter, without the typedef fixes. I'm going to merge with jsdoc/callback and see how it goes. * Fix fourslash failures * Stop pre-binding js type aliases Next up, stop pre-binding js type parameters * Further cleanup of delayed js type alias binding * Stop prebinding template tags too This gets rid of prebinding entirely * Remove TODO * Fix lint * Finish merge with use-jsdoc-aliases * Update callback tag baselines * Rename getTypeParametersForAliasSymbol The real fix is *probably* to rename Type.aliasTypeArguments to aliasTypeParameters, but I want to make sure and then put it in a separate PR. --- src/compiler/binder.ts | 163 ++++++++--------- src/compiler/checker.ts | 172 +++++++++++------- src/compiler/parser.ts | 133 ++++++++++---- src/compiler/types.ts | 21 ++- src/compiler/utilities.ts | 102 +++++++---- src/services/codefixes/fixUnusedIdentifier.ts | 6 +- src/services/jsDoc.ts | 6 +- src/services/navigationBar.ts | 25 +-- src/services/refactors/extractSymbol.ts | 8 +- src/services/utilities.ts | 9 +- ...sCorrectly.typedefTagWithChildrenTags.json | 2 +- .../reference/api/tsserverlibrary.d.ts | 59 +++--- tests/baselines/reference/api/typescript.d.ts | 59 +++--- .../reference/callbackCrossModule.symbols | 32 ++++ .../reference/callbackCrossModule.types | 47 +++++ .../baselines/reference/callbackTag1.symbols | 28 +++ tests/baselines/reference/callbackTag1.types | 34 ++++ .../reference/callbackTag2.errors.txt | 42 +++++ .../baselines/reference/callbackTag2.symbols | 52 ++++++ tests/baselines/reference/callbackTag2.types | 60 ++++++ .../baselines/reference/callbackTag3.symbols | 9 + tests/baselines/reference/callbackTag3.types | 11 ++ .../reference/callbackTagNamespace.symbols | 19 ++ .../reference/callbackTagNamespace.types | 21 +++ .../reference/jsdocTemplateClass.errors.txt | 5 +- .../reference/jsdocTemplateClass.symbols | 41 +++-- .../reference/jsdocTemplateClass.types | 3 +- ...sdocTemplateConstructorFunction.errors.txt | 11 +- .../jsdocTemplateConstructorFunction.symbols | 53 +++--- .../jsdocTemplateConstructorFunction.types | 17 +- ...docTemplateConstructorFunction2.errors.txt | 2 +- .../jsdocTemplateConstructorFunction2.symbols | 2 +- .../jsdocTemplateConstructorFunction2.types | 2 +- .../reference/jsdocTemplateTag2.symbols | 19 ++ .../reference/jsdocTemplateTag2.types | 21 +++ .../conformance/jsdoc/callbackCrossModule.ts | 22 +++ tests/cases/conformance/jsdoc/callbackTag1.ts | 22 +++ tests/cases/conformance/jsdoc/callbackTag2.ts | 40 ++++ tests/cases/conformance/jsdoc/callbackTag3.ts | 10 + .../conformance/jsdoc/callbackTagNamespace.ts | 15 ++ .../conformance/jsdoc/jsdocTemplateClass.ts | 3 +- .../jsdoc/jsdocTemplateConstructorFunction.ts | 9 +- .../jsdocTemplateConstructorFunction2.ts | 2 +- .../conformance/jsdoc/jsdocTemplateTag2.ts | 16 ++ .../jsQuickInfoGenerallyAcceptableSize.ts | 6 +- .../fourslash/server/jsdocCallbackTag.ts | 54 ++++++ .../server/jsdocCallbackTagNavigateTo.ts | 33 ++++ .../server/jsdocCallbackTagRename01.ts | 15 ++ .../cases/fourslash/server/jsdocTypedefTag.ts | 9 +- 49 files changed, 1168 insertions(+), 384 deletions(-) create mode 100644 tests/baselines/reference/callbackCrossModule.symbols create mode 100644 tests/baselines/reference/callbackCrossModule.types create mode 100644 tests/baselines/reference/callbackTag1.symbols create mode 100644 tests/baselines/reference/callbackTag1.types create mode 100644 tests/baselines/reference/callbackTag2.errors.txt create mode 100644 tests/baselines/reference/callbackTag2.symbols create mode 100644 tests/baselines/reference/callbackTag2.types create mode 100644 tests/baselines/reference/callbackTag3.symbols create mode 100644 tests/baselines/reference/callbackTag3.types create mode 100644 tests/baselines/reference/callbackTagNamespace.symbols create mode 100644 tests/baselines/reference/callbackTagNamespace.types create mode 100644 tests/baselines/reference/jsdocTemplateTag2.symbols create mode 100644 tests/baselines/reference/jsdocTemplateTag2.types create mode 100644 tests/cases/conformance/jsdoc/callbackCrossModule.ts create mode 100644 tests/cases/conformance/jsdoc/callbackTag1.ts create mode 100644 tests/cases/conformance/jsdoc/callbackTag2.ts create mode 100644 tests/cases/conformance/jsdoc/callbackTag3.ts create mode 100644 tests/cases/conformance/jsdoc/callbackTagNamespace.ts create mode 100644 tests/cases/conformance/jsdoc/jsdocTemplateTag2.ts create mode 100644 tests/cases/fourslash/server/jsdocCallbackTag.ts create mode 100644 tests/cases/fourslash/server/jsdocCallbackTagNavigateTo.ts create mode 100644 tests/cases/fourslash/server/jsdocCallbackTagRename01.ts diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index d1c782d6155fa..d95001b104106 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -118,7 +118,7 @@ namespace ts { let thisParentContainer: Node; // Container one level up let blockScopeContainer: Node; let lastContainer: Node; - let delayedTypedefs: { typedef: JSDocTypedefTag, container: Node, lastContainer: Node, blockScopeContainer: Node, parent: Node }[]; + let delayedTypeAliases: (JSDocTypedefTag | JSDocCallbackTag)[]; let seenThisKeyword: boolean; // state used by control flow analysis @@ -188,7 +188,7 @@ namespace ts { thisParentContainer = undefined; blockScopeContainer = undefined; lastContainer = undefined; - delayedTypedefs = undefined; + delayedTypeAliases = undefined; seenThisKeyword = false; currentFlow = undefined; currentBreakTarget = undefined; @@ -273,6 +273,7 @@ namespace ts { return InternalSymbolName.Constructor; case SyntaxKind.FunctionType: case SyntaxKind.CallSignature: + case SyntaxKind.JSDocSignature: return InternalSymbolName.Call; case SyntaxKind.ConstructorType: case SyntaxKind.ConstructSignature: @@ -301,9 +302,6 @@ namespace ts { const functionType = node.parent; const index = functionType.parameters.indexOf(node as ParameterDeclaration); return "arg" + index as __String; - case SyntaxKind.JSDocTypedefTag: - const name = getNameOfJSDocTypedef(node as JSDocTypedefTag); - return typeof name !== "undefined" ? name.escapedText : undefined; } } @@ -456,8 +454,8 @@ namespace ts { // during global merging in the checker. Why? The only case when ambient module is permitted inside another module is module augmentation // and this case is specially handled. Module augmentations should only be merged with original module definition // and should never be merged directly with other augmentation, and the latter case would be possible if automatic merge is allowed. - if (node.kind === SyntaxKind.JSDocTypedefTag) Debug.assert(isInJavaScriptFile(node)); // We shouldn't add symbols for JSDoc nodes if not in a JS file. - if ((!isAmbientModule(node) && (hasExportModifier || container.flags & NodeFlags.ExportContext)) || isJSDocTypedefTag(node)) { + if (isJSDocTypeAlias(node)) Debug.assert(isInJavaScriptFile(node)); // We shouldn't add symbols for JSDoc nodes if not in a JS file. + if ((!isAmbientModule(node) && (hasExportModifier || container.flags & NodeFlags.ExportContext)) || isJSDocTypeAlias(node)) { if (hasModifier(node, ModifierFlags.Default) && !getDeclarationName(node)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); // No local symbol for an unnamed default! } @@ -628,22 +626,6 @@ namespace ts { } function bindChildrenWorker(node: Node): void { - // Binding of JsDocComment should be done before the current block scope container changes. - // because the scope of JsDocComment should not be affected by whether the current node is a - // container or not. - if (hasJSDocNodes(node)) { - if (isInJavaScriptFile(node)) { - for (const j of node.jsDoc) { - bind(j); - } - } - else { - for (const j of node.jsDoc) { - setParentPointers(node, j); - } - } - } - if (checkUnreachable(node)) { bindEachChild(node); return; @@ -709,11 +691,9 @@ namespace ts { case SyntaxKind.CallExpression: bindCallExpressionFlow(node); break; - case SyntaxKind.JSDocComment: - bindJSDocComment(node); - break; case SyntaxKind.JSDocTypedefTag: - bindJSDocTypedefTag(node); + case SyntaxKind.JSDocCallbackTag: + bindJSDocTypeAlias(node as JSDocTypedefTag | JSDocCallbackTag); break; // In source files and blocks, bind functions first to match hoisting that occurs at runtime case SyntaxKind.SourceFile: @@ -728,6 +708,7 @@ namespace ts { bindEachChild(node); break; } + bindJSDoc(node); } function isNarrowingExpression(expr: Expression): boolean { @@ -1379,24 +1360,10 @@ namespace ts { } } - function bindJSDocComment(node: JSDoc) { - forEachChild(node, n => { - if (n.kind !== SyntaxKind.JSDocTypedefTag) { - bind(n); - } - }); - } - - function bindJSDocTypedefTag(node: JSDocTypedefTag) { - forEachChild(node, n => { - // if the node has a fullName "A.B.C", that means symbol "C" was already bound - // when we visit "fullName"; so when we visit the name "C" as the next child of - // the jsDocTypedefTag, we should skip binding it. - if (node.fullName && n === node.name && node.fullName.kind !== SyntaxKind.Identifier) { - return; - } - bind(n); - }); + function bindJSDocTypeAlias(node: JSDocTypedefTag | JSDocCallbackTag) { + if (node.fullName) { + setParentPointers(node, node.fullName); + } } function bindCallExpressionFlow(node: CallExpression) { @@ -1456,6 +1423,7 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.CallSignature: + case SyntaxKind.JSDocSignature: case SyntaxKind.JSDocFunctionType: case SyntaxKind.FunctionType: case SyntaxKind.ConstructSignature: @@ -1545,6 +1513,7 @@ namespace ts { case SyntaxKind.ConstructorType: case SyntaxKind.CallSignature: case SyntaxKind.ConstructSignature: + case SyntaxKind.JSDocSignature: case SyntaxKind.IndexSignature: case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: @@ -1555,6 +1524,8 @@ namespace ts { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: case SyntaxKind.JSDocFunctionType: + case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: case SyntaxKind.TypeAliasDeclaration: case SyntaxKind.MappedType: // All the children of these container types are never visible through another @@ -1650,7 +1621,7 @@ namespace ts { return state; } - function bindFunctionOrConstructorType(node: SignatureDeclaration): void { + function bindFunctionOrConstructorType(node: SignatureDeclaration | JSDocSignature): void { // For a given function symbol "<...>(...) => T" we want to generate a symbol identical // to the one we would get for: { <...>(...): T } // @@ -1752,21 +1723,34 @@ namespace ts { } function delayedBindJSDocTypedefTag() { - if (!delayedTypedefs) { + if (!delayedTypeAliases) { return; } const saveContainer = container; const saveLastContainer = lastContainer; const saveBlockScopeContainer = blockScopeContainer; const saveParent = parent; - for (const delay of delayedTypedefs) { - ({ container, lastContainer, blockScopeContainer, parent } = delay); - bindBlockScopedDeclaration(delay.typedef, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); + const saveCurrentFlow = currentFlow; + for (const typeAlias of delayedTypeAliases) { + const host = getJSDocHost(typeAlias); + container = findAncestor(host.parent, n => !!(getContainerFlags(n) & ContainerFlags.IsContainer)) || file; + blockScopeContainer = getEnclosingBlockScopeContainer(host) || file; + currentFlow = { flags: FlowFlags.Start }; + parent = typeAlias; + bind(typeAlias.typeExpression); + if (!typeAlias.fullName || typeAlias.fullName.kind === SyntaxKind.Identifier) { + parent = typeAlias.parent; + bindBlockScopedDeclaration(typeAlias, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); + } + else { + bind(typeAlias.fullName); + } } container = saveContainer; lastContainer = saveLastContainer; blockScopeContainer = saveBlockScopeContainer; parent = saveParent; + currentFlow = saveCurrentFlow; } // The binder visits every node in the syntax tree so it is a convenient place to perform a single localized @@ -1946,7 +1930,6 @@ namespace ts { // Here the current node is "foo", which is a container, but the scope of "MyType" should // not be inside "foo". Therefore we always bind @typedef before bind the parent node, // and skip binding this tag later when binding all the other jsdoc tags. - if (isInJavaScriptFile(node)) bindJSDocTypedefTagIfAny(node); // First we bind declaration nodes to a symbol if possible. We'll both create a symbol // and then potentially add the symbol to an appropriate symbol table. Possible @@ -1978,26 +1961,21 @@ namespace ts { } else if (!skipTransformFlagAggregation && (node.transformFlags & TransformFlags.HasComputedFlags) === 0) { subtreeTransformFlags |= computeTransformFlagsForNode(node, 0); + bindJSDoc(node); } inStrictMode = saveInStrictMode; } - function bindJSDocTypedefTagIfAny(node: Node) { - if (!hasJSDocNodes(node)) { - return; - } - - for (const jsDoc of node.jsDoc) { - if (!jsDoc.tags) { - continue; + function bindJSDoc(node: Node) { + if (hasJSDocNodes(node)) { + if (isInJavaScriptFile(node)) { + for (const j of node.jsDoc) { + bind(j); + } } - - for (const tag of jsDoc.tags) { - if (tag.kind === SyntaxKind.JSDocTypedefTag) { - const savedParent = parent; - parent = jsDoc; - bind(tag); - parent = savedParent; + else { + for (const j of node.jsDoc) { + setParentPointers(node, j); } } } @@ -2036,10 +2014,10 @@ namespace ts { // current "blockScopeContainer" needs to be set to its immediate namespace parent. if ((node).isInJSDocNamespace) { let parentNode = node.parent; - while (parentNode && parentNode.kind !== SyntaxKind.JSDocTypedefTag) { + while (parentNode && !isJSDocTypeAlias(parentNode)) { parentNode = parentNode.parent; } - bindBlockScopedDeclaration(parentNode, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); + bindBlockScopedDeclaration(parentNode as Declaration, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); break; } // falls through @@ -2141,8 +2119,9 @@ namespace ts { return bindPropertyOrMethodOrAccessor(node, SymbolFlags.SetAccessor, SymbolFlags.SetAccessorExcludes); case SyntaxKind.FunctionType: case SyntaxKind.JSDocFunctionType: + case SyntaxKind.JSDocSignature: case SyntaxKind.ConstructorType: - return bindFunctionOrConstructorType(node); + return bindFunctionOrConstructorType(node); case SyntaxKind.TypeLiteral: case SyntaxKind.JSDocTypeLiteral: case SyntaxKind.MappedType: @@ -2205,6 +2184,9 @@ namespace ts { return updateStrictModeStatementList((node).statements); case SyntaxKind.JSDocParameterTag: + if (node.parent.kind === SyntaxKind.JSDocSignature) { + return bindParameter(node as JSDocParameterTag); + } if (node.parent.kind !== SyntaxKind.JSDocTypeLiteral) { break; } @@ -2215,13 +2197,9 @@ namespace ts { SymbolFlags.Property | SymbolFlags.Optional : SymbolFlags.Property; return declareSymbolAndAddToSymbolTable(propTag, flags, SymbolFlags.PropertyExcludes); - case SyntaxKind.JSDocTypedefTag: { - const { fullName } = node as JSDocTypedefTag; - if (!fullName || fullName.kind === SyntaxKind.Identifier) { - (delayedTypedefs || (delayedTypedefs = [])).push({ typedef: node as JSDocTypedefTag, container, lastContainer, blockScopeContainer, parent }); - } - break; - } + case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: + return (delayedTypeAliases || (delayedTypeAliases = [])).push(node as JSDocTypedefTag | JSDocCallbackTag); } } @@ -2622,7 +2600,10 @@ namespace ts { } } - function bindParameter(node: ParameterDeclaration) { + function bindParameter(node: ParameterDeclaration | JSDocParameterTag) { + if (node.kind === SyntaxKind.JSDocParameterTag && container.kind !== SyntaxKind.JSDocSignature) { + return; + } if (inStrictMode && !(node.flags & NodeFlags.Ambient)) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) @@ -2630,7 +2611,7 @@ namespace ts { } if (isBindingPattern(node.name)) { - bindAnonymousDeclaration(node, SymbolFlags.FunctionScopedVariable, "__" + node.parent.parameters.indexOf(node) as __String); + bindAnonymousDeclaration(node, SymbolFlags.FunctionScopedVariable, "__" + (node as ParameterDeclaration).parent.parameters.indexOf(node as ParameterDeclaration) as __String); } else { declareSymbolAndAddToSymbolTable(node, SymbolFlags.FunctionScopedVariable, SymbolFlags.ParameterExcludes); @@ -2690,18 +2671,24 @@ namespace ts { } function getInferTypeContainer(node: Node): ConditionalTypeNode { - while (node) { - const parent = node.parent; - if (parent && parent.kind === SyntaxKind.ConditionalType && (parent).extendsType === node) { - return parent; - } - node = parent; - } - return undefined; + const extendsType = findAncestor(node, n => n.parent && isConditionalTypeNode(n.parent) && n.parent.extendsType === n); + return extendsType && extendsType.parent as ConditionalTypeNode; } function bindTypeParameter(node: TypeParameterDeclaration) { - if (node.parent.kind === SyntaxKind.InferType) { + if (isJSDocTemplateTag(node.parent)) { + const container = find((node.parent.parent as JSDoc).tags, isJSDocTypeAlias) || getHostSignatureFromJSDoc(node.parent); + if (container) { + if (!container.locals) { + container.locals = createSymbolTable(); + } + declareSymbol(container.locals, /*parent*/ undefined, node, SymbolFlags.TypeParameter, SymbolFlags.TypeParameterExcludes); + } + else { + declareSymbolAndAddToSymbolTable(node, SymbolFlags.TypeParameter, SymbolFlags.TypeParameterExcludes); + } + } + else if (node.parent.kind === SyntaxKind.InferType) { const container = getInferTypeContainer(node.parent); if (container) { if (!container.locals) { @@ -3804,6 +3791,6 @@ namespace ts { */ function setParentPointers(parent: Node, child: Node): void { child.parent = parent; - forEachChild(child, (childsChild) => setParentPointers(child, childsChild)); + forEachChild(child, grandchild => setParentPointers(child, grandchild)); } } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d0780406f1186..4c9a98951fae8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1577,9 +1577,11 @@ namespace ts { function isTypeParameterSymbolDeclaredInContainer(symbol: Symbol, container: Node) { for (const decl of symbol.declarations) { - const parent = isJSDocTemplateTag(decl.parent) ? getJSDocHost(decl.parent) : decl.parent; - if (decl.kind === SyntaxKind.TypeParameter && parent === container) { - return true; + if (decl.kind === SyntaxKind.TypeParameter) { + const parent = isJSDocTemplateTag(decl.parent) ? getJSDocHost(decl.parent) : decl.parent; + if (parent === container) { + return !(isJSDocTemplateTag(decl.parent) && find((decl.parent.parent as JSDoc).tags, isJSDocTypeAlias)); + } } } @@ -2089,7 +2091,7 @@ namespace ts { let symbol: Symbol; if (name.kind === SyntaxKind.Identifier) { const message = meaning === namespaceMeaning ? Diagnostics.Cannot_find_namespace_0 : Diagnostics.Cannot_find_name_0; - const symbolFromJSPrototype = isInJavaScriptFile(name) ? resolveEntityNameFromJSPrototype(name, meaning) : undefined; + const symbolFromJSPrototype = isInJavaScriptFile(name) ? resolveEntityNameFromJSSpecialAssignment(name, meaning) : undefined; symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true); if (!symbol) { return symbolFromJSPrototype; @@ -2144,25 +2146,34 @@ namespace ts { } /** - * For prototype-property methods like `A.prototype.m = function () ...`, try to resolve names in the scope of `A` too. + * 1. For prototype-property methods like `A.prototype.m = function () ...`, try to resolve names in the scope of `A` too. * Note that prototype-property assignment to locations outside the current file (eg globals) doesn't work, so * name resolution won't work either. + * 2. For property assignments like `{ x: function f () { } }`, try to resolve names in the scope of `f` too. */ - function resolveEntityNameFromJSPrototype(name: Identifier, meaning: SymbolFlags) { - if (isJSDocTypeReference(name.parent) && isJSDocTag(name.parent.parent.parent)) { - const host = getJSDocHost(name.parent.parent.parent as JSDocTag); - if (isExpressionStatement(host) && - isBinaryExpression(host.expression) && - getSpecialPropertyAssignmentKind(host.expression) === SpecialPropertyAssignmentKind.PrototypeProperty) { - const symbol = getSymbolOfNode(host.expression.left); - if (symbol) { - const secondaryLocation = symbol.parent.valueDeclaration; - return resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); - } + function resolveEntityNameFromJSSpecialAssignment(name: Identifier, meaning: SymbolFlags) { + if (isJSDocTypeReference(name.parent)) { + const host = getJSDocHost(name.parent); + if (host) { + const secondaryLocation = getJSSpecialAssignmentSymbol(getJSDocHost(name.parent.parent.parent as JSDocTag)); + return secondaryLocation && resolveName(secondaryLocation, name.escapedText, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ true); } } } + function getJSSpecialAssignmentSymbol(host: HasJSDoc): Declaration | undefined { + if (isPropertyAssignment(host) && isFunctionLike(host.initializer)) { + const symbol = getSymbolOfNode(host.initializer); + return symbol && symbol.valueDeclaration; + } + else if (isExpressionStatement(host) && + isBinaryExpression(host.expression) && + getSpecialPropertyAssignmentKind(host.expression) === SpecialPropertyAssignmentKind.PrototypeProperty) { + const symbol = getSymbolOfNode(host.expression.left); + return symbol && symbol.parent.valueDeclaration; + } + } + function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression): Symbol { return resolveExternalModuleNameWorker(location, moduleReferenceExpression, Diagnostics.Cannot_find_module_0); } @@ -3606,8 +3617,10 @@ namespace ts { } function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext, preserveModifierFlags?: boolean): ParameterDeclaration { - const parameterDeclaration = getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter); - Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol)); + let parameterDeclaration: ParameterDeclaration | JSDocParameterTag = getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter); + if (!parameterDeclaration && !isTransientSymbol(parameterSymbol)) { + parameterDeclaration = getDeclarationOfKind(parameterSymbol, SyntaxKind.JSDocParameterTag); + } let parameterType = getTypeOfSymbol(parameterSymbol); if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { @@ -3620,8 +3633,8 @@ namespace ts { const dotDotDotToken = isRest ? createToken(SyntaxKind.DotDotDotToken) : undefined; const name = parameterDeclaration ? parameterDeclaration.name ? - parameterDeclaration.name.kind === SyntaxKind.Identifier ? - setEmitFlags(getSynthesizedClone(parameterDeclaration.name), EmitFlags.NoAsciiEscaping) : + parameterDeclaration.name.kind === SyntaxKind.Identifier ? setEmitFlags(getSynthesizedClone(parameterDeclaration.name), EmitFlags.NoAsciiEscaping) : + parameterDeclaration.name.kind === SyntaxKind.QualifiedName ? setEmitFlags(getSynthesizedClone(parameterDeclaration.name.right), EmitFlags.NoAsciiEscaping) : cloneBindingName(parameterDeclaration.name) : symbolName(parameterSymbol) : symbolName(parameterSymbol); @@ -4026,8 +4039,9 @@ namespace ts { function determineIfDeclarationIsVisible() { switch (node.kind) { + case SyntaxKind.JSDocCallbackTag: case SyntaxKind.JSDocTypedefTag: - // Top-level jsdoc typedefs are considered exported + // Top-level jsdoc type aliases are considered exported // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file return !!(node.parent && node.parent.parent && node.parent.parent.parent && isSourceFile(node.parent.parent.parent)); case SyntaxKind.BindingElement: @@ -4802,7 +4816,7 @@ namespace ts { if (symbol.flags & SymbolFlags.Prototype) { return links.type = getTypeOfPrototypeProperty(symbol); } - // CommonsJS require/module/exports all have type any. + // CommonsJS require and module both have type any. if (symbol === requireSymbol || symbol === moduleSymbol) { return links.type = anyType; } @@ -4837,7 +4851,7 @@ namespace ts { declaration.kind === SyntaxKind.PropertyAccessExpression && declaration.parent.kind === SyntaxKind.BinaryExpression) { type = getWidenedTypeFromJSSpecialPropertyDeclarations(symbol); } - else if (isJSDocPropertyTag(declaration) + else if (isJSDocPropertyLikeTag(declaration) || isPropertyAccessExpression(declaration) || isIdentifier(declaration) || (isMethodDeclaration(declaration) && !isObjectLiteralMethod(declaration)) @@ -5139,6 +5153,8 @@ namespace ts { case SyntaxKind.ArrowFunction: case SyntaxKind.TypeAliasDeclaration: case SyntaxKind.JSDocTemplateTag: + case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: case SyntaxKind.MappedType: case SyntaxKind.ConditionalType: const outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); @@ -5168,9 +5184,11 @@ namespace ts { function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol: Symbol): TypeParameter[] { let result: TypeParameter[]; for (const node of symbol.declarations) { - if (node.kind === SyntaxKind.InterfaceDeclaration || node.kind === SyntaxKind.ClassDeclaration || - node.kind === SyntaxKind.ClassExpression || node.kind === SyntaxKind.TypeAliasDeclaration || node.kind === SyntaxKind.JSDocTypedefTag) { - const declaration = node; + if (node.kind === SyntaxKind.InterfaceDeclaration || + node.kind === SyntaxKind.ClassDeclaration || + node.kind === SyntaxKind.ClassExpression || + isTypeAlias(node)) { + const declaration = node; const typeParameters = getEffectiveTypeParameterDeclarations(declaration); if (typeParameters) { result = appendTypeParameters(result, typeParameters); @@ -5466,9 +5484,9 @@ namespace ts { return unknownType; } - const declaration = find(symbol.declarations, d => - d.kind === SyntaxKind.JSDocTypedefTag || d.kind === SyntaxKind.TypeAliasDeclaration); - const typeNode = declaration.kind === SyntaxKind.JSDocTypedefTag ? declaration.typeExpression : declaration.type; + const declaration = find(symbol.declarations, d => + isJSDocTypeAlias(d) || d.kind === SyntaxKind.TypeAliasDeclaration); + const typeNode = isJSDocTypeAlias(declaration) ? declaration.typeExpression : declaration.type; // If typeNode is missing, we will error in checkJSDocTypedefTag. let type = typeNode ? getTypeFromTypeNode(typeNode) : unknownType; @@ -6036,7 +6054,7 @@ namespace ts { } function createSignature( - declaration: SignatureDeclaration, + declaration: SignatureDeclaration | JSDocSignature, typeParameters: TypeParameter[], thisParameter: Symbol | undefined, parameters: Symbol[], @@ -7046,8 +7064,8 @@ namespace ts { return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol; } - function isOptionalParameter(node: ParameterDeclaration) { - if (hasQuestionToken(node) || isJSDocOptionalParameter(node)) { + function isOptionalParameter(node: ParameterDeclaration | JSDocParameterTag) { + if (hasQuestionToken(node) || isOptionalJSDocParameterTag(node) || isJSDocOptionalParameter(node)) { return true; } @@ -7067,6 +7085,14 @@ namespace ts { return false; } + function isOptionalJSDocParameterTag(node: Node): node is JSDocParameterTag { + if (!isJSDocParameterTag(node)) { + return false; + } + const { isBracketed, typeExpression } = node; + return isBracketed || !!typeExpression && typeExpression.type.kind === SyntaxKind.JSDocOptionalType; + } + function createTypePredicateFromTypePredicateNode(node: TypePredicateNode): IdentifierTypePredicate | ThisTypePredicate { const { parameterName } = node; const type = getTypeFromTypeNode(node.type); @@ -7142,7 +7168,7 @@ namespace ts { return typeArguments; } - function getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature { + function getSignatureFromDeclaration(declaration: SignatureDeclaration | JSDocSignature): Signature { const links = getNodeLinks(declaration); if (!links.resolvedSignature) { const parameters: Symbol[] = []; @@ -7165,6 +7191,7 @@ namespace ts { const param = declaration.parameters[i]; let paramSymbol = param.symbol; + const type = isJSDocParameterTag(param) ? (param.typeExpression && param.typeExpression.type) : param.type; // Include parameter symbol instead of property symbol in the signature if (paramSymbol && !!(paramSymbol.flags & SymbolFlags.Property) && !isBindingPattern(param.name)) { const resolvedSymbol = resolveName(param, paramSymbol.escapedName, SymbolFlags.Value, undefined, undefined, /*isUse*/ false); @@ -7178,13 +7205,14 @@ namespace ts { parameters.push(paramSymbol); } - if (param.type && param.type.kind === SyntaxKind.LiteralType) { + if (type && type.kind === SyntaxKind.LiteralType) { hasLiteralTypes = true; } // Record a new minimum argument count if this is not an optional parameter - const isOptionalParameter = param.initializer || param.questionToken || param.dotDotDotToken || - iife && parameters.length > iife.arguments.length && !param.type || + const isOptionalParameter = isOptionalJSDocParameterTag(param) || + param.initializer || param.questionToken || param.dotDotDotToken || + iife && parameters.length > iife.arguments.length && !type || isUntypedSignatureInJSFile || isJSDocOptionalParameter(param); if (!isOptionalParameter) { @@ -7220,8 +7248,8 @@ namespace ts { * OR * 2. It has at least one parameter, and the last parameter has a matching `@param` with a type that starts with `...` */ - function maybeAddJsSyntheticRestParameter(declaration: SignatureDeclaration, parameters: Symbol[]): boolean { - if (!containsArgumentsReference(declaration)) { + function maybeAddJsSyntheticRestParameter(declaration: SignatureDeclaration | JSDocSignature, parameters: Symbol[]): boolean { + if (isJSDocSignature(declaration) || !containsArgumentsReference(declaration)) { return false; } const lastParam = lastOrUndefined(declaration.parameters); @@ -7240,9 +7268,9 @@ namespace ts { return true; } - function getSignatureReturnTypeFromDeclaration(declaration: SignatureDeclaration, isJSConstructSignature: boolean, classType: Type) { + function getSignatureReturnTypeFromDeclaration(declaration: SignatureDeclaration | JSDocSignature, isJSConstructSignature: boolean, classType: Type) { if (isJSConstructSignature) { - return getTypeFromTypeNode(declaration.parameters[0].type); + return getTypeFromTypeNode((declaration.parameters[0] as ParameterDeclaration).type); } else if (classType) { return classType; @@ -7656,11 +7684,11 @@ namespace ts { const missingAugmentsTag = isJs && node.parent.kind !== SyntaxKind.JSDocAugmentsTag; const diag = minTypeArgumentCount === typeParameters.length ? missingAugmentsTag - ? Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag - : Diagnostics.Generic_type_0_requires_1_type_argument_s - : missingAugmentsTag - ? Diagnostics.Expected_0_1_type_arguments_provide_these_with_an_extends_tag - : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments; + ? Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag + : Diagnostics.Generic_type_0_requires_1_type_argument_s + : missingAugmentsTag + ? Diagnostics.Expected_0_1_type_arguments_provide_these_with_an_extends_tag + : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments; const typeStr = typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType); error(node, diag, typeStr, minTypeArgumentCount, typeParameters.length); if (!isJs) { @@ -7675,7 +7703,7 @@ namespace ts { return createTypeReference(type, typeArguments); } return checkNoTypeArguments(node, symbol) ? type : unknownType; - } + } function getTypeAliasInstantiation(symbol: Symbol, typeArguments: Type[]): Type { const type = getDeclaredTypeOfSymbol(symbol); @@ -7702,18 +7730,18 @@ namespace ts { const minTypeArgumentCount = getMinTypeArgumentCount(typeParameters); if (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length) { error(node, - minTypeArgumentCount === typeParameters.length - ? Diagnostics.Generic_type_0_requires_1_type_argument_s - : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, - symbolToString(symbol), - minTypeArgumentCount, - typeParameters.length); + minTypeArgumentCount === typeParameters.length + ? Diagnostics.Generic_type_0_requires_1_type_argument_s + : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, + symbolToString(symbol), + minTypeArgumentCount, + typeParameters.length); return unknownType; } return getTypeAliasInstantiation(symbol, typeArguments); } return checkNoTypeArguments(node, symbol) ? type : unknownType; - } + } function getTypeReferenceName(node: TypeReferenceType): EntityNameOrEntityNameExpression | undefined { switch (node.kind) { @@ -7828,7 +7856,7 @@ namespace ts { function getConstrainedTypeVariable(typeVariable: TypeVariable, node: Node) { let constraints: Type[]; - while (node && !isStatement(node)) { + while (node && !isStatement(node) && node.kind !== SyntaxKind.JSDocComment) { const parent = node.parent; if (parent.kind === SyntaxKind.ConditionalType && node === (parent).trueType) { const constraint = getImpliedConstraint(typeVariable, (parent).checkType, (parent).extendsType); @@ -8396,8 +8424,9 @@ namespace ts { function getTypeFromUnionTypeNode(node: UnionTypeNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { + const aliasSymbol = getAliasSymbolForTypeNode(node); links.resolvedType = getUnionType(map(node.types, getTypeFromTypeNode), UnionReduction.Literal, - getAliasSymbolForTypeNode(node), getAliasTypeArgumentsForTypeNode(node)); + aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); } return links.resolvedType; } @@ -8506,8 +8535,9 @@ namespace ts { function getTypeFromIntersectionTypeNode(node: IntersectionTypeNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { + const aliasSymbol = getAliasSymbolForTypeNode(node); links.resolvedType = getIntersectionType(map(node.types, getTypeFromTypeNode), - getAliasSymbolForTypeNode(node), getAliasTypeArgumentsForTypeNode(node)); + aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); } return links.resolvedType; } @@ -8816,7 +8846,7 @@ namespace ts { const type = createObjectType(ObjectFlags.Mapped, node.symbol); type.declaration = node; type.aliasSymbol = getAliasSymbolForTypeNode(node); - type.aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node); + type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(type.aliasSymbol); links.resolvedType = type; // Eagerly resolve the constraint type which forces an error if the constraint type circularly // references itself through one or more type aliases. @@ -8924,7 +8954,8 @@ namespace ts { const links = getNodeLinks(node); if (!links.resolvedType) { const checkType = getTypeFromTypeNode(node.checkType); - const aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node); + const aliasSymbol = getAliasSymbolForTypeNode(node); + const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); const allOuterTypeParameters = getOuterTypeParameters(node, /*includeThisTypes*/ true); const outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : filter(allOuterTypeParameters, tp => isPossiblyReferencedInConditionalType(tp, node)); const root: ConditionalRoot = { @@ -8937,7 +8968,7 @@ namespace ts { inferTypeParameters: getInferTypeParameters(node), outerTypeParameters, instantiations: undefined, - aliasSymbol: getAliasSymbolForTypeNode(node), + aliasSymbol, aliasTypeArguments }; links.resolvedType = getConditionalType(root, /*mapper*/ undefined); @@ -9041,7 +9072,7 @@ namespace ts { else { let type = createObjectType(ObjectFlags.Anonymous, node.symbol); type.aliasSymbol = aliasSymbol; - type.aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node); + type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); if (isJSDocTypeLiteral(node) && node.isArrayType) { type = createArrayType(type); } @@ -9052,11 +9083,10 @@ namespace ts { } function getAliasSymbolForTypeNode(node: TypeNode) { - return (node.parent.kind === SyntaxKind.TypeAliasDeclaration || node.parent.kind === SyntaxKind.JSDocTypedefTag) ? getSymbolOfNode(node.parent) : undefined; + return isTypeAlias(node.parent) ? getSymbolOfNode(node.parent) : undefined; } - function getAliasTypeArgumentsForTypeNode(node: TypeNode) { - const symbol = getAliasSymbolForTypeNode(node); + function getTypeArgumentsForAliasSymbol(symbol: Symbol) { return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : undefined; } @@ -9314,6 +9344,7 @@ namespace ts { case SyntaxKind.TypeLiteral: case SyntaxKind.JSDocTypeLiteral: case SyntaxKind.JSDocFunctionType: + case SyntaxKind.JSDocSignature: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); case SyntaxKind.TypeOperator: return getTypeFromTypeOperatorNode(node); @@ -9991,8 +10022,8 @@ namespace ts { function compareTypePredicateRelatedTo( source: TypePredicate, target: TypePredicate, - sourceDeclaration: SignatureDeclaration, - targetDeclaration: SignatureDeclaration, + sourceDeclaration: SignatureDeclaration | JSDocSignature, + targetDeclaration: SignatureDeclaration | JSDocSignature, reportErrors: boolean, errorReporter: ErrorReporter, compareTypes: (s: Type, t: Type, reportErrors?: boolean) => Ternary): Ternary { @@ -21761,8 +21792,9 @@ namespace ts { switch (d.kind) { case SyntaxKind.InterfaceDeclaration: case SyntaxKind.TypeAliasDeclaration: - // A jsdoc typedef is, by definition, a type alias + // A jsdoc typedef and callback are, by definition, type aliases case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: return DeclarationSpaces.ExportType; case SyntaxKind.ModuleDeclaration: return isAmbientModule(d as ModuleDeclaration) || getModuleInstanceState(d as ModuleDeclaration) !== ModuleInstanceState.NonInstantiated @@ -22297,7 +22329,7 @@ namespace ts { } } - function checkJSDocTypedefTag(node: JSDocTypedefTag) { + function checkJSDocTypeAliasTag(node: JSDocTypedefTag | JSDocCallbackTag) { if (!node.typeExpression) { // If the node had `@property` tags, `typeExpression` would have been set to the first property tag. error(node.name, Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags); @@ -25212,7 +25244,8 @@ namespace ts { case SyntaxKind.JSDocAugmentsTag: return checkJSDocAugmentsTag(node as JSDocAugmentsTag); case SyntaxKind.JSDocTypedefTag: - return checkJSDocTypedefTag(node as JSDocTypedefTag); + case SyntaxKind.JSDocCallbackTag: + return checkJSDocTypeAliasTag(node as JSDocTypedefTag); case SyntaxKind.JSDocParameterTag: return checkJSDocParameterTag(node as JSDocParameterTag); case SyntaxKind.JSDocFunctionType: @@ -26423,9 +26456,10 @@ namespace ts { return false; } - function isRequiredInitializedParameter(parameter: ParameterDeclaration) { + function isRequiredInitializedParameter(parameter: ParameterDeclaration | JSDocParameterTag) { return strictNullChecks && !isOptionalParameter(parameter) && + !isJSDocParameterTag(parameter) && parameter.initializer && !hasModifier(parameter, ModifierFlags.ParameterPropertyModifier); } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index bbd4edc8507fd..0b9a0142496aa 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -489,6 +489,15 @@ namespace ts { return visitNode(cbNode, (node).fullName) || visitNode(cbNode, (node).typeExpression); } + case SyntaxKind.JSDocCallbackTag: + return visitNode(cbNode, (node as JSDocCallbackTag).fullName) || + visitNode(cbNode, (node as JSDocCallbackTag).typeExpression); + case SyntaxKind.JSDocSignature: + return visitNodes(cbNode, cbNodes, node.decorators) || + visitNodes(cbNode, cbNodes, node.modifiers) || + visitNodes(cbNode, cbNodes, (node).typeParameters) || + visitNodes(cbNode, cbNodes, (node).parameters) || + visitNode(cbNode, (node).type); case SyntaxKind.JSDocTypeLiteral: if ((node as JSDocTypeLiteral).jsDocPropertyTags) { for (const tag of (node as JSDocTypeLiteral).jsDocPropertyTags) { @@ -6331,8 +6340,9 @@ namespace ts { } const enum PropertyLikeParse { - Property, - Parameter, + Property = 1 << 0, + Parameter = 1 << 1, + CallbackParameter = 1 << 2, } export function parseJSDocCommentWorker(start: number, length: number): JSDoc { @@ -6386,7 +6396,7 @@ namespace ts { case SyntaxKind.AtToken: if (state === JSDocState.BeginningOfLine || state === JSDocState.SawAsterisk) { removeTrailingNewlines(comments); - parseTag(indent); + addTag(parseTag(indent)); // NOTE: According to usejsdoc.org, a tag goes to end of line, except the last tag. // Real-world comments may break this rule, so "BeginningOfLine" will not be a real line beginning // for malformed examples like `/** @param {string} x @returns {number} the length */` @@ -6503,8 +6513,7 @@ namespace ts { case "arg": case "argument": case "param": - addTag(parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter, indent)); - return; + return parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter, indent); case "return": case "returns": tag = parseReturnTag(atToken, tagName); @@ -6516,7 +6525,10 @@ namespace ts { tag = parseTypeTag(atToken, tagName); break; case "typedef": - tag = parseTypedefTag(atToken, tagName); + tag = parseTypedefTag(atToken, tagName, indent); + break; + case "callback": + tag = parseCallbackTag(atToken, tagName, indent); break; default: tag = parseUnknownTag(atToken, tagName); @@ -6531,8 +6543,11 @@ namespace ts { // a badly malformed tag should not be added to the list of tags return; } - tag.comment = parseTagComments(indent + tag.end - tag.pos); - addTag(tag); + if (!tag.comment) { + // some tags, like typedef and callback, have already parsed their comments earlier + tag.comment = parseTagComments(indent + tag.end - tag.pos); + } + return tag; } function parseTagComments(indent: number): string | undefined { @@ -6605,6 +6620,9 @@ namespace ts { } function addTag(tag: JSDocTag): void { + if (!tag) { + return; + } if (!tags) { tags = [tag]; tagsPos = tag.pos; @@ -6665,9 +6683,9 @@ namespace ts { typeExpression = tryParseTypeExpression(); } - const result = target === PropertyLikeParse.Parameter ? - createNode(SyntaxKind.JSDocParameterTag, atToken.pos) : - createNode(SyntaxKind.JSDocPropertyTag, atToken.pos); + const result = target === PropertyLikeParse.Property ? + createNode(SyntaxKind.JSDocPropertyTag, atToken.pos) : + createNode(SyntaxKind.JSDocParameterTag, atToken.pos); let comment: string | undefined; if (indent !== undefined) comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos); const nestedTypeLiteral = parseNestedTypeLiteral(typeExpression, name, target); @@ -6771,27 +6789,17 @@ namespace ts { return finishNode(tag); } - function parseTypedefTag(atToken: AtToken, tagName: Identifier): JSDocTypedefTag { + function parseTypedefTag(atToken: AtToken, tagName: Identifier, indent: number): JSDocTypedefTag { const typeExpression = tryParseTypeExpression(); skipWhitespace(); const typedefTag = createNode(SyntaxKind.JSDocTypedefTag, atToken.pos); typedefTag.atToken = atToken; typedefTag.tagName = tagName; - typedefTag.fullName = parseJSDocTypeNameWithNamespace(/*flags*/ 0); - if (typedefTag.fullName) { - let rightNode = typedefTag.fullName; - while (true) { - if (rightNode.kind === SyntaxKind.Identifier || !rightNode.body) { - // if node is identifier - use it as name - // otherwise use name of the rightmost part that we were able to parse - typedefTag.name = rightNode.kind === SyntaxKind.Identifier ? rightNode : rightNode.name; - break; - } - rightNode = rightNode.body; - } - } + typedefTag.fullName = parseJSDocTypeNameWithNamespace(); + typedefTag.name = getJSDocTypeAliasName(typedefTag.fullName); skipWhitespace(); + typedefTag.comment = parseTagComments(indent); typedefTag.typeExpression = typeExpression; if (!typeExpression || isObjectOrObjectArrayTypeReference(typeExpression.type)) { @@ -6826,23 +6834,69 @@ namespace ts { } return finishNode(typedefTag); + } - function parseJSDocTypeNameWithNamespace(flags: NodeFlags) { - const pos = scanner.getTokenPos(); - const typeNameOrNamespaceName = parseJSDocIdentifierName(); + function parseJSDocTypeNameWithNamespace(nested?: boolean) { + const pos = scanner.getTokenPos(); + const typeNameOrNamespaceName = parseJSDocIdentifierName(); - if (typeNameOrNamespaceName && parseOptional(SyntaxKind.DotToken)) { - const jsDocNamespaceNode = createNode(SyntaxKind.ModuleDeclaration, pos); - jsDocNamespaceNode.flags |= flags; - jsDocNamespaceNode.name = typeNameOrNamespaceName; - jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(NodeFlags.NestedNamespace); - return finishNode(jsDocNamespaceNode); + if (typeNameOrNamespaceName && parseOptional(SyntaxKind.DotToken)) { + const jsDocNamespaceNode = createNode(SyntaxKind.ModuleDeclaration, pos); + if (nested) { + jsDocNamespaceNode.flags |= NodeFlags.NestedNamespace; } + jsDocNamespaceNode.name = typeNameOrNamespaceName; + jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(/*nested*/ true); + return finishNode(jsDocNamespaceNode); + } + + if (typeNameOrNamespaceName && nested) { + typeNameOrNamespaceName.isInJSDocNamespace = true; + } + return typeNameOrNamespaceName; + } - if (typeNameOrNamespaceName && flags & NodeFlags.NestedNamespace) { - typeNameOrNamespaceName.isInJSDocNamespace = true; + function parseCallbackTag(atToken: AtToken, tagName: Identifier, indent: number): JSDocCallbackTag { + const callbackTag = createNode(SyntaxKind.JSDocCallbackTag, atToken.pos) as JSDocCallbackTag; + callbackTag.atToken = atToken; + callbackTag.tagName = tagName; + callbackTag.fullName = parseJSDocTypeNameWithNamespace(); + callbackTag.name = getJSDocTypeAliasName(callbackTag.fullName); + skipWhitespace(); + callbackTag.comment = parseTagComments(indent); + + let child: JSDocParameterTag | false; + const start = scanner.getStartPos(); + const jsdocSignature = createNode(SyntaxKind.JSDocSignature, start) as JSDocSignature; + jsdocSignature.parameters = []; + while (child = tryParse(() => parseChildParameterOrPropertyTag(PropertyLikeParse.CallbackParameter) as JSDocParameterTag)) { + jsdocSignature.parameters = append(jsdocSignature.parameters as MutableNodeArray, child); + } + const returnTag = tryParse(() => { + if (token() === SyntaxKind.AtToken) { + nextJSDocToken(); + const tag = parseTag(indent); + if (tag && tag.kind === SyntaxKind.JSDocReturnTag) { + return tag as JSDocReturnTag; + } + } + }); + if (returnTag) { + jsdocSignature.type = returnTag; + } + callbackTag.typeExpression = finishNode(jsdocSignature); + return finishNode(callbackTag); + } + + function getJSDocTypeAliasName(fullName: JSDocNamespaceBody | undefined) { + if (fullName) { + let rightNode = fullName; + while (true) { + if (ts.isIdentifier(rightNode) || !rightNode.body) { + return ts.isIdentifier(rightNode) ? rightNode : rightNode.name; + } + rightNode = rightNode.body; } - return typeNameOrNamespaceName; } } @@ -6872,6 +6926,7 @@ namespace ts { if (canParseTag) { const child = tryParseChildTag(target); if (child && child.kind === SyntaxKind.JSDocParameterTag && + target !== PropertyLikeParse.CallbackParameter && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) { return false; } @@ -6920,12 +6975,12 @@ namespace ts { case "arg": case "argument": case "param": - t = PropertyLikeParse.Parameter; + t = PropertyLikeParse.Parameter | PropertyLikeParse.CallbackParameter; break; default: return false; } - if (target !== t) { + if (!(target & t)) { return false; } const tag = parseParameterOrPropertyTag(atToken, tagName, target, /*indent*/ undefined); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f2a6f001a21a6..7892b11eaea0e 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -413,9 +413,11 @@ namespace ts { JSDocVariadicType, JSDocComment, JSDocTypeLiteral, + JSDocSignature, JSDocTag, JSDocAugmentsTag, JSDocClassTag, + JSDocCallbackTag, JSDocParameterTag, JSDocReturnTag, JSDocTypeTag, @@ -2053,7 +2055,7 @@ namespace ts { export type ObjectTypeDeclaration = ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode; - export type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag; + export type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag | JSDocTypedefTag | JSDocCallbackTag | JSDocSignature; export interface ClassLikeDeclarationBase extends NamedDeclaration, JSDocContainer { kind: SyntaxKind.ClassDeclaration | SyntaxKind.ClassExpression; @@ -2387,6 +2389,21 @@ namespace ts { typeExpression?: JSDocTypeExpression | JSDocTypeLiteral; } + export interface JSDocCallbackTag extends JSDocTag, NamedDeclaration { + parent: JSDoc; + kind: SyntaxKind.JSDocCallbackTag; + fullName?: JSDocNamespaceDeclaration | Identifier; + name?: Identifier; + typeExpression: JSDocSignature; + } + + export interface JSDocSignature extends JSDocType, Declaration { + kind: SyntaxKind.JSDocSignature; + typeParameters?: ReadonlyArray; + parameters: ReadonlyArray; + type: JSDocReturnTag | undefined; + } + export interface JSDocPropertyLikeTag extends JSDocTag, Declaration { parent: JSDoc; name: EntityName; @@ -4032,7 +4049,7 @@ namespace ts { } export interface Signature { - declaration?: SignatureDeclaration; // Originating declaration + declaration?: SignatureDeclaration | JSDocSignature; // Originating declaration typeParameters?: TypeParameter[]; // Type parameters (undefined if non-generic) parameters: Symbol[]; // Parameters /* @internal */ diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index e10d40a70ba16..7339907547a57 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -520,6 +520,9 @@ namespace ts { case SyntaxKind.SetAccessor: case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: + case SyntaxKind.JSDocCallbackTag: + case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocSignature: return true; default: assertTypeIsNever(node); @@ -561,14 +564,7 @@ namespace ts { // Gets the nearest enclosing block scope container that has the provided node // as a descendant, that is not the provided node. export function getEnclosingBlockScopeContainer(node: Node): Node { - let current = node.parent; - while (current) { - if (isBlockScope(current, current.parent)) { - return current; - } - - current = current.parent; - } + return findAncestor(node.parent, current => isBlockScope(current, current.parent)); } // Return display name of an identifier @@ -1803,6 +1799,14 @@ namespace ts { ((node as JSDocFunctionType).parameters[0].name as Identifier).escapedText === "new"; } + export function isJSDocTypeAlias(node: Node): node is JSDocTypedefTag | JSDocCallbackTag { + return node.kind === SyntaxKind.JSDocTypedefTag || node.kind === SyntaxKind.JSDocCallbackTag; + } + + export function isTypeAlias(node: Node): node is JSDocTypedefTag | JSDocCallbackTag | TypeAliasDeclaration { + return isJSDocTypeAlias(node) || isTypeAliasDeclaration(node); + } + function getSourceOfAssignment(node: Node): Node { return isExpressionStatement(node) && node.expression && isBinaryExpression(node.expression) && @@ -1826,6 +1830,8 @@ namespace ts { return v && v.initializer; case SyntaxKind.PropertyDeclaration: return (node as PropertyDeclaration).initializer; + case SyntaxKind.PropertyAssignment: + return (node as PropertyAssignment).initializer; } } @@ -1907,7 +1913,7 @@ namespace ts { return parameter && parameter.symbol; } - export function getHostSignatureFromJSDoc(node: JSDocParameterTag): SignatureDeclaration | undefined { + export function getHostSignatureFromJSDoc(node: JSDocTag): SignatureDeclaration | undefined { const host = getJSDocHost(node); const decl = getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || @@ -1918,18 +1924,12 @@ namespace ts { return decl && isFunctionLike(decl) ? decl : undefined; } - export function getJSDocHost(node: JSDocTag): HasJSDoc { - while (node.parent.kind === SyntaxKind.JSDocTypeLiteral) { - if (node.parent.parent.kind === SyntaxKind.JSDocTypedefTag) { - node = node.parent.parent as JSDocTypedefTag; - } - else { - // node.parent.parent is a type expression, child of a parameter type - node = node.parent.parent.parent as JSDocParameterTag; - } + export function getJSDocHost(node: Node): HasJSDoc { + const comment = findAncestor(node.parent, + node => !(isJSDocNode(node) || node.flags & NodeFlags.JSDoc) ? "quit" : node.kind === SyntaxKind.JSDocComment); + if (comment) { + return (comment as JSDoc).parent; } - Debug.assert(node.parent!.kind === SyntaxKind.JSDocComment); - return node.parent!.parent!; } export function getTypeParameterFromJsDoc(node: TypeParameterDeclaration & { parent: JSDocTemplateTag }): TypeParameterDeclaration | undefined { @@ -1938,13 +1938,14 @@ namespace ts { return find(typeParameters, p => p.name.escapedText === name); } - export function hasRestParameter(s: SignatureDeclaration): boolean { - const last = lastOrUndefined(s.parameters); + export function hasRestParameter(s: SignatureDeclaration | JSDocSignature): boolean { + const last = lastOrUndefined(s.parameters); return last && isRestParameter(last); } - export function isRestParameter(node: ParameterDeclaration): boolean { - return node.dotDotDotToken !== undefined || node.type && node.type.kind === SyntaxKind.JSDocVariadicType; + export function isRestParameter(node: ParameterDeclaration | JSDocParameterTag): boolean { + const type = isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type; + return (node as ParameterDeclaration).dotDotDotToken !== undefined || type && type.kind === SyntaxKind.JSDocVariadicType; } export const enum AssignmentKind { @@ -2998,8 +2999,9 @@ namespace ts { return parameter && parameter.type; } - export function getThisParameter(signature: SignatureDeclaration): ParameterDeclaration | undefined { - if (signature.parameters.length) { + export function getThisParameter(signature: SignatureDeclaration | JSDocSignature): ParameterDeclaration | undefined { + // callback tags do not currently support this parameters + if (signature.parameters.length && !isJSDocSignature(signature)) { const thisParameter = signature.parameters[0]; if (parameterIsThisKeyword(thisParameter)) { return thisParameter; @@ -3085,7 +3087,10 @@ namespace ts { * Gets the effective return type annotation of a signature. If the node was parsed in a * JavaScript file, gets the return type annotation from JSDoc. */ - export function getEffectiveReturnTypeNode(node: SignatureDeclaration): TypeNode | undefined { + export function getEffectiveReturnTypeNode(node: SignatureDeclaration | JSDocSignature): TypeNode | undefined { + if (isJSDocSignature(node)) { + return node.type && node.type.typeExpression && node.type.typeExpression.type; + } return node.type || (isInJavaScriptFile(node) ? getJSDocReturnType(node) : undefined); } @@ -3093,15 +3098,30 @@ namespace ts { * Gets the effective type parameters. If the node was parsed in a * JavaScript file, gets the type parameters from the `@template` tag from JSDoc. */ - export function getEffectiveTypeParameterDeclarations(node: DeclarationWithTypeParameters | JSDocTypedefTag) { - return isJSDocTypedefTag(node) - ? getJSDocTypeParameterDeclarations(node) - : node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : undefined); + export function getEffectiveTypeParameterDeclarations(node: DeclarationWithTypeParameters) { + if (isJSDocSignature(node)) { + return undefined; + } + if (isJSDocTypeAlias(node)) { + Debug.assert(node.parent.kind === SyntaxKind.JSDocComment); + const templateTags = flatMap(filter(node.parent.tags, isJSDocTemplateTag), tag => tag.typeParameters) as ReadonlyArray; + const templateTagNodes = templateTags as NodeArray; + templateTagNodes.pos = templateTagNodes.length > 0 ? first(templateTagNodes).pos : node.pos; + templateTagNodes.end = templateTagNodes.length > 0 ? last(templateTagNodes).end : node.end; + templateTagNodes.hasTrailingComma = false; + return templateTagNodes; + } + return node.typeParameters || (isInJavaScriptFile(node) ? getJSDocTypeParameterDeclarations(node) : undefined); } - export function getJSDocTypeParameterDeclarations(node: DeclarationWithTypeParameters | JSDocTypedefTag) { - const templateTag = getJSDocTemplateTag(node); - return templateTag && templateTag.typeParameters; + export function getJSDocTypeParameterDeclarations(node: DeclarationWithTypeParameters) { + const tags = filter(getJSDocTags(node), isJSDocTemplateTag); + for (const tag of tags) { + if (!(tag.parent.kind === SyntaxKind.JSDocComment && find(tag.parent.tags, isJSDocTypeAlias))) { + // template tags are only available when a typedef isn't already using them + return tag.typeParameters; + } + } } /** @@ -4638,6 +4658,8 @@ namespace ts { return undefined; } } + case SyntaxKind.JSDocCallbackTag: + return (declaration as JSDocCallbackTag).name; case SyntaxKind.JSDocTypedefTag: return getNameOfJSDocTypedef(declaration as JSDocTypedefTag); case SyntaxKind.ExportAssignment: { @@ -5475,6 +5497,14 @@ namespace ts { export function isJSDocTypeLiteral(node: Node): node is JSDocTypeLiteral { return node.kind === SyntaxKind.JSDocTypeLiteral; } + + export function isJSDocCallbackTag(node: Node): node is JSDocCallbackTag { + return node.kind === SyntaxKind.JSDocCallbackTag; + } + + export function isJSDocSignature(node: Node): node is JSDocSignature { + return node.kind === SyntaxKind.JSDocSignature; + } } // Node tests @@ -5636,6 +5666,7 @@ namespace ts { switch (kind) { case SyntaxKind.MethodSignature: case SyntaxKind.CallSignature: + case SyntaxKind.JSDocSignature: case SyntaxKind.ConstructSignature: case SyntaxKind.IndexSignature: case SyntaxKind.FunctionType: @@ -6104,6 +6135,7 @@ namespace ts { || kind === SyntaxKind.TypeParameter || kind === SyntaxKind.VariableDeclaration || kind === SyntaxKind.JSDocTypedefTag + || kind === SyntaxKind.JSDocCallbackTag || kind === SyntaxKind.JSDocPropertyTag; } @@ -6254,7 +6286,7 @@ namespace ts { /** True if node is of a kind that may contain comment text. */ export function isJSDocCommentContainingNode(node: Node): boolean { - return node.kind === SyntaxKind.JSDocComment || isJSDocTag(node) || isJSDocTypeLiteral(node); + return node.kind === SyntaxKind.JSDocComment || isJSDocTag(node) || isJSDocTypeLiteral(node) || isJSDocSignature(node); } // TODO: determine what this does before making it public. diff --git a/src/services/codefixes/fixUnusedIdentifier.ts b/src/services/codefixes/fixUnusedIdentifier.ts index 5b411bedde421..5d7e019c28da0 100644 --- a/src/services/codefixes/fixUnusedIdentifier.ts +++ b/src/services/codefixes/fixUnusedIdentifier.ts @@ -93,7 +93,7 @@ namespace ts.codefix { } function getToken(sourceFile: SourceFile, pos: number): Node { - const token = findPrecedingToken(pos, sourceFile); + const token = findPrecedingToken(pos, sourceFile, /*startNode*/ undefined, /*includeJsDoc*/ true); // this handles var ["computed"] = 12; return token.kind === SyntaxKind.CloseBracketToken ? findPrecedingToken(pos - 1, sourceFile) : token; } @@ -152,7 +152,7 @@ namespace ts.codefix { break; case SyntaxKind.TypeParameter: - const typeParameters = (parent.parent).typeParameters; + const typeParameters = getEffectiveTypeParameterDeclarations(parent.parent); if (typeParameters.length === 1) { const previousToken = getTokenAtPosition(sourceFile, typeParameters.pos - 1, /*includeJsDocComment*/ false); const nextToken = getTokenAtPosition(sourceFile, typeParameters.end, /*includeJsDocComment*/ false); @@ -315,4 +315,4 @@ namespace ts.codefix { } } } -} \ No newline at end of file +} diff --git a/src/services/jsDoc.ts b/src/services/jsDoc.ts index ca0dafbc74cb4..c8958ad3d2f57 100644 --- a/src/services/jsDoc.ts +++ b/src/services/jsDoc.ts @@ -5,6 +5,7 @@ namespace ts.JsDoc { "author", "argument", "borrows", + "callback", "class", "constant", "constructor", @@ -68,10 +69,12 @@ namespace ts.JsDoc { function getCommentHavingNodes(declaration: Declaration): ReadonlyArray { switch (declaration.kind) { + case SyntaxKind.JSDocParameterTag: case SyntaxKind.JSDocPropertyTag: return [declaration as JSDocPropertyTag]; + case SyntaxKind.JSDocCallbackTag: case SyntaxKind.JSDocTypedefTag: - return [(declaration as JSDocTypedefTag).parent]; + return [(declaration as JSDocTypedefTag), (declaration as JSDocTypedefTag).parent]; default: return getJSDocCommentsAndTags(declaration); } @@ -98,6 +101,7 @@ namespace ts.JsDoc { case SyntaxKind.JSDocTypeTag: return withNode((tag as JSDocTypeTag).typeExpression); case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: case SyntaxKind.JSDocPropertyTag: case SyntaxKind.JSDocParameterTag: const { name } = tag as JSDocTypedefTag | JSDocPropertyTag | JSDocParameterTag; diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index b029796e718ef..3ce18b9100256 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -290,7 +290,7 @@ namespace ts.NavigationBar { if (hasJSDocNodes(node)) { forEach(node.jsDoc, jsDoc => { forEach(jsDoc.tags, tag => { - if (tag.kind === SyntaxKind.JSDocTypedefTag) { + if (isJSDocTypeAlias(tag)) { addLeafNode(tag); } }); @@ -414,8 +414,6 @@ namespace ts.NavigationBar { case SyntaxKind.ArrowFunction: case SyntaxKind.ClassExpression: return getFunctionOrClassName(node); - case SyntaxKind.JSDocTypedefTag: - return getJSDocTypedefTagName(node); default: return undefined; } @@ -460,31 +458,11 @@ namespace ts.NavigationBar { return "()"; case SyntaxKind.IndexSignature: return "[]"; - case SyntaxKind.JSDocTypedefTag: - return getJSDocTypedefTagName(node); default: return ""; } } - function getJSDocTypedefTagName(node: JSDocTypedefTag): string { - if (node.name) { - return node.name.text; - } - else { - const parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === SyntaxKind.VariableStatement) { - if (parentNode.declarationList.declarations.length > 0) { - const nameIdentifier = parentNode.declarationList.declarations[0].name; - if (nameIdentifier.kind === SyntaxKind.Identifier) { - return nameIdentifier.text; - } - } - } - return ""; - } - } - /** Flattens the NavNode tree to a list, keeping only the top-level items. */ function topLevelItems(root: NavigationBarNode): NavigationBarNode[] { const topLevel: NavigationBarNode[] = []; @@ -511,6 +489,7 @@ namespace ts.NavigationBar { case SyntaxKind.SourceFile: case SyntaxKind.TypeAliasDeclaration: case SyntaxKind.JSDocTypedefTag: + case SyntaxKind.JSDocCallbackTag: return true; case SyntaxKind.Constructor: diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index 354c200217943..4c5d7ff6f0961 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -1464,8 +1464,8 @@ namespace ts.refactor.extractSymbol { } // Note that we add the current node's type parameters *after* updating the corresponding scope. - if (isDeclarationWithTypeParameters(curr) && curr.typeParameters) { - for (const typeParameterDecl of curr.typeParameters) { + if (isDeclarationWithTypeParameters(curr) && getEffectiveTypeParameterDeclarations(curr)) { + for (const typeParameterDecl of getEffectiveTypeParameterDeclarations(curr)) { const typeParameter = checker.getTypeAtLocation(typeParameterDecl) as TypeParameter; if (allTypeParameterUsages.has(typeParameter.id.toString())) { seenTypeParameterUsages.set(typeParameter.id.toString(), typeParameter); @@ -1536,8 +1536,8 @@ namespace ts.refactor.extractSymbol { function hasTypeParameters(node: Node) { return isDeclarationWithTypeParameters(node) && - node.typeParameters !== undefined && - node.typeParameters.length > 0; + getEffectiveTypeParameterDeclarations(node) && + getEffectiveTypeParameterDeclarations(node).length > 0; } function isInGenericContext(node: Node) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 430dc2196e0f1..399b7184e626e 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -276,7 +276,7 @@ namespace ts { } export function getContainerNode(node: Node): Declaration { - if (node.kind === SyntaxKind.JSDocTypedefTag) { + if (isJSDocTypeAlias(node)) { // This doesn't just apply to the node immediately under the comment, but to everything in its parent's scope. // node.parent = the JSDoc comment, node.parent.parent = the node having the comment. // Then we get parent again in the loop. @@ -315,7 +315,10 @@ namespace ts { case SyntaxKind.ClassExpression: return ScriptElementKind.classElement; case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement; - case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement; + case SyntaxKind.TypeAliasDeclaration: + case SyntaxKind.JSDocCallbackTag: + case SyntaxKind.JSDocTypedefTag: + return ScriptElementKind.typeElement; case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement; case SyntaxKind.VariableDeclaration: return getKindOfVariableDeclaration(node); @@ -346,8 +349,6 @@ namespace ts { case SyntaxKind.ExportSpecifier: case SyntaxKind.NamespaceImport: return ScriptElementKind.alias; - case SyntaxKind.JSDocTypedefTag: - return ScriptElementKind.typeElement; case SyntaxKind.BinaryExpression: const kind = getSpecialPropertyAssignmentKind(node as BinaryExpression); const { right } = node as BinaryExpression; diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json index a4a69fc48a6c4..98a59931ad8a5 100644 --- a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json @@ -32,7 +32,7 @@ }, "typeExpression": { "kind": "JSDocTypeLiteral", - "pos": 26, + "pos": 28, "end": 98, "jsDocPropertyTags": [ { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 67bd6cbe9801b..1cf0b12522b86 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -349,22 +349,24 @@ declare namespace ts { JSDocVariadicType = 284, JSDocComment = 285, JSDocTypeLiteral = 286, - JSDocTag = 287, - JSDocAugmentsTag = 288, - JSDocClassTag = 289, - JSDocParameterTag = 290, - JSDocReturnTag = 291, - JSDocTypeTag = 292, - JSDocTemplateTag = 293, - JSDocTypedefTag = 294, - JSDocPropertyTag = 295, - SyntaxList = 296, - NotEmittedStatement = 297, - PartiallyEmittedExpression = 298, - CommaListExpression = 299, - MergeDeclarationMarker = 300, - EndOfDeclarationMarker = 301, - Count = 302, + JSDocSignature = 287, + JSDocTag = 288, + JSDocAugmentsTag = 289, + JSDocClassTag = 290, + JSDocCallbackTag = 291, + JSDocParameterTag = 292, + JSDocReturnTag = 293, + JSDocTypeTag = 294, + JSDocTemplateTag = 295, + JSDocTypedefTag = 296, + JSDocPropertyTag = 297, + SyntaxList = 298, + NotEmittedStatement = 299, + PartiallyEmittedExpression = 300, + CommaListExpression = 301, + MergeDeclarationMarker = 302, + EndOfDeclarationMarker = 303, + Count = 304, FirstAssignment = 58, LastAssignment = 70, FirstCompoundAssignment = 59, @@ -391,9 +393,9 @@ declare namespace ts { LastBinaryOperator = 70, FirstNode = 145, FirstJSDocNode = 277, - LastJSDocNode = 295, - FirstJSDocTagNode = 287, - LastJSDocTagNode = 295 + LastJSDocNode = 297, + FirstJSDocTagNode = 288, + LastJSDocTagNode = 297 } enum NodeFlags { None = 0, @@ -1280,7 +1282,7 @@ declare namespace ts { block: Block; } type ObjectTypeDeclaration = ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode; - type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag; + type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag | JSDocTypedefTag | JSDocCallbackTag | JSDocSignature; interface ClassLikeDeclarationBase extends NamedDeclaration, JSDocContainer { kind: SyntaxKind.ClassDeclaration | SyntaxKind.ClassExpression; name?: Identifier; @@ -1537,6 +1539,19 @@ declare namespace ts { name?: Identifier; typeExpression?: JSDocTypeExpression | JSDocTypeLiteral; } + interface JSDocCallbackTag extends JSDocTag, NamedDeclaration { + parent: JSDoc; + kind: SyntaxKind.JSDocCallbackTag; + fullName?: JSDocNamespaceDeclaration | Identifier; + name?: Identifier; + typeExpression: JSDocSignature; + } + interface JSDocSignature extends JSDocType, Declaration { + kind: SyntaxKind.JSDocSignature; + typeParameters?: ReadonlyArray; + parameters: ReadonlyArray; + type: JSDocReturnTag | undefined; + } interface JSDocPropertyLikeTag extends JSDocTag, Declaration { parent: JSDoc; name: EntityName; @@ -2283,7 +2298,7 @@ declare namespace ts { Construct = 1 } interface Signature { - declaration?: SignatureDeclaration; + declaration?: SignatureDeclaration | JSDocSignature; typeParameters?: TypeParameter[]; parameters: Symbol[]; } @@ -3362,6 +3377,8 @@ declare namespace ts { function isJSDocPropertyTag(node: Node): node is JSDocPropertyTag; function isJSDocPropertyLikeTag(node: Node): node is JSDocPropertyLikeTag; function isJSDocTypeLiteral(node: Node): node is JSDocTypeLiteral; + function isJSDocCallbackTag(node: Node): node is JSDocCallbackTag; + function isJSDocSignature(node: Node): node is JSDocSignature; } declare namespace ts { /** diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index ef435632a3667..35669b096e39b 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -349,22 +349,24 @@ declare namespace ts { JSDocVariadicType = 284, JSDocComment = 285, JSDocTypeLiteral = 286, - JSDocTag = 287, - JSDocAugmentsTag = 288, - JSDocClassTag = 289, - JSDocParameterTag = 290, - JSDocReturnTag = 291, - JSDocTypeTag = 292, - JSDocTemplateTag = 293, - JSDocTypedefTag = 294, - JSDocPropertyTag = 295, - SyntaxList = 296, - NotEmittedStatement = 297, - PartiallyEmittedExpression = 298, - CommaListExpression = 299, - MergeDeclarationMarker = 300, - EndOfDeclarationMarker = 301, - Count = 302, + JSDocSignature = 287, + JSDocTag = 288, + JSDocAugmentsTag = 289, + JSDocClassTag = 290, + JSDocCallbackTag = 291, + JSDocParameterTag = 292, + JSDocReturnTag = 293, + JSDocTypeTag = 294, + JSDocTemplateTag = 295, + JSDocTypedefTag = 296, + JSDocPropertyTag = 297, + SyntaxList = 298, + NotEmittedStatement = 299, + PartiallyEmittedExpression = 300, + CommaListExpression = 301, + MergeDeclarationMarker = 302, + EndOfDeclarationMarker = 303, + Count = 304, FirstAssignment = 58, LastAssignment = 70, FirstCompoundAssignment = 59, @@ -391,9 +393,9 @@ declare namespace ts { LastBinaryOperator = 70, FirstNode = 145, FirstJSDocNode = 277, - LastJSDocNode = 295, - FirstJSDocTagNode = 287, - LastJSDocTagNode = 295 + LastJSDocNode = 297, + FirstJSDocTagNode = 288, + LastJSDocTagNode = 297 } enum NodeFlags { None = 0, @@ -1280,7 +1282,7 @@ declare namespace ts { block: Block; } type ObjectTypeDeclaration = ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode; - type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag; + type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag | JSDocTypedefTag | JSDocCallbackTag | JSDocSignature; interface ClassLikeDeclarationBase extends NamedDeclaration, JSDocContainer { kind: SyntaxKind.ClassDeclaration | SyntaxKind.ClassExpression; name?: Identifier; @@ -1537,6 +1539,19 @@ declare namespace ts { name?: Identifier; typeExpression?: JSDocTypeExpression | JSDocTypeLiteral; } + interface JSDocCallbackTag extends JSDocTag, NamedDeclaration { + parent: JSDoc; + kind: SyntaxKind.JSDocCallbackTag; + fullName?: JSDocNamespaceDeclaration | Identifier; + name?: Identifier; + typeExpression: JSDocSignature; + } + interface JSDocSignature extends JSDocType, Declaration { + kind: SyntaxKind.JSDocSignature; + typeParameters?: ReadonlyArray; + parameters: ReadonlyArray; + type: JSDocReturnTag | undefined; + } interface JSDocPropertyLikeTag extends JSDocTag, Declaration { parent: JSDoc; name: EntityName; @@ -2283,7 +2298,7 @@ declare namespace ts { Construct = 1 } interface Signature { - declaration?: SignatureDeclaration; + declaration?: SignatureDeclaration | JSDocSignature; typeParameters?: TypeParameter[]; parameters: Symbol[]; } @@ -3362,6 +3377,8 @@ declare namespace ts { function isJSDocPropertyTag(node: Node): node is JSDocPropertyTag; function isJSDocPropertyLikeTag(node: Node): node is JSDocPropertyLikeTag; function isJSDocTypeLiteral(node: Node): node is JSDocTypeLiteral; + function isJSDocCallbackTag(node: Node): node is JSDocCallbackTag; + function isJSDocSignature(node: Node): node is JSDocSignature; } declare namespace ts { /** diff --git a/tests/baselines/reference/callbackCrossModule.symbols b/tests/baselines/reference/callbackCrossModule.symbols new file mode 100644 index 0000000000000..be8175c4a1157 --- /dev/null +++ b/tests/baselines/reference/callbackCrossModule.symbols @@ -0,0 +1,32 @@ +=== tests/cases/conformance/jsdoc/mod1.js === +/** @callback Con - some kind of continuation + * @param {object | undefined} error + * @return {any} I don't even know what this should return + */ +module.exports = C +>module : Symbol(export=, Decl(mod1.js, 0, 0)) +>exports : Symbol(export=, Decl(mod1.js, 0, 0)) +>C : Symbol(C, Decl(mod1.js, 4, 18)) + +function C() { +>C : Symbol(C, Decl(mod1.js, 4, 18)) + + this.p = 1 +>p : Symbol(C.p, Decl(mod1.js, 5, 14)) +} + +=== tests/cases/conformance/jsdoc/use.js === +/** @param {import('./mod1').Con} k */ +function f(k) { +>f : Symbol(f, Decl(use.js, 0, 0)) +>k : Symbol(k, Decl(use.js, 1, 11)) + + if (1 === 2 - 1) { + // I guess basic math works! + } + return k({ ok: true}) +>k : Symbol(k, Decl(use.js, 1, 11)) +>ok : Symbol(ok, Decl(use.js, 5, 14)) +} + + diff --git a/tests/baselines/reference/callbackCrossModule.types b/tests/baselines/reference/callbackCrossModule.types new file mode 100644 index 0000000000000..d1d970c555e7d --- /dev/null +++ b/tests/baselines/reference/callbackCrossModule.types @@ -0,0 +1,47 @@ +=== tests/cases/conformance/jsdoc/mod1.js === +/** @callback Con - some kind of continuation + * @param {object | undefined} error + * @return {any} I don't even know what this should return + */ +module.exports = C +>module.exports = C : typeof C +>module.exports : any +>module : any +>exports : any +>C : typeof C + +function C() { +>C : typeof C + + this.p = 1 +>this.p = 1 : 1 +>this.p : any +>this : any +>p : any +>1 : 1 +} + +=== tests/cases/conformance/jsdoc/use.js === +/** @param {import('./mod1').Con} k */ +function f(k) { +>f : (k: (error: any) => any) => any +>k : (error: any) => any + + if (1 === 2 - 1) { +>1 === 2 - 1 : boolean +>1 : 1 +>2 - 1 : number +>2 : 2 +>1 : 1 + + // I guess basic math works! + } + return k({ ok: true}) +>k({ ok: true}) : any +>k : (error: any) => any +>{ ok: true} : { ok: boolean; } +>ok : boolean +>true : true +} + + diff --git a/tests/baselines/reference/callbackTag1.symbols b/tests/baselines/reference/callbackTag1.symbols new file mode 100644 index 0000000000000..b52ac8f92c8ab --- /dev/null +++ b/tests/baselines/reference/callbackTag1.symbols @@ -0,0 +1,28 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @callback Sid + * @param {string} s + * @returns {string} What were you expecting + */ +var x = 1 +>x : Symbol(x, Decl(cb.js, 4, 3)) + +/** @type {Sid} smallId */ +var sid = s => s + "!"; +>sid : Symbol(sid, Decl(cb.js, 7, 3)) +>s : Symbol(s, Decl(cb.js, 7, 9)) +>s : Symbol(s, Decl(cb.js, 7, 9)) + + +/** @type {NoReturn} */ +var noreturn = obj => void obj.title +>noreturn : Symbol(noreturn, Decl(cb.js, 11, 3)) +>obj : Symbol(obj, Decl(cb.js, 11, 14)) +>obj.title : Symbol(title, Decl(cb.js, 15, 34)) +>obj : Symbol(obj, Decl(cb.js, 11, 14)) +>title : Symbol(title, Decl(cb.js, 15, 34)) + +/** + * @callback NoReturn + * @param {{ e: number, m: number, title: string }} s - Knee deep, shores, etc + */ + diff --git a/tests/baselines/reference/callbackTag1.types b/tests/baselines/reference/callbackTag1.types new file mode 100644 index 0000000000000..2f1e64c8edcb4 --- /dev/null +++ b/tests/baselines/reference/callbackTag1.types @@ -0,0 +1,34 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @callback Sid + * @param {string} s + * @returns {string} What were you expecting + */ +var x = 1 +>x : number +>1 : 1 + +/** @type {Sid} smallId */ +var sid = s => s + "!"; +>sid : Sid +>s => s + "!" : (s: string) => string +>s : string +>s + "!" : string +>s : string +>"!" : "!" + + +/** @type {NoReturn} */ +var noreturn = obj => void obj.title +>noreturn : (s: { e: number; m: number; title: string; }) => any +>obj => void obj.title : (obj: { e: number; m: number; title: string; }) => any +>obj : { e: number; m: number; title: string; } +>void obj.title : undefined +>obj.title : string +>obj : { e: number; m: number; title: string; } +>title : string + +/** + * @callback NoReturn + * @param {{ e: number, m: number, title: string }} s - Knee deep, shores, etc + */ + diff --git a/tests/baselines/reference/callbackTag2.errors.txt b/tests/baselines/reference/callbackTag2.errors.txt new file mode 100644 index 0000000000000..8be9e90102046 --- /dev/null +++ b/tests/baselines/reference/callbackTag2.errors.txt @@ -0,0 +1,42 @@ +tests/cases/conformance/jsdoc/cb.js(18,29): error TS2304: Cannot find name 'S'. + + +==== tests/cases/conformance/jsdoc/cb.js (1 errors) ==== + /** @template T + * @callback Id + * @param {T} t + * @returns {T} Maybe just return 120 and cast it? + */ + var x = 1 + + /** @type {Id} I actually wanted to write `const "120"` */ + var one_twenty = s => "120"; + + /** @template S + * @callback SharedId + * @param {S} ego + * @return {S} + */ + class SharedClass { + constructor() { + /** @type {SharedId} */ + ~ +!!! error TS2304: Cannot find name 'S'. + this.id; + } + } + /** @type {SharedId} */ + var outside = n => n + 1; + + /** @type {Final<{ fantasy }, { heroes }>} */ + var noreturn = (barts, tidus, noctis) => "cecil" + + /** + * @template V,X + * @callback Final + * @param {V} barts - "Barts" + * @param {X} tidus - Titus + * @param {X & V} noctis - "Prince Noctis Lucius Caelum" + * @return {"cecil" | "zidane"} + */ + \ No newline at end of file diff --git a/tests/baselines/reference/callbackTag2.symbols b/tests/baselines/reference/callbackTag2.symbols new file mode 100644 index 0000000000000..36b810de46566 --- /dev/null +++ b/tests/baselines/reference/callbackTag2.symbols @@ -0,0 +1,52 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @template T + * @callback Id + * @param {T} t + * @returns {T} Maybe just return 120 and cast it? + */ +var x = 1 +>x : Symbol(x, Decl(cb.js, 5, 3)) + +/** @type {Id} I actually wanted to write `const "120"` */ +var one_twenty = s => "120"; +>one_twenty : Symbol(one_twenty, Decl(cb.js, 8, 3)) +>s : Symbol(s, Decl(cb.js, 8, 16)) + +/** @template S + * @callback SharedId + * @param {S} ego + * @return {S} + */ +class SharedClass { +>SharedClass : Symbol(SharedClass, Decl(cb.js, 8, 28)) + + constructor() { + /** @type {SharedId} */ + this.id; +>this.id : Symbol(SharedClass.id, Decl(cb.js, 16, 19)) +>this : Symbol(SharedClass, Decl(cb.js, 8, 28)) +>id : Symbol(SharedClass.id, Decl(cb.js, 16, 19)) + } +} +/** @type {SharedId} */ +var outside = n => n + 1; +>outside : Symbol(outside, Decl(cb.js, 22, 3)) +>n : Symbol(n, Decl(cb.js, 22, 13)) +>n : Symbol(n, Decl(cb.js, 22, 13)) + +/** @type {Final<{ fantasy }, { heroes }>} */ +var noreturn = (barts, tidus, noctis) => "cecil" +>noreturn : Symbol(noreturn, Decl(cb.js, 25, 3)) +>barts : Symbol(barts, Decl(cb.js, 25, 16)) +>tidus : Symbol(tidus, Decl(cb.js, 25, 22)) +>noctis : Symbol(noctis, Decl(cb.js, 25, 29)) + +/** + * @template V,X + * @callback Final + * @param {V} barts - "Barts" + * @param {X} tidus - Titus + * @param {X & V} noctis - "Prince Noctis Lucius Caelum" + * @return {"cecil" | "zidane"} + */ + diff --git a/tests/baselines/reference/callbackTag2.types b/tests/baselines/reference/callbackTag2.types new file mode 100644 index 0000000000000..5a13438ebbe9a --- /dev/null +++ b/tests/baselines/reference/callbackTag2.types @@ -0,0 +1,60 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @template T + * @callback Id + * @param {T} t + * @returns {T} Maybe just return 120 and cast it? + */ +var x = 1 +>x : number +>1 : 1 + +/** @type {Id} I actually wanted to write `const "120"` */ +var one_twenty = s => "120"; +>one_twenty : Id +>s => "120" : (s: string) => string +>s : string +>"120" : "120" + +/** @template S + * @callback SharedId + * @param {S} ego + * @return {S} + */ +class SharedClass { +>SharedClass : SharedClass + + constructor() { + /** @type {SharedId} */ + this.id; +>this.id : SharedId +>this : this +>id : SharedId + } +} +/** @type {SharedId} */ +var outside = n => n + 1; +>outside : SharedId +>n => n + 1 : (n: number) => number +>n : number +>n + 1 : number +>n : number +>1 : 1 + +/** @type {Final<{ fantasy }, { heroes }>} */ +var noreturn = (barts, tidus, noctis) => "cecil" +>noreturn : (barts: { fantasy: any; }, tidus: { heroes: any; }, noctis: { heroes: any; } & { fantasy: any; }) => "cecil" | "zidane" +>(barts, tidus, noctis) => "cecil" : (barts: { fantasy: any; }, tidus: { heroes: any; }, noctis: { heroes: any; } & { fantasy: any; }) => "cecil" +>barts : { fantasy: any; } +>tidus : { heroes: any; } +>noctis : { heroes: any; } & { fantasy: any; } +>"cecil" : "cecil" + +/** + * @template V,X + * @callback Final + * @param {V} barts - "Barts" + * @param {X} tidus - Titus + * @param {X & V} noctis - "Prince Noctis Lucius Caelum" + * @return {"cecil" | "zidane"} + */ + diff --git a/tests/baselines/reference/callbackTag3.symbols b/tests/baselines/reference/callbackTag3.symbols new file mode 100644 index 0000000000000..88b53a4cdaa2f --- /dev/null +++ b/tests/baselines/reference/callbackTag3.symbols @@ -0,0 +1,9 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @callback Miracle + * @returns {string} What were you expecting + */ +/** @type {Miracle} smallId */ +var sid = () => "!"; +>sid : Symbol(sid, Decl(cb.js, 4, 3)) + + diff --git a/tests/baselines/reference/callbackTag3.types b/tests/baselines/reference/callbackTag3.types new file mode 100644 index 0000000000000..836897d0f308d --- /dev/null +++ b/tests/baselines/reference/callbackTag3.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/jsdoc/cb.js === +/** @callback Miracle + * @returns {string} What were you expecting + */ +/** @type {Miracle} smallId */ +var sid = () => "!"; +>sid : Miracle +>() => "!" : () => string +>"!" : "!" + + diff --git a/tests/baselines/reference/callbackTagNamespace.symbols b/tests/baselines/reference/callbackTagNamespace.symbols new file mode 100644 index 0000000000000..b8cf7d9588638 --- /dev/null +++ b/tests/baselines/reference/callbackTagNamespace.symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/jsdoc/namespaced.js === +/** + * @callback NS.Nested.Inner + * @param {string} space - spaaaaaaaaace + * @param {string} peace - peaaaaaaaaace + * @return {string | number} + */ +var x = 1; +>x : Symbol(x, Decl(namespaced.js, 6, 3)) + +/** @type {NS.Nested.Inner} */ +function f(space, peace) { +>f : Symbol(f, Decl(namespaced.js, 6, 10)) +>space : Symbol(space, Decl(namespaced.js, 8, 11)) +>peace : Symbol(peace, Decl(namespaced.js, 8, 17)) + + return '1' +} + diff --git a/tests/baselines/reference/callbackTagNamespace.types b/tests/baselines/reference/callbackTagNamespace.types new file mode 100644 index 0000000000000..0435320795dcd --- /dev/null +++ b/tests/baselines/reference/callbackTagNamespace.types @@ -0,0 +1,21 @@ +=== tests/cases/conformance/jsdoc/namespaced.js === +/** + * @callback NS.Nested.Inner + * @param {string} space - spaaaaaaaaace + * @param {string} peace - peaaaaaaaaace + * @return {string | number} + */ +var x = 1; +>x : number +>1 : 1 + +/** @type {NS.Nested.Inner} */ +function f(space, peace) { +>f : (space: string, peace: string) => string +>space : string +>peace : string + + return '1' +>'1' : "1" +} + diff --git a/tests/baselines/reference/jsdocTemplateClass.errors.txt b/tests/baselines/reference/jsdocTemplateClass.errors.txt index 4598e9f320f6d..402992c34bdc9 100644 --- a/tests/baselines/reference/jsdocTemplateClass.errors.txt +++ b/tests/baselines/reference/jsdocTemplateClass.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/jsdoc/templateTagOnClasses.js(24,1): error TS2322: Type 'boolean' is not assignable to type 'number'. +tests/cases/conformance/jsdoc/templateTagOnClasses.js(25,1): error TS2322: Type 'boolean' is not assignable to type 'number'. ==== tests/cases/conformance/jsdoc/templateTagOnClasses.js (1 errors) ==== @@ -6,6 +6,7 @@ tests/cases/conformance/jsdoc/templateTagOnClasses.js(24,1): error TS2322: Type * @template {T} * @typedef {(t: T) => T} Id */ + /** @template T */ class Foo { /** @typedef {(t: T) => T} Id2 */ /** @param {T} x */ @@ -15,7 +16,7 @@ tests/cases/conformance/jsdoc/templateTagOnClasses.js(24,1): error TS2322: Type /** * * @param {T} x - * @param {Id} y + * @param {Id} y * @param {Id2} alpha * @return {T} */ diff --git a/tests/baselines/reference/jsdocTemplateClass.symbols b/tests/baselines/reference/jsdocTemplateClass.symbols index d80b73bc4ac21..b82cd8038e50b 100644 --- a/tests/baselines/reference/jsdocTemplateClass.symbols +++ b/tests/baselines/reference/jsdocTemplateClass.symbols @@ -3,52 +3,53 @@ * @template {T} * @typedef {(t: T) => T} Id */ +/** @template T */ class Foo { >Foo : Symbol(Foo, Decl(templateTagOnClasses.js, 0, 0)) /** @typedef {(t: T) => T} Id2 */ /** @param {T} x */ constructor (x) { ->x : Symbol(x, Decl(templateTagOnClasses.js, 7, 17)) +>x : Symbol(x, Decl(templateTagOnClasses.js, 8, 17)) this.a = x ->this.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) +>this.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) >this : Symbol(Foo, Decl(templateTagOnClasses.js, 0, 0)) ->a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) ->x : Symbol(x, Decl(templateTagOnClasses.js, 7, 17)) +>a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) +>x : Symbol(x, Decl(templateTagOnClasses.js, 8, 17)) } /** * * @param {T} x - * @param {Id} y + * @param {Id} y * @param {Id2} alpha * @return {T} */ foo(x, y, alpha) { ->foo : Symbol(Foo.foo, Decl(templateTagOnClasses.js, 9, 5)) ->x : Symbol(x, Decl(templateTagOnClasses.js, 17, 8)) ->y : Symbol(y, Decl(templateTagOnClasses.js, 17, 10)) ->alpha : Symbol(alpha, Decl(templateTagOnClasses.js, 17, 13)) +>foo : Symbol(Foo.foo, Decl(templateTagOnClasses.js, 10, 5)) +>x : Symbol(x, Decl(templateTagOnClasses.js, 18, 8)) +>y : Symbol(y, Decl(templateTagOnClasses.js, 18, 10)) +>alpha : Symbol(alpha, Decl(templateTagOnClasses.js, 18, 13)) return alpha(y(x)) ->alpha : Symbol(alpha, Decl(templateTagOnClasses.js, 17, 13)) ->y : Symbol(y, Decl(templateTagOnClasses.js, 17, 10)) ->x : Symbol(x, Decl(templateTagOnClasses.js, 17, 8)) +>alpha : Symbol(alpha, Decl(templateTagOnClasses.js, 18, 13)) +>y : Symbol(y, Decl(templateTagOnClasses.js, 18, 10)) +>x : Symbol(x, Decl(templateTagOnClasses.js, 18, 8)) } } var f = new Foo(1) ->f : Symbol(f, Decl(templateTagOnClasses.js, 21, 3)) +>f : Symbol(f, Decl(templateTagOnClasses.js, 22, 3)) >Foo : Symbol(Foo, Decl(templateTagOnClasses.js, 0, 0)) var g = new Foo(false) ->g : Symbol(g, Decl(templateTagOnClasses.js, 22, 3)) +>g : Symbol(g, Decl(templateTagOnClasses.js, 23, 3)) >Foo : Symbol(Foo, Decl(templateTagOnClasses.js, 0, 0)) f.a = g.a ->f.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) ->f : Symbol(f, Decl(templateTagOnClasses.js, 21, 3)) ->a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) ->g.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) ->g : Symbol(g, Decl(templateTagOnClasses.js, 22, 3)) ->a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 7, 21)) +>f.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) +>f : Symbol(f, Decl(templateTagOnClasses.js, 22, 3)) +>a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) +>g.a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) +>g : Symbol(g, Decl(templateTagOnClasses.js, 23, 3)) +>a : Symbol(Foo.a, Decl(templateTagOnClasses.js, 8, 21)) diff --git a/tests/baselines/reference/jsdocTemplateClass.types b/tests/baselines/reference/jsdocTemplateClass.types index aa6a685e34fae..9c028a96ff170 100644 --- a/tests/baselines/reference/jsdocTemplateClass.types +++ b/tests/baselines/reference/jsdocTemplateClass.types @@ -3,6 +3,7 @@ * @template {T} * @typedef {(t: T) => T} Id */ +/** @template T */ class Foo { >Foo : Foo @@ -21,7 +22,7 @@ class Foo { /** * * @param {T} x - * @param {Id} y + * @param {Id} y * @param {Id2} alpha * @return {T} */ diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction.errors.txt b/tests/baselines/reference/jsdocTemplateConstructorFunction.errors.txt index 225d277c4fff8..9e735b780a0fc 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction.errors.txt +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction.errors.txt @@ -1,11 +1,14 @@ -tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js(21,1): error TS2322: Type 'false' is not assignable to type 'number'. +tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js(24,1): error TS2322: Type 'false' is not assignable to type 'number'. ==== tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js (1 errors) ==== /** - * @template {T} - * @typedef {(t: T) => T} Id + * @template {U} + * @typedef {(u: U) => U} Id + */ + /** * @param {T} t + * @template {T} */ function Zet(t) { /** @type {T} */ @@ -14,7 +17,7 @@ tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js(21,1): error } /** * @param {T} v - * @param {Id} id + * @param {Id} id */ Zet.prototype.add = function(v, id) { this.u = v || this.t diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction.symbols b/tests/baselines/reference/jsdocTemplateConstructorFunction.symbols index 8cf2ee99e57ea..b640d3c1e21e4 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction.symbols +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction.symbols @@ -1,57 +1,60 @@ === tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js === /** - * @template {T} - * @typedef {(t: T) => T} Id + * @template {U} + * @typedef {(u: U) => U} Id + */ +/** * @param {T} t + * @template {T} */ function Zet(t) { >Zet : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) ->t : Symbol(t, Decl(templateTagOnConstructorFunctions.js, 5, 13)) +>t : Symbol(t, Decl(templateTagOnConstructorFunctions.js, 8, 13)) /** @type {T} */ this.u this.t = t ->t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 7, 10)) ->t : Symbol(t, Decl(templateTagOnConstructorFunctions.js, 5, 13)) +>t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 10, 10)) +>t : Symbol(t, Decl(templateTagOnConstructorFunctions.js, 8, 13)) } /** * @param {T} v - * @param {Id} id + * @param {Id} id */ Zet.prototype.add = function(v, id) { ->Zet.prototype : Symbol(Zet.add, Decl(templateTagOnConstructorFunctions.js, 9, 1)) +>Zet.prototype : Symbol(Zet.add, Decl(templateTagOnConstructorFunctions.js, 12, 1)) >Zet : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) >prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) ->add : Symbol(Zet.add, Decl(templateTagOnConstructorFunctions.js, 9, 1)) ->v : Symbol(v, Decl(templateTagOnConstructorFunctions.js, 14, 29)) ->id : Symbol(id, Decl(templateTagOnConstructorFunctions.js, 14, 31)) +>add : Symbol(Zet.add, Decl(templateTagOnConstructorFunctions.js, 12, 1)) +>v : Symbol(v, Decl(templateTagOnConstructorFunctions.js, 17, 29)) +>id : Symbol(id, Decl(templateTagOnConstructorFunctions.js, 17, 31)) this.u = v || this.t ->this.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) +>this.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) >this : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) ->u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) ->v : Symbol(v, Decl(templateTagOnConstructorFunctions.js, 14, 29)) ->this.t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 7, 10)) +>u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) +>v : Symbol(v, Decl(templateTagOnConstructorFunctions.js, 17, 29)) +>this.t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 10, 10)) >this : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) ->t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 7, 10)) +>t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 10, 10)) return id(this.u) ->id : Symbol(id, Decl(templateTagOnConstructorFunctions.js, 14, 31)) ->this.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) +>id : Symbol(id, Decl(templateTagOnConstructorFunctions.js, 17, 31)) +>this.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) >this : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) ->u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) +>u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) } var z = new Zet(1) ->z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 18, 3)) +>z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 21, 3)) >Zet : Symbol(Zet, Decl(templateTagOnConstructorFunctions.js, 0, 0)) z.t = 2 ->z.t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 7, 10)) ->z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 18, 3)) ->t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 7, 10)) +>z.t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 10, 10)) +>z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 21, 3)) +>t : Symbol(Zet.t, Decl(templateTagOnConstructorFunctions.js, 10, 10)) z.u = false ->z.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) ->z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 18, 3)) ->u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 5, 17), Decl(templateTagOnConstructorFunctions.js, 14, 37)) +>z.u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) +>z : Symbol(z, Decl(templateTagOnConstructorFunctions.js, 21, 3)) +>u : Symbol(Zet.u, Decl(templateTagOnConstructorFunctions.js, 8, 17), Decl(templateTagOnConstructorFunctions.js, 17, 37)) diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction.types b/tests/baselines/reference/jsdocTemplateConstructorFunction.types index f838534aa339f..121cf846a0e39 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction.types +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction.types @@ -1,8 +1,11 @@ === tests/cases/conformance/jsdoc/templateTagOnConstructorFunctions.js === /** - * @template {T} - * @typedef {(t: T) => T} Id + * @template {U} + * @typedef {(u: U) => U} Id + */ +/** * @param {T} t + * @template {T} */ function Zet(t) { >Zet : typeof Zet @@ -23,18 +26,18 @@ function Zet(t) { } /** * @param {T} v - * @param {Id} id + * @param {Id} id */ Zet.prototype.add = function(v, id) { ->Zet.prototype.add = function(v, id) { this.u = v || this.t return id(this.u)} : (v: T, id: (t: T) => T) => T +>Zet.prototype.add = function(v, id) { this.u = v || this.t return id(this.u)} : (v: T, id: (u: T) => T) => T >Zet.prototype.add : any >Zet.prototype : any >Zet : typeof Zet >prototype : any >add : any ->function(v, id) { this.u = v || this.t return id(this.u)} : (v: T, id: (t: T) => T) => T +>function(v, id) { this.u = v || this.t return id(this.u)} : (v: T, id: (u: T) => T) => T >v : T ->id : (t: T) => T +>id : (u: T) => T this.u = v || this.t >this.u = v || this.t : T @@ -49,7 +52,7 @@ Zet.prototype.add = function(v, id) { return id(this.u) >id(this.u) : T ->id : (t: T) => T +>id : (u: T) => T >this.u : T >this : Zet >u : T diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction2.errors.txt b/tests/baselines/reference/jsdocTemplateConstructorFunction2.errors.txt index 6a8e45566ecab..cdcc9a056ebab 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction2.errors.txt +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction2.errors.txt @@ -4,8 +4,8 @@ tests/cases/conformance/jsdoc/templateTagWithNestedTypeLiteral.js(26,15): error ==== tests/cases/conformance/jsdoc/templateTagWithNestedTypeLiteral.js (2 errors) ==== /** - * @template {T} * @param {T} t + * @template {T} */ function Zet(t) { /** @type {T} */ diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction2.symbols b/tests/baselines/reference/jsdocTemplateConstructorFunction2.symbols index c65570f84c4c5..32573a373985b 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction2.symbols +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction2.symbols @@ -1,7 +1,7 @@ === tests/cases/conformance/jsdoc/templateTagWithNestedTypeLiteral.js === /** - * @template {T} * @param {T} t + * @template {T} */ function Zet(t) { >Zet : Symbol(Zet, Decl(templateTagWithNestedTypeLiteral.js, 0, 0)) diff --git a/tests/baselines/reference/jsdocTemplateConstructorFunction2.types b/tests/baselines/reference/jsdocTemplateConstructorFunction2.types index 787d9ab106bb1..14407a5a0c9d4 100644 --- a/tests/baselines/reference/jsdocTemplateConstructorFunction2.types +++ b/tests/baselines/reference/jsdocTemplateConstructorFunction2.types @@ -1,7 +1,7 @@ === tests/cases/conformance/jsdoc/templateTagWithNestedTypeLiteral.js === /** - * @template {T} * @param {T} t + * @template {T} */ function Zet(t) { >Zet : typeof Zet diff --git a/tests/baselines/reference/jsdocTemplateTag2.symbols b/tests/baselines/reference/jsdocTemplateTag2.symbols new file mode 100644 index 0000000000000..407943934ff9f --- /dev/null +++ b/tests/baselines/reference/jsdocTemplateTag2.symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/jsdoc/github17339.js === +var obj = { +>obj : Symbol(obj, Decl(github17339.js, 0, 3)) + + /** + * @template T + * @param {T} a + * @returns {T} + */ + x: function (a) { +>x : Symbol(x, Decl(github17339.js, 0, 11)) +>a : Symbol(a, Decl(github17339.js, 6, 14)) + + return a; +>a : Symbol(a, Decl(github17339.js, 6, 14)) + + }, +}; + diff --git a/tests/baselines/reference/jsdocTemplateTag2.types b/tests/baselines/reference/jsdocTemplateTag2.types new file mode 100644 index 0000000000000..d35724fb9b690 --- /dev/null +++ b/tests/baselines/reference/jsdocTemplateTag2.types @@ -0,0 +1,21 @@ +=== tests/cases/conformance/jsdoc/github17339.js === +var obj = { +>obj : { [x: string]: any; x: (a: T) => T; } +>{ /** * @template T * @param {T} a * @returns {T} */ x: function (a) { return a; },} : { [x: string]: any; x: (a: T) => T; } + + /** + * @template T + * @param {T} a + * @returns {T} + */ + x: function (a) { +>x : (a: T) => T +>function (a) { return a; } : (a: T) => T +>a : T + + return a; +>a : T + + }, +}; + diff --git a/tests/cases/conformance/jsdoc/callbackCrossModule.ts b/tests/cases/conformance/jsdoc/callbackCrossModule.ts new file mode 100644 index 0000000000000..a2888f3627fee --- /dev/null +++ b/tests/cases/conformance/jsdoc/callbackCrossModule.ts @@ -0,0 +1,22 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: mod1.js +/** @callback Con - some kind of continuation + * @param {object | undefined} error + * @return {any} I don't even know what this should return + */ +module.exports = C +function C() { + this.p = 1 +} + +// @Filename: use.js +/** @param {import('./mod1').Con} k */ +function f(k) { + if (1 === 2 - 1) { + // I guess basic math works! + } + return k({ ok: true}) +} + diff --git a/tests/cases/conformance/jsdoc/callbackTag1.ts b/tests/cases/conformance/jsdoc/callbackTag1.ts new file mode 100644 index 0000000000000..63a90e74ff88d --- /dev/null +++ b/tests/cases/conformance/jsdoc/callbackTag1.ts @@ -0,0 +1,22 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: cb.js + +/** @callback Sid + * @param {string} s + * @returns {string} What were you expecting + */ +var x = 1 + +/** @type {Sid} smallId */ +var sid = s => s + "!"; + + +/** @type {NoReturn} */ +var noreturn = obj => void obj.title + +/** + * @callback NoReturn + * @param {{ e: number, m: number, title: string }} s - Knee deep, shores, etc + */ diff --git a/tests/cases/conformance/jsdoc/callbackTag2.ts b/tests/cases/conformance/jsdoc/callbackTag2.ts new file mode 100644 index 0000000000000..34e71b55bcd71 --- /dev/null +++ b/tests/cases/conformance/jsdoc/callbackTag2.ts @@ -0,0 +1,40 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: cb.js + +/** @template T + * @callback Id + * @param {T} t + * @returns {T} Maybe just return 120 and cast it? + */ +var x = 1 + +/** @type {Id} I actually wanted to write `const "120"` */ +var one_twenty = s => "120"; + +/** @template S + * @callback SharedId + * @param {S} ego + * @return {S} + */ +class SharedClass { + constructor() { + /** @type {SharedId} */ + this.id; + } +} +/** @type {SharedId} */ +var outside = n => n + 1; + +/** @type {Final<{ fantasy }, { heroes }>} */ +var noreturn = (barts, tidus, noctis) => "cecil" + +/** + * @template V,X + * @callback Final + * @param {V} barts - "Barts" + * @param {X} tidus - Titus + * @param {X & V} noctis - "Prince Noctis Lucius Caelum" + * @return {"cecil" | "zidane"} + */ diff --git a/tests/cases/conformance/jsdoc/callbackTag3.ts b/tests/cases/conformance/jsdoc/callbackTag3.ts new file mode 100644 index 0000000000000..cb51ed6bb46bf --- /dev/null +++ b/tests/cases/conformance/jsdoc/callbackTag3.ts @@ -0,0 +1,10 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: cb.js +/** @callback Miracle + * @returns {string} What were you expecting + */ +/** @type {Miracle} smallId */ +var sid = () => "!"; + diff --git a/tests/cases/conformance/jsdoc/callbackTagNamespace.ts b/tests/cases/conformance/jsdoc/callbackTagNamespace.ts new file mode 100644 index 0000000000000..ba331e79fc428 --- /dev/null +++ b/tests/cases/conformance/jsdoc/callbackTagNamespace.ts @@ -0,0 +1,15 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @Filename: namespaced.js +/** + * @callback NS.Nested.Inner + * @param {string} space - spaaaaaaaaace + * @param {string} peace - peaaaaaaaaace + * @return {string | number} + */ +var x = 1; +/** @type {NS.Nested.Inner} */ +function f(space, peace) { + return '1' +} diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateClass.ts b/tests/cases/conformance/jsdoc/jsdocTemplateClass.ts index 5cd0cde89be12..b13303d6def4f 100644 --- a/tests/cases/conformance/jsdoc/jsdocTemplateClass.ts +++ b/tests/cases/conformance/jsdoc/jsdocTemplateClass.ts @@ -7,6 +7,7 @@ * @template {T} * @typedef {(t: T) => T} Id */ +/** @template T */ class Foo { /** @typedef {(t: T) => T} Id2 */ /** @param {T} x */ @@ -16,7 +17,7 @@ class Foo { /** * * @param {T} x - * @param {Id} y + * @param {Id} y * @param {Id2} alpha * @return {T} */ diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction.ts b/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction.ts index dc44afe040a4a..a2a7a48c1cb7c 100644 --- a/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction.ts +++ b/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction.ts @@ -4,9 +4,12 @@ // @Filename: templateTagOnConstructorFunctions.js /** - * @template {T} - * @typedef {(t: T) => T} Id + * @template {U} + * @typedef {(u: U) => U} Id + */ +/** * @param {T} t + * @template {T} */ function Zet(t) { /** @type {T} */ @@ -15,7 +18,7 @@ function Zet(t) { } /** * @param {T} v - * @param {Id} id + * @param {Id} id */ Zet.prototype.add = function(v, id) { this.u = v || this.t diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction2.ts b/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction2.ts index a4f107190ff1c..c736962de3974 100644 --- a/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction2.ts +++ b/tests/cases/conformance/jsdoc/jsdocTemplateConstructorFunction2.ts @@ -4,8 +4,8 @@ // @Filename: templateTagWithNestedTypeLiteral.js /** - * @template {T} * @param {T} t + * @template {T} */ function Zet(t) { /** @type {T} */ diff --git a/tests/cases/conformance/jsdoc/jsdocTemplateTag2.ts b/tests/cases/conformance/jsdoc/jsdocTemplateTag2.ts new file mode 100644 index 0000000000000..b7e706f124aa4 --- /dev/null +++ b/tests/cases/conformance/jsdoc/jsdocTemplateTag2.ts @@ -0,0 +1,16 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @lib: dom,esnext +// @Filename: github17339.js + +var obj = { + /** + * @template T + * @param {T} a + * @returns {T} + */ + x: function (a) { + return a; + }, +}; diff --git a/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts b/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts index a6fa8059481c4..8a76a47dc8adb 100644 --- a/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts +++ b/tests/cases/fourslash/jsQuickInfoGenerallyAcceptableSize.ts @@ -6,7 +6,7 @@ ////// Data table /////** //// @typedef DataTableThing -//// @type {Thing} +//// @type {Object} //// @property {function(TagCollection, Location, string, string, Infotable):void} AddDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add multiple data table entries. //// @property {function(TagCollection, Location, string, string, Infotable):string} AddDataTableEntry - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add a new data table entry. //// @property {function(TagCollection, Location, string, string, Infotable):void} AddOrUpdateDataTableEntries - (arg0: tags, arg1: location, arg2: source, arg3: sourceType, arg4: values) Add or update multiple data table entries. @@ -206,7 +206,7 @@ //// * Another thing //// * @type {SomeCallback} //// */ -////var another/*2*/Thing = function(a, b) {} +////var anotherThing/*2*/ = function(a, b) {} verify.quickInfoAt("1", "var doSomething: (dataTable: DataTableThing) => void", "Do something"); -verify.quickInfoAt("2", "var anotherThing: any", "Another thing"); // TODO: #23947 +verify.quickInfoAt("2", "var anotherThing: SomeCallback", "Another thing"); diff --git a/tests/cases/fourslash/server/jsdocCallbackTag.ts b/tests/cases/fourslash/server/jsdocCallbackTag.ts new file mode 100644 index 0000000000000..700419cd6824e --- /dev/null +++ b/tests/cases/fourslash/server/jsdocCallbackTag.ts @@ -0,0 +1,54 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: jsdocCallbackTag.js +//// /** +//// * @callback FooHandler - A kind of magic +//// * @param {string} eventName - So many words +//// * @param eventName2 {number | string} - Silence is golden +//// * @param eventName3 - Osterreich mos def +//// * @return {number} - DIVEKICK +//// */ +//// /** +//// * @type {FooHa/*8*/ndler} callback +//// */ +//// var t/*1*/; +//// +//// /** +//// * @callback FooHandler2 - What, another one? +//// * @param {string=} eventName - it keeps happening +//// * @param {string} [eventName2] - i WARNED you dog +//// */ +//// /** +//// * @type {FooH/*3*/andler2} callback +//// */ +//// var t2/*2*/; +//// t(/*4*/"!", /*5*/12, /*6*/false); + +goTo.marker("1"); +verify.quickInfoIs("var t: FooHandler"); +goTo.marker("2"); +verify.quickInfoIs("var t2: FooHandler2"); +goTo.marker("3"); +verify.quickInfoIs("type FooHandler2 = (eventName?: string, eventName2?: string) => any", "- What, another one?"); +goTo.marker("8"); +verify.quickInfoIs("type FooHandler = (eventName: string, eventName2: string | number, eventName3: any) => number", "- A kind of magic"); +verify.signatureHelp({ + marker: '4', + text: "t(eventName: string, eventName2: string | number, eventName3: any): number", + parameterDocComment: "- So many words", + tags: [{ name: "callback", text: "FooHandler - A kind of magic" }, + { name: "type", text: "{FooHandler} callback" }] +}); +verify.signatureHelp({ + marker: '5', + parameterDocComment: "- Silence is golden", + tags: [{ name: "callback", text: "FooHandler - A kind of magic" }, + { name: "type", text: "{FooHandler} callback" }] +}); +verify.signatureHelp({ + marker: '6', + parameterDocComment: "- Osterreich mos def", + tags: [{ name: "callback", text: "FooHandler - A kind of magic" }, + { name: "type", text: "{FooHandler} callback" }] +}); diff --git a/tests/cases/fourslash/server/jsdocCallbackTagNavigateTo.ts b/tests/cases/fourslash/server/jsdocCallbackTagNavigateTo.ts new file mode 100644 index 0000000000000..2beaf99ed7073 --- /dev/null +++ b/tests/cases/fourslash/server/jsdocCallbackTagNavigateTo.ts @@ -0,0 +1,33 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: jsDocCallback.js + +//// /** +//// * @callback FooCallback +//// * @param {string} eventName - What even is the navigation bar? +//// */ +//// /** @type {FooCallback} */ +//// var t; + +verify.navigationBar([ + { + "text": "", + "kind": "script", + "childItems": [ + { + "text": "FooCallback", + "kind": "type" + }, + { + "text": "t", + "kind": "var" + } + ] + }, + { + "text": "FooCallback", + "kind": "type", + "indent": 1 + } +]) diff --git a/tests/cases/fourslash/server/jsdocCallbackTagRename01.ts b/tests/cases/fourslash/server/jsdocCallbackTagRename01.ts new file mode 100644 index 0000000000000..bb7dd32cfc28d --- /dev/null +++ b/tests/cases/fourslash/server/jsdocCallbackTagRename01.ts @@ -0,0 +1,15 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: jsDocCallback.js +//// +//// /** +//// * @callback [|FooCallback|] +//// * @param {string} eventName - Rename should work +//// */ +//// +//// /** @type {/*1*/[|FooCallback|]} */ +//// var t; + +const ranges = test.ranges(); +verify.renameLocations(ranges[0], { findInStrings: false, findInComments: true, ranges }); diff --git a/tests/cases/fourslash/server/jsdocTypedefTag.ts b/tests/cases/fourslash/server/jsdocTypedefTag.ts index 9e9801148353a..1ab7060456123 100644 --- a/tests/cases/fourslash/server/jsdocTypedefTag.ts +++ b/tests/cases/fourslash/server/jsdocTypedefTag.ts @@ -6,7 +6,7 @@ //// /** @typedef {(string | number)} NumberLike */ //// //// /** -//// * @typedef Animal +//// * @typedef Animal - think Giraffes //// * @type {Object} //// * @property {string} animalName //// * @property {number} animalAge @@ -36,7 +36,7 @@ //// p.personName./*personName*/; //// p.personAge./*personAge*/; //// -//// /** @type {Animal} */ +//// /** @type {/*AnimalType*/Animal} */ //// var a;a./*animal*/; //// a.animalName./*animalName*/; //// a.animalAge./*animalAge*/; @@ -85,4 +85,7 @@ verify.completionListContains('catAge'); goTo.marker('catName'); verify.completionListContains('charAt'); goTo.marker('catAge'); -verify.completionListContains('toExponential'); \ No newline at end of file +verify.completionListContains('toExponential'); + +goTo.marker("AnimalType"); +verify.quickInfoIs("type Animal = {\n animalName: string;\n animalAge: number;\n}", "- think Giraffes");