k3nny
737f9bea38
All checks were successful
lint / docker (push) Successful in 9m14s
fix code passing ruff linter pre-commit ruff pre-commit ruff format
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
from typing import TYPE_CHECKING, List
|
|
|
|
from . import compat
|
|
from .ini import EmptyLine, LineContainer
|
|
|
|
if TYPE_CHECKING:
|
|
from .ini import LineType
|
|
|
|
|
|
def tidy(cfg: compat.RawConfigParser):
|
|
"""Clean up blank lines.
|
|
|
|
This functions makes the configuration look clean and
|
|
handwritten - consecutive empty lines and empty lines at
|
|
the start of the file are removed, and one is guaranteed
|
|
to be at the end of the file.
|
|
"""
|
|
|
|
if isinstance(cfg, compat.RawConfigParser):
|
|
cfg = cfg.data
|
|
cont = cfg._data.contents
|
|
i = 1
|
|
while i < len(cont):
|
|
if isinstance(cont[i], LineContainer):
|
|
tidy_section(cont[i])
|
|
i += 1
|
|
elif isinstance(cont[i - 1], EmptyLine) and isinstance(cont[i], EmptyLine):
|
|
del cont[i]
|
|
else:
|
|
i += 1
|
|
|
|
# Remove empty first line
|
|
if cont and isinstance(cont[0], EmptyLine):
|
|
del cont[0]
|
|
|
|
# Ensure a last line
|
|
if cont and not isinstance(cont[-1], EmptyLine):
|
|
cont.append(EmptyLine())
|
|
|
|
|
|
def tidy_section(lc: "LineContainer"):
|
|
cont: List[LineType] = lc.contents
|
|
i: int = 1
|
|
while i < len(cont):
|
|
if isinstance(cont[i - 1], EmptyLine) and isinstance(cont[i], EmptyLine):
|
|
del cont[i]
|
|
else:
|
|
i += 1
|
|
|
|
# Remove empty first line
|
|
if len(cont) > 1 and isinstance(cont[1], EmptyLine):
|
|
del cont[1]
|