--experimental --max-line-length does not work on Python 3.12 with f-strings inside of a dict
daniel-afana opened this issue · comments
Daniel commented
The error occurs when the max line length is exceeded, and there is a dict with an f-string inside
Python Code
s = "Some string"
fstring = {"some_key": f"There is a string value inside of an f string, which itself is a dictionary value {s})"}
Command Line
$ autopep8 --experimental --diff --max-line-length=79 my_file.py
Your Environment
- Python version: 3.12
- autopep8 version: 2.1.0
- Platform: linux (Ubuntu 20.04), macOS Sonoma 14.4.1
The Error
Traceback (most recent call last):
File ".../virtualenvs/autopep-test/bin/autopep8", line 8, in <module>
sys.exit(main())
^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 4499, in main
results = fix_multiple_files(args.files, args, sys.stdout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 4394, in fix_multiple_files
ret = _fix_file((name, options, output))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 4364, in _fix_file
return fix_file(*parameters)
^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 3570, in fix_file
fixed_source = fix_lines(fixed_source, options, filename=filename)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 3550, in fix_lines
fixed_source = fix.fix()
^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 617, in fix
self._fix_source(filter_results(source=''.join(self.source),
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 559, in _fix_source
modified_lines = fix(result, logical)
^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 987, in fix_long_line_logically
return self.fix_long_line_physically(result)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 1024, in fix_long_line_physically
fixed = self.fix_long_line(
^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 1053, in fix_long_line
fixed = get_fixed_long_line(
^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 1622, in get_fixed_long_line
sorted(set(candidates).union([target, original])),
^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 1902, in shorten_line
for shortened in _shorten_line_at_tokens_new(
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 2783, in _shorten_line_at_tokens_new
fixed = _reflow_lines(parsed_tokens, indentation, max_line_length,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 2760, in _reflow_lines
item.reflow(lines, continued_indent, break_after_open_bracket)
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 2385, in reflow
reflowed_lines.add(self, len(continued_indent),
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 2053, in add
self._add_item(obj, indent_amt)
File ".../virtualenvs/autopep-test/lib/python3.12/site-packages/autopep8.py", line 2202, in _add_item
assert self._bracket_depth >= 0
^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
Hideo Hattori commented
fix in v2.1.2
https://pypi.org/project/autopep8/2.1.2/