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) {
const documentContext = ContextMapping.getDocumentContextIfExist(document);
documentContext?.getPreview()?.updateWebview();
if (documentContext !== undefined) {
documentContext.foldingRange.clear();
documentContext.getPreview()?.updateWebview();
}
}
static onDocumentClose(document: vscode.TextDocument) {

View File

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