Skip to content

Conversation

OlenaYefymenko
Copy link

This patch provides a new configuration — .coveragerc.toml . Considering that many projects have switched to toml configurations, this change offers a more flexible approach to manage coverage settings.

Resolves #1643

Comment on lines +574 to 648
(".coveragerc.toml", True, False),
("setup.cfg", False, False),
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the priority of the new config properly determined in the config_files_to_try function?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

Comment on lines 67 to 80
@pytest.mark.parametrize("filename", ["pyproject.toml", ".coveragerc.toml"])
def test_toml_config_file(self, filename) -> None:
# A pyproject.toml and coveragerc.toml will be read into the configuration.
self.make_file(filename, """\
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the parameterization implemented appropriately, similar to pyproject.toml?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes.

Comment on lines +836 to +1008
def test_coveragerc_toml_priority(self) -> None:
"""Test that .coveragerc.toml has priority over pyproject.toml."""
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is testing priority only over pyproject.toml in the test_coveragerc_toml_priority test sufficient?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes.

@OlenaYefymenko
Copy link
Author

@nedbat,
I've opened PR with the improvements, but I have a few doubts about my implementation. I've added comments in the code. I'd really appreciate your feedback on whether this approach works well.
Thank you!

@nedbat nedbat changed the title 🌐 Support .coveragerc.toml for configuration Support .coveragerc.toml for configuration Apr 16, 2025
Copy link
Owner

@nedbat nedbat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One change needed.

Comment on lines +574 to 648
(".coveragerc.toml", True, False),
("setup.cfg", False, False),
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

Comment on lines 67 to 80
@pytest.mark.parametrize("filename", ["pyproject.toml", ".coveragerc.toml"])
def test_toml_config_file(self, filename) -> None:
# A pyproject.toml and coveragerc.toml will be read into the configuration.
self.make_file(filename, """\
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes.

Comment on lines +836 to +1008
def test_coveragerc_toml_priority(self) -> None:
"""Test that .coveragerc.toml has priority over pyproject.toml."""
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes.

# A toml file!
[tool.coverage]
run.parallel = true
""")
with mock.patch.object(coverage.tomlconfig, "has_tomllib", False):
msg = "Can't read 'pyproject.toml' without TOML support"
msg = "Can't read '{filename}' without TOML support"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like tests are failing because this needs to be an f-string.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you. I will fix this error in the next commits. I run tox with version 3.12 locally, and I didn't see this error.

@nedbat
Copy link
Owner

nedbat commented Apr 16, 2025

Thanks for doing this. There are some other changes needed. Let me know which you want to do, and which I should do:

  • Update the documentation
  • Add an entry to CHANGES.rst
  • Add your name to CONTRIBUTORS.txt

@OlenaYefymenko
Copy link
Author

OlenaYefymenko commented Apr 17, 2025

Thanks for doing this. There are some other changes needed. Let me know which you want to do, and which I should do:

  • Update the documentation
  • Add an entry to CHANGES.rst
  • Add your name to CONTRIBUTORS.txt

Yes, I will add the changes

@OlenaYefymenko OlenaYefymenko marked this pull request as draft May 7, 2025 21:32
@OlenaYefymenko OlenaYefymenko force-pushed the support-configuration-coverage-toml branch from 4018790 to 673b0c0 Compare June 15, 2025 23:16
@OlenaYefymenko OlenaYefymenko force-pushed the support-configuration-coverage-toml branch from 673b0c0 to c584e0d Compare July 20, 2025 13:52
Copy link
Contributor

@webknjaz webknjaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plz revert all the formatting changes. I marked some, find the rest.

@OlenaYefymenko OlenaYefymenko force-pushed the support-configuration-coverage-toml branch from 6bee75f to 7565729 Compare August 18, 2025 22:17
OlenaYefymenko and others added 8 commits September 1, 2025 01:06
This patch provides a new configuration option for coverage.py.
Considering that many projects have switched to toml configurations,
this change offers a more flexible approach to manage coverage settings.
Co-authored-by: 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) <[email protected]>
Adds a new test to verify behavior when TOML support is
unavailable.
list for new `.coveragerc.toml` configuration file support.
@OlenaYefymenko OlenaYefymenko force-pushed the support-configuration-coverage-toml branch from 7565729 to 2558209 Compare August 31, 2025 22:19
.. _pull 1952: https://github.com/nedbat/coveragepy/pull/1952


.. start-releases
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid conflict resolution?

@@ -136,6 +139,7 @@ Here's a sample configuration file, in each syntax:
[html]
directory = coverage_html_report
""",

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stray edit?

"""\
@pytest.mark.parametrize("filename", ["pyproject.toml", ".coveragerc.toml"])
def test_toml_config_file(self, filename: str) -> None:
# A pyproject.toml and coveragerc.toml will be read into the configuration.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# A pyproject.toml and coveragerc.toml will be read into the configuration.
# A pyproject.toml and .coveragerc.toml will be read into the configuration.

def test_toml_parse_errors(self, bad_config: str, msg: str) -> None:
@pytest.mark.parametrize("filename", ["pyproject.toml", ".coveragerc.toml"])
@pytest.mark.parametrize("bad_config, msg", [
("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lot of reformatting?

@@ -458,7 +443,7 @@ def expanduser(s: str) -> str:
assert cov.config.lcov_output == "/Users/me/lcov/~foo.lcov"
assert cov.config.xml_output == "/Users/me/somewhere/xml.out"
assert cov.config.exclude_list == ["~/data.file", "~joe/html_dir"]
assert cov.config.paths == {"mapping": ["/Users/me/src", "/Users/joe/source"]}
assert cov.config.paths == {'mapping': ['/Users/me/src', '/Users/joe/source']}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

self.make_file(
"pyproject.toml",
"""\
self.make_file("pyproject.toml", """\
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?


class SerializeConfigTest(CoverageTest):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FR] Tool-specific toml config
4 participants