mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Allow string unpacking again.

Open JulienPalard opened this issue 1 year ago • 2 comments

String unpacking has been disallowed in https://github.com/python/mypy/issues/6406, where some comments ask for it to be allowed again. I'm opening an issue to track this better than comments in a closed issue.

Bug Report

I think mypy should allow string unpacking, as it's normal Python semantic.

To Reproduce

QUOTE_PAIRS = [
    "''",
    '""',
    "<>",
    "()",
    "[]",
    "{}",
]

for opening, closing in QUOTE_PAIRS:
    print(opening, closing)

Expected Behavior

I expected this to pass.

Actual Behavior

$ mypy pairs.py 
pairs.py:10: error: Unpacking a string is disallowed
pairs.py:11: error: Cannot determine type of "opening"
pairs.py:11: error: Cannot determine type of "closing"
Found 3 errors in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: mypy 0.971 (compiled: yes)
  • Mypy command-line flags: ø
  • Mypy configuration options from mypy.ini (and other config files): ø
  • Python version used: irrelevant, but reproduced in 3.9, 3.10, 3.11.

JulienPalard avatar Oct 06 '22 12:10 JulienPalard

At a minimum it should have its own error code, so you can do --disable-error-code string-unpacking. Maybe the thing that should have a special case error is multi-assignment to a dict[str, something]

hauntsaninja avatar Oct 06 '22 16:10 hauntsaninja

At the core of this feature request is the question: Is MyPy a type-checker, or a combination of type-checker and linter?

If it's purely a type-checker (as I assume), then I agree with the @JulienPalard 's post: String unpacking is valid Python code, and it's a perfectly well-defined operation in terms of typing.

If MyPy is both a type-checker and a linter, then it becomes a matter of taste.

sfc-gh-tteixeira avatar Jun 22 '23 18:06 sfc-gh-tteixeira