Skip to content

Commit 3a27f76

Browse files
committed
fix(#367): Do not add an extra space on output
1 parent 8450b71 commit 3a27f76

File tree

5 files changed

+50
-46
lines changed

5 files changed

+50
-46
lines changed

core/shared/src/main/scala/org/virtuslab/yaml/internal/dump/present/PresenterImpl.scala

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ object PresenterImpl extends Presenter {
1515
val stack = new mutable.Stack[EventKind]
1616
val newline = System.lineSeparator()
1717

18-
var toplevelNode = true // toplevel node should't insert newline and increase indent
19-
var indent = 0
18+
var toplevelNode = true // toplevel node should't insert newline and increase indent
19+
var indent = 0
20+
var requirePreceedingSpace = false
2021

21-
def parseNode(events: List[EventKind]): List[EventKind] =
22+
def parseNode(events: List[EventKind], priorContentThisLine: Boolean): List[EventKind] =
2223
events match {
2324
case head :: tail =>
2425
head match {
@@ -33,12 +34,15 @@ object PresenterImpl extends Presenter {
3334
case Scalar(value, _, NodeEventMetadata(_, tag)) =>
3435
insertSequencePadding()
3536
// todo escape string using doublequotes
37+
if (priorContentThisLine) {
38+
sb.append(" ")
39+
}
3640
if (tag.contains(Tag.nullTag)) sb.append("!!null")
3741
else sb.append(value)
3842
sb.append(newline)
3943
tail
40-
case DocumentStart(_) => parseNode(tail)
41-
case DocumentEnd(_) => parseNode(tail)
44+
case DocumentStart(_) => parseNode(tail, priorContentThisLine = false)
45+
case DocumentEnd(_) => parseNode(tail, priorContentThisLine = false)
4246
case _ => events
4347
}
4448
case Nil => Nil
@@ -52,7 +56,7 @@ object PresenterImpl extends Presenter {
5256
tail
5357
case Scalar(value, _, _) :: tail =>
5458
appendKey(value)
55-
val rest = parseNode(tail)
59+
val rest = parseNode(tail, priorContentThisLine = true)
5660
parseMapping(rest)
5761
case _ => events
5862
}
@@ -65,20 +69,20 @@ object PresenterImpl extends Presenter {
6569
popAndDecreaseIndent()
6670
tail
6771
case _ =>
68-
val rest = parseNode(events)
72+
val rest = parseNode(events, priorContentThisLine = true)
6973
parseSequence(rest)
7074
}
7175

7276
def appendKey(value: String) = {
7377
sb.append(" " * indent)
7478
sb.append(value)
75-
sb.append(": ")
79+
sb.append(":")
7680
}
7781

7882
def insertSequencePadding() = stack.headOption match {
7983
case Some(_: SequenceStart) =>
8084
sb.append(" " * indent)
81-
sb.append("- ")
85+
sb.append("-")
8286
case _ => ()
8387
}
8488

@@ -96,7 +100,7 @@ object PresenterImpl extends Presenter {
96100
stack.pop()
97101
}
98102

99-
parseNode(events.toList)
103+
parseNode(events.toList, priorContentThisLine = false)
100104
sb.result()
101105
}
102106
}

core/shared/src/test/scala-3/org/virtuslab/yaml/BaseYamlEncoderSuite.scala

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ class YamlEncoderSuite extends munit.FunSuite:
3232
)
3333

3434
val expected =
35-
s"""-
35+
s"""-
3636
| int: 1
3737
| double: 1.997
38-
|-
38+
|-
3939
| int: 2
4040
| double: 2.997
4141
|""".stripMargin
@@ -50,10 +50,10 @@ class YamlEncoderSuite extends munit.FunSuite:
5050
)
5151

5252
val expected =
53-
s"""-
53+
s"""-
5454
| - 1
5555
| - 2
56-
|-
56+
|-
5757
| - 3
5858
| - 4
5959
|""".stripMargin
@@ -67,10 +67,10 @@ class YamlEncoderSuite extends munit.FunSuite:
6767
val data = Data(Nested(1, "one"), Nested(2, "two"))
6868

6969
val expected =
70-
s"""first:
70+
s"""first:
7171
| a: 1
7272
| b: one
73-
|second:
73+
|second:
7474
| a: 2
7575
| b: two
7676
|""".stripMargin
@@ -115,9 +115,9 @@ class YamlEncoderSuite extends munit.FunSuite:
115115

116116
val data = Person(Address("Anytown"), Seq(1, 2))
117117
val expected =
118-
s"""address:
118+
s"""address:
119119
| city: Anytown
120-
|ints:
120+
|ints:
121121
| - 1
122122
| - 2
123123
|""".stripMargin
@@ -155,15 +155,15 @@ class YamlEncoderSuite extends munit.FunSuite:
155155
)
156156
)
157157
val expected = """version: 3.9
158-
|services:
159-
| web:
158+
|services:
159+
| web:
160160
| build: .
161-
| ports:
161+
| ports:
162162
| - 5000:5000
163-
| volumes:
163+
| volumes:
164164
| - .:/code
165165
| - logvolume01:/var/log
166-
| redis:
166+
| redis:
167167
| image: redis:alpine
168168
|""".stripMargin
169169

