diff options
author | Anthon van der Neut <anthon@mnt.org> | 2021-12-24 14:30:59 +0100 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2021-12-24 14:30:59 +0100 |
commit | 613279066c0a31e3df94047014e530c4095aeb8e (patch) | |
tree | b4d3b158aa9a6535ae7e816d0f92c253e6c75ddf | |
parent | b3b16d923784da2209ff80e894c5751e398ad416 (diff) | |
download | ruamel.yaml-0.17.18.tar.gz |
fix indent for empty seq/map0.17.18
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | README.rst | 12 | ||||
-rw-r--r-- | __init__.py | 5 | ||||
-rw-r--r-- | _doc/_static/pypi.svg | 2 | ||||
-rw-r--r-- | emitter.py | 52 | ||||
-rw-r--r-- | parser.py | 3 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rwxr-xr-x | tox.ini | 2 |
8 files changed, 59 insertions, 25 deletions
@@ -1,3 +1,9 @@ +[0, 17, 18]: 2021-12-24 + - copy-paste error in folded scalar comment attachment (reported by `Stephan Geulette + <https://sourceforge.net/u/sgeulette/profile/>`__) + - fix 411, indent error comment between key empty seq value (reported by `Guillermo Julián + <https://sourceforge.net/u/gjulianm/profile/>`__) + [0, 17, 17]: 2021-10-31 - extract timestamp matching/creation to util @@ -4,8 +4,8 @@ ruamel.yaml ``ruamel.yaml`` is a YAML 1.2 loader/dumper package for Python. -:version: 0.17.17 -:updated: 2021-10-31 +:version: 0.17.18 +:updated: 2021-12-24 :documentation: http://yaml.readthedocs.io :repository: https://sourceforge.net/projects/ruamel-yaml/ :pypi: https://pypi.org/project/ruamel.yaml/ @@ -55,10 +55,10 @@ when the status of the API is stable enough to make the transition. .. image:: https://bestpractices.coreinfrastructure.org/projects/1128/badge :target: https://bestpractices.coreinfrastructure.org/projects/1128 -.. image:: https://sourceforge.net/p/ruamel-yaml/code/ci/default/tree/_doc/_static/license.svg?format=raw +.. image:: https://sourceforge.net/p/ruamel-yaml-base/code/ci/default/tree/_doc/_static/license.svg?format=raw :target: https://opensource.org/licenses/MIT -.. image:: https://sourceforge.net/p/ruamel-yaml/code/ci/default/tree/_doc/_static/pypi.svg?format=raw +.. image:: https://sourceforge.net/p/ruamel-yaml-base/code/ci/default/tree/_doc/_static/pypi.svg?format=raw :target: https://pypi.org/project/ruamel.yaml/ .. image:: https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/oitnb.svg?format=raw @@ -72,9 +72,11 @@ ChangeLog .. should insert NEXT: at the beginning of line for next key (with empty line) -NEXT: +0.17.18 (2021-12-24): - copy-paste error in folded scalar comment attachment (reported by `Stephan Geulette <https://sourceforge.net/u/sgeulette/profile/>`__) + - fix 411, indent error comment between key empty seq value (reported by `Guillermo Julián + <https://sourceforge.net/u/gjulianm/profile/>`__) 0.17.17 (2021-10-31): - extract timestamp matching/creation to util diff --git a/__init__.py b/__init__.py index 65a3423..f7d767a 100644 --- a/__init__.py +++ b/__init__.py @@ -5,8 +5,9 @@ if False: # MYPY _package_data = dict( full_package_name='ruamel.yaml', - version_info=(0, 17, 17), - __version__='0.17.17', + version_info=(0, 17, 18), + __version__='0.17.18', + version_timestamp='2021-12-24 14:28:35', author='Anthon van der Neut', author_email='a.van.der.neut@ruamel.eu', description='ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order', # NOQA diff --git a/_doc/_static/pypi.svg b/_doc/_static/pypi.svg index 35042d8..ca071d2 100644 --- a/_doc/_static/pypi.svg +++ b/_doc/_static/pypi.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h33v20H0z"/><path fill="#007ec6" d="M33 0h53v20H33z"/><path fill="url(#b)" d="M0 0h86v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" textLength="230">pypi</text><text x="585" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">0.17.17</text><text x="585" y="140" transform="scale(.1)" textLength="430">0.17.17</text></g> </svg> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h33v20H0z"/><path fill="#007ec6" d="M33 0h53v20H33z"/><path fill="url(#b)" d="M0 0h86v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" textLength="230">pypi</text><text x="585" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">0.17.18</text><text x="585" y="140" transform="scale(.1)" textLength="430">0.17.18</text></g> </svg> @@ -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): @@ -233,7 +233,8 @@ class Parser: # end_mark.line != self.scanner.peek_token().start_mark.line: # self.loader.scalar_after_indicator = False event = DocumentStartEvent( - start_mark, end_mark, explicit=True, version=version, tags=tags, comment=token.comment + start_mark, end_mark, explicit=True, version=version, tags=tags, + comment=token.comment ) # type: Any self.states.append(self.parse_document_end) self.state = self.parse_document_content @@ -527,7 +527,7 @@ class NameSpacePackager(object): if package_name is None: package_name = self.full_package_name if not script_name: - script_name = package_name.split('.')[-1] + script_name = package_name.rsplit('.', 1)[-1] return { 'console_scripts': [ '{0} = {1}'.format(script_name, pckg_entry_point(package_name)) @@ -1,6 +1,6 @@ [tox] # toxworkdir = /data1/DATA/tox/ruamel.yaml -envlist = cs,py39,py38,py37,py36,py35 +envlist = cs,py310,py39,py38,py37,py36,py35 [testenv] install_command = pip install --disable-pip-version-check {opts} {packages} |