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
28 changes: 20 additions & 8 deletions src/BlameManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class BlameManager {
private blamedDocument: BlamedDocument[] = [];
private heatMapManager = new HeatMapManager();
private width: string = DEFAULT_WIDTH;
private nameOptions: vscode.DecorationOptions[] = [];
private dateOptions: vscode.DecorationOptions[] = [];

async toggleBlame(editor: vscode.TextEditor) {
this.isOpen = !this.isOpen;
Expand All @@ -33,14 +35,18 @@ class BlameManager {
log.trace('Open blame end');
ExtensionManager.setBusy(false);
} else {
this.setDecorations(editor, [], []);
this.nameOptions = [];
this.dateOptions = [];
this.setDecorations(editor, this.nameOptions, this.dateOptions);
}
}

refresh(event?: vscode.TextDocumentChangeEvent) {
if (this.isOpen) {
const editor = vscode.window.activeTextEditor;
if (editor) {
this.nameOptions = [];
this.dateOptions = [];
if (event) {
this.editBlamedDocument(event);
this.applyDecorations(editor, event.document);
Expand All @@ -55,11 +61,20 @@ class BlameManager {
}
}

restore() {
const editor = vscode.window.activeTextEditor;
if (editor) {
this.setDecorations(editor, this.nameOptions, this.dateOptions);
}
}

closeBlame() {
this.isOpen = false;
const editor = vscode.window.activeTextEditor;
if (editor) {
this.setDecorations(editor, [], []);
this.nameOptions = [];
this.dateOptions = [];
this.setDecorations(editor, this.nameOptions, this.dateOptions);
}
}

Expand Down Expand Up @@ -109,9 +124,6 @@ class BlameManager {
}

private applyDecorations(editor: vscode.TextEditor, document: vscode.TextDocument, fresh?: boolean) {
const nameOptions: vscode.DecorationOptions[] = [];
const dateOptions: vscode.DecorationOptions[] = [];

if (this.blamedDocument.length > 0) {
if (fresh) {
this.blamedDocument.push(emptyBlame());
Expand All @@ -125,12 +137,12 @@ class BlameManager {
for (let i = 0; i < document.lineCount; i++) {
const [name, date] = getDecorations(document.lineAt(i).range, this.getBlameAt(i), this);

nameOptions.push(name);
dateOptions.push(date);
this.nameOptions.push(name);
this.dateOptions.push(date);
}
}

this.setDecorations(editor, nameOptions, dateOptions);
this.setDecorations(editor, this.nameOptions, this.dateOptions);
}

private fixDirtyLines(document: vscode.TextDocument) {
Expand Down
8 changes: 6 additions & 2 deletions src/Editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,17 @@ class EditorManager {
}

changeEditor(editor?: vscode.TextEditor) {
if (!editor?.document.fileName) {
return;
}

if (editor && !Settings.isKeepBlamesOpen()) {
this.closeEditor(editor.document);
}

let nextEditor;
if ((nextEditor = editor && this.getEditor(editor.document)) !== undefined) {
nextEditor.refresh();
nextEditor.restore();
this.current = nextEditor;
}
}
Expand All @@ -55,7 +59,7 @@ class EditorManager {
}
}

private getEditor(document: vscode.TextDocument): BlameManager | undefined {
getEditor(document: vscode.TextDocument): BlameManager | undefined {
return this.openEditors.get(document.fileName);
}

Expand Down
2 changes: 1 addition & 1 deletion src/ExtensionManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class ExtensionManager {
});

vscode.workspace.onDidChangeTextDocument((event) => {
if (event.document.isDirty) {
if (event.document.isDirty && this.editorManager.getEditor(event.document)) {
this.editorManager.currentEditor.refresh(event);
}
});
Expand Down