Skip to content

Commit

Permalink
Merge branch 'yzhang-gh:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
peaceshi authored Dec 8, 2023
2 parents dd0494b + 46bef1a commit a955596
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions src/tableFormatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const d0 = Object.freeze<vscode.Disposable & { _disposables: vscode.Disposable[]
const registerFormatter = () => {
if (configManager.get("tableFormatter.enabled")) {
d0._disposables.push(vscode.languages.registerDocumentFormattingEditProvider(Document_Selector_Markdown, new MarkdownDocumentFormatter()));
d0._disposables.push(vscode.languages.registerDocumentRangeFormattingEditProvider(Document_Selector_Markdown, new MarkdownDocumentRangeFormattingEditProvider()));
} else {
d0.dispose();
}
Expand Down Expand Up @@ -69,7 +70,7 @@ class MarkdownDocumentFormatter implements vscode.DocumentFormattingEditProvider
return edits;
}

private detectTables(document: vscode.TextDocument): ITableRange[] | undefined {
protected detectTables(document: vscode.TextDocument): ITableRange[] | undefined {
const text = document.getText();

const lineBreak = String.raw`\r?\n`;
Expand Down Expand Up @@ -117,7 +118,7 @@ class MarkdownDocumentFormatter implements vscode.DocumentFormattingEditProvider
return spaces;
}

private formatTable(target: ITableRange, doc: vscode.TextDocument, options: vscode.FormattingOptions) {
protected formatTable(target: ITableRange, doc: vscode.TextDocument, options: vscode.FormattingOptions) {
// The following operations require the Unicode Normalization Form C (NFC).
const text = target.text.normalize();

Expand Down Expand Up @@ -238,4 +239,28 @@ class MarkdownDocumentFormatter implements vscode.DocumentFormattingEditProvider
return (text + ' '.repeat(length)).slice(0, length);
}
}
}

class MarkdownDocumentRangeFormattingEditProvider extends MarkdownDocumentFormatter implements vscode.DocumentRangeFormattingEditProvider {
provideDocumentRangeFormattingEdits(document: vscode.TextDocument, range: vscode.Range, options: vscode.FormattingOptions, token: vscode.CancellationToken) {
const tables = this.detectTables(document);
if (!tables || token.isCancellationRequested) {
return;
}
const selectedTables = new Array();
tables.forEach((table) => {
if (range.contains(table.range)) {
selectedTables.push(table);
}
});

const edits: vscode.TextEdit[] = selectedTables.map((target) => {
return new vscode.TextEdit(
target.range,
this.formatTable(target, document, options)
);
});

return edits;
}
}

0 comments on commit a955596

Please sign in to comment.