From 0cbb21ae6d0772ba8b56b885df6c5873fdf2e759 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 19 Nov 2018 14:16:54 -0800 Subject: [PATCH] Strict null check smartSelect --- src/tsconfig.strictNullChecks.json | 1 + .../editor/contrib/smartSelect/smartSelect.ts | 31 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index b333e326636..27b749f45f5 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -352,6 +352,7 @@ "./vs/editor/contrib/referenceSearch/referencesModel.ts", "./vs/editor/contrib/rename/rename.ts", "./vs/editor/contrib/rename/renameInputField.ts", + "./vs/editor/contrib/smartSelect/smartSelect.ts", "./vs/editor/contrib/smartSelect/tokenSelectionSupport.ts", "./vs/editor/contrib/smartSelect/tokenTree.ts", "./vs/editor/contrib/snippet/snippetParser.ts", diff --git a/src/vs/editor/contrib/smartSelect/smartSelect.ts b/src/vs/editor/contrib/smartSelect/smartSelect.ts index 3305a1cfa45..d7c9b6002be 100644 --- a/src/vs/editor/contrib/smartSelect/smartSelect.ts +++ b/src/vs/editor/contrib/smartSelect/smartSelect.ts @@ -22,14 +22,12 @@ import { MenuId } from 'vs/platform/actions/common/actions'; class State { public editor: ICodeEditor; - public next: State; - public previous: State; - public selection: Range; + public next?: State; + public previous?: State; + public selection: Range | null; constructor(editor: ICodeEditor) { this.editor = editor; - this.next = null; - this.previous = null; this.selection = editor.getSelection(); } } @@ -45,7 +43,7 @@ class SmartSelectController implements IEditorContribution { } private _tokenSelectionSupport: TokenSelectionSupport; - private _state: State; + private _state?: State; private _ignoreSelection: boolean; constructor( @@ -53,7 +51,6 @@ class SmartSelectController implements IEditorContribution { @IInstantiationService instantiationService: IInstantiationService ) { this._tokenSelectionSupport = instantiationService.createInstance(TokenSelectionSupport); - this._state = null; this._ignoreSelection = false; } @@ -65,6 +62,9 @@ class SmartSelectController implements IEditorContribution { } public run(forward: boolean): Promise { + if (!this.editor.hasModel()) { + return Promise.resolve(void 0); + } const selection = this.editor.getSelection(); const model = this.editor.getModel(); @@ -72,11 +72,11 @@ class SmartSelectController implements IEditorContribution { // forget about current state if (this._state) { if (this._state.editor !== this.editor) { - this._state = null; + this._state = undefined; } } - let promise: Promise = Promise.resolve(null); + let promise: Promise = Promise.resolve(void 0); if (!this._state) { promise = Promise.resolve(this._tokenSelectionSupport.getRangesToPositionSync(model.uri, selection.getStartPosition())).then((elements: ILogicalSelectionEntry[]) => { @@ -84,8 +84,11 @@ class SmartSelectController implements IEditorContribution { return; } - let lastState: State; + let lastState: State | undefined; elements.filter((element) => { + if (!this.editor.hasModel()) { + return false; + } // filter ranges inside the selection const selection = this.editor.getSelection(); const range = new Range(element.range.startLineNumber, element.range.startColumn, element.range.endLineNumber, element.range.endColumn); @@ -116,7 +119,7 @@ class SmartSelectController implements IEditorContribution { if (this._ignoreSelection) { return; } - this._state = null; + this._state = undefined; unhook.dispose(); }); }); @@ -135,7 +138,9 @@ class SmartSelectController implements IEditorContribution { this._ignoreSelection = true; try { - this.editor.setSelection(this._state.selection); + if (this._state.selection) { + this.editor.setSelection(this._state.selection); + } } finally { this._ignoreSelection = false; } @@ -154,7 +159,7 @@ abstract class AbstractSmartSelect extends EditorAction { this._forward = forward; } - public run(accessor: ServicesAccessor, editor: ICodeEditor): Promise { + public run(accessor: ServicesAccessor, editor: ICodeEditor): Promise | undefined { let controller = SmartSelectController.get(editor); if (controller) { return controller.run(this._forward); -- GitLab