Skip to content

Commit a485a55

Browse files
authored
Merge pull request #8 from darkriszty/feature/EntireFileFormatting
Allow formatting when a single table takes up the whole document.
2 parents 7772c6f + 14787a7 commit a485a55

2 files changed

Lines changed: 28 additions & 52 deletions

File tree

src/extension/tableRangePrettyfier.ts

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,43 +17,25 @@ export class TableRangePrettyfier implements vscode.DocumentRangeFormattingEditP
1717
const result: vscode.TextEdit[] = [];
1818
const selection = document.getText(range);
1919

20-
// this extension only works on selected tables, not on the entire document
21-
const isWholeDocumentFormatting = this.isWholeDocumentFormatting(document, range);
22-
if (!isWholeDocumentFormatting) {
23-
let message: string = null;
24-
let table: ITable = null;
25-
26-
try {
27-
table = this._tableFactory.create(selection);
28-
if (table == null) {
29-
message = "Mismatching table column sizes.";
30-
} else {
31-
const formattedTable = table.prettyPrint();
32-
result.push(new vscode.TextEdit(range, formattedTable));
33-
}
34-
35-
}
36-
catch (ex) {
37-
this._logger.logError(ex);
38-
console.error("Error: \n\n" + ex);
20+
let message: string = null;
21+
let table: ITable = null;
22+
23+
try {
24+
table = this._tableFactory.create(selection);
25+
if (table == null) {
26+
message = "Mismatching table column sizes.";
27+
} else {
28+
const formattedTable = table.prettyPrint();
29+
result.push(new vscode.TextEdit(range, formattedTable));
3930
}
40-
41-
if (!!message)
42-
this._logger.logInfo(message);
31+
} catch (ex) {
32+
this._logger.logError(ex);
33+
console.error("Error: \n\n" + ex);
4334
}
4435

45-
return result;
46-
}
47-
48-
private isWholeDocumentFormatting(document: vscode.TextDocument, range: vscode.Range): boolean {
49-
if (document.lineCount < 1)
50-
return true;
36+
if (!!message)
37+
this._logger.logInfo(message);
5138

52-
const zeroPosition = new vscode.Position(0, 0);
53-
const documentEndPosition = document.lineAt(document.lineCount - 1).range.end;
54-
if (range.start.isEqual(zeroPosition) && range.end.isEqual(documentEndPosition))
55-
return true;
56-
57-
return false;
39+
return result;
5840
}
5941
}

test/extension/tableRangePrettyfier.test.ts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@ suite("TableRangePrettyfier tests", () => {
2222
});
2323

2424
test("provideDocumentRangeFormattingEdits() table factory called with invalid table then logInfo() called", () => {
25-
const tableText = `
26-
hello | world
27-
-|-
28-
new | line
29-
`;
25+
const tableText = `hello | world
26+
-|-
27+
new | line`;
3028
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
3129
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
3230
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
3331

3432
const textDoc = new MockMarkdownTextDocument(tableText);
35-
const range = textDoc.getRangeForLines(1, 4);
33+
const range = textDoc.getRangeForLines(1, 3);
3634
mockTableFactory
3735
.setup(t => t.create(textDoc.getText(range)))
3836
.returns(() => null)
@@ -48,18 +46,16 @@ new | line
4846
});
4947

5048
test("provideDocumentRangeFormattingEdits() table prettyPrint() called and logInfo() not called", () => {
51-
const tableText = `
52-
hello | world
53-
-|-
54-
new | line
55-
`;
49+
const tableText = `hello | world
50+
-|-
51+
new | line`;
5652
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
5753
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
5854
const mockTable: typeMock.IMock<ITable> = typeMock.Mock.ofType<ITable>();
5955
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
6056

6157
const textDoc = new MockMarkdownTextDocument(tableText);
62-
const range = textDoc.getRangeForLines(1, 4);
58+
const range = textDoc.getRangeForLines(1, 3);
6359

6460
mockTable
6561
.setup(t => t.prettyPrint())
@@ -80,18 +76,16 @@ new | line
8076
});
8177

8278
test("provideDocumentRangeFormattingEdits() the result of the prettyPrint() is returned", () => {
83-
const tableText = `
84-
hello | world
85-
-|-
86-
new | line
87-
`;
79+
const tableText = `hello | world
80+
-|-
81+
new | line`;
8882
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
8983
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
9084
const mockTable: typeMock.IMock<ITable> = typeMock.Mock.ofType<ITable>();
9185
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
9286

9387
const textDoc = new MockMarkdownTextDocument(tableText);
94-
const range = textDoc.getRangeForLines(1, 4);
88+
const range = textDoc.getRangeForLines(1, 3);
9589

9690
mockTable
9791
.setup(t => t.prettyPrint())

0 commit comments

Comments
 (0)