Skip to content

Commit 3d962a3

Browse files
committed
style: remove implicit string concatenation
.. and also add trailing commas where needed to remove ambiguity. I used semgrep with this config: ``` rules: - id: implicit-string-concatenation pattern: | "$X" "$Y" languages: - python message: string cat BAD severity: INFO ``` Running it showed this: ``` $ semgrep --config=../lab/string-cat.yml coverage tests doc ci igor.py setup.py __main__.py Running 1 rules... setup.py severity:info rule:lab.implicit-string-concatenation: string cat BAD 128: 'https://tidelift.com/subscription/pkg/pypi-coverage' 129: '?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi' tests/test_api.py severity:info rule:lab.implicit-string-concatenation: string cat BAD 319: "!coverage.py: This is a private format, don't read it directly!" 320: '{"lines":{"/private/tmp/foo.py":[1,5,2,3]}}' tests/test_html.py severity:info rule:lab.implicit-string-concatenation: string cat BAD 614: ('<span class="key">if</span> <span class="num">1</span> ' 615: '<span class="op">&lt;</span> <span class="num">2</span>'), -------------------------------------------------------------------------------- 616: (' <span class="nam">a</span> ' 617: '<span class="op">=</span> <span class="num">3</span>'), -------------------------------------------------------------------------------- 665: ('<span class="key">if</span> <span class="nam">x</span> ' 666: '<span class="op">&lt;</span> <span class="num">2</span>'), -------------------------------------------------------------------------------- 667: (' <span class="nam">a</span> <span class="op">=</span> ' 668: '<span class="num">3</span>'), -------------------------------------------------------------------------------- 949: ('<span class="key">if</span> <span class="num">1</span> ' 950: '<span class="op">&lt;</span> <span class="num">2</span>'), -------------------------------------------------------------------------------- 951: (' <span class="nam">a</span> <span class="op">=</span> ' 952: '<span class="num">3</span>'), ran 1 rules on 134 files: 8 findings ``` This wasn't all of the instances, so I wrote a bug report: semgrep/semgrep#4184
1 parent 5f20bf9 commit 3d962a3

File tree

3 files changed

+26
-26
lines changed

3 files changed

