Skip to content

Commit b72fede

Browse files
committed
strict null checks (microsoft#60565)
1 parent 655682c commit b72fede

23 files changed

Lines changed: 78 additions & 56 deletions

File tree

src/tsconfig.strictNullChecks.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@
271271
"./vs/editor/contrib/caretOperations/moveCaretCommand.ts",
272272
"./vs/editor/contrib/caretOperations/transpose.ts",
273273
"./vs/editor/contrib/clipboard/clipboard.ts",
274+
"./vs/editor/contrib/codeAction/codeAction.ts",
274275
"./vs/editor/contrib/codeAction/codeActionTrigger.ts",
275276
"./vs/editor/contrib/colorPicker/color.ts",
276277
"./vs/editor/contrib/colorPicker/colorPickerModel.ts",
@@ -300,6 +301,7 @@
300301
"./vs/editor/contrib/folding/test/foldingModel.test.ts",
301302
"./vs/editor/contrib/fontZoom/fontZoom.ts",
302303
"./vs/editor/contrib/goToDefinition/clickLinkGesture.ts",
304+
"./vs/editor/contrib/goToDefinition/goToDefinition.ts",
303305
"./vs/editor/contrib/hover/getHover.ts",
304306
"./vs/editor/contrib/hover/hoverOperation.ts",
305307
"./vs/editor/contrib/hover/hoverWidgets.ts",
@@ -310,6 +312,8 @@
310312
"./vs/editor/contrib/linesOperations/sortLinesCommand.ts",
311313
"./vs/editor/contrib/links/getLinks.ts",
312314
"./vs/editor/contrib/links/links.ts",
315+
"./vs/editor/contrib/message/messageController.ts",
316+
"./vs/editor/contrib/parameterHints/provideSignatureHelp.ts",
313317
"./vs/editor/contrib/quickOpen/quickOpen.ts",
314318
"./vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.ts",
315319
"./vs/editor/contrib/wordHighlighter/wordHighlighter.ts",
@@ -327,12 +331,16 @@
327331
"./vs/editor/standalone/common/monarch/monarchTypes.ts",
328332
"./vs/editor/standalone/common/standaloneThemeService.ts",
329333
"./vs/editor/standalone/common/themes.ts",
334+
"./vs/editor/test/browser/controller/imeTester.ts",
335+
"./vs/editor/test/browser/editorTestServices.ts",
336+
"./vs/editor/test/browser/view/minimapFontCreator.ts",
330337
"./vs/editor/test/common/commentMode.ts",
331338
"./vs/editor/test/common/core/viewLineToken.ts",
332339
"./vs/editor/test/common/editorTestUtils.ts",
333340
"./vs/editor/test/common/mocks/mockMode.ts",
334341
"./vs/editor/test/common/mocks/testConfiguration.ts",
335342
"./vs/editor/test/common/model/benchmark/benchmarkUtils.ts",
343+
"./vs/editor/test/common/model/editableTextModelTestUtils.ts",
336344
"./vs/editor/test/common/modes/supports/javascriptOnEnterRules.ts",
337345
"./vs/editor/test/common/modesTestUtils.ts",
338346
"./vs/editor/test/common/view/minimapCharRendererFactory.ts",
@@ -465,6 +473,7 @@
465473
"./vs/workbench/services/keybinding/common/macLinuxFallbackKeyboardMapper.ts",
466474
"./vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts",
467475
"./vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts",
476+
"./vs/workbench/services/mode/common/workbenchModeService.ts",
468477
"./vs/workbench/services/panel/common/panelService.ts",
469478
"./vs/workbench/services/scm/common/scm.ts",
470479
"./vs/workbench/services/scm/common/scmService.ts",

src/vs/editor/browser/editorBrowser.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ export interface IMouseTarget {
299299
* A mouse event originating from the editor.
300300
*/
301301
export interface IEditorMouseEvent {
302+
readonly event: IMouseEvent;
303+
readonly target: IMouseTarget;
304+
}
305+
export interface IPartialEditorMouseEvent {
302306
readonly event: IMouseEvent;
303307
readonly target: IMouseTarget | null;
304308
}
@@ -441,7 +445,7 @@ export interface ICodeEditor extends editorCommon.IEditor {
441445
* @internal
442446
* @event
443447
*/
444-
onMouseDrop(listener: (e: IEditorMouseEvent) => void): IDisposable;
448+
onMouseDrop(listener: (e: IPartialEditorMouseEvent) => void): IDisposable;
445449
/**
446450
* An event emitted on a "contextmenu".
447451
* @event
@@ -456,7 +460,7 @@ export interface ICodeEditor extends editorCommon.IEditor {
456460
* An event emitted on a "mouseleave".
457461
* @event
458462
*/
459-
onMouseLeave(listener: (e: IEditorMouseEvent) => void): IDisposable;
463+
onMouseLeave(listener: (e: IPartialEditorMouseEvent) => void): IDisposable;
460464
/**
461465
* An event emitted on a "keyup".
462466
* @event

src/vs/editor/browser/view/viewController.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
77
import { Position } from 'vs/editor/common/core/position';
88
import { Selection } from 'vs/editor/common/core/selection';
9-
import { IEditorMouseEvent } from 'vs/editor/browser/editorBrowser';
9+
import { IEditorMouseEvent, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser';
1010
import { IViewModel } from 'vs/editor/common/viewModel/viewModel';
1111
import { ViewOutgoingEvents } from 'vs/editor/browser/view/viewOutgoingEvents';
1212
import { CoreNavigationCommands, CoreEditorCommand } from 'vs/editor/browser/controller/coreCommands';
@@ -293,7 +293,7 @@ export class ViewController {
293293
this.outgoingEvents.emitMouseMove(e);
294294
}
295295

296-
public emitMouseLeave(e: IEditorMouseEvent): void {
296+
public emitMouseLeave(e: IPartialEditorMouseEvent): void {
297297
this.outgoingEvents.emitMouseLeave(e);
298298
}
299299

@@ -309,7 +309,7 @@ export class ViewController {
309309
this.outgoingEvents.emitMouseDrag(e);
310310
}
311311

312-
public emitMouseDrop(e: IEditorMouseEvent): void {
312+
public emitMouseDrop(e: IPartialEditorMouseEvent): void {
313313
this.outgoingEvents.emitMouseDrop(e);
314314
}
315315
}

src/vs/editor/browser/view/viewOutgoingEvents.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Position } from 'vs/editor/common/core/position';
99
import { Range } from 'vs/editor/common/core/range';
1010
import { IViewModel } from 'vs/editor/common/viewModel/viewModel';
1111
import { IScrollEvent } from 'vs/editor/common/editorCommon';
12-
import { IEditorMouseEvent, IMouseTarget, MouseTargetType } from 'vs/editor/browser/editorBrowser';
12+
import { IEditorMouseEvent, IMouseTarget, MouseTargetType, IPartialEditorMouseEvent } from 'vs/editor/browser/editorBrowser';
1313
import { MouseTarget } from 'vs/editor/browser/controller/mouseTarget';
1414
import * as viewEvents from 'vs/editor/common/view/viewEvents';
1515

@@ -26,11 +26,11 @@ export class ViewOutgoingEvents extends Disposable {
2626
public onKeyUp: EventCallback<IKeyboardEvent> | null = null;
2727
public onContextMenu: EventCallback<IEditorMouseEvent> | null = null;
2828
public onMouseMove: EventCallback<IEditorMouseEvent> | null = null;
29-
public onMouseLeave: EventCallback<IEditorMouseEvent> | null = null;
29+
public onMouseLeave: EventCallback<IPartialEditorMouseEvent> | null = null;
3030
public onMouseUp: EventCallback<IEditorMouseEvent> | null = null;
3131
public onMouseDown: EventCallback<IEditorMouseEvent> | null = null;
3232
public onMouseDrag: EventCallback<IEditorMouseEvent> | null = null;
33-
public onMouseDrop: EventCallback<IEditorMouseEvent> | null = null;
33+
public onMouseDrop: EventCallback<IPartialEditorMouseEvent> | null = null;
3434

3535
private _viewModel: IViewModel;
3636

@@ -81,7 +81,7 @@ export class ViewOutgoingEvents extends Disposable {
8181
}
8282
}
8383

84-
public emitMouseLeave(e: IEditorMouseEvent): void {
84+
public emitMouseLeave(e: IPartialEditorMouseEvent): void {
8585
if (this.onMouseLeave) {
8686
this.onMouseLeave(this._convertViewToModelMouseEvent(e));
8787
}
@@ -105,13 +105,15 @@ export class ViewOutgoingEvents extends Disposable {
105105
}
106106
}
107107

108-
public emitMouseDrop(e: IEditorMouseEvent): void {
108+
public emitMouseDrop(e: IPartialEditorMouseEvent): void {
109109
if (this.onMouseDrop) {
110110
this.onMouseDrop(this._convertViewToModelMouseEvent(e));
111111
}
112112
}
113113

114-
private _convertViewToModelMouseEvent(e: IEditorMouseEvent): IEditorMouseEvent {
114+
private _convertViewToModelMouseEvent(e: IEditorMouseEvent): IEditorMouseEvent;
115+
private _convertViewToModelMouseEvent(e: IPartialEditorMouseEvent): IPartialEditorMouseEvent;
116+
private _convertViewToModelMouseEvent(e: IEditorMouseEvent | IPartialEditorMouseEvent): IEditorMouseEvent | IPartialEditorMouseEvent {
115117
if (e.target) {
116118
return {
117119
event: e.event,

src/vs/editor/browser/widget/codeEditorWidget.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,17 +173,17 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
173173
private readonly _onMouseDrag: Emitter<editorBrowser.IEditorMouseEvent> = this._register(new Emitter<editorBrowser.IEditorMouseEvent>());
174174
public readonly onMouseDrag: Event<editorBrowser.IEditorMouseEvent> = this._onMouseDrag.event;
175175

176-
private readonly _onMouseDrop: Emitter<editorBrowser.IEditorMouseEvent> = this._register(new Emitter<editorBrowser.IEditorMouseEvent>());
177-
public readonly onMouseDrop: Event<editorBrowser.IEditorMouseEvent> = this._onMouseDrop.event;
176+
private readonly _onMouseDrop: Emitter<editorBrowser.IPartialEditorMouseEvent> = this._register(new Emitter<editorBrowser.IPartialEditorMouseEvent>());
177+
public readonly onMouseDrop: Event<editorBrowser.IPartialEditorMouseEvent> = this._onMouseDrop.event;
178178

179179
private readonly _onContextMenu: Emitter<editorBrowser.IEditorMouseEvent> = this._register(new Emitter<editorBrowser.IEditorMouseEvent>());
180180
public readonly onContextMenu: Event<editorBrowser.IEditorMouseEvent> = this._onContextMenu.event;
181181

182182
private readonly _onMouseMove: Emitter<editorBrowser.IEditorMouseEvent> = this._register(new Emitter<editorBrowser.IEditorMouseEvent>());
183183
public readonly onMouseMove: Event<editorBrowser.IEditorMouseEvent> = this._onMouseMove.event;
184184

185-
private readonly _onMouseLeave: Emitter<editorBrowser.IEditorMouseEvent> = this._register(new Emitter<editorBrowser.IEditorMouseEvent>());
186-
public readonly onMouseLeave: Event<editorBrowser.IEditorMouseEvent> = this._onMouseLeave.event;
185+
private readonly _onMouseLeave: Emitter<editorBrowser.IPartialEditorMouseEvent> = this._register(new Emitter<editorBrowser.IPartialEditorMouseEvent>());
186+
public readonly onMouseLeave: Event<editorBrowser.IPartialEditorMouseEvent> = this._onMouseLeave.event;
187187

188188
private readonly _onKeyUp: Emitter<IKeyboardEvent> = this._register(new Emitter<IKeyboardEvent>());
189189
public readonly onKeyUp: Event<IKeyboardEvent> = this._onKeyUp.event;

src/vs/editor/contrib/codeAction/codeAction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function codeActionsComparator(a: CodeAction, b: CodeAction): number {
7070
const bHasDiags = !isFalsyOrEmpty(b.diagnostics);
7171
if (aHasDiags) {
7272
if (bHasDiags) {
73-
return a.diagnostics[0].message.localeCompare(b.diagnostics[0].message);
73+
return a.diagnostics![0].message.localeCompare(b.diagnostics![0].message);
7474
} else {
7575
return -1;
7676
}

src/vs/editor/contrib/goToDefinition/clickLinkGesture.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function hasModifier(e: { ctrlKey: boolean; shiftKey: boolean; altKey: boolean;
2222
*/
2323
export class ClickLinkMouseEvent {
2424

25-
public readonly target: IMouseTarget | null;
25+
public readonly target: IMouseTarget;
2626
public readonly hasTriggerModifier: boolean;
2727
public readonly hasSideBySideModifier: boolean;
2828
public readonly isNoneOrSingleMouseDown: boolean;

src/vs/editor/contrib/goToDefinition/goToDefinition.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ function getDefinitions<T>(
1717
model: ITextModel,
1818
position: Position,
1919
registry: LanguageFeatureRegistry<T>,
20-
provide: (provider: T, model: ITextModel, position: Position) => DefinitionLink | DefinitionLink[] | Thenable<DefinitionLink | DefinitionLink[]>
20+
provide: (provider: T, model: ITextModel, position: Position) => DefinitionLink | DefinitionLink[] | null | undefined | Thenable<DefinitionLink | DefinitionLink[] | null | undefined>
2121
): Thenable<DefinitionLink[]> {
2222
const provider = registry.ordered(model);
2323

2424
// get results
25-
const promises = provider.map((provider): Thenable<DefinitionLink | DefinitionLink[]> => {
25+
const promises = provider.map((provider): Thenable<DefinitionLink | DefinitionLink[] | null | undefined> => {
2626
return Promise.resolve(provide(provider, model, position)).then(undefined, err => {
2727
onUnexpectedExternalError(err);
2828
return null;

src/vs/editor/contrib/links/links.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ class LinkDetector implements editorCommon.IEditorContribution {
289289
const useMetaKey = (this.editor.getConfiguration().multiCursorModifier === 'altKey');
290290
if (this.isEnabled(mouseEvent, withKey)) {
291291
this.cleanUpActiveLinkDecoration(); // always remove previous link decoration as their can only be one
292-
const occurrence = this.getLinkOccurrence(mouseEvent.target!.position);
292+
const occurrence = this.getLinkOccurrence(mouseEvent.target.position);
293293
if (occurrence) {
294294
this.editor.changeDecorations((changeAccessor) => {
295295
occurrence.activate(changeAccessor, useMetaKey);
@@ -319,7 +319,7 @@ class LinkDetector implements editorCommon.IEditorContribution {
319319
if (!this.isEnabled(mouseEvent)) {
320320
return;
321321
}
322-
const occurrence = this.getLinkOccurrence(mouseEvent.target!.position);
322+
const occurrence = this.getLinkOccurrence(mouseEvent.target.position);
323323
if (!occurrence) {
324324
return;
325325
}
@@ -374,7 +374,7 @@ class LinkDetector implements editorCommon.IEditorContribution {
374374

375375
private isEnabled(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent | null): boolean {
376376
return Boolean(
377-
(mouseEvent.target && mouseEvent.target.type === MouseTargetType.CONTENT_TEXT)
377+
(mouseEvent.target.type === MouseTargetType.CONTENT_TEXT)
378378
&& (mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey))
379379
);
380380
}

src/vs/editor/contrib/message/messageController.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ export class MessageController extends Disposable implements editorCommon.IEdito
100100
}
101101

102102
private _onDidAttemptReadOnlyEdit(): void {
103-
this.showMessage(nls.localize('editor.readonly', "Cannot edit in read-only editor"), this._editor.getPosition());
103+
if (this._editor.hasModel()) {
104+
this.showMessage(nls.localize('editor.readonly', "Cannot edit in read-only editor"), this._editor.getPosition());
105+
}
104106
}
105107
}
106108

0 commit comments

Comments
 (0)