Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/state/editors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -687,7 +687,7 @@ export class Editors implements vscode.Disposable {
state.dispose();
}

this._lastRemovedEditorStates.length === 0;
this._lastRemovedEditorStates.length = 0;

// Dispose of fallback editor, if any.
const fallback = this._fallbacks.get(document);
Expand Down
19 changes: 18 additions & 1 deletion src/state/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ export class Extension implements vscode.Disposable {
},
true,
);

}

/**
Expand All @@ -219,6 +218,24 @@ export class Extension implements vscode.Disposable {
assert(this._autoDisposables.size === 0);

this.statusBar.dispose();

// Clear configuration handlers.
this._configurationChangeHandlers.clear();

// Dispose of all subscriptions.
for (const subscription of this._subscriptions) {
subscription.dispose();
}
this._subscriptions.length = 0;

// Dispose of core components.
this.editors.dispose();
this.recorder.dispose();
this.modes.dispose();
this.registers.dispose();

// Dismiss error message, if any.
this.dismissErrorMessage();
}

/**
Expand Down
9 changes: 8 additions & 1 deletion src/state/modes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ export declare namespace Mode {
/**
* The set of all modes.
*/
export class Modes implements Iterable<Mode> {
export class Modes implements Iterable<Mode>, vscode.Disposable {
private readonly _vscodeModeDefaults: Mode.Configuration = {
cursorStyle: "line",
inheritFrom: null,
Expand Down Expand Up @@ -581,6 +581,13 @@ export class Modes implements Iterable<Mode> {
this._observePreferences(extension);
}

public dispose(): void {
for (const mode of this._modes.values()) {
mode.dispose();
}
this._modes.clear();
}

/**
* The default mode configured using `dance.defaultMode`.
*/
Expand Down
6 changes: 5 additions & 1 deletion src/state/recorder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,11 @@ export class Recorder implements vscode.Disposable {
* call.
*/
public cursorFromEnd() {
return new Cursor(this, this._previousBuffers.length, this._buffer.length - 1);
return new Cursor(
this,
this._previousBuffers.length,
this._buffer.length === 0 ? 0 : this._buffer.length - 1,
);
}

/**
Expand Down