Skip to content

Commit 1212eb5

Browse files
alexdimasandy081
authored andcommitted
Finish strict null checks for vs/editor (microsoft#60565)
1 parent d89bcb1 commit 1212eb5

File tree

5 files changed

+64
-219
lines changed

5 files changed

+64
-219
lines changed

Diff for: src/tsconfig.strictNullChecks.json

+1-181
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,7 @@
88
"./typings",
99
"./vs/base/**/*.ts",
1010
"./vs/code/**/*.ts",
11-
"./vs/editor/browser/**/*.ts",
12-
"./vs/editor/common/**/*.ts",
13-
"./vs/editor/contrib/codeAction/**/*.ts",
14-
"./vs/editor/contrib/format/**/*.ts",
15-
"./vs/editor/contrib/gotoError/**/*.ts",
16-
"./vs/editor/contrib/inPlaceReplace/**/*.ts",
17-
"./vs/editor/contrib/smartSelect/**/*.ts",
18-
"./vs/editor/contrib/snippet/**/*.ts",
19-
"./vs/editor/contrib/suggest/**/*.ts",
20-
"./vs/editor/contrib/documentSymbols/**/*.ts",
21-
"./vs/editor/test/**/*.ts",
11+
"./vs/editor/**/*.ts",
2212
"./vs/workbench/browser/parts/notifications/**/*",
2313
"./vs/workbench/browser/parts/quickinput/**/*",
2414
"./vs/workbench/electron-browser/actions/**/*",
@@ -32,176 +22,6 @@
3222
"./vs/workbench/services/themes/**/*.ts"
3323
],
3424
"files": [
35-
"./vs/editor/contrib/bracketMatching/bracketMatching.ts",
36-
"./vs/editor/contrib/bracketMatching/test/bracketMatching.test.ts",
37-
"./vs/editor/contrib/caretOperations/caretOperations.ts",
38-
"./vs/editor/contrib/caretOperations/moveCaretCommand.ts",
39-
"./vs/editor/contrib/caretOperations/test/moveCarretCommand.test.ts",
40-
"./vs/editor/contrib/caretOperations/transpose.ts",
41-
"./vs/editor/contrib/clipboard/clipboard.ts",
42-
"./vs/editor/contrib/codelens/codelens.ts",
43-
"./vs/editor/contrib/codelens/codelensController.ts",
44-
"./vs/editor/contrib/codelens/codelensWidget.ts",
45-
"./vs/editor/contrib/colorPicker/color.ts",
46-
"./vs/editor/contrib/colorPicker/colorDetector.ts",
47-
"./vs/editor/contrib/colorPicker/colorPickerModel.ts",
48-
"./vs/editor/contrib/colorPicker/colorPickerWidget.ts",
49-
"./vs/editor/contrib/comment/blockCommentCommand.ts",
50-
"./vs/editor/contrib/comment/comment.ts",
51-
"./vs/editor/contrib/comment/lineCommentCommand.ts",
52-
"./vs/editor/contrib/comment/test/blockCommentCommand.test.ts",
53-
"./vs/editor/contrib/comment/test/lineCommentCommand.test.ts",
54-
"./vs/editor/contrib/contextmenu/contextmenu.ts",
55-
"./vs/editor/contrib/cursorUndo/cursorUndo.ts",
56-
"./vs/editor/contrib/dnd/dnd.ts",
57-
"./vs/editor/contrib/dnd/dragAndDropCommand.ts",
58-
"./vs/editor/contrib/find/findController.ts",
59-
"./vs/editor/contrib/find/findDecorations.ts",
60-
"./vs/editor/contrib/find/findModel.ts",
61-
"./vs/editor/contrib/find/findOptionsWidget.ts",
62-
"./vs/editor/contrib/find/findState.ts",
63-
"./vs/editor/contrib/find/findWidget.ts",
64-
"./vs/editor/contrib/find/replaceAllCommand.ts",
65-
"./vs/editor/contrib/find/replacePattern.ts",
66-
"./vs/editor/contrib/find/simpleFindWidget.ts",
67-
"./vs/editor/contrib/find/test/find.test.ts",
68-
"./vs/editor/contrib/find/test/findController.test.ts",
69-
"./vs/editor/contrib/find/test/findModel.test.ts",
70-
"./vs/editor/contrib/find/test/replacePattern.test.ts",
71-
"./vs/editor/contrib/folding/folding.ts",
72-
"./vs/editor/contrib/folding/foldingDecorations.ts",
73-
"./vs/editor/contrib/folding/foldingModel.ts",
74-
"./vs/editor/contrib/folding/foldingRanges.ts",
75-
"./vs/editor/contrib/folding/hiddenRangeModel.ts",
76-
"./vs/editor/contrib/folding/indentRangeProvider.ts",
77-
"./vs/editor/contrib/folding/intializingRangeProvider.ts",
78-
"./vs/editor/contrib/folding/syntaxRangeProvider.ts",
79-
"./vs/editor/contrib/folding/test/foldingModel.test.ts",
80-
"./vs/editor/contrib/folding/test/foldingRanges.test.ts",
81-
"./vs/editor/contrib/folding/test/hiddenRangeModel.test.ts",
82-
"./vs/editor/contrib/folding/test/indentFold.test.ts",
83-
"./vs/editor/contrib/folding/test/indentRangeProvider.test.ts",
84-
"./vs/editor/contrib/folding/test/syntaxFold.test.ts",
85-
"./vs/editor/contrib/fontZoom/fontZoom.ts",
86-
"./vs/editor/contrib/goToDefinition/clickLinkGesture.ts",
87-
"./vs/editor/contrib/goToDefinition/goToDefinition.ts",
88-
"./vs/editor/contrib/hover/getHover.ts",
89-
"./vs/editor/contrib/hover/hover.ts",
90-
"./vs/editor/contrib/hover/hoverOperation.ts",
91-
"./vs/editor/contrib/hover/hoverWidgets.ts",
92-
"./vs/editor/contrib/hover/modesContentHover.ts",
93-
"./vs/editor/contrib/hover/modesGlyphHover.ts",
94-
"./vs/editor/contrib/indentation/indentUtils.ts",
95-
"./vs/editor/contrib/indentation/indentation.ts",
96-
"./vs/editor/contrib/indentation/test/indentation.test.ts",
97-
"./vs/editor/contrib/linesOperations/copyLinesCommand.ts",
98-
"./vs/editor/contrib/linesOperations/linesOperations.ts",
99-
"./vs/editor/contrib/linesOperations/moveLinesCommand.ts",
100-
"./vs/editor/contrib/linesOperations/sortLinesCommand.ts",
101-
"./vs/editor/contrib/linesOperations/test/copyLinesCommand.test.ts",
102-
"./vs/editor/contrib/linesOperations/test/linesOperations.test.ts",
103-
"./vs/editor/contrib/linesOperations/test/moveLinesCommand.test.ts",
104-
"./vs/editor/contrib/linesOperations/test/sortLinesCommand.test.ts",
105-
"./vs/editor/contrib/links/getLinks.ts",
106-
"./vs/editor/contrib/links/links.ts",
107-
"./vs/editor/contrib/markdown/markdownRenderer.ts",
108-
"./vs/editor/contrib/message/messageController.ts",
109-
"./vs/editor/contrib/multicursor/multicursor.ts",
110-
"./vs/editor/contrib/multicursor/test/multicursor.test.ts",
111-
"./vs/editor/contrib/parameterHints/parameterHints.ts",
112-
"./vs/editor/contrib/parameterHints/parameterHintsModel.ts",
113-
"./vs/editor/contrib/parameterHints/parameterHintsWidget.ts",
114-
"./vs/editor/contrib/parameterHints/provideSignatureHelp.ts",
115-
"./vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts",
116-
"./vs/editor/contrib/quickOpen/quickOpen.ts",
117-
"./vs/editor/contrib/referenceSearch/peekViewWidget.ts",
118-
"./vs/editor/contrib/referenceSearch/referencesModel.ts",
119-
"./vs/editor/contrib/referenceSearch/referencesTree.ts",
120-
"./vs/editor/contrib/referenceSearch/referencesWidget.ts",
121-
"./vs/editor/contrib/referenceSearch/test/referencesModel.test.ts",
122-
"./vs/editor/contrib/rename/rename.ts",
123-
"./vs/editor/contrib/rename/renameInputField.ts",
124-
"./vs/editor/contrib/suggest/test/suggestMemory.test.ts",
125-
"./vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.ts",
126-
"./vs/editor/contrib/tokenization/tokenization.ts",
127-
"./vs/editor/contrib/wordHighlighter/wordHighlighter.ts",
128-
"./vs/editor/contrib/wordOperations/test/wordOperations.test.ts",
129-
"./vs/editor/contrib/wordOperations/test/wordTestUtils.ts",
130-
"./vs/editor/contrib/wordOperations/wordOperations.ts",
131-
"./vs/editor/contrib/wordPartOperations/test/wordPartOperations.test.ts",
132-
"./vs/editor/contrib/wordPartOperations/wordPartOperations.ts",
133-
"./vs/editor/contrib/zoneWidget/zoneWidget.ts",
134-
"./vs/editor/editor.api.ts",
135-
"./vs/editor/editor.worker.ts",
136-
"./vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts",
137-
"./vs/editor/standalone/browser/colorizer.ts",
138-
"./vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts",
139-
"./vs/editor/standalone/browser/inspectTokens/inspectTokens.ts",
140-
"./vs/editor/standalone/browser/quickOpen/editorQuickOpen.ts",
141-
"./vs/editor/standalone/browser/quickOpen/gotoLine.ts",
142-
"./vs/editor/standalone/browser/quickOpen/quickCommand.ts",
143-
"./vs/editor/standalone/browser/quickOpen/quickOpenEditorWidget.ts",
144-
"./vs/editor/standalone/browser/quickOpen/quickOutline.ts",
145-
"./vs/editor/standalone/browser/simpleServices.ts",
146-
"./vs/editor/standalone/browser/standaloneCodeEditor.ts",
147-
"./vs/editor/standalone/browser/standaloneCodeServiceImpl.ts",
148-
"./vs/editor/standalone/browser/standaloneEditor.ts",
149-
"./vs/editor/standalone/browser/standaloneLanguages.ts",
150-
"./vs/editor/standalone/browser/standaloneServices.ts",
151-
"./vs/editor/standalone/browser/standaloneThemeServiceImpl.ts",
152-
"./vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.ts",
153-
"./vs/editor/standalone/common/monarch/monarchCommon.ts",
154-
"./vs/editor/standalone/common/monarch/monarchCompile.ts",
155-
"./vs/editor/standalone/common/monarch/monarchLexer.ts",
156-
"./vs/editor/standalone/common/monarch/monarchTypes.ts",
157-
"./vs/editor/standalone/common/standaloneThemeService.ts",
158-
"./vs/editor/standalone/common/themes.ts",
159-
"./vs/editor/standalone/test/browser/simpleServices.test.ts",
160-
"./vs/editor/standalone/test/browser/standaloneLanguages.test.ts",
161-
"./vs/editor/test/browser/controller/imeTester.ts",
162-
"./vs/editor/test/browser/editorTestServices.ts",
163-
"./vs/editor/test/browser/testCodeEditor.ts",
164-
"./vs/editor/test/browser/testCommand.ts",
165-
"./vs/editor/test/browser/view/minimapFontCreator.ts",
166-
"./vs/editor/test/browser/view/viewLayer.test.ts",
167-
"./vs/editor/test/common/commentMode.ts",
168-
"./vs/editor/test/common/config/commonEditorConfig.test.ts",
169-
"./vs/editor/test/common/controller/cursorMoveHelper.test.ts",
170-
"./vs/editor/test/common/core/characterClassifier.test.ts",
171-
"./vs/editor/test/common/core/lineTokens.test.ts",
172-
"./vs/editor/test/common/core/range.test.ts",
173-
"./vs/editor/test/common/core/viewLineToken.ts",
174-
"./vs/editor/test/common/editorTestUtils.ts",
175-
"./vs/editor/test/common/mocks/mockMode.ts",
176-
"./vs/editor/test/common/mocks/testConfiguration.ts",
177-
"./vs/editor/test/common/model/benchmark/benchmarkUtils.ts",
178-
"./vs/editor/test/common/model/benchmark/entry.ts",
179-
"./vs/editor/test/common/model/benchmark/modelbuilder.benchmark.ts",
180-
"./vs/editor/test/common/model/benchmark/operations.benchmark.ts",
181-
"./vs/editor/test/common/model/benchmark/searchNReplace.benchmark.ts",
182-
"./vs/editor/test/common/model/editableTextModelAuto.test.ts",
183-
"./vs/editor/test/common/model/editableTextModelTestUtils.ts",
184-
"./vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts",
185-
"./vs/editor/test/common/model/linesTextBuffer/textBufferAutoTestUtils.ts",
186-
"./vs/editor/test/common/model/model.test.ts",
187-
"./vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts",
188-
"./vs/editor/test/common/modes/languageConfiguration.test.ts",
189-
"./vs/editor/test/common/modes/supports/characterPair.test.ts",
190-
"./vs/editor/test/common/modes/supports/javascriptOnEnterRules.ts",
191-
"./vs/editor/test/common/modes/supports/tokenization.test.ts",
192-
"./vs/editor/test/common/modesTestUtils.ts",
193-
"./vs/editor/test/common/services/languagesRegistry.test.ts",
194-
"./vs/editor/test/common/view/minimapCharRendererFactory.ts",
195-
"./vs/editor/test/common/view/overviewZoneManager.test.ts",
196-
"./vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts",
197-
"./vs/editor/test/common/viewLayout/lineDecorations.test.ts",
198-
"./vs/editor/test/common/viewLayout/viewLineRenderer.test.ts",
199-
"./vs/editor/test/common/viewLayout/whitespaceComputer.test.ts",
200-
"./vs/editor/test/common/viewModel/characterHardWrappingLineMapper.test.ts",
201-
"./vs/editor/test/common/viewModel/prefixSumComputer.test.ts",
202-
"./vs/editor/test/common/viewModel/testViewModel.ts",
203-
"./vs/editor/test/common/viewModel/viewModelDecorations.test.ts",
204-
"./vs/editor/test/common/viewModel/viewModelImpl.test.ts",
20525
"./vs/monaco.d.ts",
20626
"./vs/nls.d.ts",
20727
"./vs/nls.mock.ts",

Diff for: src/vs/editor/contrib/goToDefinition/goToDefinitionCommands.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ export class DefinitionAction extends EditorAction {
164164

165165
private _openInPeek(editorService: ICodeEditorService, target: ICodeEditor, model: ReferencesModel) {
166166
let controller = ReferencesController.get(target);
167-
if (controller) {
167+
if (controller && target.hasModel()) {
168168
controller.toggleWidget(target.getSelection(), createCancelablePromise(_ => Promise.resolve(model)), {
169169
getMetaTitle: (model) => {
170170
return this._getMetaTitle(model);

Diff for: src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC
293293

294294
private gotoDefinition(target: IMouseTarget, sideBySide: boolean): Promise<any> {
295295
this.editor.setPosition(target.position!);
296-
const action = new DefinitionAction(new DefinitionActionConfig(sideBySide, false, true, false), { alias: undefined, label: undefined, id: undefined, precondition: undefined });
296+
const action = new DefinitionAction(new DefinitionActionConfig(sideBySide, false, true, false), { alias: '', label: '', id: '', precondition: null });
297297
return this.editor.invokeWithinContext(accessor => action.run(accessor, this.editor));
298298
}
299299

Diff for: src/vs/editor/contrib/referenceSearch/referencesController.ts

+59-34
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
3333
private static readonly ID = 'editor.contrib.referencesController';
3434

3535
private _editor: ICodeEditor;
36-
private _widget: ReferenceWidget;
37-
private _model: ReferencesModel;
36+
private _widget: ReferenceWidget | null;
37+
private _model: ReferencesModel | null;
3838
private _requestIdPool = 0;
3939
private _disposables: IDisposable[] = [];
4040
private _ignoreModelChangeEvent = false;
@@ -66,23 +66,26 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
6666
public dispose(): void {
6767
this._referenceSearchVisible.reset();
6868
dispose(this._disposables);
69-
dispose(this._widget);
70-
dispose(this._model);
71-
this._widget = null;
72-
this._model = null;
73-
this._editor = null;
69+
if (this._widget) {
70+
dispose(this._widget);
71+
this._widget = null;
72+
}
73+
if (this._model) {
74+
dispose(this._model);
75+
this._model = null;
76+
}
7477
}
7578

7679
public toggleWidget(range: Range, modelPromise: CancelablePromise<ReferencesModel>, options: RequestOptions): void {
7780

7881
// close current widget and return early is position didn't change
79-
let widgetPosition: Position;
82+
let widgetPosition: Position | undefined;
8083
if (this._widget) {
8184
widgetPosition = this._widget.position;
8285
}
8386
this.closeWidget();
8487
if (!!widgetPosition && range.containsPosition(widgetPosition)) {
85-
return null;
88+
return;
8689
}
8790

8891
this._referenceSearchVisible.set(true);
@@ -101,9 +104,10 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
101104
this._widget.show(range);
102105
this._disposables.push(this._widget.onDidClose(() => {
103106
modelPromise.cancel();
104-
105-
this._storageService.store(storageKey, JSON.stringify(this._widget.layoutData), StorageScope.GLOBAL);
106-
this._widget = null;
107+
if (this._widget) {
108+
this._storageService.store(storageKey, JSON.stringify(this._widget.layoutData), StorageScope.GLOBAL);
109+
this._widget = null;
110+
}
107111
this.closeWidget();
108112
}));
109113

@@ -119,13 +123,17 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
119123
break;
120124
}
121125
case 'side':
122-
this.openReference(element, kind === 'side');
126+
if (element) {
127+
this.openReference(element, kind === 'side');
128+
}
123129
break;
124130
case 'goto':
125-
if (options.onGoto) {
126-
options.onGoto(element);
127-
} else {
128-
this._gotoReference(element);
131+
if (element) {
132+
if (options.onGoto) {
133+
options.onGoto(element);
134+
} else {
135+
this._gotoReference(element);
136+
}
129137
}
130138
break;
131139
}
@@ -148,7 +156,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
148156

149157
// show widget
150158
return this._widget.setModel(this._model).then(() => {
151-
if (this._widget) { // might have been closed
159+
if (this._widget && this._model && this._editor.hasModel()) { // might have been closed
152160
// set title
153161
this._widget.setMetaTitle(options.getMetaTitle(this._model));
154162

@@ -169,31 +177,46 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
169177
}
170178

171179
public async goToNextOrPreviousReference(fwd: boolean) {
172-
if (this._model) { // can be called while still resolving...
173-
let source = this._model.nearestReference(this._editor.getModel().uri, this._widget.position);
174-
let target = this._model.nextOrPreviousReference(source, fwd);
175-
let editorFocus = this._editor.hasTextFocus();
176-
await this._widget.setSelection(target);
177-
await this._gotoReference(target);
178-
if (editorFocus) {
179-
this._editor.focus();
180-
}
180+
if (!this._editor.hasModel() || !this._model || !this._widget) {
181+
// can be called while still resolving...
182+
return;
183+
}
184+
const currentPosition = this._widget.position;
185+
if (!currentPosition) {
186+
return;
187+
}
188+
const source = this._model.nearestReference(this._editor.getModel().uri, currentPosition);
189+
if (!source) {
190+
return;
191+
}
192+
const target = this._model.nextOrPreviousReference(source, fwd);
193+
const editorFocus = this._editor.hasTextFocus();
194+
await this._widget.setSelection(target);
195+
await this._gotoReference(target);
196+
if (editorFocus) {
197+
this._editor.focus();
181198
}
182199
}
183200

184201
public closeWidget(): void {
185-
dispose(this._widget);
186-
this._widget = null;
202+
if (this._widget) {
203+
dispose(this._widget);
204+
this._widget = null;
205+
}
187206
this._referenceSearchVisible.reset();
188207
this._disposables = dispose(this._disposables);
189-
dispose(this._model);
190-
this._model = null;
208+
if (this._model) {
209+
dispose(this._model);
210+
this._model = null;
211+
}
191212
this._editor.focus();
192213
this._requestIdPool += 1; // Cancel pending requests
193214
}
194215

195216
private _gotoReference(ref: Location): Promise<any> {
196-
this._widget.hide();
217+
if (this._widget) {
218+
this._widget.hide();
219+
}
197220

198221
this._ignoreModelChangeEvent = true;
199222
const range = Range.lift(ref.range).collapseToStart();
@@ -216,8 +239,10 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
216239
return;
217240
}
218241

219-
this._widget.show(range);
220-
this._widget.focus();
242+
if (this._widget) {
243+
this._widget.show(range);
244+
this._widget.focus();
245+
}
221246

222247
}, (err) => {
223248
this._ignoreModelChangeEvent = false;

Diff for: src/vs/editor/contrib/referenceSearch/referencesWidget.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -461,14 +461,14 @@ export class ReferenceWidget extends PeekViewWidget {
461461
});
462462
}
463463

464-
public setModel(newModel: ReferencesModel | undefined): Promise<any> | undefined {
464+
public setModel(newModel: ReferencesModel | undefined): Promise<any> {
465465
// clean up
466466
this._disposeOnNewModel = dispose(this._disposeOnNewModel);
467467
this._model = newModel;
468468
if (this._model) {
469469
return this._onNewModel();
470470
}
471-
return undefined;
471+
return Promise.resolve();
472472
}
473473

474474
private _onNewModel(): Promise<any> {

0 commit comments

Comments
 (0)