Skip to content

Commit fec1775

Browse files
committed
Strict null checks
1 parent 10b95a0 commit fec1775

12 files changed

Lines changed: 34 additions & 25 deletions

File tree

src/tsconfig.strictNullChecks.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,16 @@
108108
"./vs/code/electron-browser/issue/issueReporterModel.ts",
109109
"./vs/code/electron-browser/issue/issueReporterPage.ts",
110110
"./vs/code/electron-browser/issue/issueReporterUtil.ts",
111+
"./vs/code/electron-browser/sharedProcess/contrib/contributions.ts",
112+
"./vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner.ts",
113+
"./vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner.ts",
111114
"./vs/code/electron-main/auth.ts",
112115
"./vs/code/electron-main/keyboard.ts",
113116
"./vs/code/electron-main/sharedProcess.ts",
114117
"./vs/code/electron-main/theme.ts",
115118
"./vs/code/node/shellEnv.ts",
116119
"./vs/code/node/wait.ts",
120+
"./vs/code/node/windowsFinder.ts",
117121
"./vs/editor/browser/config/charWidthReader.ts",
118122
"./vs/editor/browser/config/configuration.ts",
119123
"./vs/editor/browser/config/elementSizeObserver.ts",
@@ -331,6 +335,7 @@
331335
"./vs/editor/contrib/referenceSearch/referencesModel.ts",
332336
"./vs/editor/contrib/rename/rename.ts",
333337
"./vs/editor/contrib/rename/renameInputField.ts",
338+
"./vs/editor/contrib/smartSelect/tokenSelectionSupport.ts",
334339
"./vs/editor/contrib/smartSelect/tokenTree.ts",
335340
"./vs/editor/contrib/snippet/snippetParser.ts",
336341
"./vs/editor/contrib/suggest/suggest.ts",
@@ -395,6 +400,7 @@
395400
"./vs/platform/dialogs/node/dialogService.ts",
396401
"./vs/platform/download/common/download.ts",
397402
"./vs/platform/download/node/downloadService.ts",
403+
"./vs/platform/driver/node/driver.ts",
398404
"./vs/platform/editor/common/editor.ts",
399405
"./vs/platform/environment/common/environment.ts",
400406
"./vs/platform/environment/node/argv.ts",
@@ -497,6 +503,7 @@
497503
"./vs/platform/workspace/common/workspace.ts",
498504
"./vs/platform/workspace/test/common/testWorkspace.ts",
499505
"./vs/platform/workspaces/common/workspaces.ts",
506+
"./vs/platform/workspaces/electron-main/workspacesMainService.ts",
500507
"./vs/platform/workspaces/node/workspaces.ts",
501508
"./vs/platform/workspaces/node/workspacesIpc.ts",
502509
"./vs/vscode.d.ts",
@@ -529,6 +536,7 @@
529536
"./vs/workbench/common/theme.ts",
530537
"./vs/workbench/common/viewlet.ts",
531538
"./vs/workbench/common/views.ts",
539+
"./vs/workbench/parts/cli/electron-browser/cli.contribution.ts",
532540
"./vs/workbench/parts/codeEditor/browser/menuPreventer.ts",
533541
"./vs/workbench/parts/codeEditor/browser/simpleEditorOptions.ts",
534542
"./vs/workbench/parts/codeEditor/electron-browser/accessibility.ts",
@@ -549,6 +557,7 @@
549557
"./vs/workbench/parts/emmet/electron-browser/emmetActions.ts",
550558
"./vs/workbench/parts/emmet/test/electron-browser/emmetAction.test.ts",
551559
"./vs/workbench/parts/execution/common/execution.ts",
560+
"./vs/workbench/parts/execution/electron-browser/terminal.ts",
552561
"./vs/workbench/parts/extensions/common/extensionQuery.ts",
553562
"./vs/workbench/parts/extensions/common/extensions.ts",
554563
"./vs/workbench/parts/extensions/common/extensionsFileTemplate.ts",
@@ -593,6 +602,7 @@
593602
"./vs/workbench/parts/terminal/node/terminal.ts",
594603
"./vs/workbench/parts/terminal/node/terminalCommandTracker.ts",
595604
"./vs/workbench/parts/terminal/node/terminalEnvironment.ts",
605+
"./vs/workbench/parts/terminal/node/terminalProcess.ts",
596606
"./vs/workbench/parts/terminal/node/terminalProcessExtHostProxy.ts",
597607
"./vs/workbench/parts/url/electron-browser/url.contribution.ts",
598608
"./vs/workbench/parts/webview/electron-browser/webviewProtocols.ts",

src/vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class LanguagePackCachedDataCleaner {
5050
}
5151

