summaryrefslogtreecommitdiff
path: root/emitter.py
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2021-12-24 14:30:59 +0100
committerAnthon van der Neut <anthon@mnt.org>2021-12-24 14:30:59 +0100
commit613279066c0a31e3df94047014e530c4095aeb8e (patch)
treeb4d3b158aa9a6535ae7e816d0f92c253e6c75ddf /emitter.py
parentb3b16d923784da2209ff80e894c5751e398ad416 (diff)
downloadruamel.yaml-613279066c0a31e3df94047014e530c4095aeb8e.tar.gz
fix indent for empty seq/map0.17.18
Diffstat (limited to 'emitter.py')
-rw-r--r--emitter.py52
1 files changed, 38 insertions, 14 deletions
diff --git a/emitter.py b/emitter.py
index a17e0e5..b66cffa 100644
--- a/emitter.py
+++ b/emitter.py
@@ -54,7 +54,7 @@ class Indents:
# replacement for the list based stack of None/int
def __init__(self):
# type: () -> None
- self.values = [] # type: List[Tuple[int, bool]]
+ self.values = [] # type: List[Tuple[Any, bool]]
def append(self, val, seq):
# type: (Any, Any) -> None
@@ -73,13 +73,18 @@ class Indents:
except IndexError:
return False
- def seq_flow_align(self, seq_indent, column):
+ def seq_flow_align(self, seq_indent, column, pre_comment=False):
# type: (int, int) -> int
# extra spaces because of dash
+ nprint('seq_flow_align', self.values, pre_comment)
if len(self.values) < 2 or not self.values[-1][1]:
- return 0
- # -1 for the dash
+ if len(self.values) == 0 or not pre_comment:
+ return 0
base = self.values[-1][0] if self.values[-1][0] is not None else 0
+ if pre_comment:
+ return base + seq_indent
+ # return (len(self.values)) * seq_indent
+ # -1 for the dash
return base + seq_indent - column - 1
def __len__(self):
@@ -405,6 +410,7 @@ class Emitter:
# type: (bool, bool, bool, bool) -> None
self.root_context = root
self.sequence_context = sequence # not used in PyYAML
+ force_flow_indent = False
self.mapping_context = mapping
self.simple_key_context = simple_key
if isinstance(self.event, AliasEvent):
@@ -430,20 +436,27 @@ class Emitter:
# nprint('@', self.indention, self.no_newline, self.column)
i2, n2 = self.indention, self.no_newline # NOQA
if self.event.comment:
- if self.event.flow_style is False and self.event.comment:
+ if self.event.flow_style is False:
if self.write_post_comment(self.event):
self.indention = False
self.no_newline = True
+ if self.event.flow_style:
+ column = self.column
if self.write_pre_comment(self.event):
+ if self.event.flow_style:
+ # force_flow_indent = True
+ force_flow_indent = not self.indents.values[-1][1]
self.indention = i2
self.no_newline = not self.indention
+ if self.event.flow_style:
+ self.column = column
if (
self.flow_level
or self.canonical
or self.event.flow_style
or self.check_empty_sequence()
):
- self.expect_flow_sequence()
+ self.expect_flow_sequence(force_flow_indent)
else:
self.expect_block_sequence()
elif isinstance(self.event, MappingStartEvent):
@@ -451,13 +464,16 @@ class Emitter:
self.write_post_comment(self.event)
if self.event.comment and self.event.comment[1]:
self.write_pre_comment(self.event)
+ if self.event.flow_style:
+ force_flow_indent = not self.indents.values[-1][1]
if (
self.flow_level
or self.canonical
or self.event.flow_style
or self.check_empty_mapping()
):
- self.expect_flow_mapping(single=self.event.nr_items == 1)
+ self.expect_flow_mapping(single=self.event.nr_items == 1,
+ force_flow_indent=force_flow_indent)
else:
self.expect_block_mapping()
else:
@@ -481,11 +497,15 @@ class Emitter:
# Flow sequence handlers.
- def expect_flow_sequence(self):
- # type: () -> None
- ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column)
+ def expect_flow_sequence(self, force_flow_indent=False):
+ # type: (bool) -> None
+ if force_flow_indent:
+ self.increase_indent(flow=True, sequence=True)
+ ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column,
+ force_flow_indent)
self.write_indicator(' ' * ind + '[', True, whitespace=True)
- self.increase_indent(flow=True, sequence=True)
+ if not force_flow_indent:
+ self.increase_indent(flow=True, sequence=True)
self.flow_context.append('[')
self.state = self.expect_first_flow_sequence_item
@@ -533,9 +553,12 @@ class Emitter:
# Flow mapping handlers.
- def expect_flow_mapping(self, single=False):
+ def expect_flow_mapping(self, single=False, force_flow_indent=False):
# type: (Optional[bool]) -> None
- ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column)
+ if force_flow_indent:
+ self.increase_indent(flow=True, sequence=False)
+ ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column,
+ force_flow_indent)
map_init = '{'
if (
single
@@ -548,7 +571,8 @@ class Emitter:
map_init = ''
self.write_indicator(' ' * ind + map_init, True, whitespace=True)
self.flow_context.append(map_init)
- self.increase_indent(flow=True, sequence=False)
+ if not force_flow_indent:
+ self.increase_indent(flow=True, sequence=False)
self.state = self.expect_first_flow_mapping_key
def expect_first_flow_mapping_key(self):