| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { DisposableStore } from '../../../../base/common/lifecycle.js';
- export class OvertypingCapturer {
- constructor(editor, suggestModel) {
- this._disposables = new DisposableStore();
- this._lastOvertyped = [];
- this._empty = true;
- this._disposables.add(editor.onWillType(() => {
- if (!this._empty) {
- return;
- }
- if (!editor.hasModel()) {
- return;
- }
- const selections = editor.getSelections();
- const selectionsLength = selections.length;
- // Check if it will overtype any selections
- let willOvertype = false;
- for (let i = 0; i < selectionsLength; i++) {
- if (!selections[i].isEmpty()) {
- willOvertype = true;
- break;
- }
- }
- if (!willOvertype) {
- return;
- }
- this._lastOvertyped = [];
- const model = editor.getModel();
- for (let i = 0; i < selectionsLength; i++) {
- const selection = selections[i];
- // Check for overtyping capturer restrictions
- if (model.getValueLengthInRange(selection) > OvertypingCapturer._maxSelectionLength) {
- return;
- }
- this._lastOvertyped[i] = { value: model.getValueInRange(selection), multiline: selection.startLineNumber !== selection.endLineNumber };
- }
- this._empty = false;
- }));
- this._disposables.add(suggestModel.onDidCancel(e => {
- if (!this._empty && !e.retrigger) {
- this._empty = true;
- }
- }));
- }
- getLastOvertypedInfo(idx) {
- if (!this._empty && idx >= 0 && idx < this._lastOvertyped.length) {
- return this._lastOvertyped[idx];
- }
- return undefined;
- }
- dispose() {
- this._disposables.dispose();
- }
- }
- OvertypingCapturer._maxSelectionLength = 51200;
|