Skip to content

Commit 916a0c9

Browse files
committed
Merge branch 'pr/982'
2 parents d7120ba + dc48c72 commit 916a0c9

File tree

6 files changed

+50
-11
lines changed

6 files changed

+50
-11
lines changed

CHANGES.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ want to know what's different in 5.0 since 4.5.x, see :ref:`whatsnew5x`.
2424
Unreleased
2525
----------
2626

27-
Nothing yet.
27+
- The ``coverage report`` and ``coverage html`` commands now accept a
28+
``--precision`` option to control the number of decimal points displayed.
29+
Thanks, Teake Nutma.
2830

2931

3032
.. _changes_51:

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ Stephen Finucane
127127
Steve Leonard
128128
Steve Peak
129129
S. Y. Lee
130+
Teake Nutma
130131
Ted Wexler
131132
Thijs Triemstra
132133
Titus Brown

coverage/cmdline.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ class Opts(object):
146146
"to be run as 'python -m' would run it."
147147
),
148148
)
149+
precision = optparse.make_option(
150+
'', '--precision', action='store', metavar='N', type=int,
151+
help=(
152+
"Number of digits after the decimal point to display for "
153+
"reported coverage percentages."
154+
),
155+
)
149156
rcfile = optparse.make_option(
150157
'', '--rcfile', action='store',
151158
help=(
@@ -203,6 +210,7 @@ def __init__(self, *args, **kwargs):
203210
omit=None,
204211
contexts=None,
205212
parallel_mode=None,
213+
precision=None,
206214
pylib=None,
207215
rcfile=True,
208216
show_missing=None,
@@ -358,6 +366,7 @@ def get_prog_name(self):
358366
Opts.ignore_errors,
359367
Opts.include,
360368
Opts.omit,
369+
Opts.precision,
361370
Opts.show_contexts,
362371
Opts.skip_covered,
363372
Opts.skip_empty,
@@ -395,6 +404,7 @@ def get_prog_name(self):
395404
Opts.ignore_errors,
396405
Opts.include,
397406
Opts.omit,
407+
Opts.precision,
398408
Opts.show_missing,
399409
Opts.skip_covered,
400410
Opts.skip_empty,
@@ -583,6 +593,7 @@ def command_line(self, argv):
583593
show_missing=options.show_missing,
584594
skip_covered=options.skip_covered,
585595
skip_empty=options.skip_empty,
596+
precision=options.precision,
586597
**report_args
587598
)
588599
elif options.action == "annotate":
@@ -594,6 +605,7 @@ def command_line(self, argv):
594605
skip_covered=options.skip_covered,
595606
skip_empty=options.skip_empty,
596607
show_contexts=options.show_contexts,
608+
precision=options.precision,
597609
**report_args
598610
)
599611
elif options.action == "xml":