+26
-26
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def better_set_verbosity(v):
125125
project_urls={
126126
'Documentation': __url__,
127127
'Funding': (
128-
'https://tidelift.com/subscription/pkg/pypi-coverage'
128+
'https://tidelift.com/subscription/pkg/pypi-coverage' +
129129
'?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi'
130130
),
131131
'Issues': 'https://github.com/nedbat/coveragepy/issues',

tests/test_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ def test_completely_zero_reporting(self):
316316

317317
def test_cov4_data_file(self):
318318
cov4_data = (
319-
"!coverage.py: This is a private format, don't read it directly!"
319+
"!coverage.py: This is a private format, don't read it directly!" +
320320
'{"lines":{"/private/tmp/foo.py":[1,5,2,3]}}'
321321
)
322322
self.make_file(".coverage", cov4_data)

tests/test_html.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -611,9 +611,9 @@ def test_a(self):
611611
compare_html(gold_path("html/a"), "out/a")
612612
contains(
613613
"out/a/a_py.html",
614-
('<span class="key">if</span> <span class="num">1</span> '
614+
('<span class="key">if</span> <span class="num">1</span> ' +
615615
'<span class="op">&lt;</span> <span class="num">2</span>'),
616-
(' <span class="nam">a</span> '
616+
(' <span class="nam">a</span> ' +
617617
'<span class="op">=</span> <span class="num">3</span>'),
618618
'<span class="pc_cov">67%</span>',
619619
)
@@ -662,24 +662,24 @@ def three():
662662
compare_html(gold_path("html/b_branch"), "out/b_branch")
663663
contains(
664664
"out/b_branch/b_py.html",
665-
('<span class="key">if</span> <span class="nam">x</span> '
665+
('<span class="key">if</span> <span class="nam">x</span> ' +
666666
'<span class="op">&lt;</span> <span class="num">2</span>'),
667-
(' <span class="nam">a</span> <span class="op">=</span> '
667+
(' <span class="nam">a</span> <span class="op">=</span> ' +
668668
'<span class="num">3</span>'),
669669
'<span class="pc_cov">70%</span>',
670670

671-
('<span class="annotate short">3&#x202F;&#x219B;&#x202F;6</span>'
672-
'<span class="annotate long">line 3 didn\'t jump to line 6, '
671+
('<span class="annotate short">3&#x202F;&#x219B;&#x202F;6</span>' +
672+
'<span class="annotate long">line 3 didn\'t jump to line 6, ' +
673673
'because the condition on line 3 was never false</span>'),
674-
('<span class="annotate short">12&#x202F;&#x219B;&#x202F;exit</span>'
675-
'<span class="annotate long">line 12 didn\'t return from function \'two\', '
674+
('<span class="annotate short">12&#x202F;&#x219B;&#x202F;exit</span>' +
675+
'<span class="annotate long">line 12 didn\'t return from function \'two\', ' +
676676
'because the condition on line 12 was never false</span>'),
677-
('<span class="annotate short">20&#x202F;&#x219B;&#x202F;21,&nbsp;&nbsp; '
678-
'20&#x202F;&#x219B;&#x202F;23</span>'
679-
'<span class="annotate long">2 missed branches: '
680-
'1) line 20 didn\'t jump to line 21, '
681-
'because the condition on line 20 was never true, '
682-
'2) line 20 didn\'t jump to line 23, '
677+
('<span class="annotate short">20&#x202F;&#x219B;&#x202F;21,&nbsp;&nbsp; ' +
678+
'20&#x202F;&#x219B;&#x202F;23</span>' +
679+
'<span class="annotate long">2 missed branches: ' +
680+
'1) line 20 didn\'t jump to line 21, ' +
681+
'because the condition on line 20 was never true, ' +
682+
'2) line 20 didn\'t jump to line 23, ' +
683683
'because the condition on line 20 was never false</span>'),
684684
)
685685
contains(
@@ -906,7 +906,7 @@ def test_partial(self):
906906
contains(
907907
"out/partial_626/index.html",
908908
'<a href="partial_py.html">partial.py</a>',
909-
'<span class="pc_cov">87%</span>'
909+
'<span class="pc_cov">87%</span>',
910910
)
911911
else:
912912
cov.html_report(partial, directory="out/partial")
@@ -923,7 +923,7 @@ def test_partial(self):
923923
contains(
924924
"out/partial/index.html",
925925
'<a href="partial_py.html">partial.py</a>',
926-
'<span class="pc_cov">91%</span>'
926+
'<span class="pc_cov">91%</span>',
927927
)
928928

929929
def test_styled(self):
@@ -946,17 +946,17 @@ def test_styled(self):
946946
contains(
947947
"out/styled/a_py.html",
948948
'<link rel="stylesheet" href="extra.css" type="text/css">',
949-
('<span class="key">if</span> <span class="num">1</span> '
949+
('<span class="key">if</span> <span class="num">1</span> ' +
950950
'<span class="op">&lt;</span> <span class="num">2</span>'),
951-
(' <span class="nam">a</span> <span class="op">=</span> '
951+
(' <span class="nam">a</span> <span class="op">=</span> ' +
952952
'<span class="num">3</span>'),
953-
'<span class="pc_cov">67%</span>'
953+
'<span class="pc_cov">67%</span>',
954954
)
955955
contains(
956956
"out/styled/index.html",
957957
'<link rel="stylesheet" href="extra.css" type="text/css">',
958958
'<a href="a_py.html">a.py</a>',
959-
'<span class="pc_cov">67%</span>'
959+
'<span class="pc_cov">67%</span>',
960960
)
961961

962962
def test_tabbed(self):
@@ -985,10 +985,10 @@ def test_tabbed(self):
985985

986986
contains(
987987
"out/tabbed_py.html",
988-
'> <span class="key">if</span> '
989-
'<span class="nam">x</span><span class="op">:</span>'
990-
' '
991-
'<span class="com"># look nice</span>'
988+
'> <span class="key">if</span> ' +
989+
'<span class="nam">x</span><span class="op">:</span>' +
990+
' ' +
991+
'<span class="com"># look nice</span>',
992992
)
993993

994994
doesnt_contain("out/tabbed_py.html", "\t")

0 commit comments

Comments
 (0)