Skip to content

Commit 172c64b

Browse files
committed
Add support for producing multiline arrays
1 parent a485de9 commit 172c64b

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Change Log
22

3+
## [Unreleased]
4+
5+
### Added
6+
7+
- Added support for producing multiline arrays
8+
9+
310
## [0.5.7] - 2019-10-04
411

512
### Fixed

tests/test_items.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,29 @@ def test_array_behaves_like_a_list():
173173
)
174174

175175

176+
def test_array_multiline():
177+
t = item([1, 2, 3, 4, 5, 6, 7, 8])
178+
t.multiline(True)
179+
180+
expected = """\
181+
[
182+
1,
183+
2,
184+
3,
185+
4,
186+
5,
187+
6,
188+
7,
189+
8,
190+
]"""
191+
192+
assert expected == t.as_string()
193+
194+
t = item([])
195+
196+
assert "[]" == t.as_string()
197+
198+
176199
def test_dicts_are_converted_to_tables():
177200
t = item({"foo": {"bar": "baz"}})
178201

tomlkit/items.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,14 +744,15 @@ class Array(Item, list):
744744
An array literal
745745
"""
746746

747-
def __init__(self, value, trivia): # type: (list, Trivia) -> None
747+
def __init__(self, value, trivia, multiline=False): # type: (list, Trivia) -> None
748748
super(Array, self).__init__(trivia)
749749

750750
list.__init__(
751751
self, [v.value for v in value if not isinstance(v, (Whitespace, Comment))]
752752
)
753753

754754
self._value = value
755+
self._multiline = multiline
755756

756757
@property
757758
def discriminant(self): # type: () -> int
@@ -773,8 +774,23 @@ def is_homogeneous(self): # type: () -> bool
773774

774775
return len(set(discriminants)) == 1
775776

777+
def multiline(self, multiline): # type: (bool) -> self
778+
self._multiline = multiline
779+
780+
return self
781+
776782
def as_string(self): # type: () -> str
777-
return "[{}]".format("".join(v.as_string() for v in self._value))
783+
if not self._multiline:
784+
return "[{}]".format("".join(v.as_string() for v in self._value))
785+
786+
s = "[\n" + self.trivia.indent + " " * 4
787+
s += (",\n" + self.trivia.indent + " " * 4).join(
788+
v.as_string() for v in self._value if not isinstance(v, Whitespace)
789+
)
790+
s += ",\n"
791+
s += "]"
792+
793+
return s
778794

779795
def append(self, _item): # type: () -> None
780796
if self._value:

0 commit comments

Comments
 (0)