Skip to content

Commit

Permalink
fix: 'always true' is clearer than 'never false'
Browse files Browse the repository at this point in the history
  • Loading branch information
nedbat committed Apr 25, 2024
1 parent 63a8a75 commit 7d075b4
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 19 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Expand Up @@ -27,6 +27,9 @@ Unreleased
hashes added to their names to ensure updated files are used instead of stale
cached copies.

- Missing branch coverage explanations that said "the condition was never
false" now read "was always true" because it's easier to understand.


.. scriv-start-here
Expand Down
4 changes: 2 additions & 2 deletions coverage/parser.py
Expand Up @@ -1093,7 +1093,7 @@ def _handle__If(self, node: ast.If) -> set[ArcStart]:
start = self.line_for_node(node.test)
from_start = ArcStart(start, cause="the condition on line {lineno} was never true")
exits = self.add_body_arcs(node.body, from_start=from_start)
from_start = ArcStart(start, cause="the condition on line {lineno} was never false")
from_start = ArcStart(start, cause="the condition on line {lineno} was always true")
exits |= self.add_body_arcs(node.orelse, from_start=from_start)
return exits

Expand Down Expand Up @@ -1287,7 +1287,7 @@ def _handle__While(self, node: ast.While) -> set[ArcStart]:
my_block = self.block_stack.pop()
assert isinstance(my_block, LoopBlock)
exits.update(my_block.break_exits)
from_start = ArcStart(start, cause="the condition on line {lineno} was never false")
from_start = ArcStart(start, cause="the condition on line {lineno} was always true")
if node.orelse:
else_exits = self.add_body_arcs(node.orelse, from_start=from_start)
exits |= else_exits
Expand Down
10 changes: 5 additions & 5 deletions tests/gold/html/b_branch/b_py.html
Expand Up @@ -67,7 +67,7 @@ <h2>
<a id="nextFileLink" class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 09:22 -0400
created at 2024-04-25 08:04 -0400
</p>
<aside class="hidden">
<button type="button" class="button_next_chunk" data-shortcut="j"></button>
Expand All @@ -84,7 +84,7 @@ <h2>
<main id="source">
<p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">def</span> <span class="nam">one</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="com"># This will be a branch that misses the else.</span>&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> <span class="key">if</span> <span class="nam">x</span> <span class="op">&lt;</span> <span class="num">2</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">3&#x202F;&#x219B;&#x202F;6</span><span class="annotate long">line 3 didn't jump to line 6, because the condition on line 3 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> <span class="key">if</span> <span class="nam">x</span> <span class="op">&lt;</span> <span class="num">2</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">3&#x202F;&#x219B;&#x202F;6</span><span class="annotate long">line 3 didn't jump to line 6, because the condition on line 3 was always true</span></span></p>
<p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">3</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="mis show_mis"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">4</span>&nbsp;</span><span class="r"></span></p>
Expand All @@ -93,15 +93,15 @@ <h2>
<p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">def</span> <span class="nam">two</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="com"># A missed else that branches to "exit"</span>&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="key">if</span> <span class="nam">x</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">12&#x202F;&#x219B;&#x202F;exit</span><span class="annotate long">line 12 didn't return from function 'two', because the condition on line 12 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="key">if</span> <span class="nam">x</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">12&#x202F;&#x219B;&#x202F;exit</span><span class="annotate long">line 12 didn't return from function 'two', because the condition on line 12 was always true</span></span></p>
<p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="nam">two</span><span class="op">(</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">def</span> <span class="nam">three</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="key">try</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="com"># This if has two branches, *neither* one taken.</span>&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">if</span> <span class="nam">name_error_this_variable_doesnt_exist</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">20&#x202F;&#x219B;&#x202F;21,&nbsp;&nbsp; 20&#x202F;&#x219B;&#x202F;23</span><span class="annotate long">2 missed branches: 1) line 20 didn't jump to line 21, because the condition on line 20 was never true, 2) line 20 didn't jump to line 23, because the condition on line 20 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">if</span> <span class="nam">name_error_this_variable_doesnt_exist</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">20&#x202F;&#x219B;&#x202F;21,&nbsp;&nbsp; 20&#x202F;&#x219B;&#x202F;23</span><span class="annotate long">2 missed branches: 1) line 20 didn't jump to line 21, because the condition on line 20 was never true, 2) line 20 didn't jump to line 23, because the condition on line 20 was always true</span></span></p>
<p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">1</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
Expand All @@ -118,7 +118,7 @@ <h2>
<a class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 09:22 -0400
created at 2024-04-25 08:04 -0400
</p>
</div>
</footer>
Expand Down
6 changes: 3 additions & 3 deletions tests/gold/html/partial/partial_py.html
Expand Up @@ -67,7 +67,7 @@ <h2>
<a id="nextFileLink" class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 10:14 -0400
created at 2024-04-25 08:07 -0400
</p>
<aside class="hidden">
<button type="button" class="button_next_chunk" data-shortcut="j"></button>
Expand All @@ -85,7 +85,7 @@ <h2>
<p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="com"># partial branches and excluded lines</span>&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="nam">a</span> <span class="op">=</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">while</span> <span class="str">"no peephole"</span><span class="op">.</span><span class="nam">upper</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> <span class="com"># t4</span>&nbsp;</span><span class="r"><span class="annotate short">4&#x202F;&#x219B;&#x202F;7</span><span class="annotate long">line 4 didn't jump to line 7, because the condition on line 4 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">while</span> <span class="str">"no peephole"</span><span class="op">.</span><span class="nam">upper</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> <span class="com"># t4</span>&nbsp;</span><span class="r"><span class="annotate short">4&#x202F;&#x219B;&#x202F;7</span><span class="annotate long">line 4 didn't jump to line 7, because the condition on line 4 was always true</span></span></p>
<p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="key">break</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">while</span> <span class="nam">a</span><span class="op">:</span> <span class="com"># pragma: no branch</span>&nbsp;</span><span class="r"></span></p>
Expand All @@ -108,7 +108,7 @@ <h2>
<a class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 10:14 -0400
created at 2024-04-25 08:07 -0400
</p>
</div>
</footer>
Expand Down
8 changes: 4 additions & 4 deletions tests/gold/html/partial_626/partial_py.html
Expand Up @@ -67,7 +67,7 @@ <h2>
<a id="nextFileLink" class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 09:22 -0400
created at 2024-04-25 08:04 -0400
</p>
<aside class="hidden">
<button type="button" class="button_next_chunk" data-shortcut="j"></button>
Expand All @@ -85,7 +85,7 @@ <h2>
<p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="com"># partial branches and excluded lines</span>&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="nam">a</span> <span class="op">=</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">while</span> <span class="str">"no peephole"</span><span class="op">.</span><span class="nam">upper</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> <span class="com"># t4</span>&nbsp;</span><span class="r"><span class="annotate short">4&#x202F;&#x219B;&#x202F;7</span><span class="annotate long">line 4 didn't jump to line 7, because the condition on line 4 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">while</span> <span class="str">"no peephole"</span><span class="op">.</span><span class="nam">upper</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> <span class="com"># t4</span>&nbsp;</span><span class="r"><span class="annotate short">4&#x202F;&#x219B;&#x202F;7</span><span class="annotate long">line 4 didn't jump to line 7, because the condition on line 4 was always true</span></span></p>
<p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="key">break</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">while</span> <span class="nam">a</span><span class="op">:</span> <span class="com"># pragma: no branch</span>&nbsp;</span><span class="r"></span></p>
Expand All @@ -94,7 +94,7 @@ <h2>
<p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">if</span> <span class="num">0</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="nam">never_happen</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="par run show_par"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">if</span> <span class="num">13</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">13&#x202F;&#x219B;&#x202F;16</span><span class="annotate long">line 13 didn't jump to line 16, because the condition on line 13 was never false</span></span></p>
<p class="par run show_par"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">if</span> <span class="num">13</span><span class="op">:</span>&nbsp;</span><span class="r"><span class="annotate short">13&#x202F;&#x219B;&#x202F;16</span><span class="annotate long">line 13 didn't jump to line 16, because the condition on line 13 was always true</span></span></p>
<p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">14</span>&nbsp;</span><span class="r"></span></p>
<p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
<p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">if</span> <span class="nam">a</span> <span class="op">==</span> <span class="num">16</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
Expand All @@ -108,7 +108,7 @@ <h2>
<a class="nav" href="index.html">&#xbb; next</a>
&nbsp; &nbsp; &nbsp;
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
created at 2024-04-24 09:22 -0400
created at 2024-04-25 08:04 -0400
</p>
</div>
</footer>
Expand Down
6 changes: 3 additions & 3 deletions tests/test_html.py
Expand Up @@ -813,17 +813,17 @@ def three():

('<span class="annotate short">3&#x202F;&#x219B;&#x202F;6</span>' +
'<span class="annotate long">line 3 didn\'t jump to line 6, ' +
'because the condition on line 3 was never false</span>'),
'because the condition on line 3 was always true</span>'),
('<span class="annotate short">12&#x202F;&#x219B;&#x202F;exit</span>' +
'<span class="annotate long">line 12 didn\'t return from function \'two\', ' +
'because the condition on line 12 was never false</span>'),
'because the condition on line 12 was always true</span>'),
('<span class="annotate short">20&#x202F;&#x219B;&#x202F;21,&nbsp;&nbsp; ' +
'20&#x202F;&#x219B;&#x202F;23</span>' +
'<span class="annotate long">2 missed branches: ' +
'1) line 20 didn\'t jump to line 21, ' +
'because the condition on line 20 was never true, ' +
'2) line 20 didn\'t jump to line 23, ' +
'because the condition on line 20 was never false</span>'),
'because the condition on line 20 was always true</span>'),
)
contains(
"out/b_branch/index.html",
Expand Down
4 changes: 2 additions & 2 deletions tests/test_parser.py
Expand Up @@ -759,7 +759,7 @@ def func10():
""")
expected = "line 1 didn't jump to line 2, because the condition on line 1 was never true"
assert expected == parser.missing_arc_description(1, 2)
expected = "line 1 didn't jump to line 3, because the condition on line 1 was never false"
expected = "line 1 didn't jump to line 3, because the condition on line 1 was always true"
assert expected == parser.missing_arc_description(1, 3)
expected = (
"line 6 didn't return from function 'func5', " +
Expand All @@ -772,7 +772,7 @@ def func10():
assert expected == parser.missing_arc_description(11, 12)
expected = (
"line 11 didn't jump to line 13, " +
"because the condition on line 11 was never false"
"because the condition on line 11 was always true"
)
assert expected == parser.missing_arc_description(11, 13)

Expand Down

0 comments on commit 7d075b4

Please sign in to comment.