coverage/control.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,7 @@ def _get_file_reporters(self, morfs=None):
829829
def report(
830830
self, morfs=None, show_missing=None, ignore_errors=None,
831831
file=None, omit=None, include=None, skip_covered=None,
832-
contexts=None, skip_empty=None,
832+
contexts=None, skip_empty=None, precision=None,
833833
):
834834
"""Write a textual summary report to `file`.
835835
@@ -857,6 +857,9 @@ def report(
857857
expressions (using :func:`re.search <python:re.search>`) will be
858858
included in the report.
859859
860+
`precision` is the number of digits to display after the decimal
861+
point for percentages.
862+
860863
All of the arguments default to the settings read from the
861864
:ref:`configuration file <config>`.
862865
@@ -868,12 +871,15 @@ def report(
868871
.. versionadded:: 5.0
869872
The `contexts` and `skip_empty` parameters.
870873
874+
.. versionadded:: 5.2
875+
The `precision` parameter.
876+
871877
"""
872878
with override_config(
873879
self,
874880
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
875881
show_missing=show_missing, skip_covered=skip_covered,
876-
report_contexts=contexts, skip_empty=skip_empty,
882+
report_contexts=contexts, skip_empty=skip_empty, precision=precision,
877883
):
878884
reporter = SummaryReporter(self)
879885
return reporter.report(morfs, outfile=file)
@@ -899,10 +905,12 @@ def annotate(
899905
reporter = AnnotateReporter(self)
900906
reporter.report(morfs, directory=directory)
901907

902-
def html_report(self, morfs=None, directory=None, ignore_errors=None,
903-
omit=None, include=None, extra_css=None, title=None,
904-
skip_covered=None, show_contexts=None, contexts=None,
905-
skip_empty=None):
908+
def html_report(
909+
self, morfs=None, directory=None, ignore_errors=None,
910+
omit=None, include=None, extra_css=None, title=None,
911+
skip_covered=None, show_contexts=None, contexts=None,
912+
skip_empty=None, precision=None,
913+
):
906914
"""Generate an HTML report.
907915
908916
The HTML is written to `directory`. The file "index.html" is the
@@ -930,7 +938,7 @@ def html_report(self, morfs=None, directory=None, ignore_errors=None,
930938
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
931939
html_dir=directory, extra_css=extra_css, html_title=title,
932940
skip_covered=skip_covered, show_contexts=show_contexts, report_contexts=contexts,
933-
skip_empty=skip_empty,
941+
skip_empty=skip_empty, precision=precision,
934942
):
935943
reporter = HtmlReporter(self)
936944
return reporter.report(morfs)

doc/cmd.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,9 @@ If you have :ref:`recorded contexts <contexts>`, the ``--contexts`` option lets
371371
you choose which contexts to report on. See :ref:`context_reporting` for
372372
details.
373373

374+
The ``--precision`` option controls the number of digits displayed after the
375+
decimal point in coverage percentages, defaulting to none.
376+
374377
Other common reporting options are described above in :ref:`cmd_reporting`.
375378

376379

@@ -418,6 +421,9 @@ The ``--skip-covered`` switch will skip any file with 100% coverage, letting
418421
you focus on the files that still need attention. The ``--skip-empty`` switch
419422
will skip any file with no executable statements.
420423

424+
The ``--precision`` option controls the number of digits displayed after the
425+
decimal point in coverage percentages, defaulting to none.
426+
421427
If you have :ref:`recorded contexts <contexts>`, the ``--contexts`` option lets
422428
you choose which contexts to report on, and the ``--show-contexts`` option will
423429
annotate lines with the contexts that ran them. See :ref:`context_reporting`

tests/test_cmdline.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,19 @@ class BaseCmdLineTest(CoverageTest):
3737
_defaults.Coverage().html_report(
3838
directory=None, ignore_errors=None, include=None, omit=None, morfs=[],
3939
skip_covered=None, show_contexts=None, title=None, contexts=None,
40-
skip_empty=None,
40+
skip_empty=None, precision=None,
4141
)
4242
_defaults.Coverage().report(
4343
ignore_errors=None, include=None, omit=None, morfs=[],
44-
show_missing=None, skip_covered=None, contexts=None, skip_empty=None,
44+
show_missing=None, skip_covered=None, contexts=None, skip_empty=None, precision=None,
4545
)
4646
_defaults.Coverage().xml_report(
4747
ignore_errors=None, include=None, omit=None, morfs=[], outfile=None,
4848
contexts=None,
4949
)
5050
_defaults.Coverage().json_report(
5151
ignore_errors=None, include=None, omit=None, morfs=[], outfile=None,
52-
contexts=None, pretty_print=None, show_contexts=None
52+
contexts=None, pretty_print=None, show_contexts=None,
5353
)
5454
_defaults.Coverage(
5555
cover_pylib=None, data_suffix=None, timid=None, branch=None,
@@ -324,6 +324,11 @@ def test_html(self):
324324
cov.load()
325325
cov.html_report(morfs=["mod1", "mod2", "mod3"])
326326
""")
327+
self.cmd_executes("html --precision=3", """\
328+
cov = Coverage()
329+
cov.load()
330+
cov.html_report(precision=3)
331+
""")
327332
self.cmd_executes("html --title=Hello_there", """\
328333
cov = Coverage()
329334
cov.load()
@@ -367,6 +372,11 @@ def test_report(self):
367372
cov.load()
368373
cov.report(morfs=["mod1", "mod2", "mod3"])
369374
""")
375+
self.cmd_executes("report --precision=7", """\
376+
cov = Coverage()
377+
cov.load()
378+
cov.report(precision=7)
379+
""")
370380
self.cmd_executes("report --skip-covered", """\
371381
cov = Coverage()
372382
cov.load()

0 commit comments

Comments
 (0)