From 2cc3932954e8b388d77bb40f5418f7711a706d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= <16805946+edgarrmondragon@users.noreply.github.com> Date: Wed, 17 Apr 2024 08:47:59 -0600 Subject: [PATCH] Enforce single line `description` (#184) --- src/pyproject_fmt/formatter/project.py | 5 ++++- tests/formatter/test_project.py | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/pyproject_fmt/formatter/project.py b/src/pyproject_fmt/formatter/project.py index a3577d7..4020567 100644 --- a/src/pyproject_fmt/formatter/project.py +++ b/src/pyproject_fmt/formatter/project.py @@ -22,6 +22,7 @@ from .config import Config _PY_MIN_VERSION: int = 7 +_ANY_WHITESPACE = re.compile(r"\s+") def fmt_project(parsed: TOMLDocument, conf: Config) -> None: # noqa: C901 @@ -40,7 +41,9 @@ def fmt_project(parsed: TOMLDocument, conf: Config) -> None: # noqa: C901 assert isinstance(name, str) # noqa: S101 project["name"] = canonicalize_name(name) if "description" in project: - project["description"] = String.from_raw(str(project["description"]).strip()) + # Convert multiline description to a single line + _description = _ANY_WHITESPACE.sub(" ", str(project["description"]).strip()) + project["description"] = String.from_raw(_description, escape=False) sorted_array(cast(Optional[Array], project.get("keywords")), indent=conf.indent) sorted_array(cast(Optional[Array], project.get("dynamic")), indent=conf.indent) diff --git a/tests/formatter/test_project.py b/tests/formatter/test_project.py index 801b74a..f822a71 100644 --- a/tests/formatter/test_project.py +++ b/tests/formatter/test_project.py @@ -115,6 +115,19 @@ def test_project_description(fmt: Fmt) -> None: fmt(fmt_project, start, expected) +def test_project_description_multiline(fmt: Fmt) -> None: + start = dedent('''\ + [project] + description="""A multi-line + description.""" + ''') + expected = dedent("""\ + [project] + description="A multi-line description." + """) + fmt(fmt_project, start, expected) + + def test_project_scripts(fmt: Fmt) -> None: start = """ [project.scripts]