diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index bc8cf4fec68..a8c9d8f9849 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -434,6 +434,7 @@ "./vs/workbench/api/node/extHostTypes.ts", "./vs/workbench/api/node/extHostUrls.ts", "./vs/workbench/api/node/extHostWindow.ts", + "./vs/workbench/api/node/extHostWorkspace.ts", "./vs/workbench/api/shared/editor.ts", "./vs/workbench/api/shared/tasks.ts", "./vs/workbench/browser/actions.ts", diff --git a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts index feaf90bb3fd..81924fb4f52 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts @@ -119,11 +119,11 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { // --- search --- - $startFileSearch(includePattern: string, _includeFolder: UriComponents, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise | undefined { + $startFileSearch(includePattern: string, _includeFolder: UriComponents | undefined, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise { const includeFolder = URI.revive(_includeFolder); const workspace = this._contextService.getWorkspace(); if (!workspace.folders.length) { - return undefined; + return Promise.resolve(undefined); } const query = this._queryBuilder.file( diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index c64f2d0d430..a366eb27bda 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -509,7 +509,7 @@ export interface ExtHostUrlsShape { } export interface MainThreadWorkspaceShape extends IDisposable { - $startFileSearch(includePattern: string | undefined, includeFolder: URI, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise | undefined; + $startFileSearch(includePattern: string | undefined, includeFolder: URI | undefined, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise; $startTextSearch(query: IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise; $checkExists(includes: string[], token: CancellationToken): Promise; $saveAll(includeUntitled?: boolean): Promise; diff --git a/src/vs/workbench/api/node/extHostWorkspace.ts b/src/vs/workbench/api/node/extHostWorkspace.ts index 202b9b6e84c..ba9ba71eaca 100644 --- a/src/vs/workbench/api/node/extHostWorkspace.ts +++ b/src/vs/workbench/api/node/extHostWorkspace.ts @@ -69,7 +69,7 @@ class ExtHostWorkspaceImpl extends Workspace { // data and update their properties. It could be that an extension stored them // for later use and we want to keep them "live" if they are still present. const oldWorkspace = previousConfirmedWorkspace; - if (oldWorkspace) { + if (previousConfirmedWorkspace) { folders.forEach((folderData, index) => { const folderUri = URI.revive(folderData.uri); const existingFolder = ExtHostWorkspaceImpl._findFolder(previousUnconfirmedWorkspace || previousConfirmedWorkspace, folderUri); @@ -128,15 +128,15 @@ class ExtHostWorkspaceImpl extends Workspace { return this._workspaceFolders.slice(0); } - getWorkspaceFolder(uri: URI, resolveParent?: boolean): vscode.WorkspaceFolder { + getWorkspaceFolder(uri: URI, resolveParent?: boolean): vscode.WorkspaceFolder | undefined { if (resolveParent && this._structure.get(uri.toString())) { // `uri` is a workspace folder so we check for its parent - uri = dirname(uri); + uri = dirname(uri)!; } return this._structure.findSubstr(uri.toString()); } - resolveWorkspaceFolder(uri: URI): vscode.WorkspaceFolder { + resolveWorkspaceFolder(uri: URI): vscode.WorkspaceFolder | undefined { return this._structure.get(uri.toString()); } } @@ -147,7 +147,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape { private readonly _logService: ILogService; private readonly _requestIdProvider: Counter; private readonly _barrier: Barrier; - private _actual: ExtHostWorkspaceProvider; + private _actual: ExtHostWorkspaceProvider | null; constructor( mainContext: IMainContext, @@ -162,7 +162,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape { } public getWorkspaceProvider(): Promise { - return this._barrier.wait().then(_ => this._actual); + return this._barrier.wait().then(_ => this._actual!); } $initializeWorkspace(data: IWorkspaceData): void { @@ -187,7 +187,7 @@ export class ExtHostWorkspaceProvider { private readonly _onDidChangeWorkspace = new Emitter(); - private _confirmedWorkspace: ExtHostWorkspaceImpl; + private _confirmedWorkspace?: ExtHostWorkspaceImpl; private _unconfirmedWorkspace?: ExtHostWorkspaceImpl; private readonly _proxy: MainThreadWorkspaceShape; @@ -205,12 +205,12 @@ export class ExtHostWorkspaceProvider { ) { this._proxy = mainContext.getProxy(MainContext.MainThreadWorkspace); this._messageService = mainContext.getProxy(MainContext.MainThreadMessageService); - this._confirmedWorkspace = ExtHostWorkspaceImpl.toExtHostWorkspace(data).workspace; + this._confirmedWorkspace = ExtHostWorkspaceImpl.toExtHostWorkspace(data).workspace || undefined; } // --- workspace --- - get workspace(): Workspace { + get workspace(): Workspace | undefined { return this._actualWorkspace; } @@ -218,7 +218,7 @@ export class ExtHostWorkspaceProvider { return this._actualWorkspace ? this._actualWorkspace.name : undefined; } - private get _actualWorkspace(): ExtHostWorkspaceImpl { + private get _actualWorkspace(): ExtHostWorkspaceImpl | undefined { return this._unconfirmedWorkspace || this._confirmedWorkspace; } @@ -258,7 +258,7 @@ export class ExtHostWorkspaceProvider { // Simulate the updateWorkspaceFolders method on our data to do more validation const newWorkspaceFolders = currentWorkspaceFolders.slice(0); - newWorkspaceFolders.splice(index, deleteCount, ...validatedDistinctWorkspaceFoldersToAdd.map(f => ({ uri: f.uri, name: f.name || basenameOrAuthority(f.uri), index: undefined }))); + newWorkspaceFolders.splice(index, deleteCount, ...validatedDistinctWorkspaceFoldersToAdd.map(f => ({ uri: f.uri, name: f.name || basenameOrAuthority(f.uri), index: undefined! /* fixed later */ }))); for (let i = 0; i < newWorkspaceFolders.length; i++) { const folder = newWorkspaceFolders[i]; @@ -293,7 +293,7 @@ export class ExtHostWorkspaceProvider { return true; } - getWorkspaceFolder(uri: vscode.Uri, resolveParent?: boolean): vscode.WorkspaceFolder { + getWorkspaceFolder(uri: vscode.Uri, resolveParent?: boolean): vscode.WorkspaceFolder | undefined { if (!this._actualWorkspace) { return undefined; } @@ -346,7 +346,7 @@ export class ExtHostWorkspaceProvider { return path; } - if (typeof includeWorkspace === 'undefined') { + if (typeof includeWorkspace === 'undefined' && this._actualWorkspace) { includeWorkspace = this._actualWorkspace.folders.length > 1; } @@ -367,7 +367,7 @@ export class ExtHostWorkspaceProvider { name: this._actualWorkspace.name, configuration: this._actualWorkspace.configuration, folders - } as IWorkspaceData, this._actualWorkspace).workspace; + } as IWorkspaceData, this._actualWorkspace).workspace || undefined; } } @@ -377,7 +377,7 @@ export class ExtHostWorkspaceProvider { // Update our workspace object. We have a confirmed workspace, so we drop our // unconfirmed workspace. - this._confirmedWorkspace = workspace; + this._confirmedWorkspace = workspace || undefined; this._unconfirmedWorkspace = undefined; // Events @@ -405,7 +405,7 @@ export class ExtHostWorkspaceProvider { } } - let excludePatternOrDisregardExcludes: string | false | undefined; + let excludePatternOrDisregardExcludes: string | false = false; if (exclude === null) { excludePatternOrDisregardExcludes = false; } else if (exclude) {