Skip to content

Commit

Permalink
Merge pull request #1832 from PyCQA/fstring-middle
Browse files Browse the repository at this point in the history
mute FSTRING_MIDDLE tokens
  • Loading branch information
asottile committed Jun 13, 2023
2 parents c8d75d9 + 43266a2 commit 1f84374
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/flake8/processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import ast
import contextlib
import logging
import sys
import tokenize
from typing import Any
from typing import Generator
Expand Down Expand Up @@ -178,7 +179,7 @@ def next_logical_line(self) -> None:
self.blank_lines = 0
self.tokens = []

def build_logical_line_tokens(self) -> _Logical:
def build_logical_line_tokens(self) -> _Logical: # noqa: C901
"""Build the mapping, comments, and logical line lists."""
logical = []
comments = []
Expand All @@ -195,6 +196,11 @@ def build_logical_line_tokens(self) -> _Logical:
continue
if token_type == tokenize.STRING:
text = mutate_string(text)
elif (
sys.version_info >= (3, 12)
and token_type == tokenize.FSTRING_MIDDLE
):
text = "x" * len(text)
if previous_row:
(start_row, start_column) = start
if previous_row != start_row:
Expand Down
32 changes: 32 additions & 0 deletions tests/integration/test_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,35 @@ def test_physical_line_plugin_multiline_string(tmpdir, capsys):
'''
out, err = capsys.readouterr()
assert out == expected


def yields_logical_line(logical_line):
yield 0, f"T001 {logical_line!r}"


def test_logical_line_plugin(tmpdir, capsys):
cfg_s = f"""\
[flake8]
extend-ignore = F
[flake8:local-plugins]
extension =
T = {yields_logical_line.__module__}:{yields_logical_line.__name__}
"""

cfg = tmpdir.join("tox.ini")
cfg.write(cfg_s)

src = """\
f'hello world'
"""
t_py = tmpdir.join("t.py")
t_py.write_binary(src.encode())

with tmpdir.as_cwd():
assert main(("t.py", "--config", str(cfg))) == 1

expected = """\
t.py:1:1: T001 "f'xxxxxxxxxxx'"
"""
out, err = capsys.readouterr()
assert out == expected

0 comments on commit 1f84374

Please sign in to comment.