Skip to content

Commit cc3aa91

Browse files
authored
Merge pull request #13 from darkriszty/bugfix/SilentDocumentFormatting
Bugfix/silent document formatting
2 parents 7aa59ed + c489847 commit cc3aa91

3 files changed

Lines changed: 106 additions & 19 deletions

File tree

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
"test": "node ./node_modules/vscode/bin/test"
3434
},
3535
"devDependencies": {
36-
"@types/mocha": "^2.2.32",
37-
"@types/node": "^6.0.40",
36+
"@types/mocha": "^2.2.41",
37+
"@types/node": "^6.0.73",
3838
"mocha": "^2.3.3",
39-
"typemoq": "^1.4.1",
40-
"typescript": "^2.3.2",
41-
"vscode": "^1.0.0"
39+
"typemoq": "^1.6.0",
40+
"typescript": "^2.3.3",
41+
"vscode": "^1.1.0"
4242
},
4343
"license": "MIT"
4444
}

src/extension/tableRangePrettyfier.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export class TableRangePrettyfier implements vscode.DocumentRangeFormattingEditP
2020
let message: string = null;
2121
let table: ITable = null;
2222

23+
const silent = this._isWholeDocumentFormatting(document, range);
24+
2325
try {
2426
table = this._tableFactory.create(selection);
2527
if (table == null) {
@@ -29,13 +31,26 @@ export class TableRangePrettyfier implements vscode.DocumentRangeFormattingEditP
2931
result.push(new vscode.TextEdit(range, formattedTable));
3032
}
3133
} catch (ex) {
32-
this._logger.logError(ex);
33-
console.error("Error: \n\n" + ex);
34+
if (!silent)
35+
this._logger.logError(ex);
36+
console.error(`Error: ${ex}`);
3437
}
3538

36-
if (!!message)
39+
if (!!message && !silent)
3740
this._logger.logInfo(message);
3841

3942
return result;
4043
}
44+
45+
private _isWholeDocumentFormatting(document: vscode.TextDocument, range: vscode.Range): boolean {
46+
if (document.lineCount < 1)
47+
return true;
48+
49+
const zeroPosition = new vscode.Position(0, 0);
50+
const documentEndPosition = document.lineAt(document.lineCount - 1).range.end;
51+
if (range.start.isEqual(zeroPosition) && range.end.isEqual(documentEndPosition))
52+
return true;
53+
54+
return false;
55+
}
4156
}

test/extension/tableRangePrettyfier.test.ts

Lines changed: 83 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,88 @@ suite("TableRangePrettyfier tests", () => {
2121
assert.equal(textEdits.length, 0);
2222
});
2323

24-
test("provideDocumentRangeFormattingEdits() table factory called with invalid table then logInfo() called", () => {
25-
const tableText = `hello | world
26-
-|-
27-
new | line`;
24+
test("provideDocumentRangeFormattingEdits() invalid table with whole document being formatted => logInfo() not called", () => {
25+
const tableText = `row1
26+
row2
27+
row3`;
2828
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
2929
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
3030
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
3131

3232
const textDoc = new MockMarkdownTextDocument(tableText);
33-
const range = textDoc.getRangeForLines(1, 3);
33+
const range = textDoc.getRangeForLines(0, 3);
34+
mockTableFactory
35+
.setup(t => t.create(textDoc.getText(range)))
36+
.returns(() => null)
37+
.verifiable(Times.once());
38+
mockLogger
39+
.setup(t => t.logInfo(It.isAnyString()))
40+
.verifiable(Times.never());
41+
42+
const textEdits = trp.provideDocumentRangeFormattingEdits(textDoc, range, null, null);
43+
44+
mockTableFactory.verifyAll();
45+
mockLogger.verifyAll();
46+
});
47+
48+
test("provideDocumentRangeFormattingEdits() error thrown with whole document being formatted => logError() not called", () => {
49+
const tableText = `row1
50+
row2
51+
row3`;
52+
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
53+
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
54+
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
55+
56+
const textDoc = new MockMarkdownTextDocument(tableText);
57+
const range = textDoc.getRangeForLines(0, 3);
58+
mockTableFactory
59+
.setup(t => t.create(textDoc.getText(range)))
60+
.throws(new Error("expected error"))
61+
.verifiable(Times.once());
62+
mockLogger
63+
.setup(t => t.logError(It.isAny()))
64+
.verifiable(Times.never());
65+
66+
const textEdits = trp.provideDocumentRangeFormattingEdits(textDoc, range, null, null);
67+
68+
mockTableFactory.verifyAll();
69+
mockLogger.verifyAll();
70+
});
71+
72+
test("provideDocumentRangeFormattingEdits() error thrown without whole document being formatted => logError() called", () => {
73+
const tableText = `row1
74+
row2
75+
row3`;
76+
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
77+
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
78+
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
79+
80+
const textDoc = new MockMarkdownTextDocument(tableText);
81+
const range = textDoc.getRangeForLines(2, 3);
82+
mockTableFactory
83+
.setup(t => t.create(textDoc.getText(range)))
84+
.throws(new Error("expected error"))
85+
.verifiable(Times.once());
86+
mockLogger
87+
.setup(t => t.logError(It.isAny()))
88+
.verifiable(Times.once());
89+
90+
const textEdits = trp.provideDocumentRangeFormattingEdits(textDoc, range, null, null);
91+
92+
mockTableFactory.verifyAll();
93+
mockLogger.verifyAll();
94+
});
95+
96+
test("provideDocumentRangeFormattingEdits() invalid table with not the whole document being formatted => logInfo() called", () => {
97+
const tableText = `row1
98+
row2
99+
row3`;
100+
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
101+
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
102+
const trp = new TableRangePrettyfier(mockTableFactory.object, mockLogger.object);
103+
104+
const textDoc = new MockMarkdownTextDocument(tableText);
105+
const range = textDoc.getRangeForLines(2, 3);
34106
mockTableFactory
35107
.setup(t => t.create(textDoc.getText(range)))
36108
.returns(() => null)
@@ -46,9 +118,9 @@ suite("TableRangePrettyfier tests", () => {
46118
});
47119

48120
test("provideDocumentRangeFormattingEdits() table prettyPrint() called and logInfo() not called", () => {
49-
const tableText = `hello | world
50-
-|-
51-
new | line`;
121+
const tableText = `row1
122+
row2
123+
row3`;
52124
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
53125
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
54126
const mockTable: typeMock.IMock<ITable> = typeMock.Mock.ofType<ITable>();
@@ -76,9 +148,9 @@ suite("TableRangePrettyfier tests", () => {
76148
});
77149

78150
test("provideDocumentRangeFormattingEdits() the result of the prettyPrint() is returned", () => {
79-
const tableText = `hello | world
80-
-|-
81-
new | line`;
151+
const tableText = `row1
152+
row2
153+
row3`;
82154
const mockTableFactory: typeMock.IMock<ITableFactory> = typeMock.Mock.ofType<ITableFactory>();
83155
const mockLogger: typeMock.IMock<ILogger> = typeMock.Mock.ofType<ILogger>();
84156
const mockTable: typeMock.IMock<ITable> = typeMock.Mock.ofType<ITable>();

0 commit comments

Comments
 (0)