Skip to content

Commit 750abba

Browse files
committed
Support multiple tables in Format Selection
1 parent c527681 commit 750abba

11 files changed

Lines changed: 59 additions & 70 deletions

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
66

77
## [Unreleased]
88

9-
## 3.0.1 - 2020-11-04
9+
## 3.1.0 - 2020-11-04
1010
### Fixed
1111
- Issue #42: Don't alter selection for invalid range formatting attempt (does not impact CLI).
12+
- Issue #43: Handle `Format Selection` with multiple tables (does not impact CLI).
1213

1314
## 3.0.0 - 2020-10-06
1415
### Added

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ Available features from docker:
4848

4949
## Extension Settings
5050

51-
The extension is available for markdown language mode. It can either prettify a selected table (`Format Selection`) or the entire document (`Format Document`).
52-
A VSCode command called `Prettify markdown tables` is also available to format format the currently opened document.
51+
The extension is available for markdown language mode. It can either prettify a selection (`Format Selection`) or the entire document (`Format Document`).
52+
A VSCode command called `Prettify markdown tables` is also available to format the currently opened document.
5353

5454
Configurable settings:
5555
- The maximum texth length of a selection/entire document to consider for formatting. Defaults to 1M chars. There is no limit when running from the command line.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "markdown-table-prettify",
33
"displayName": "Markdown Table Prettifier",
44
"description": "Transforms markdown tables to be more readable.",
5-
"version": "3.0.1",
5+
"version": "3.1.0",
66
"publisher": "darkriszty",
77
"repository": {
88
"type": "git",

src/extension/prettyfierFactory.ts

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,26 @@ import { AlignmentMarkerStrategy } from '../viewModelFactories/alignmentMarking'
2222
import { MultiTablePrettyfier } from '../prettyfiers/multiTablePrettyfier';
2323
import { SingleTablePrettyfier } from '../prettyfiers/singleTablePrettyfier';
2424

25-
export function getDocumentRangePrettyfier(strict: boolean = false, sizeLimitCheker: ConfigSizeLimitChecker = null, loggers: ILogger[] = null) {
26-
loggers = loggers || getLoggers();
27-
sizeLimitCheker = sizeLimitCheker || getSizeLimitChecker(loggers);
28-
29-
return new TableDocumentRangePrettyfier(getSingleTablePrettyfier(loggers, sizeLimitCheker));
25+
export function getDocumentRangePrettyfier() {
26+
return new TableDocumentRangePrettyfier(getMultiTablePrettyfier());
3027
}
3128

32-
export function getDocumentPrettyfier(strict: boolean = true): vscode.DocumentFormattingEditProvider {
33-
const loggers = getLoggers();
34-
const sizeLimitCheker = getSizeLimitChecker(loggers);
35-
36-
return new TableDocumentPrettyfier(
37-
new MultiTablePrettyfier(
38-
new TableFinder(new TableValidator(new SelectionInterpreter(strict))),
39-
getSingleTablePrettyfier(loggers, sizeLimitCheker),
40-
sizeLimitCheker
41-
)
42-
);
29+
export function getDocumentPrettyfier(): vscode.DocumentFormattingEditProvider {
30+
return new TableDocumentPrettyfier(getMultiTablePrettyfier());
4331
}
4432

4533
export function getDocumentPrettyfierCommand(): TableDocumentPrettyfierCommand {
34+
return new TableDocumentPrettyfierCommand(getMultiTablePrettyfier());
35+
}
36+
37+
function getMultiTablePrettyfier(): MultiTablePrettyfier {
4638
const loggers = getLoggers();
4739
const sizeLimitCheker = getSizeLimitChecker(loggers);
4840

49-
return new TableDocumentPrettyfierCommand(
50-
new MultiTablePrettyfier(
51-
new TableFinder(new TableValidator(new SelectionInterpreter(true))),
52-
getSingleTablePrettyfier(loggers, sizeLimitCheker),
53-
sizeLimitCheker
54-
)
41+
return new MultiTablePrettyfier(
42+
new TableFinder(new TableValidator(new SelectionInterpreter(true))),
43+
getSingleTablePrettyfier(loggers, sizeLimitCheker),
44+
sizeLimitCheker
5545
);
5646
}
5747

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
import * as vscode from "vscode";
2-
import { Document } from "../models/doc/document";
3-
import { Range } from "../models/doc/range";
4-
import { SingleTablePrettyfier } from "../prettyfiers/singleTablePrettyfier";
2+
import { MultiTablePrettyfier } from "../prettyfiers/multiTablePrettyfier";
53

64
export class TableDocumentRangePrettyfier implements vscode.DocumentRangeFormattingEditProvider {
75

86
constructor(
9-
private readonly _singleTablePrettyfier: SingleTablePrettyfier
7+
private readonly _multiTablePrettyfier: MultiTablePrettyfier
108
) { }
119

1210
public provideDocumentRangeFormattingEdits(
1311
document: vscode.TextDocument, range: vscode.Range,
1412
options: vscode.FormattingOptions, token: vscode.CancellationToken) : vscode.TextEdit[]
1513
{
16-
const formattedTable: string = this._singleTablePrettyfier.prettifyTable(
17-
new Document(document.getText()), new Range(range.start.line, range.end.line)
18-
);
19-
return formattedTable != null
20-
? [ new vscode.TextEdit(range, formattedTable) ]
14+
const formattedSelection: string = this._multiTablePrettyfier.formatTables(document.getText(range));
15+
16+
return formattedSelection != null
17+
? [new vscode.TextEdit(range, formattedSelection) ]
2118
: [ ];
2219
}
2320
}

src/prettyfiers/singleTablePrettyfier.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class SingleTablePrettyfier {
2323
public prettifyTable(document: Document, range: Range) : string
2424
{
2525
let result: string = null;
26-
let message: string = null;
26+
let message: string = "";
2727
const selection: string = document.getText(range);
2828

2929
try {
@@ -35,6 +35,7 @@ export class SingleTablePrettyfier {
3535
result = this._writer.writeTable(tableVm);
3636
} else {
3737
message = "Can't parse table from invalid text.";
38+
result = selection;
3839
}
3940
} catch (ex) {
4041
this._loggers.forEach(_ => _.logError(ex));

test/systemTests/resources/formatMultipleDocuments-expected.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ hello world
1111
| long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer |
1212
| ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer |
1313

14-
Type | Range | Size
15-
-------|-------------------------------------------------------------|-------------------------
16-
sbyte | -128 `|to|` 127 | Signed 8-bit integer
17-
byte | 0 `|to|` 255 | Unsigned 8-bit integer
18-
char | U+0000 `|to|` U+ffff | Unicode 16-bit character
19-
short | -32,768 `|to|` 32,767 | Signed 16-bit integer
20-
ushort | 0 `|to|` 65,535 | Unsigned 16-bit integer
21-
int | -2,147,483,648 `|to|` 2,147,483,647 | Signed 32-bit integer
22-
uint | 0 `|to|` 4,294,967,295 | Unsigned 32-bit integer
23-
long | -9,223,372,036,854,775,808 `|to|` 9,223,372,036,854,775,807 | Signed 64-bit integer
24-
ulong | 0 `|to|` 18,446,744,073,709,551,615 | Unsigned 64-bit integer
14+
Type | Range
15+
-------|------------------------------------------------------------
16+
sbyte | -128 `|to|` 127
17+
byte | 0 `|to|` 255
18+
char | U+0000 `|to|` U+ffff
19+
short | -32,768 `|to|` 32,767
20+
ushort | 0 `|to|` 65,535
21+
int | -2,147,483,648 `|to|` 2,147,483,647
22+
uint | 0 `|to|` 4,294,967,295
23+
long | -9,223,372,036,854,775,808 `|to|` 9,223,372,036,854,775,807
24+
ulong | 0 `|to|` 18,446,744,073,709,551,615
2525
Type | | Range | Size
2626
-------|---|---------------------------------|-------------------------
2727
sbyte | | -128 to 127 | Signed 8-bit integer

test/systemTests/resources/formatMultipleDocuments-input.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ hello world
1111
|long|-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807|Signed 64-bit integer|
1212
|ulong|0 to 18,446,744,073,709,551,615|Unsigned 64-bit integer|
1313

14-
Type | Range| Size
15-
-|-|-
16-
sbyte | -128 `|to|` 127| Signed 8-bit integer
17-
byte| 0 `|to|` 255| Unsigned 8-bit integer
18-
char| U+0000 `|to|` U+ffff| Unicode 16-bit character
19-
short| -32,768 `|to|` 32,767| Signed 16-bit integer
20-
ushort| 0 `|to|` 65,535| Unsigned 16-bit integer
21-
int| -2,147,483,648 `|to|` 2,147,483,647| Signed 32-bit integer
22-
uint| 0 `|to|` 4,294,967,295| Unsigned 32-bit integer
23-
long| -9,223,372,036,854,775,808 `|to|` 9,223,372,036,854,775,807| Signed 64-bit integer
24-
ulong| 0 `|to|` 18,446,744,073,709,551,615| Unsigned 64-bit integer
14+
Type | Range|
15+
-|-|
16+
sbyte | -128 `|to|` 127|
17+
byte| 0 `|to|` 255|
18+
char| U+0000 `|to|` U+ffff|
19+
short| -32,768 `|to|` 32,767|
20+
ushort| 0 `|to|` 65,535|
21+
int| -2,147,483,648 `|to|` 2,147,483,647|
22+
uint| 0 `|to|` 4,294,967,295|
23+
long| -9,223,372,036,854,775,808 `|to|` 9,223,372,036,854,775,807|
24+
ulong| 0 `|to|` 18,446,744,073,709,551,615|
2525
Type || Range| Size
2626
-|-|-|-
2727
sbyte || -128 to 127| Signed 8-bit integer

test/unitTests/extension/tableDocumentRangePrettyfier.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@ import * as assert from "assert";
22
import { IMock, Mock, It, Times } from "typemoq";
33
import { TableDocumentRangePrettyfier } from "../../../src/extension/tableDocumentRangePrettyfier";
44
import { MarkdownTextDocumentStub } from "../../stubs/markdownTextDocumentStub";
5-
import { SingleTablePrettyfier } from "../../../src/prettyfiers/singleTablePrettyfier";
5+
import { MultiTablePrettyfier } from "../../../src/prettyfiers/multiTablePrettyfier";
66

77
suite("TableDocumentRangePrettyfier tests", () => {
88

9-
let _singleTablePrettyfier: IMock<SingleTablePrettyfier>;
9+
let _multiTablePrettyfier: IMock<MultiTablePrettyfier>;
1010

1111
setup(() => {
12-
_singleTablePrettyfier = Mock.ofType<SingleTablePrettyfier>();
12+
_multiTablePrettyfier = Mock.ofType<MultiTablePrettyfier>();
1313
});
1414

15-
test("provideDocumentRangeFormattingEdits() calls table validator", () => {
15+
test("provideDocumentRangeFormattingEdits() uses MultiTablePrettyfier", () => {
1616
const sut = createSut();
1717
const input = Array(5).fill("hello world").join("\n");
1818
const expectedResult = Array(5).fill("expected result").join("\n");
1919
const document = new MarkdownTextDocumentStub(input);
2020
const range = document.getFullRange();
21-
_singleTablePrettyfier.setup(_ => _.prettifyTable(It.isAny(), It.isAny())).returns(() => expectedResult);
21+
_multiTablePrettyfier.setup(_ => _.formatTables(It.isAny())).returns(() => expectedResult);
2222

2323
const result = sut.provideDocumentRangeFormattingEdits(document, range, null, null);
2424

2525
assert.strictEqual(result.length, 1);
2626
assert.strictEqual(result[0].range, range);
27-
_singleTablePrettyfier.verify(_ => _.prettifyTable(It.isAny(), It.isAny()), Times.once());
27+
_multiTablePrettyfier.verify(_ => _.formatTables(It.isAny()), Times.once());
2828
});
2929

3030
test("provideDocumentRangeFormattingEdits() invalid table selection doesn't alter the selected text", () => {
@@ -33,14 +33,14 @@ suite("TableDocumentRangePrettyfier tests", () => {
3333
const expectedResult = null;
3434
const document = new MarkdownTextDocumentStub(input);
3535
const range = document.getFullRange();
36-
_singleTablePrettyfier.setup(_ => _.prettifyTable(It.isAny(), It.isAny())).returns(() => expectedResult);
36+
_multiTablePrettyfier.setup(_ => _.formatTables(It.isAny())).returns(() => expectedResult);
3737

3838
const result = sut.provideDocumentRangeFormattingEdits(document, range, null, null);
3939

4040
assert.strictEqual(result.length, 0);
4141
});
4242

4343
function createSut(): TableDocumentRangePrettyfier {
44-
return new TableDocumentRangePrettyfier(_singleTablePrettyfier.object);
44+
return new TableDocumentRangePrettyfier(_multiTablePrettyfier.object);
4545
}
4646
});

0 commit comments

Comments
 (0)