Skip to content

Commit

Permalink
Resolve false negative for implicit str concat inside calls
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierre-Sassoulas committed Apr 23, 2022
1 parent 8cd077c commit d694a6b
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 3 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ Release date: TBA

Ref #5392

* ``implicit-str-concat`` will now be raised on calls like ``open("myfile.txt" "a+b")`` too.

Closes #6441

* The ``config`` attribute of ``PyLinter`` is now of the ``argparse.Namespace`` type instead of
``optparse.Values``.

Expand Down
4 changes: 4 additions & 0 deletions doc/whatsnew/2.14.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ Other Changes

Closes #6101

* ``implicit-str-concat`` will now be raised on calls like ``open("myfile.txt" "a+b")`` too.

Closes #6441

* Fix a failure to respect inline disables for ``fixme`` occurring on the last line
of a module when pylint is launched with ``--enable=fixme``.

Expand Down
4 changes: 4 additions & 0 deletions pylint/checkers/strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,10 @@ def process_tokens(self, tokens: list[tokenize.TokenInfo]) -> None:
if self.linter.config.check_quote_consistency:
self.check_for_consistent_string_delimiters(tokens)

@only_required_for_messages("implicit-str-concat")
def visit_call(self, node: nodes.Call) -> None:
self.check_for_concatenated_strings(node.args, "call")

@only_required_for_messages("implicit-str-concat")
def visit_list(self, node: nodes.List) -> None:
self.check_for_concatenated_strings(node.elts, "list")
Expand Down
16 changes: 13 additions & 3 deletions tests/functional/i/implicit/implicit_str_concat.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#pylint: disable=invalid-name,missing-docstring,redundant-u-string-prefix
# pylint: disable=invalid-name, missing-docstring, redundant-u-string-prefix, line-too-long

# Basic test with a list
TEST_LIST1 = ['a' 'b'] # [implicit-str-concat]
Expand All @@ -10,8 +10,8 @@
# in the middle of a list
TEST_LIST4 = ["""a""", """b""" """c""", """d"""] # [implicit-str-concat]

# The following shouldn't raise a warning because it is a function call
print('a', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'ccc')
print("Lorem ipsum " "dolor sit amet") # [implicit-str-concat]
print('a', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'ccc') # [implicit-str-concat]

# The following shouldn't raise a warning because string literals are
# on different lines
Expand All @@ -29,3 +29,13 @@

# No warning for bytes
TEST_LIST8 = [b'A' b'B']

print(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit,"
" sed do eiusmod tempor incididunt ut labore et dolore "
"magna aliqua. Ut enim ad minim veniam, quis nostrud "
"exercitation ullamco laboris nisi ut aliquip ex ea "
)

with open("myfile.txt" "a+b", encoding="utf8") as f: # [implicit-str-concat]
content = f.read()
3 changes: 3 additions & 0 deletions tests/functional/i/implicit/implicit_str_concat.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@ implicit-str-concat:4:0:None:None::Implicit string concatenation found in list:U
implicit-str-concat:6:0:None:None::Implicit string concatenation found in tuple:UNDEFINED
implicit-str-concat:8:0:None:None::Implicit string concatenation found in set:UNDEFINED
implicit-str-concat:11:0:None:None::Implicit string concatenation found in list:UNDEFINED
implicit-str-concat:13:0:None:None::Implicit string concatenation found in call:UNDEFINED
implicit-str-concat:14:0:None:None::Implicit string concatenation found in call:UNDEFINED
implicit-str-concat:27:0:None:None::Implicit string concatenation found in assignment:UNDEFINED
implicit-str-concat:40:0:None:None::Implicit string concatenation found in call:UNDEFINED
7 changes: 7 additions & 0 deletions tests/functional/i/implicit/implicit_str_concat_multiline.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,10 @@

TEST_TUPLE = ('a', 'b' # [implicit-str-concat]
'c')

print(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit," # [implicit-str-concat]
" sed do eiusmod tempor incididunt ut labore et dolore "
"magna aliqua. Ut enim ad minim veniam, quis nostrud "
"exercitation ullamco laboris nisi ut aliquip ex ea "
)
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
implicit-str-concat:3:0:None:None::Implicit string concatenation found in tuple:UNDEFINED
implicit-str-concat:7:0:None:None::Implicit string concatenation found in call:UNDEFINED

0 comments on commit d694a6b

Please sign in to comment.