5252
private _manageCachedDataSoon(): void {
53-
let handle = setTimeout(async () => {
53+
let handle: any = setTimeout(async () => {
5454
handle = undefined;
5555
this._logService.info('Starting to clean up unused language packs.');
5656
const maxAge = product.nameLong.indexOf('Insiders') >= 0

src/vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class NodeCachedDataCleaner {
4141
const nodeCachedDataRootDir = dirname(this._environmentService.nodeCachedDataDir);
4242
const nodeCachedDataCurrent = basename(this._environmentService.nodeCachedDataDir);
4343

44-
let handle = setTimeout(() => {
44+
let handle: any = setTimeout(() => {
4545
handle = undefined;
4646

4747
readdir(nodeCachedDataRootDir).then(entries => {

src/vs/code/node/windowsFinder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function findWindowOnFilePath<W extends ISimpleWindow>(windows: W[], fileUri: UR
4545
const workspaceWindows = windows.filter(window => !!window.openedWorkspace);
4646
for (let i = 0; i < workspaceWindows.length; i++) {
4747
const window = workspaceWindows[i];
48-
const resolvedWorkspace = workspaceResolver(window.openedWorkspace);
48+
const resolvedWorkspace = workspaceResolver(window.openedWorkspace!);
4949
if (resolvedWorkspace && resolvedWorkspace.folders.some(folder => isEqualOrParent(fileUri, folder.uri))) {
5050
return window;
5151
}
@@ -54,7 +54,7 @@ function findWindowOnFilePath<W extends ISimpleWindow>(windows: W[], fileUri: UR
5454
// Then go with single folder windows that are parent of the provided file path
5555
const singleFolderWindowsOnFilePath = windows.filter(window => window.openedFolderUri && isEqualOrParent(fileUri, window.openedFolderUri));
5656
if (singleFolderWindowsOnFilePath.length) {
57-
return singleFolderWindowsOnFilePath.sort((a, b) => -(a.openedFolderUri.path.length - b.openedFolderUri.path.length))[0];
57+
return singleFolderWindowsOnFilePath.sort((a, b) => -(a.openedFolderUri!.path.length - b.openedFolderUri!.path.length))[0];
5858
}
5959

6060
return null;
@@ -90,7 +90,7 @@ export function findWindowOnWorkspace<W extends ISimpleWindow>(windows: W[], wor
9090
export function findWindowOnExtensionDevelopmentPath<W extends ISimpleWindow>(windows: W[], extensionDevelopmentPath: string): W | null {
9191
for (const window of windows) {
9292
// match on extension development path. The path can be a path or uri string, using paths.isEqual is not 100% correct but good enough
93-
if (paths.isEqual(window.extensionDevelopmentPath, extensionDevelopmentPath, !platform.isLinux /* ignorecase */)) {
93+
if (window.extensionDevelopmentPath && paths.isEqual(window.extensionDevelopmentPath, extensionDevelopmentPath, !platform.isLinux /* ignorecase */)) {
9494
return window;
9595
}
9696
}

src/vs/editor/contrib/smartSelect/tokenSelectionSupport.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import { URI } from 'vs/base/common/uri';
77
import { Range } from 'vs/editor/common/core/range';
88
import { ITextModel } from 'vs/editor/common/model';
99
import { IModelService } from 'vs/editor/common/services/modelService';
10-
import { Node, build, find } from './tokenTree';
10+
import { build, find } from './tokenTree';
1111
import { Position } from 'vs/editor/common/core/position';
1212

1313
/**
1414
* Interface used to compute a hierachry of logical ranges.
1515
*/
1616
export interface ILogicalSelectionEntry {
17-
type: string;
17+
type?: string;
1818
range: Range;
1919
}
2020

@@ -45,10 +45,9 @@ export class TokenSelectionSupport {
4545
private _doGetRangesToPosition(model: ITextModel, position: Position): Range[] {
4646

4747
let tree = build(model);
48-
let node: Node;
49-
let lastRange: Range;
48+
let lastRange: Range | undefined;
5049

51-
node = find(tree, position);
50+
let node = find(tree, position);
5251
let ranges: Range[] = [];
5352
while (node) {
5453
if (!lastRange || !Range.equalsRange(lastRange, node.range)) {

src/vs/platform/driver/node/driver.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export class DriverChannel implements IDriverChannel {
8686
case 'writeInTerminal': return this.driver.writeInTerminal(arg[0], arg[1], arg[2]);
8787
}
8888

89-
return undefined;
89+
throw new Error(`Call not found: ${command}`);
9090
}
9191
}
9292

@@ -178,7 +178,7 @@ export class WindowDriverRegistryChannel implements IWindowDriverRegistryChannel
178178
case 'reloadWindowDriver': return this.registry.reloadWindowDriver(arg);
179179
}
180180

181-
return undefined;
181+
throw new Error(`Call not found: ${command}`);
182182
}
183183
}
184184

@@ -243,7 +243,7 @@ export class WindowDriverChannel implements IWindowDriverChannel {
243243
case 'writeInTerminal': return this.driver.writeInTerminal(arg[0], arg[1]);
244244
}
245245

246-
return undefined;
246+
throw new Error(`Call not found: ${command}`);
247247
}
248248
}
249249

src/vs/platform/workspaces/common/workspaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ export interface IWorkspacesMainService extends IWorkspacesService {
8585

8686
createWorkspaceSync(folders?: IWorkspaceFolderCreationData[]): IWorkspaceIdentifier;
8787

88-
resolveWorkspace(path: string): TPromise<IResolvedWorkspace>;
88+
resolveWorkspace(path: string): TPromise<IResolvedWorkspace | null>;
8989

90-
resolveWorkspaceSync(path: string): IResolvedWorkspace;
90+
resolveWorkspaceSync(path: string): IResolvedWorkspace | null;
9191

9292
isUntitledWorkspace(workspace: IWorkspaceIdentifier): boolean;
9393

src/vs/platform/workspaces/electron-main/workspacesMainService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain
5050
this.workspacesHome = environmentService.workspacesHome;
5151
}
5252

53-
resolveWorkspace(path: string): TPromise<IResolvedWorkspace> {
53+
resolveWorkspace(path: string): TPromise<IResolvedWorkspace | null> {
5454
if (!this.isWorkspacePath(path)) {
5555
return TPromise.as(null); // does not look like a valid workspace config file
5656
}
5757

5858
return readFile(path, 'utf8').then(contents => this.doResolveWorkspace(path, contents));
5959
}
6060

61-
resolveWorkspaceSync(path: string): IResolvedWorkspace {
61+
resolveWorkspaceSync(path: string): IResolvedWorkspace | null {
6262
if (!this.isWorkspacePath(path)) {
6363
return null; // does not look like a valid workspace config file
6464
}
@@ -77,7 +77,7 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain
7777
return this.isInsideWorkspacesHome(path) || extname(path) === `.${WORKSPACE_EXTENSION}`;
7878
}
7979

80-
private doResolveWorkspace(path: string, contents: string): IResolvedWorkspace {
80+
private doResolveWorkspace(path: string, contents: string): IResolvedWorkspace | null {
8181
try {
8282
const workspace = this.doParseStoredWorkspace(path, contents);
8383

src/vs/workbench/parts/cli/electron-browser/cli.contribution.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Severity from 'vs/base/common/severity';
2020
import { ILogService } from 'vs/platform/log/common/log';
2121
import { getPathFromAmdModule } from 'vs/base/common/amd';
2222

23-
function ignore<T>(code: string, value: T | null = null): (err: any) => Promise<T> {
23+
function ignore<T>(code: string, value: T): (err: any) => Promise<T> {
2424
return err => err.code === code ? Promise.resolve<T>(value) : Promise.reject<T>(err);
2525
}
2626

@@ -70,7 +70,7 @@ class InstallAction extends Action {
7070
return Promise.resolve(null);
7171
} else {
7272
return pfs.unlink(this.target)
73-
.then(null, ignore('ENOENT'))
73+
.then(null, ignore('ENOENT', null))
7474
.then(() => pfs.symlink(getSource(), this.target))
7575
.then(null, err => {
7676
if (err.code === 'EACCES' || err.code === 'ENOENT') {
@@ -147,7 +147,7 @@ class UninstallAction extends Action {
147147

148148
const uninstall = () => {
149149
return pfs.unlink(this.target)
150-
.then(null, ignore('ENOENT'));
150+
.then(null, ignore('ENOENT', null));
151151
};
152152

153153
return uninstall().then(null, err => {

src/vs/workbench/parts/execution/electron-browser/terminal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export function getDefaultTerminalLinuxReady(): Promise<string> {
1111
if (!_DEFAULT_TERMINAL_LINUX_READY) {
1212
_DEFAULT_TERMINAL_LINUX_READY = new Promise<string>(c => {
1313
if (env.isLinux) {
14-
Promise.all([pfs.exists('/etc/debian_version'), process.lazyEnv]).then(([isDebian]) => {
14+
Promise.all([pfs.exists('/etc/debian_version'), process.lazyEnv || Promise.resolve(void 0)]).then(([isDebian]) => {
1515
if (isDebian) {
1616
c('x-terminal-emulator');
1717
} else if (process.env.DESKTOP_SESSION === 'gnome' || process.env.DESKTOP_SESSION === 'gnome-classic') {

0 commit comments

Comments
 (0)