Skip to content

Commit 39dc7ee

Browse files
committed
Kv formatting improvements
1 parent a30fd4c commit 39dc7ee

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

packages/kv/src/formatter.test.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ test("Indent container", () => {
3131
item2 val2
3232
3333
Test2 {
34-
item3 val3
34+
item3 val3 val4
3535
}
3636
}`;
3737

@@ -41,7 +41,32 @@ Test2 {
4141
const root = formatter.indentItem(originalRoot, 0);
4242
expect(root.getKey().getPosition().getRange().getStart()).toBe(0);
4343
expect(root.getKey().getPosition().getRange().getEnd()).toBe(4);
44+
expect(root.getOpeningBrace()?.getPosition().getRange().getStart()).toBe(6);
45+
expect(root.getClosingBrace()?.getPosition().getRange().getStart()).toBe(0);
4446

4547
const item1 = root.getChildren()![0];
4648
expect(item1.getKey().getPosition().getRange().getStart()).toBe(4);
49+
expect(item1.getKey().getPosition().getRange().getEnd()).toBe(9);
50+
expect(item1.getValues()![0].getPosition().getRange().getStart()).toBe(10);
51+
expect(item1.getValues()![0].getPosition().getRange().getEnd()).toBe(14);
52+
53+
const item2 = root.getChildren()![1];
54+
expect(item2.getKey().getPosition().getRange().getStart()).toBe(4);
55+
expect(item2.getKey().getPosition().getRange().getEnd()).toBe(9);
56+
expect(item2.getValues()![0].getPosition().getRange().getStart()).toBe(10);
57+
expect(item2.getValues()![0].getPosition().getRange().getEnd()).toBe(14);
58+
59+
const item3 = root.getChildren()![2];
60+
expect(item3.getKey().getPosition().getRange().getStart()).toBe(4);
61+
expect(item3.getKey().getPosition().getRange().getEnd()).toBe(9);
62+
expect(item3.getOpeningBrace()?.getPosition().getRange().getStart()).toBe(11);
63+
expect(item3.getClosingBrace()?.getPosition().getRange().getStart()).toBe(4);
64+
65+
const item4 = item3.getChildren()![0];
66+
expect(item4.getKey().getPosition().getRange().getStart()).toBe(8);
67+
expect(item4.getKey().getPosition().getRange().getEnd()).toBe(13);
68+
expect(item4.getValues()![0].getPosition().getRange().getStart()).toBe(14);
69+
expect(item4.getValues()![0].getPosition().getRange().getEnd()).toBe(18);
70+
expect(item4.getValues()![1].getPosition().getRange().getStart()).toBe(19);
71+
expect(item4.getValues()![1].getPosition().getRange().getEnd()).toBe(23);
4772
});

packages/kv/src/formatter.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,9 @@ export function indentItem(item: Item, indentLevel = 0): Item {
6969

7070
if(item.isLeaf()) {
7171
return indentLeafValues(item, indentedKey, indentLevel);
72+
} else {
73+
return indentContainer(item, indentedKey, indentLevel);
7274
}
73-
74-
indentLevel++;
75-
const children: Item[] = item.getChildren()!.map(childLiteral => indentItem(childLiteral, indentLevel));
76-
77-
return Item.createContainer(item.getParent(), indentedKey, children, item.getCondition());
78-
7975
}
8076

8177
function indentLeafValues(item: Item, indentedKey: Literal, indentLevel: number): Item {
@@ -95,6 +91,21 @@ function indentLeafValues(item: Item, indentedKey: Literal, indentLevel: number)
9591
return Item.createLeaf(item.getParent(), indentedKey, values, item.getCondition());
9692
}
9793

94+
function indentContainer(item: Item, indentedKey: Literal, indentLevel: number): Item {
95+
indentLevel++;
96+
const children: Item[] = item.getChildren()!.map(childLiteral => indentItem(childLiteral, indentLevel));
97+
98+
const keyEnd: number = indentedKey.getPosition().getRange().getEnd();
99+
const c = Item.createContainer(item.getParent(), indentedKey, children, item.getCondition());
100+
c.startPopulatingContainer(new Literal(new Position(indentedKey.getPosition().getLine(), new Range(keyEnd + 1, keyEnd + 2)), "{"));
101+
102+
const closingBracePos = c.getClosingBrace()!.getPosition();
103+
const indentStart = getIndentSpacer(indentLevel);
104+
c.endPopulatingContainer(new Literal(new Position(closingBracePos.getLine(), new Range(indentStart, indentStart + 1)), "}"));
105+
106+
return c;
107+
}
108+
98109
function indentKey(key: Literal, indentLevel: number): Literal {
99110
const k = key.copy();
100111
k.getPosition().getRange().moveTo(getIndentSpacer(indentLevel));

0 commit comments

Comments
 (0)