core/shared/src/test/scala-3/org/virtuslab/yaml/NodeCreationSuite.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ class NodeCreationSuite extends munit.FunSuite:
5757

5858
assertEquals(
5959
node.asYaml,
60-
"""|-
60+
"""|-
6161
| key: value
62-
|-
62+
|-
6363
| key2: value2
64-
| seq:
64+
| seq:
6565
| - v1
6666
| - v2
6767
|- standalone value

core/shared/src/test/scala/org/virtuslab/yaml/parser/ParserSuite.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class ParserSuite extends BaseYamlSuite {
156156
}
157157

158158
test("issue 313 - parsing elipsis in plain scalar") {
159-
val yaml = """|P:
159+
val yaml = """|P:
160160
| e: S...
161161
| c: N
162162
|""".stripMargin
@@ -182,7 +182,7 @@ class ParserSuite extends BaseYamlSuite {
182182

183183
test("parsing keeps order of keys") {
184184
val yaml = """
185-
|P:
185+
|P:
186186
| a: 0
187187
| b: 1
188188
| c: 2
@@ -199,7 +199,7 @@ class ParserSuite extends BaseYamlSuite {
199199
val yaml =
200200
"""name: John Wick
201201
|age: 40
202-
|address:
202+
|address:
203203
| - Anywhere
204204
| - 12-345
205205
|""".stripMargin

core/shared/src/test/scala/org/virtuslab/yaml/traverse/NodeVisitorSuite.scala

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ class NodeVisitorSuite extends munit.FunSuite {
2828

2929
val exptectedYaml =
3030
s"""version: 3.9
31-
|services:
32-
| web:
31+
|services:
32+
| web:
3333
| build: .
34-
| volumes:
34+
| volumes:
3535
| - .:/code
3636
| - logvolume01:/var/log
37-
| ports:
37+
| ports:
3838
| - 6000:6000
39-
| redis:
39+
| redis:
4040
| image: redis:alpine
4141
|""".stripMargin
4242

@@ -72,15 +72,15 @@ class NodeVisitorSuite extends munit.FunSuite {
7272

7373
val exptectedYaml =
7474
s"""version: 3.9
75-
|services:
76-
| web:
75+
|services:
76+
| web:
7777
| build: .
78-
| volumes:
78+
| volumes:
7979
| - .:/code
8080
| - logvolume01:/var/log
81-
| ports:
81+
| ports:
8282
| - 5000:5000:6000
83-
| redis:
83+
| redis:
8484
| image: redis:alpine:latest
8585
|""".stripMargin
8686

@@ -91,10 +91,10 @@ class NodeVisitorSuite extends munit.FunSuite {
9191

9292
val yaml =
9393
s"""version: "3.9"
94-
|services:
95-
| web:
94+
|services:
95+
| web:
9696
| build: .
97-
| volumes:
97+
| volumes:
9898
| - .:/code
9999
| - logvolume01:/var/log
100100
| ports:
@@ -116,13 +116,13 @@ class NodeVisitorSuite extends munit.FunSuite {
116116

117117
val exptectedYaml =
118118
s"""version: 3.9
119-
|services:
120-
| web:
119+
|services:
120+
| web:
121121
| build: .
122-
| volumes:
122+
| volumes:
123123
| - .:/code
124124
| - logvolume01:/var/log
125-
| ports:
125+
| ports:
126126
|""".stripMargin
127127

128128
assertEquals(modifiedYaml, exptectedYaml)

0 commit comments

Comments
 (0)