diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index 87a7602d67a..ba90ef44064 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -329,6 +329,7 @@ "./vs/editor/contrib/hover/hoverOperation.ts", "./vs/editor/contrib/hover/hoverWidgets.ts", "./vs/editor/contrib/hover/modesGlyphHover.ts", + "./vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts", "./vs/editor/contrib/inPlaceReplace/inPlaceReplaceCommand.ts", "./vs/editor/contrib/indentation/indentation.ts", "./vs/editor/contrib/indentation/indentUtils.ts", diff --git a/src/vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts b/src/vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts index 1ef5a49d498..d00d578cb2c 100644 --- a/src/vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts +++ b/src/vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts @@ -37,7 +37,7 @@ class InPlaceReplaceController implements IEditorContribution { private readonly editor: ICodeEditor; private readonly editorWorkerService: IEditorWorkerService; private decorationIds: string[] = []; - private currentRequest: CancelablePromise; + private currentRequest: CancelablePromise; private decorationRemover: CancelablePromise; constructor( @@ -63,21 +63,29 @@ class InPlaceReplaceController implements IEditorContribution { } let selection = this.editor.getSelection(); + if (selection === null) { + return Promise.resolve(void 0); + } + const model = this.editor.getModel(); + if (!model) { + return Promise.resolve(void 0); + } + const modelURI = model.uri; if (selection.startLineNumber !== selection.endLineNumber) { // Can't accept multiline selection - return null; + return Promise.resolve(void 0); } const state = new EditorState(this.editor, CodeEditorStateFlag.Value | CodeEditorStateFlag.Position); if (!this.editorWorkerService.canNavigateValueSet(modelURI)) { - return undefined; + return Promise.resolve(void 0); } - this.currentRequest = createCancelablePromise(token => this.editorWorkerService.navigateValueSet(modelURI, selection, up)); + this.currentRequest = createCancelablePromise(token => this.editorWorkerService.navigateValueSet(modelURI, selection!, up)); return this.currentRequest.then(result => { @@ -94,7 +102,7 @@ class InPlaceReplaceController implements IEditorContribution { // Selection let editRange = Range.lift(result.range); let highlightRange = result.range; - let diff = result.value.length - (selection.endColumn - selection.startColumn); + let diff = result.value.length - (selection!.endColumn - selection!.startColumn); // highlight highlightRange = { @@ -104,11 +112,11 @@ class InPlaceReplaceController implements IEditorContribution { endColumn: highlightRange.startColumn + result.value.length }; if (diff > 1) { - selection = new Selection(selection.startLineNumber, selection.startColumn, selection.endLineNumber, selection.endColumn + diff - 1); + selection = new Selection(selection!.startLineNumber, selection!.startColumn, selection!.endLineNumber, selection!.endColumn + diff - 1); } // Insert new text - const command = new InPlaceReplaceCommand(editRange, selection, result.value); + const command = new InPlaceReplaceCommand(editRange, selection!, result.value); this.editor.pushUndoStop(); this.editor.executeCommand(source, command); @@ -150,7 +158,7 @@ class InPlaceReplaceUp extends EditorAction { public run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { let controller = InPlaceReplaceController.get(editor); if (!controller) { - return undefined; + return Promise.resolve(void 0); } return controller.run(this.id, true); } @@ -175,7 +183,7 @@ class InPlaceReplaceDown extends EditorAction { public run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { let controller = InPlaceReplaceController.get(editor); if (!controller) { - return undefined; + return Promise.resolve(void 0); } return controller.run(this.id, false); }