Re-calculate block information on document save.

This commit is contained in:
CismonX 2021-03-31 20:51:09 +08:00
parent ca770ac65c
commit d2cbf9e189
Signed by: cismonx
GPG Key ID: 3094873E29A482FB
2 changed files with 13 additions and 1 deletions

View File

@ -50,7 +50,10 @@ export default class ContextMapping implements vscode.Disposable {
static onDocumentSave(document: vscode.TextDocument) { static onDocumentSave(document: vscode.TextDocument) {
const documentContext = ContextMapping.getDocumentContextIfExist(document); const documentContext = ContextMapping.getDocumentContextIfExist(document);
documentContext?.getPreview()?.updateWebview(); if (documentContext !== undefined) {
documentContext.foldingRange.clear();
documentContext.getPreview()?.updateWebview();
}
} }
static onDocumentClose(document: vscode.TextDocument) { static onDocumentClose(document: vscode.TextDocument) {

View File

@ -51,6 +51,8 @@ export default class FoldingRangeContext {
private closingSubsection?: number; private closingSubsection?: number;
private contentMayChange = true;
/** /**
* Get VSCode folding ranges from the context. * Get VSCode folding ranges from the context.
*/ */
@ -72,6 +74,7 @@ export default class FoldingRangeContext {
* @param events Events describing the changes in the document. * @param events Events describing the changes in the document.
*/ */
update(events: readonly vscode.TextDocumentContentChangeEvent[]) { update(events: readonly vscode.TextDocumentContentChangeEvent[]) {
this.contentMayChange = true;
if (this.foldingRanges === undefined) return false; if (this.foldingRanges === undefined) return false;
for (const event of events) { for (const event of events) {
const updatedLines = event.text.split(this.document.eol === vscode.EndOfLine.LF ? '\n' : '\r\n').length; const updatedLines = event.text.split(this.document.eol === vscode.EndOfLine.LF ? '\n' : '\r\n').length;
@ -85,6 +88,11 @@ export default class FoldingRangeContext {
return false; return false;
} }
clear() {
if (!this.contentMayChange) return;
this.foldingRanges = undefined;
}
constructor(private readonly document: vscode.TextDocument) {} constructor(private readonly document: vscode.TextDocument) {}
/** /**
@ -94,6 +102,7 @@ export default class FoldingRangeContext {
* @param end Ending line number. * @param end Ending line number.
*/ */
private calculateFoldingRanges() { private calculateFoldingRanges() {
this.contentMayChange = false;
this.foldingRanges = []; this.foldingRanges = [];
this.clearTemporaries(); this.clearTemporaries();
let closingBlocks = <NamedLine[]>[]; let closingBlocks = <NamedLine[]>[];